Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

lv_examples: Add Kconfig to lv_examples and choose an example to run on the menuconfig interface #196

Merged
merged 5 commits into from
Sep 16, 2020

Conversation

C47D
Copy link
Collaborator

@C47D C47D commented Sep 8, 2020

New try with the updated lv_examples, decided to leave the following options out of the menuconfig:

#define LV_EX_KEYBOARD     0       /*Add PC keyboard support to some examples (`lv_drivers` repository is required)*/
#define LV_EX_MOUSEWHEEL   0       /*Add 'encoder' (mouse wheel) support to some examples (`lv_drivers` repository is required)*/

/*Printer demo, optimized for 800x480*/
#define LV_USE_DEMO_PRINTER     0

because they are not intended to be used on ESP32, what do you think @kisvegabor.

@C47D C47D requested a review from kisvegabor September 8, 2020 05:09
Add the necessary header file of the choosen example on the menuconfig interface
and run it. Some extra configuration might be needed on some examples, like the
keypad and encoder demo.
@C47D
Copy link
Collaborator Author

C47D commented Sep 8, 2020

Currently all the demos source files are included, I think we should include only the source of the selected demo, what do you think?

@C47D C47D requested a review from embeddedt September 8, 2020 05:24
@@ -16,7 +16,7 @@
/*******************
* GENERAL SETTING
*******************/
#define LV_EX_PRINTF 1 /*Enable printf-ing data in demoes and examples*/
#define LV_EX_PRINTF CONFIG_LV_EX_PRINTF /*Enable printf-ing data in demoes and examples*/
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(This applies to all the changes in lv_ex_conf.h.)

As far as I know, Kconfig does not define unselected options to 0; it just doesn't define them at all. I'm not sure how the statement #if LV_EX_PRINTF will be affected by this. It might be better to use a code pattern like this:

Suggested change
#define LV_EX_PRINTF CONFIG_LV_EX_PRINTF /*Enable printf-ing data in demoes and examples*/
/*Enable printf-ing data in demoes and examples*/
#ifdef CONFIG_LV_EX_PRINTF
#define LV_EX_PRINTF 1
#else
#define LV_EX_PRINTF 0
#endif

Copy link
Collaborator Author

@C47D C47D Sep 9, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're totally right @embeddedt, I forgot about that, will commit your suggestion. I think the same applies for the other choice symbols (demo to run), isn't?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure but I think we would need to include the ESP-IDFs sdkconfig.h file to be able to use the CONFIG_x symbols. I will try removing that include on the current lv_config file and see what happens.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If it's needed we can use LV_CONF_PATH to include any file instead of lv_conf.h.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, I will test it too, yesterday I forgot to push the fixes for @embeddedt comment, will do it later.

@C47D
Copy link
Collaborator Author

C47D commented Sep 12, 2020

I've tested choosing the widgets and benchmark demos and they work as expected, when selecting the stress demo I'm getting a hardfault, it's an IntegerDivideByZero in lv_draw_rect i think, see log:

Guru Meditation Error: Core  1 panic'ed (IntegerDivideByZero). Exception was unhandled.

Core  1 register dump:
PC      : 0x400deb72  PS      : 0x00060530  A0      : 0x800d78a0  A1      : 0x3ffd4dd0
0x400deb72: draw_pattern at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_draw/lv_draw_rect.c:1240
 (inlined by) lv_draw_rect at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_draw/lv_draw_rect.c:112

A2      : 0x00000000  A3      : 0x00000002  A4      : 0x0000001e  A5      : 0x00000008
A6      : 0x00000007  A7      : 0x00000081  A8      : 0x00000099  A9      : 0x0000009c
A10     : 0x000000e1  A11     : 0x00000064  A12     : 0x00000000  A13     : 0x00000000
A14     : 0x00000089  A15     : 0x00000001  SAR     : 0x00000001  EXCCAUSE: 0x00000006
EXCVADDR: 0x00000000  LBEG    : 0x400dc9bc  LEND    : 0x400dc9c7  LCOUNT  : 0x0000000f
0x400dc9bc: lv_draw_mask_add at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_draw/lv_draw_mask.c:83

0x400dc9c7: lv_draw_mask_add at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_draw/lv_draw_mask.c:88


Backtrace:0x400deb6f:0x3ffd4dd0 0x400d789d:0x3ffd4ef0 0x400e98fd:0x3ffd4f80 0x400d8012:0x3ffd4fa0 0x400d807e:0x3ffd4ff0 0x400d807e:0x3ffd5040 0x400d807e:0x3ffd5090 0x400d80bd:0x3ffd50e0 0x400d81fe:0x3ffd5100 0x400d86d3:0x3ffd5190 0x400e2ade:0x3ffd5200 0x400e2b97:0x3ffd5220 0x400d3546:0x3ffd5250
0x400deb6f: draw_pattern at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_draw/lv_draw_rect.c:1243
 (inlined by) lv_draw_rect at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_draw/lv_draw_rect.c:112

0x400d789d: lv_obj_design at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_core/lv_obj.c:3819

0x400e98fd: lv_btn_design at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_widgets/lv_btn.c:246

0x400d8012: lv_refr_obj at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_core/lv_refr.c:677

0x400d807e: lv_refr_obj at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_core/lv_refr.c:657
 (inlined by) lv_refr_obj at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_core/lv_refr.c:717

0x400d807e: lv_refr_obj at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_core/lv_refr.c:657
 (inlined by) lv_refr_obj at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_core/lv_refr.c:717

0x400d807e: lv_refr_obj at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_core/lv_refr.c:657
 (inlined by) lv_refr_obj at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_core/lv_refr.c:717

0x400d80bd: lv_refr_obj at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_core/lv_refr.c:657
 (inlined by) lv_refr_obj_and_children at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_core/lv_refr.c:619

0x400d81fe: lv_refr_area_part at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_core/lv_refr.c:550

0x400d86d3: lv_refr_area at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_core/lv_refr.c:472
 (inlined by) lv_refr_areas at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_core/lv_refr.c:382
 (inlined by) _lv_disp_refr_task at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_core/lv_refr.c:199

0x400e2ade: lv_task_exec at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_misc/lv_task.c:409 (discriminator 1)

0x400e2b97: lv_task_handler at /home/user/lv_port_esp32/build/../components/lvgl/lvgl/src/lv_misc/lv_task.c:142

0x400d3546: guiTask at /home/user/lv_port_esp32/build/../main/main.c:146

I haven't updated LVGL to test if the problem is gone with the current master.

@C47D
Copy link
Collaborator Author

C47D commented Sep 12, 2020

LVGL log output:

Trace: Screen create started    (lv_obj.c #228 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Trace: Screen create started    (lv_obj.c #228 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Trace: Screen create started    (lv_obj.c #228 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Trace: lv_task_handler started  (lv_task.c #74 lv_task_handler())
Trace: lv_refr_task: started    (lv_refr.c #177 _lv_disp_refr_task())
Trace: lv_refr_task: ready      (lv_refr.c #310 _lv_disp_refr_task())
User: mem leak since start: 0, frag:   1 %      (lv_demo_stress.c #79 obj_test_task_cb())
Trace: lv_task_handler ready    (lv_task.c #192 lv_task_handler())
Trace: lv_task_handler started  (lv_task.c #74 lv_task_handler())
Trace: lv_task_handler ready    (lv_task.c #192 lv_task_handler())
Trace: lv_task_handler started  (lv_task.c #74 lv_task_handler())
Trace: lv_task_handler ready    (lv_task.c #192 lv_task_handler())
Trace: lv_task_handler started  (lv_task.c #74 lv_task_handler())
Trace: page create started      (lv_page.c #82 lv_page_create())
Trace: container create started         (lv_cont.c #70 lv_cont_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: container created         (lv_cont.c #118 lv_cont_create())
Trace: container create started         (lv_cont.c #70 lv_cont_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: container created         (lv_cont.c #118 lv_cont_create())
Info: page created      (lv_page.c #160 lv_page_create())
Trace: button create started    (lv_btn.c #61 lv_btn_create())
Trace: container create started         (lv_cont.c #70 lv_cont_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: container created         (lv_cont.c #118 lv_cont_create())
Info: button created    (lv_btn.c #106 lv_btn_create())
Trace: label create started     (lv_label.c #79 lv_label_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: label created     (lv_label.c #167 lv_label_create())
Trace: lv_refr_task: started    (lv_refr.c #177 _lv_disp_refr_task())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Trace: lv_refr_task: ready      (lv_refr.c #310 _lv_disp_refr_task())
Trace: tab view create started  (lv_tabview.c #74 lv_tabview_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Trace: page create started      (lv_page.c #82 lv_page_create())
Trace: container create started         (lv_cont.c #70 lv_cont_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: container created         (lv_cont.c #118 lv_cont_create())
Trace: container create started         (lv_cont.c #70 lv_cont_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: container created         (lv_cont.c #118 lv_cont_create())
Info: page created      (lv_page.c #160 lv_page_create())
Trace: button matrix create started     (lv_btnmatrix.c #74 lv_btnmatrix_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: button matrix created     (lv_btnmatrix.c #122 lv_btnmatrix_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: tab view created  (lv_tabview.c #192 lv_tabview_create())
Trace: page create started      (lv_page.c #82 lv_page_create())
Trace: container create started         (lv_cont.c #70 lv_cont_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: container created         (lv_cont.c #118 lv_cont_create())
Trace: container create started         (lv_cont.c #70 lv_cont_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: container created         (lv_cont.c #118 lv_cont_create())
Info: page created      (lv_page.c #160 lv_page_create())
Trace: page create started      (lv_page.c #82 lv_page_create())
Trace: container create started         (lv_cont.c #70 lv_cont_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: container created         (lv_cont.c #118 lv_cont_create())
Trace: container create started         (lv_cont.c #70 lv_cont_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: container created         (lv_cont.c #118 lv_cont_create())
Info: page created      (lv_page.c #160 lv_page_create())
Trace: color_picker create started      (lv_cpicker.c #104 lv_cpicker_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: color_picker created      (lv_cpicker.c #158 lv_cpicker_create())
Trace: led create started       (lv_led.c #56 lv_led_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: led created       (lv_led.c #94 lv_led_create())
Trace: page create started      (lv_page.c #82 lv_page_create())
Trace: container create started         (lv_cont.c #70 lv_cont_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: container created         (lv_cont.c #118 lv_cont_create())
Trace: container create started         (lv_cont.c #70 lv_cont_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: container created         (lv_cont.c #118 lv_cont_create())
Info: page created      (lv_page.c #160 lv_page_create())
Trace: container create started (lv_page(lv_cont.c #70 lv_cont_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: container created         (lv_cont.c #118 lv_cont_create())
Trace: container create started         (lv_cont.c #70 lv_cont_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: container created         (lv_cont.c #118 lv_cont_create())
Info: page created      (lv_page.c #160 lv_page_create())
Trace: animation create started         (lv_anim.c #94 lv_anim_start())
Trace: animation created        (lv_anim.c #121 lv_anim_start())
Trace: animation create started         (lv_anim.c #94 lv_anim_start())
Trace: animation created        (lv_anim.c #121 lv_anim_start())
Trace: animation create started         (lv_anim.c #94 lv_anim_start())
Trace: animation created        (lv_anim.c #121 lv_anim_start())
Trace: lv_refr_task: started    (lv_refr.c #177 _lv_disp_refr_task())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Trace: lv_refr_task: ready      (lv_refr.c #310 _lv_disp_refr_task())
Trace: lv_refr_task: started    (lv_refr.c #177 _lv_disp_refr_task())
Trace: lv_refr_task: ready      (lv_refr.c #310 _lv_disp_refr_task())
Trace: button create started    (lv_btn.c #61 lv_btn_create())
Trace: container create started         (lv_cont.c #70 lv_cont_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: container created         (lv_cont.c #118 lv_cont_create())
Info: button created    (lv_btn.c #106 lv_btn_create())
Trace: animation create started         (lv_anim.c #94 lv_anim_start())
Trace: animation created        (lv_anim.c #121 lv_anim_start())
Trace: animation create started         (lv_anim.c #94 lv_anim_start())
Trace: animation created        (lv_anim.c #121 lv_anim_start())
Trace: animation create started         (lv_anim.c #94 lv_anim_start())
Trace: animation created        (lv_anim.c #121 lv_anim_start())
Trace: animation create started         (lv_anim.c #94 lv_anim_start())
Trace: animation created        (lv_anim.c #121 lv_anim_start())
Trace: label create started     (lv_label.c #79 lv_label_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: label created     (lv_label.c #167 lv_label_create())
Trace: animation create started         (lv_anim.c #94 lv_anim_start())
Trace: animation created        (lv_anim.c #121 lv_anim_start())
Trace: animation create started         (lv_anim.c #94 lv_anim_start())
Trace: animation created        (lv_anim.c #121 lv_anim_start())
Trace: lv_refr_task: started    (lv_refr.c #177 _lv_disp_refr_task())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Trace: lv_refr_task: ready      (lv_refr.c #310 _lv_disp_refr_task())
Trace: lv_refr_task: started    (lv_refr.c #177 _lv_disp_refr_task())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Trace: lv_refr_task: ready      (lv_refr.c #310 _lv_disp_refr_task())
Trace: lv_refr_task: started    (lv_refr.c #177 _lv_disp_refr_task())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Trace: lv_refr_task: ready      (lv_refr.c #310 _lv_disp_refr_task())
Trace: lv_refr_task: started    (lv_refr.c #177 _lv_disp_refr_task())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Trace: lv_refr_task: ready      (lv_refr.c #310 _lv_disp_refr_task())
Trace: lv_refr_task: started    (lv_refr.c #177 _lv_disp_refr_task())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Trace: lv_refr_task: ready      (lv_refr.c #310 _lv_disp_refr_task())
Trace: lv_refr_task: started    (lv_refr.c #177 _lv_disp_refr_task())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Trace: lv_refr_task: ready      (lv_refr.c #310 _lv_disp_refr_task())
Trace: lv_refr_task: started    (lv_refr.c #177 _lv_disp_refr_task())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Trace: lv_refr_task: ready      (lv_refr.c #310 _lv_disp_refr_task())
Trace: lv_refr_task: started    (lv_refr.c #177 _lv_disp_refr_task())
Trace: lv_refr_task: ready      (lv_refr.c #310 _lv_disp_refr_task())
Trace: text area create started         (lv_textarea.c #90 lv_textarea_create())
Trace: page create started      (lv_page.c #82 lv_page_create())
Trace: container create started         (lv_cont.c #70 lv_cont_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: container created         (lv_cont.c #118 lv_cont_create())
Trace: container create started         (lv_cont.c #70 lv_cont_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: container created         (lv_cont.c #118 lv_cont_create())
Info: page created      (lv_page.c #160 lv_page_create())
Trace: label create started     (lv_label.c #79 lv_label_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: label created     (lv_label.c #167 lv_label_create())
Trace: animation create started         (lv_anim.c #94 lv_anim_start())
Trace: animation created        (lv_anim.c #121 lv_anim_start())
Info: text area created         (lv_textarea.c #214 lv_textarea_create())
Trace: lv_refr_task: started    (lv_refr.c #177 _lv_disp_refr_task())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Trace: lv_refr_task: ready      (lv_refr.c #310 _lv_disp_refr_task())
Trace: button create started    (lv_btn.c #61 lv_btn_create())
Trace: container create started         (lv_cont.c #70 lv_cont_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: container created         (lv_cont.c #118 lv_cont_create())
Info: button created    (lv_btn.c #106 lv_btn_create())
Trace: button create started    (lv_btn.c #61 lv_btn_create())
Trace: container create started         (lv_cont.c #70 lv_cont_create())
Trace: Object create started    (lv_obj.c #260 lv_obj_create())
Info: Object create ready       (lv_obj.c #417 lv_obj_create())
Info: container created         (lv_cont.c #118 lv_cont_create())
Info: button created    (lv_btn.c #106 lv_btn_create())
Trace: animation create started         (lv_anim.c #94 lv_anim_start())
Trace: animation created        (lv_anim.c #121 lv_anim_start())
Trace: animation create started         (lv_anim.c #94 lv_anim_start())
Trace: animation created        (lv_anim.c #121 lv_anim_start())
Trace: lv_task_handler ready    (lv_task.c #192 lv_task_handler())
Trace: lv_task_handler started  (lv_task.c #74 lv_task_handler())
Trace: lv_task_handler ready    (lv_task.c #192 lv_task_handler())
Trace: lv_task_handler started  (lv_task.c #74 lv_task_handler())
Trace: lv_refr_task: started    (lv_refr.c #177 _lv_disp_refr_task())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())
Warn: lv_draw_letter: glyph dsc. not found      (lv_draw_label.c #419 lv_draw_letter())

Based on the log output I think the issue can be found around here:
https://github.com/lvgl/lv_examples/blob/50713b33153fa5762fd2ab97efaa0afaa5b3f881/src/lv_demo_stress/lv_demo_stress.c#L117-L141

@C47D
Copy link
Collaborator Author

C47D commented Sep 12, 2020

Found the issue in draw_pattern:

/*Align the pattern to the middle*/
int32_t ofs_x = (lv_area_get_width(coords) - (lv_area_get_width(coords) / img_w) * img_w) / 2;
int32_t ofs_y = (lv_area_get_height(coords) - (lv_area_get_height(coords) / img_h) * img_h) / 2;

img_w is 0, img_h is 8, both are set a few lines above:

else if(src_type == LV_IMG_SRC_SYMBOL) {
        lv_draw_label_dsc_init(&label_dsc);
        label_dsc.color = dsc->pattern_recolor;
        label_dsc.font = dsc->pattern_font;
        label_dsc.opa = dsc->pattern_opa;
        lv_point_t s;
        _lv_txt_get_size(&s, dsc->pattern_image, label_dsc.font, label_dsc.letter_space, label_dsc.line_space, LV_COORD_MAX,
                         LV_TXT_FLAG_NONE);
        img_w = s.x;
        img_h = s.y;

    }

@embeddedt
Copy link
Member

Looks like a letter is missing from the font, so the returned size is 0 on at least one axis. I suppose we should bail out of draw_pattern early if that happens.

@C47D
Copy link
Collaborator Author

C47D commented Sep 12, 2020

Is there a way to find out what letter is it? I'm using the monospaced font.

@embeddedt
Copy link
Member

embeddedt commented Sep 12, 2020

I think dsc->pattern_image would point to a string - you could try looking at it with a debugger. Alternatively, you could set a breakpoint on the logging line in lv_draw_letter.

@C47D
Copy link
Collaborator Author

C47D commented Sep 12, 2020

Thanks, I will try it with another microcontroller, I don't have a debugger for the esp32 at the moment.

@C47D
Copy link
Collaborator Author

C47D commented Sep 12, 2020

@embeddedt, changed the default font for the stress demo to montserrat 14 and the problem is gone, so the issue appear to be on the unscii 8 font.

Taking a look at the log output above we can see a bunch of lv_draw_letter: glyph dsc. not found messages, those messages appear when trying to use symbols. Seems related to this issue.

@C47D
Copy link
Collaborator Author

C47D commented Sep 15, 2020

@embeddedt, @kisvegabor I think we can merge this and fix the hardfault on either lvgl or lv_examples, what do you think?

@C47D C47D requested a review from embeddedt September 15, 2020 04:55
@kisvegabor
Copy link
Member

kisvegabor commented Sep 16, 2020

think we can merge this

I agree.

Regarding the hard fault see this comment.

@C47D
Copy link
Collaborator Author

C47D commented Sep 16, 2020

Ok, I will merge this, but the fix went into lvgl master and we're using the release/v7 branch on here, should we track the master branch?

@embeddedt
Copy link
Member

The fix is in v7.5 so release/v7 should have it.

@C47D
Copy link
Collaborator Author

C47D commented Sep 16, 2020

@embeddedt, thanks for the clarification :)

@C47D C47D merged commit ac9bf6e into master Sep 16, 2020
@C47D C47D deleted the lv_example_menuconfig branch September 16, 2020 17:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants