正常运行了

This commit is contained in:
2026-08-31 15:11:18 +08:00
parent 71c41fabb9
commit 2d2774124e
6 changed files with 54 additions and 321 deletions
+40 -35
View File
@@ -11,6 +11,9 @@
#include "lvgl.h"
#define DBG_TAG "[UI_MENU]"
#include "dbg_log.h"
/* 菜单节点表(简化自 DTU-HMI menuTab):层级 + 名称 */
typedef struct {
uint8_t level; /* 0=根页面, 1..3=子层次 */
@@ -87,9 +90,9 @@ static const ui_menu_node_t g_menu_tab[] = {
* 入口参数:无
* 返回值:0 - 成功,其他 - 失败(对象创建失败)
* 限定条件:ui_port_init() 已成功调用,活动屏幕存在
* 函数说明:1. 依据紧凑节点表按层级生成 lv_menu 页面与返回栈
* 2. 将菜单对象加入默认输入组,支持远端按键导航
* 3. 叶子节点挂占位页,等待后续逐项填充具体功能
* 函数说明:1. 仅构建主页面(根页 + 一级菜单项),子树暂不构建以控制内存占用
* 2. 文本全部使用静态字符串(不 strdup),减少 LVGL 堆分配
* 3. 构建中监控 LVGL 池空闲内存,不足时中止而非崩溃
*/
int ui_menu_init(void)
{
@@ -101,44 +104,46 @@ int ui_menu_init(void)
lv_menu_set_mode_root_back_button(menu, LV_MENU_ROOT_BACK_BUTTON_ENABLED);
lv_group_add_obj(lv_group_get_default(), menu);
/* 仅构建主页面:根页 + 一级菜单项(静态文本,不建子树,省内存) */
lv_obj_t *root_page = lv_menu_page_create(menu, NULL);
if (root_page == NULL) {
return -1;
}
lv_menu_set_page_title_static(root_page, "主界面");
lv_mem_monitor_t mon;
lv_mem_monitor(&mon);
DBG_INFO("menu build start: total=%u free=%u big=%u",
(unsigned)mon.total_size,
(unsigned)mon.free_size, (unsigned)mon.free_biggest_size);
uint32_t n = sizeof(g_menu_tab) / sizeof(g_menu_tab[0]);
lv_obj_t *root_page = NULL;
lv_obj_t *parent_stack[4] = {NULL, NULL, NULL, NULL};
for (uint32_t i = 1; i < n; i++) {
if (g_menu_tab[i].level != 1) {
continue; /* 只显示一级菜单项,子树暂不构建 */
}
/* 内存警戒:空闲池不足则中止,避免 LVGL 内部 NULL 解引用崩溃 */
lv_mem_monitor(&mon);
if (mon.free_biggest_size < 1024) {
DBG_ERROR("menu mem low: abort at item %u (free=%u big=%u)",
(unsigned)i, (unsigned)mon.free_size,
(unsigned)mon.free_biggest_size);
break;
}
for (uint32_t i = 0; i < n; i++) {
uint8_t L = g_menu_tab[i].level;
const char *name = g_menu_tab[i].name;
if (i == 0) {
/* 第 0 节点为根(主界面) */
root_page = lv_menu_page_create(menu, name);
parent_stack[0] = root_page;
continue;
}
/* 当前节点页面 */
lv_obj_t *page = lv_menu_page_create(menu, name);
/* 叶子:页内挂占位内容 */
int leaf = (i + 1 >= n) || (g_menu_tab[i + 1].level <= L);
if (leaf) {
lv_obj_t *ph = lv_menu_cont_create(page);
lv_obj_t *pl = lv_label_create(ph);
lv_label_set_text(pl, "功能未实现(占位)");
}
/* 挂到父页:level0 直挂根,其余挂到上一级页面 */
lv_obj_t *parent = (L == 0) ? root_page : parent_stack[L - 1];
/* 在父页创建一个容器项,点击加载当前页 */
lv_obj_t *item = lv_menu_cont_create(parent);
lv_obj_t *item = lv_menu_cont_create(root_page);
lv_obj_t *lbl = lv_label_create(item);
lv_label_set_text(lbl, name);
lv_menu_set_load_page_event(menu, item, page);
parent_stack[L] = page;
lv_label_set_text_static(lbl, name);
}
lv_menu_set_page(menu, root_page);
lv_mem_monitor(&mon);
DBG_INFO("menu build done: total=%u free=%u big=%u used=%u",
(unsigned)mon.total_size,
(unsigned)mon.free_size, (unsigned)mon.free_biggest_size,
(unsigned)(mon.total_size - mon.free_size));
return 0;
}
+3 -7
View File
@@ -1,7 +1,7 @@
; *************************************************************
; *** Scatter-Loading Description File (manual) ***
; *** RW_IRAM3(SRAM3) for ucHeap big block. DO NOT let uVision ***
; *** regenerate this file (keep "Use Memory Layout" unchecked)***
; *** IRAM1 = SRAM1+SRAM2 128KB continuous RAM. ***
; *** No SRAM3 usage (may not exist on clone MCUs). ***
; *************************************************************
LR_IROM1 0x08000000 0x00100000 { ; load region size_region
@@ -11,11 +11,7 @@ LR_IROM1 0x08000000 0x00100000 { ; load region size_region
.ANY (+RO)
.ANY (+XO)
}
RW_IRAM1 0x20000000 0x00020000 { ; RW data
.ANY (+RW +ZI)
}
RW_IRAM3 0x20040000 0x00010000 { ; SRAM3 for ucHeap
heap_4.o (+RW +ZI)
RW_IRAM1 0x20000000 0x00020000 { ; SRAM1+SRAM2, 128KB
.ANY (+RW +ZI)
}
}
+1 -1
View File
@@ -6,7 +6,7 @@ set PROJ=%~dp0STM32F407-Demo.uvprojx
set LOG=%~dp0build_log.txt
set TARGET=STM32F407-Demo
"%UV4%" -r "%PROJ%" -t%TARGET% -j0 -o "%LOG%"
"%UV4%" -b "%PROJ%" -t%TARGET% -j0 -o "%LOG%"
findstr /C:"0 Error(s), 0 Warning(s)" "%LOG%" >nul
if %ERRORLEVEL% equ 0 (
+3 -274
View File
@@ -1,279 +1,8 @@
*** Using Compiler 'V5.06 update 7 (build 960)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
Rebuild target 'STM32F407-Demo'
assembling startup_stm32f407xx.s...
compiling dma.c...
compiling i2c.c...
compiling stm32f4xx_hal_timebase_tim.c...
compiling stm32f4xx_hal_dma_ex.c...
compiling gpio.c...
compiling stm32f4xx_hal_msp.c...
compiling stm32f4xx_it.c...
compiling stm32f4xx_hal_dma.c...
compiling spi.c...
compiling sys_clock.c...
compiling stm32f4xx_hal_flash_ex.c...
compiling stm32f4xx_hal_flash.c...
compiling stm32f4xx_hal_pwr.c...
compiling stm32f4xx_hal_pwr_ex.c...
compiling stm32f4xx_hal_rcc_ex.c...
compiling stm32f4xx_hal_flash_ramfunc.c...
compiling stm32f4xx_hal_gpio.c...
compiling freertos.c...
compiling usart.c...
compiling app_main.c...
compiling main.c...
compiling stm32f4xx_hal_rcc.c...
compiling time_sync.c...
compiling ui_task.c...
compiling net_task.c...
compiling stm32f4xx_hal_tim_ex.c...
compiling lftpd_string.c...
compiling croutine.c...
compiling event_groups.c...
compiling list.c...
compiling stm32f4xx_hal_tim.c...
compiling queue.c...
compiling stream_buffer.c...
compiling timers.c...
compiling heap_4.c...
compiling stm32f4xx_hal_cortex.c...
compiling tasks.c...
compiling port.c...
compiling map.c...
compiling journal.c...
compiling ff.c...
compiling stm32f4xx_hal.c...
compiling system_stm32f4xx.c...
compiling test_config.c...
compiling ch395f_test_task.c...
compiling stm32f4xx_hal_i2c_ex.c...
compiling net_test_task.c...
compiling gd5f_test_task.c...
compiling cmsis_os2.c...
compiling sd2506.c...
compiling rs485.c...
compiling stm32f4xx_hal_exti.c...
compiling nand_ftl.c...
compiling tpafe5160.c...
compiling lftpd_io.c...
compiling ch395f.c...
compiling lv_obj_class.c...
compiling lftpd_inet.c...
compiling lv_obj_event.c...
compiling lv_group.c...
compiling lv_obj_draw.c...
compiling net_select.c...
compiling stm32f4xx_hal_spi.c...
compiling lv_obj.c...
compiling gd5f2gq5ue.c...
compiling stm32f4xx_hal_uart.c...
compiling lv_obj_property.c...
compiling net_socket.c...
compiling lv_obj_id_builtin.c...
compiling lftpd.c...
compiling lv_draw_3d.c...
compiling lv_obj_tree.c...
compiling lv_obj_style_gen.c...
compiling stm32f4xx_hal_i2c.c...
compiling lv_obj_scroll.c...
compiling lv_draw.c...
compiling lv_draw_arc.c...
compiling lv_obj_style.c...
compiling lv_obj_pos.c...
compiling lv_refr.c...
compiling lv_draw_line.c...
compiling lv_draw_mask.c...
compiling lv_display.c...
compiling lv_draw_image.c...
compiling lv_draw_buf.c...
compiling lv_draw_vector.c...
compiling lv_draw_rect.c...
compiling lv_draw_triangle.c...
compiling lv_draw_label.c...
compiling lv_draw_sw_blend.c...
compiling lv_image_decoder.c...
compiling lv_draw_sw_blend_to_al88.c...
compiling lv_draw_sw_blend_to_argb8888_premultiplied.c...
compiling lv_draw_sw_blend_to_argb8888.c...
compiling lv_draw_sw_grad.c...
compiling lv_draw_sw_arc.c...
compiling lv_draw_sw.c...
compiling lv_draw_sw_fill.c...
compiling lv_draw_sw_border.c...
compiling lv_draw_sw_letter.c...
compiling lv_draw_sw_mask_rect.c...
compiling lv_draw_sw_blend_to_l8.c...
compiling lv_draw_sw_blend_to_i1.c...
compiling lv_draw_sw_utils.c...
compiling lv_draw_sw_triangle.c...
compiling lv_draw_sw_line.c...
compiling lv_draw_sw_vector.c...
compiling lv_draw_sw_blend_to_rgb888.c...
compiling lv_draw_sw_img.c...
compiling lv_draw_sw_box_shadow.c...
compiling lv_font.c...
compiling lv_draw_sw_mask.c...
compiling lv_draw_sw_transform.c...
compiling lv_draw_sw_blend_to_rgb565.c...
compiling lv_draw_sw_blend_to_rgb565_swapped.c...
compiling storage_test_task.c...
compiling lv_binfont_loader.c...
compiling sd2506_test_task.c...
compiling lv_font_dejavu_16_persian_hebrew.c...
compiling lv_font_fmt_txt.c...
compiling lv_font_montserrat_10.c...
compiling lv_font_montserrat_12.c...
compiling lv_font_montserrat_14.c...
compiling lv_font_montserrat_14_aligned.c...
compiling lv_font_montserrat_16.c...
compiling lv_font_montserrat_18.c...
compiling lv_font_montserrat_22.c...
compiling lv_font_montserrat_20.c...
compiling lv_font_montserrat_24.c...
compiling lv_font_montserrat_26.c...
compiling lv_font_montserrat_28.c...
compiling lv_font_montserrat_28_compressed.c...
compiling lv_font_montserrat_30.c...
compiling lv_font_montserrat_32.c...
compiling lv_font_montserrat_34.c...
compiling lv_font_montserrat_36.c...
compiling lv_font_montserrat_38.c...
compiling lv_font_montserrat_40.c...
compiling lv_font_montserrat_44.c...
compiling lv_font_montserrat_42.c...
compiling lv_font_montserrat_46.c...
compiling lv_font_montserrat_48.c...
compiling lv_font_montserrat_8.c...
compiling lv_font_simsun_14_cjk.c...
compiling lv_font_simsun_16_cjk.c...
compiling lv_font_source_han_sans_sc_14_cjk.c...
compiling lv_indev_gesture.c...
compiling lv_font_unscii_16.c...
compiling lv_font_source_han_sans_sc_16_cjk.c...
compiling lv_font_unscii_8.c...
compiling lv_cache_lru_ll.c...
compiling lv_cache_lru_rb.c...
compiling lv_cache.c...
compiling lv_layout.c...
compiling lv_init.c...
compiling lv_indev_scroll.c...
compiling lv_image_cache.c...
compiling lv_image_header_cache.c...
compiling lv_cache_entry.c...
compiling lv_bin_decoder.c...
compiling lv_grid.c...
compiling lv_anim_timeline.c...
compiling lv_flex.c...
compiling lv_indev.c...
compiling lv_async.c...
compiling lv_bidi.c...
compiling lv_array.c...
compiling lv_anim.c...
compiling lv_circle_buf.c...
compiling lv_color_op.c...
compiling lv_area.c...
compiling lv_color.c...
compiling lv_grad.c...
compiling lv_iter.c...
compiling lv_log.c...
compiling lv_ll.c...
compiling lv_event.c...
compiling lv_lru.c...
compiling lv_matrix.c...
compiling lv_fs.c...
compiling lv_math.c...
compiling lv_templ.c...
compiling lv_rb.c...
compiling lv_palette.c...
compiling lv_style_gen.c...
compiling lv_text_ap.c...
compiling lv_profiler_builtin.c...
compiling lv_style.c...
compiling lv_cmsis_rtos2.c...
compiling lv_tree.c...
compiling lv_text.c...
compiling lv_utils.c...
compiling lv_freertos.c...
compiling lv_linux.c...
compiling lv_timer.c...
compiling lv_mqx.c...
compiling lv_os_none.c...
compiling lv_pthread.c...
compiling lv_sdl2.c...
compiling lv_windows.c...
compiling lv_rtthread.c...
compiling lv_os.c...
compiling lv_mem_core_builtin.c...
compiling lv_string_builtin.c...
compiling lv_sprintf_builtin.c...
compiling lv_sprintf_clib.c...
compiling lv_mem_core_clib.c...
compiling lv_string_clib.c...
compiling lv_tlsf.c...
compiling lv_mem_core_micropython.c...
compiling lv_mem_core_rtthread.c...
compiling lv_sprintf_rtthread.c...
compiling lv_string_rtthread.c...
compiling lv_mem_core_uefi.c...
compiling lv_mem.c...
compiling lv_3dtexture.c...
compiling lv_animimage.c...
compiling lv_tick.c...
compiling lv_theme_default.c...
compiling lv_arc.c...
compiling lv_theme.c...
compiling lv_theme_simple.c...
compiling lv_theme_mono.c...
compiling lv_button.c...
compiling lv_bar.c...
compiling lv_calendar_chinese.c...
compiling lv_calendar_header_arrow.c...
compiling lv_calendar_header_dropdown.c...
compiling lv_canvas.c...
compiling lv_chart.c...
compiling lv_buttonmatrix.c...
compiling lv_checkbox.c...
compiling lv_dropdown.c...
compiling lv_calendar.c...
compiling lv_keyboard.c...
compiling lv_imagebutton.c...
compiling lv_led.c...
compiling lv_image.c...
compiling lv_line.c...
compiling lv_lottie.c...
compiling lv_list.c...
compiling lv_objx_templ.c...
compiling lv_label.c...
compiling lv_dropdown_properties.c...
compiling lv_msgbox.c...
compiling lv_animimage_properties.c...
compiling lv_menu.c...
compiling lv_image_properties.c...
compiling lv_keyboard_properties.c...
compiling lv_label_properties.c...
compiling lv_obj_properties.c...
compiling lv_style_properties.c...
compiling lv_roller_properties.c...
compiling lv_slider_properties.c...
compiling lv_textarea_properties.c...
compiling lv_roller.c...
compiling lv_scale.c...
compiling lv_slider.c...
compiling lv_span.c...
compiling lv_spinbox.c...
compiling lv_switch.c...
compiling lv_table.c...
compiling ui_net_sink.c...
compiling lv_spinner.c...
compiling lv_tileview.c...
compiling lv_tabview.c...
compiling lv_win.c...
Build target 'STM32F407-Demo'
compiling ui_menu.c...
compiling ui_port.c...
compiling ui_font_cn_12.c...
compiling lv_textarea.c...
linking...
Program Size: Code=213444 RO-data=9684 RW-data=440 ZI-data=124640
Program Size: Code=213580 RO-data=9792 RW-data=440 ZI-data=124640
FromELF: creating hex file...
".\STM32F407-Demo\STM32F407-Demo.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed: 00:00:26
Build Time Elapsed: 00:00:07
+2 -2
View File
@@ -70,10 +70,10 @@ Dma.USART1_TX.0.PeriphInc=DMA_PINC_DISABLE
Dma.USART1_TX.0.Priority=DMA_PRIORITY_LOW
Dma.USART1_TX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode
FREERTOS.Events01=sys_evt,Dynamic,NULL
FREERTOS.FootprintOK=false
FREERTOS.FootprintOK=true
FREERTOS.IPParameters=Tasks01,configENABLE_FPU,FootprintOK,configTOTAL_HEAP_SIZE,Queues01,Events01
FREERTOS.Queues01=netMsgQueue,8,net_msg_t,0,Dynamic,NULL,NULL
FREERTOS.Tasks01=defaultTask,24,512,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;netTask,24,1024,StartNetTask,Default,NULL,Dynamic,NULL,NULL;ftpTask,24,1024,StartFtpTask,As weak,NULL,Dynamic,NULL,NULL;testTask,16,4096,start_test_task,As weak,NULL,Dynamic,NULL,NULL;uiTask,16,4096,StartUiTask,Default,NULL,Dynamic,NULL,NULL
FREERTOS.Tasks01=defaultTask,24,512,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;netTask,24,1024,StartNetTask,Default,NULL,Dynamic,NULL,NULL;ftpTask,24,1024,StartFtpTask,As weak,NULL,Dynamic,NULL,NULL;testTask,16,1024,start_test_task,As weak,NULL,Dynamic,NULL,NULL;uiTask,16,4096,StartUiTask,Default,NULL,Dynamic,NULL,NULL
FREERTOS.configENABLE_FPU=1
FREERTOS.configTOTAL_HEAP_SIZE=49152
File.Version=6
+5 -2
View File
@@ -89,7 +89,7 @@ const osThreadAttr_t ftpTask_attributes = {
osThreadId_t testTaskHandle;
const osThreadAttr_t testTask_attributes = {
.name = "testTask",
.stack_size = 4096 * 4,
.stack_size = 1024 * 4,
.priority = (osPriority_t) osPriorityBelowNormal,
};
/* Definitions for uiTask */
@@ -231,7 +231,10 @@ void StartDefaultTask(void *argument)
}
for (;;) {
osDelay(1000);
HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin);
osDelay(500);
}
/* USER CODE END StartDefaultTask */
}