{"id":15452,"date":"2023-08-19T14:03:29","date_gmt":"2023-08-19T08:33:29","guid":{"rendered":"https:\/\/fastbitlab.com\/?p=15452"},"modified":"2023-08-19T14:03:29","modified_gmt":"2023-08-19T08:33:29","slug":"stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board","status":"publish","type":"post","link":"https:\/\/fastbitlab.com\/blog\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\/","title":{"rendered":"STM32-LTDC, LCD-TFT, LVGL(MCU3) Lecture 52| Analyzing memory consumption and testing LVGL on STM32F429 board"},"content":{"rendered":"<div class=\"boldgrid-section color4-background-color color-4-text-contrast bg-background-color\">\n<div class=\"container\">\n<div class=\"row\">\n<div class=\"col-lg-1 col-md-12 col-sm-12 col-xs-12\"><\/div>\n<div class=\"col-lg-10 col-md-12 col-xs-12 col-sm-12\">\n<p class=\"\">&nbsp;<\/p>\n<h1 class=\"\" style=\"text-align: center; font-size: 35px; line-height: 50px; font-family: 'Roboto Slab'; font-weight: 400;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"color: #000080;\"><b>Analyzing memory consumption and testing LVGL on STM32F429 board<\/b><\/span><\/h1>\n<div class=\"row bg-editor-hr-wrap\">\n<div class=\"col-lg-12 col-md-12 col-xs-12 col-sm-12\">\n<div>\n<div class=\"bg-hr bg-hr-16 color2-color\" style=\"border-style: solid; border-width: 0px 0px 2px; box-shadow: #cecece 0px 0px 0px 0px inset;\"><\/div>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p class=\"\">&nbsp;<\/p>\n<figure id=\"attachment_15456\" aria-describedby=\"caption-attachment-15456\" style=\"width: 696px\" class=\"wp-caption aligncenter\"><img fetchpriority=\"high\" decoding=\"async\" class=\"wp-image-15456 \" src=\"https:\/\/fastbitlab.com\/wp-content\/uploads\/2023\/08\/Figure-1-3.png\" alt=\"Figure 1. Error message\" width=\"696\" height=\"306\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-1-3.png 1919w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-1-3-300x132.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-1-3-1024x451.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-1-3-768x338.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-1-3-600x264.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-1-3-1536x676.png 1536w\" sizes=\"(max-width: 696px) 100vw, 696px\" \/><figcaption id=\"caption-attachment-15456\" class=\"wp-caption-text\">Figure 1. Error message<\/figcaption><\/figure>\n<p class=\"\" style=\"font-size: 17px; line-height: 30px; font-family: 'Roboto Slab'; font-weight: 400;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">We have encountered a problem with our project. Essentially, the error indicates that our project&#8217;s &#8216;.bss&#8217; section does not fit into the on-chip RAM, and we are not using any external RAM, such as SDRAM.<\/span><\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">Let&#8217;s investigate how our &#8216;.bss&#8217; is overflowing. To do that, we will examine the memory map file of this project. Follow these steps: Right-click on the project \u2192 Go to properties \u2192 Navigate to the Resources section \u2192 In the location section, browse to the project directory.<\/span><\/p>\n<p class=\"\">&nbsp;<\/p>\n<figure id=\"attachment_15457\" aria-describedby=\"caption-attachment-15457\" style=\"width: 733px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" class=\"wp-image-15457 \" src=\"https:\/\/fastbitlab.com\/wp-content\/uploads\/2023\/08\/Figure-2-3.png\" alt=\"Figure 2. Properties for project\" width=\"733\" height=\"308\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-2-3.png 1920w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-2-3-300x126.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-2-3-1024x430.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-2-3-768x322.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-2-3-600x252.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-2-3-1536x645.png 1536w\" sizes=\"(max-width: 733px) 100vw, 733px\" \/><figcaption id=\"caption-attachment-15457\" class=\"wp-caption-text\">Figure 2. Properties for project<\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">Once in the project directory, go to the Debug section, and there you will find the project&#8217;s map file. <\/span><\/p>\n<figure id=\"attachment_15458\" aria-describedby=\"caption-attachment-15458\" style=\"width: 702px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" class=\"wp-image-15458 \" src=\"https:\/\/fastbitlab.com\/wp-content\/uploads\/2023\/08\/Figure-3-3.png\" alt=\"Figure 3. Map file \" width=\"702\" height=\"366\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-3-3.png 1284w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-3-3-300x157.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-3-3-1024x534.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-3-3-768x401.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-3-3-600x313.png 600w\" sizes=\"(max-width: 702px) 100vw, 702px\" \/><figcaption id=\"caption-attachment-15458\" class=\"wp-caption-text\">Figure 3. Map file<\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">Open that map file and browse through the document until you find the &#8216;.bss&#8217; section (as depicted in Figure 4).<\/span><\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">As you can see here, the beginning of the bss is at address 0x00000000200000fc, and its size is 0x40000. This corresponds to 262,144 bytes.<\/span><\/p>\n<figure id=\"attachment_15459\" aria-describedby=\"caption-attachment-15459\" style=\"width: 707px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-15459\" src=\"https:\/\/fastbitlab.com\/wp-content\/uploads\/2023\/08\/Figure-4-3.png\" alt=\"Analyzing Memory Consumption and Testing LVGL on STM32F429 Board\" width=\"707\" height=\"530\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-4-3.png 1898w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-4-3-300x225.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-4-3-1024x768.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-4-3-768x576.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-4-3-600x450.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-4-3-1536x1152.png 1536w\" sizes=\"(max-width: 707px) 100vw, 707px\" \/><figcaption id=\"caption-attachment-15459\" class=\"wp-caption-text\">Figure 4. .bss section in map file<\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">What is the size of our RAM?&nbsp;<\/span><\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">To do this, check the linker script in the project, where you&#8217;ll find that the RAM size is 192 kilobytes, which is around 262 kilobytes.<\/span><\/p>\n<figure id=\"attachment_15460\" aria-describedby=\"caption-attachment-15460\" style=\"width: 790px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-15460\" src=\"https:\/\/fastbitlab.com\/wp-content\/uploads\/2023\/08\/Figure-5-3.png\" alt=\"Analyzing Memory Consumption and Testing LVGL on STM32F429 Board\" width=\"790\" height=\"333\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-5-3.png 1908w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-5-3-300x126.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-5-3-1024x431.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-5-3-768x324.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-5-3-600x253.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-5-3-1536x647.png 1536w\" sizes=\"(max-width: 790px) 100vw, 790px\" \/><figcaption id=\"caption-attachment-15460\" class=\"wp-caption-text\">Figure 5. Size of the RAM<\/figcaption><\/figure>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">You can also see(Figure 4), what are all components that contribute to the growth of the .bss.<\/span><\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">For example, we have an I2cHandle, which is a structure. That contributes 0x54 this much bytes to the growth of the .bss.&nbsp;<\/span><\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">And the major contribution comes from .bss.my_fb, this frame buffer. As you can see, it adds around 150 kilobytes.<\/span><\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">Apart from that, you can also observe that there are 2 display buffers named &#8216;display_buf1&#8217; and &#8216;buf2&#8217;. These contributions come from the &#8216;tft.o&#8217; file. Let&#8217;s analyze the &#8216;tft.o&#8217; itself.<\/span><\/p>\n<figure id=\"attachment_15463\" aria-describedby=\"caption-attachment-15463\" style=\"width: 710px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-15463\" src=\"https:\/\/fastbitlab.com\/wp-content\/uploads\/2023\/08\/Figure-6-3.png\" alt=\"Analyzing Memory Consumption and Testing LVGL on STM32F429 Board\" width=\"710\" height=\"342\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-6-3.png 1870w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-6-3-300x145.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-6-3-1024x494.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-6-3-768x370.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-6-3-600x289.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-6-3-1536x741.png 1536w\" sizes=\"(max-width: 710px) 100vw, 710px\" \/><figcaption id=\"caption-attachment-15463\" class=\"wp-caption-text\">Figure 6. Display buffers<\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">To do this, I&#8217;ll go to the command prompt and navigate to my project directory. From there, I&#8217;ll access the Debug folder and further navigate into &#8216;hal_stm_lvgl&#8217;. Inside the &#8216;hal_stm_lvgl&#8217; folder, I&#8217;ll locate the &#8216;tft&#8217; file. And run the command &#8216;arm-none-eabi-size&#8217; over the &#8216;tft.o&#8217; file.&nbsp;<\/span><\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">As a result, you can see that the &#8216;.bss&#8217; section of this file alone consumes 211600 kilobytes of RAM(Figure 7).<\/span><\/p>\n<figure id=\"attachment_15464\" aria-describedby=\"caption-attachment-15464\" style=\"width: 717px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-15464\" src=\"https:\/\/fastbitlab.com\/wp-content\/uploads\/2023\/08\/Figure-7-2.png\" alt=\"Analyzing Memory Consumption and Testing LVGL on STM32F429 Board\" width=\"717\" height=\"497\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-7-2.png 1914w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-7-2-300x208.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-7-2-1024x710.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-7-2-768x533.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-7-2-600x416.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-7-2-1536x1066.png 1536w\" sizes=\"(max-width: 717px) 100vw, 717px\" \/><figcaption id=\"caption-attachment-15464\" class=\"wp-caption-text\">Figure 7. Command prompt<\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">After that, another significant memory consumption comes from the file &#8216;lv_mem.o,&#8217; which results in a considerable memory usage.&nbsp;<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<figure id=\"attachment_15465\" aria-describedby=\"caption-attachment-15465\" style=\"width: 724px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-15465\" src=\"https:\/\/fastbitlab.com\/wp-content\/uploads\/2023\/08\/Figure-8-1.png\" alt=\"Analyzing Memory Consumption and Testing LVGL on STM32F429 Board\" width=\"724\" height=\"365\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-8-1.png 1854w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-8-1-300x151.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-8-1-1024x516.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-8-1-768x387.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-8-1-600x302.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-8-1-1536x774.png 1536w\" sizes=\"(max-width: 724px) 100vw, 724px\" \/><figcaption id=\"caption-attachment-15465\" class=\"wp-caption-text\">Figure 8. Lv_mem.o file<\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">It amounts to &#8216;C000,&#8217; approximately 49 kilobytes. This memory is consumed by the variable &#8216;work_mem_int.&#8217;<\/span><\/p>\n<figure id=\"attachment_15466\" aria-describedby=\"caption-attachment-15466\" style=\"width: 747px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-15466\" src=\"https:\/\/fastbitlab.com\/wp-content\/uploads\/2023\/08\/Figure-9-1.png\" alt=\"Analyzing Memory Consumption and Testing LVGL on STM32F429 Board\" width=\"747\" height=\"336\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-9-1.png 1920w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-9-1-300x135.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-9-1-1024x461.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-9-1-768x346.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-9-1-600x270.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-9-1-1536x691.png 1536w\" sizes=\"(max-width: 747px) 100vw, 747px\" \/><figcaption id=\"caption-attachment-15466\" class=\"wp-caption-text\">Figure 9. Work_mem_int<\/figcaption><\/figure>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">&#8216;work_mem_int&#8217; is a memory pool defined in the &#8216;lv_mem.c&#8217; file. It essentially represents an array used by LVGL for dynamic memory allocation. The size of this memory pool is determined by the macro &#8216;LV_MEM_SIZE,&#8217; which is defined in &#8216;lv_conf.h.&#8217; Presently, it is set to 48 kilobytes, but it can be adjusted as needed. By modifying this macro, you can vary the size of the memory pool, and the &#8216;lv_mem_alloc()&#8217; function allocates memory from this pool maintained by LVGL.<\/span><\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">Now, let&#8217;s investigate why &#8216;tft.c&#8217; is consuming such a significant amount of RAM space.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">In &#8216;tft.c&#8217;, as shown in Figure 10, there is a frame buffer (<\/span><span style=\"font-weight: 400;\">That&#8217;s a large array actually)<\/span><span style=\"font-weight: 400;\">. Additionally, there are 2 display buffers, also known as Draw buffers.<\/span><\/p>\n<figure id=\"attachment_15467\" aria-describedby=\"caption-attachment-15467\" style=\"width: 738px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-15467\" src=\"https:\/\/fastbitlab.com\/wp-content\/uploads\/2023\/08\/Figure-10-1.png\" alt=\"Analyzing Memory Consumption and Testing LVGL on STM32F429 Board\" width=\"738\" height=\"430\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-10-1.png 1680w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-10-1-300x175.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-10-1-1024x597.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-10-1-768x448.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-10-1-600x350.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-10-1-1536x896.png 1536w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-10-1-1200x700.png 1200w\" sizes=\"(max-width: 738px) 100vw, 738px\" \/><figcaption id=\"caption-attachment-15467\" class=\"wp-caption-text\">Figure 10. Draw buffers<\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">Let&#8217;s understand the purpose of Draw buffers. <\/span><\/p>\n<figure id=\"attachment_15468\" aria-describedby=\"caption-attachment-15468\" style=\"width: 716px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-15468\" src=\"https:\/\/fastbitlab.com\/wp-content\/uploads\/2023\/08\/Figure-11-1.png\" alt=\"Analyzing Memory Consumption and Testing LVGL on STM32F429 Board\" width=\"716\" height=\"399\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-11-1.png 1645w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-11-1-300x167.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-11-1-1024x571.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-11-1-768x428.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-11-1-600x334.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-11-1-1536x856.png 1536w\" sizes=\"(max-width: 716px) 100vw, 716px\" \/><figcaption id=\"caption-attachment-15468\" class=\"wp-caption-text\">Figure 11. Display driver file(tft.c)<\/figcaption><\/figure>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">Unlike the frame buffer, the Draw buffers do not need to be screen-sized; they can be of any size, offering more flexibility. These buffers are used by LVGL to update graphic contents and render graphics efficiently.<\/span><\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">Here&#8217;s how the process works:<\/span><\/p>\n<ul class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\">\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">LVGL uses these Draw buffers to render the graphics and update the graphic contents.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Afterwards, LVGL calls the &#8216;tft_flush&#8217; function or flush callback of the driver, providing the pointer to the buffer.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">The driver then flushes the contents of the Draw buffer to the frame buffer.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Subsequently, the data is sent through the LTDC (LCD TFT Display Controller) and displayed on the screen.<\/span><\/li>\n<\/ul>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">In the &#8216;tft.c&#8217; file, they have utilized two draw buffers, but it&#8217;s important to note that the second draw buffer is optional. However, providing two draw buffers allows the rendering and refreshing of the display to occur as parallel operations.<\/span><\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">To illustrate this, let&#8217;s consider the scenario where only one draw buffer is provided. In this case, LVGL calls the &#8216;tft_flush&#8217; function when the draw buffer becomes full, which then copies the buffer&#8217;s contents to the frame buffer. During this operation, LVGL must wait until it&#8217;s finished before modifying the contents of the draw buffer to avoid corruption.<\/span><\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">On the other hand, when you provide a second draw buffer while the first buffer is being flushed into the frame buffer, LVGL can already start using draw buffer 2 to render the next graphic element or pixels. This means that LVGL can work on preparing the next set of graphic contents simultaneously with the flushing process, which improves the overall display performance and efficiency.<\/span><\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">All of these aspects are detailed in the LVGL documentation.<\/span><\/p>\n<figure id=\"attachment_15469\" aria-describedby=\"caption-attachment-15469\" style=\"width: 656px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-15469 \" src=\"https:\/\/fastbitlab.com\/wp-content\/uploads\/2023\/08\/Figure-12-1.png\" alt=\"Figure 12. Draw buffer\" width=\"656\" height=\"333\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-12-1.png 1685w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-12-1-300x152.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-12-1-1024x520.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-12-1-768x390.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-12-1-600x304.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-12-1-1536x779.png 1536w\" sizes=\"(max-width: 656px) 100vw, 656px\" \/><figcaption id=\"caption-attachment-15469\" class=\"wp-caption-text\">Figure 12. Draw buffer<\/figcaption><\/figure>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">You can see that the draw buffers are they are simple arrays that LVGL uses to render the screen content.<\/span><\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">In &#8216;tft.c,&#8217; the draw buffer pointers are initialized and provided to LVGL. Once the rendering is ready, the content of the draw buffer is sent to the display using the flush_callback set in the display driver.<\/span><\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">And they also mentioned that a larger buffer results in better performance but above 1\/10 of the screen size, there is no significant performance improvement. For instance, if your screen size is 150 kilobytes, then keeping the draw buffer size as 15 kilobytes (1\/10 of the screen size) should be sufficient.<\/span><\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">Now, let&#8217;s run some LVGL example code.&nbsp;<\/span><\/p>\n<ol class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\">\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Go to the examples directory and locate the &#8216;lv_examples.h&#8217; header file.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">In your &#8216;main.c&#8217; file, include the &#8216;lv_examples.h&#8217; header by adding the following line: <\/span><b>include<\/b> <b>&#8220;..\/..\/lvgl\/examples\/lv_examples.h\u201d<\/b><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Next, choose a widget example to run. For instance, let&#8217;s consider the &#8216;label&#8217; example. Copy the corresponding function related to the &#8216;label&#8217; widget.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Now, call the selected function from the &#8216;main&#8217; function to execute the &#8216;label&#8217; example.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">After setting up the example code in your &#8216;main.c&#8217; file, compile the project and proceed to <\/span><span style=\"font-weight: 400;\">debug it to check the output and functionality of the LVGL &#8216;label&#8217; widget.<\/span><\/li>\n<\/ol>\n<figure id=\"attachment_15470\" aria-describedby=\"caption-attachment-15470\" style=\"width: 785px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-15470\" src=\"https:\/\/fastbitlab.com\/wp-content\/uploads\/2023\/08\/Figure-13-1.png\" alt=\"Analyzing Memory Consumption and Testing LVGL on STM32F429 Board\" width=\"785\" height=\"340\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-13-1.png 1884w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-13-1-300x130.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-13-1-1024x444.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-13-1-768x333.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-13-1-600x260.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-13-1-1536x665.png 1536w\" sizes=\"(max-width: 785px) 100vw, 785px\" \/><figcaption id=\"caption-attachment-15470\" class=\"wp-caption-text\">Figure 13.Label example<\/figcaption><\/figure>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">By following these steps, you can successfully run the LVGL &#8216;label&#8217; widget example and explore the functionality of other widget examples as well. Remember to check the documentation and guide provided with the LVGL library for more detailed instructions and examples.<\/span><\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">For example, the calendar example.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">Find the &#8216;calendar&#8217; example function in the &#8216;lv_examples.h&#8217; header file. The function might be named something like &#8216;lv_ex_calendar_1()&#8217;.<\/span><\/p>\n<ul class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\">\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">In your &#8216;main.c&#8217; file, call the &#8216;calendar&#8217; example function from the &#8216;main&#8217; function to execute the calendar example.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Compile the project, flash it onto your target platform, or run it in the simulator.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Once the example runs, you can interact with it using the touch functionalities if your target platform supports touch. For the simulator, you can use your mouse to simulate touch inputs.<\/span><\/li>\n<\/ul>\n<figure id=\"attachment_15471\" aria-describedby=\"caption-attachment-15471\" style=\"width: 766px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-15471\" src=\"https:\/\/fastbitlab.com\/wp-content\/uploads\/2023\/08\/Figure-14-1.png\" alt=\"Analyzing Memory Consumption and Optimizing LVGL on STM32F429 Board \" width=\"766\" height=\"334\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-14-1.png 1892w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-14-1-300x131.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-14-1-1024x447.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-14-1-768x335.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-14-1-600x262.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-14-1-1536x671.png 1536w\" sizes=\"(max-width: 766px) 100vw, 766px\" \/><figcaption id=\"caption-attachment-15471\" class=\"wp-caption-text\">Figure 14. Calendar example<\/figcaption><\/figure>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400;\">You can experiment with other examples in the simulator or on your target platform by calling their respective functions from the &#8216;main&#8217; function.<\/span><\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 20px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"color: #000080;\"><strong>FastBit Embedded Brain Academy Courses<\/strong><\/span><\/p>\n<p class=\"\" style=\"font-size: 17px;\"><span style=\"color: #3366ff;\"><a style=\"color: #3366ff;\" href=\"https:\/\/fastbitlab.com\/course1\">https:\/\/fastbitlab.com\/course1<\/a><\/span><\/p>\n<p class=\"\">&nbsp;<\/p>\n<\/div>\n<div class=\"col-lg-1 col-md-12 col-sm-12 col-xs-12\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Analyzing memory consumption and testing LVGL on STM32F429 board &nbsp; &nbsp; We have encountered a problem with our project. Essentially, the error indicates that our project&#8217;s &#8216;.bss&#8217; section does not fit into the on-chip RAM, and we are not using any external RAM, such as SDRAM. Let&#8217;s investigate how our &#8216;.bss&#8217; is overflowing. To [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":15471,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"0","ocean_second_sidebar":"0","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"0","ocean_custom_header_template":"0","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"0","ocean_menu_typo_font_family":"0","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"0","ocean_post_oembed":"","ocean_post_self_hosted_media":"","ocean_post_video_embed":"","ocean_link_format":"","ocean_link_format_target":"self","ocean_quote_format":"","ocean_quote_format_link":"post","ocean_gallery_link_images":"off","ocean_gallery_id":[],"footnotes":""},"categories":[8],"tags":[],"class_list":["post-15452","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","entry","has-media"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Analyzing Memory Consumption and Testing LVGL on STM32F429 Board<\/title>\n<meta name=\"description\" content=\"Learn how to analyze and optimize memory consumption when using LVGL on an STM32F429 board. Understand the causes of memory overflow, explore\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fastbitlab.com\/blog\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Analyzing Memory Consumption and Testing LVGL on STM32F429 Board\" \/>\n<meta property=\"og:description\" content=\"Learn how to analyze and optimize memory consumption when using LVGL on an STM32F429 board. Understand the causes of memory overflow, explore\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fastbitlab.com\/blog\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\/\" \/>\n<meta property=\"og:site_name\" content=\"FastBit EBA\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/fastbiteba\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-19T08:33:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-14-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1892\" \/>\n\t<meta property=\"og:image:height\" content=\"826\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"FastBitLab\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@fastbiteba\" \/>\n<meta name=\"twitter:site\" content=\"@fastbiteba\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"FastBitLab\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\\\/\"},\"author\":{\"name\":\"FastBitLab\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#\\\/schema\\\/person\\\/e32b38e733a0d76ffa7e6bc998652e5d\"},\"headline\":\"STM32-LTDC, LCD-TFT, LVGL(MCU3) Lecture 52| Analyzing memory consumption and testing LVGL on STM32F429 board\",\"datePublished\":\"2023-08-19T08:33:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\\\/\"},\"wordCount\":1381,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/Figure-14-1.png\",\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\\\/\",\"url\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\\\/\",\"name\":\"Analyzing Memory Consumption and Testing LVGL on STM32F429 Board\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/Figure-14-1.png\",\"datePublished\":\"2023-08-19T08:33:29+00:00\",\"description\":\"Learn how to analyze and optimize memory consumption when using LVGL on an STM32F429 board. Understand the causes of memory overflow, explore\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\\\/#primaryimage\",\"url\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/Figure-14-1.png\",\"contentUrl\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/Figure-14-1.png\",\"width\":1892,\"height\":826,\"caption\":\"Figure 14. Calendar example\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"STM32-LTDC, LCD-TFT, LVGL(MCU3) Lecture 52| Analyzing memory consumption and testing LVGL on STM32F429 board\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/\",\"name\":\"FastBit EBA\",\"description\":\"Your Online Academy of Embedded Systems\",\"publisher\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#organization\",\"name\":\"FastBit EBA\",\"url\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/logo-EzNrEnyr.png\",\"contentUrl\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/logo-EzNrEnyr.png\",\"width\":640,\"height\":640,\"caption\":\"FastBit EBA\"},\"image\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/fastbiteba\\\/\",\"https:\\\/\\\/x.com\\\/fastbiteba\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/fastbit-embedded-brain-academy-b3167b124\\\/\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCa1REBV9hyrzGp2mjJCagBg\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#\\\/schema\\\/person\\\/e32b38e733a0d76ffa7e6bc998652e5d\",\"name\":\"FastBitLab\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9230d0f9bdef28b63a01e7ca274ee7b2e8ed9abe932ee564af8809caaf52a0c8?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9230d0f9bdef28b63a01e7ca274ee7b2e8ed9abe932ee564af8809caaf52a0c8?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9230d0f9bdef28b63a01e7ca274ee7b2e8ed9abe932ee564af8809caaf52a0c8?s=96&d=mm&r=g\",\"caption\":\"FastBitLab\"},\"description\":\"The FastBit Embedded Brain Academy uses the power of internet to bring the online courses related to the field of embedded system programming, Real time operating system, Embedded Linux systems, etc at your finger tip with very low cost. Backed with strong experience of industry, we have produced lots of courses with the customer enrolment over 3000+ across 100+ countries.\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Analyzing Memory Consumption and Testing LVGL on STM32F429 Board","description":"Learn how to analyze and optimize memory consumption when using LVGL on an STM32F429 board. Understand the causes of memory overflow, explore","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fastbitlab.com\/blog\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\/","og_locale":"en_US","og_type":"article","og_title":"Analyzing Memory Consumption and Testing LVGL on STM32F429 Board","og_description":"Learn how to analyze and optimize memory consumption when using LVGL on an STM32F429 board. Understand the causes of memory overflow, explore","og_url":"https:\/\/fastbitlab.com\/blog\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\/","og_site_name":"FastBit EBA","article_publisher":"https:\/\/www.facebook.com\/fastbiteba\/","article_published_time":"2023-08-19T08:33:29+00:00","og_image":[{"width":1892,"height":826,"url":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-14-1.png","type":"image\/png"}],"author":"FastBitLab","twitter_card":"summary_large_image","twitter_creator":"@fastbiteba","twitter_site":"@fastbiteba","twitter_misc":{"Written by":"FastBitLab","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fastbitlab.com\/blog\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\/#article","isPartOf":{"@id":"https:\/\/fastbitlab.com\/blog\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\/"},"author":{"name":"FastBitLab","@id":"https:\/\/fastbitlab.com\/blog\/#\/schema\/person\/e32b38e733a0d76ffa7e6bc998652e5d"},"headline":"STM32-LTDC, LCD-TFT, LVGL(MCU3) Lecture 52| Analyzing memory consumption and testing LVGL on STM32F429 board","datePublished":"2023-08-19T08:33:29+00:00","mainEntityOfPage":{"@id":"https:\/\/fastbitlab.com\/blog\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\/"},"wordCount":1381,"commentCount":0,"publisher":{"@id":"https:\/\/fastbitlab.com\/blog\/#organization"},"image":{"@id":"https:\/\/fastbitlab.com\/blog\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\/#primaryimage"},"thumbnailUrl":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-14-1.png","articleSection":["Blog"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fastbitlab.com\/blog\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fastbitlab.com\/blog\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\/","url":"https:\/\/fastbitlab.com\/blog\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\/","name":"Analyzing Memory Consumption and Testing LVGL on STM32F429 Board","isPartOf":{"@id":"https:\/\/fastbitlab.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fastbitlab.com\/blog\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\/#primaryimage"},"image":{"@id":"https:\/\/fastbitlab.com\/blog\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\/#primaryimage"},"thumbnailUrl":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-14-1.png","datePublished":"2023-08-19T08:33:29+00:00","description":"Learn how to analyze and optimize memory consumption when using LVGL on an STM32F429 board. Understand the causes of memory overflow, explore","breadcrumb":{"@id":"https:\/\/fastbitlab.com\/blog\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fastbitlab.com\/blog\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fastbitlab.com\/blog\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\/#primaryimage","url":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-14-1.png","contentUrl":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/08\/Figure-14-1.png","width":1892,"height":826,"caption":"Figure 14. Calendar example"},{"@type":"BreadcrumbList","@id":"https:\/\/fastbitlab.com\/blog\/stm32-analyzing-memory-consumption-and-testing-lvgl-on-stm32f429-board\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fastbitlab.com\/blog\/"},{"@type":"ListItem","position":2,"name":"STM32-LTDC, LCD-TFT, LVGL(MCU3) Lecture 52| Analyzing memory consumption and testing LVGL on STM32F429 board"}]},{"@type":"WebSite","@id":"https:\/\/fastbitlab.com\/blog\/#website","url":"https:\/\/fastbitlab.com\/blog\/","name":"FastBit EBA","description":"Your Online Academy of Embedded Systems","publisher":{"@id":"https:\/\/fastbitlab.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fastbitlab.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/fastbitlab.com\/blog\/#organization","name":"FastBit EBA","url":"https:\/\/fastbitlab.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fastbitlab.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2026\/04\/logo-EzNrEnyr.png","contentUrl":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2026\/04\/logo-EzNrEnyr.png","width":640,"height":640,"caption":"FastBit EBA"},"image":{"@id":"https:\/\/fastbitlab.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/fastbiteba\/","https:\/\/x.com\/fastbiteba","https:\/\/www.linkedin.com\/in\/fastbit-embedded-brain-academy-b3167b124\/","https:\/\/www.youtube.com\/channel\/UCa1REBV9hyrzGp2mjJCagBg"]},{"@type":"Person","@id":"https:\/\/fastbitlab.com\/blog\/#\/schema\/person\/e32b38e733a0d76ffa7e6bc998652e5d","name":"FastBitLab","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/9230d0f9bdef28b63a01e7ca274ee7b2e8ed9abe932ee564af8809caaf52a0c8?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/9230d0f9bdef28b63a01e7ca274ee7b2e8ed9abe932ee564af8809caaf52a0c8?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9230d0f9bdef28b63a01e7ca274ee7b2e8ed9abe932ee564af8809caaf52a0c8?s=96&d=mm&r=g","caption":"FastBitLab"},"description":"The FastBit Embedded Brain Academy uses the power of internet to bring the online courses related to the field of embedded system programming, Real time operating system, Embedded Linux systems, etc at your finger tip with very low cost. Backed with strong experience of industry, we have produced lots of courses with the customer enrolment over 3000+ across 100+ countries."}]}},"_links":{"self":[{"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/posts\/15452","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/comments?post=15452"}],"version-history":[{"count":5,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/posts\/15452\/revisions"}],"predecessor-version":[{"id":15532,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/posts\/15452\/revisions\/15532"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/media\/15471"}],"wp:attachment":[{"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/media?parent=15452"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/categories?post=15452"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/tags?post=15452"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}