完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我给系统中加入了 lvgl 直接出现死机 使用debug调试 也会出现 无法进入main的情况 debug时 会卡在下面的地方: __Vectors_Size EQU __Vectors_End - __Vectors AREA |.text|, CODE, READONLY ; Reset handler Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT SystemInit IMPORT __main LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 //在启动代码中会卡在这里 ENDP 这是什么原因呢? 这连调试都没法进行了 我现在的代码是 把初始化代码 任务代码如下, 实际上开机并没有直接运行任务代码,因为也会出现卡死, 为了调试, 把开机启动lvgl取消了,准备先启动起来 在运行lvgl,但是还是不行: #include #include #include "gpio.h" // #include "lcd.h" #include "st7789_lcd.h" #include "lvgl.h" #include "lv_port_disp_template.h" #include "lv_port_indev_template.h" // GUI Guider Includes #include "events_init.h" #include "gui_guider.h" #include "custom.h" //#include "SEGGER_SYSVIEW.h" //#include "SEGGER_RTT.h" /* Definitions for tasks */ /* Task handles */ #define DEFAULT_TASK_STACK_SIZE 512 static struct rt_thread default_task; static rt_uint8_t default_task_stack[DEFAULT_TASK_STACK_SIZE]; static rt_thread_t default_task_handle = RT_NULL; #define LVGL_TASK_STACK_SIZE 40*1024 static struct rt_thread lvgl_task; static rt_thread_t lvgl_task_handle = RT_NULL; // static rt_uint8_t lvgl_task_stack[LVGL_TASK_STACK_SIZE]; /* Function prototypes */ static void default_task_entry(void *parameter); static void lvgl_task_entry(void *parameter); /* LVGL specific variables */ lv_ui guider_ui; extern lv_indev_t *indev_encoder; extern volatile int32_t encoder_diff; extern volatile unsigned char encoder_button_val; extern volatile lv_indev_state_t encoder_state; void lvgl_timer_cb1(lv_timer_t * timer); /* RT-Thread tick hook function */ static void lvgl_tick_hook(void) { // lv_tick_inc(1); } // /* Application initialization function */ // int application_init(void) // { // // // Create the default task // // default_task_handle = rt_thread_create("default_task", // // default_task_entry, // // RT_NULL, // // DEFAULT_TASK_STACK_SIZE, // // 10, // // 10); // // if (default_task_handle != RT_NULL) // // { // // rt_thread_startup(default_task_handle); // // } // // Create the LVGL task // rt_thread_init(&lvgl_task_handle, // "lvgl_task", // RT_NULL, // lvgl_task_entry, // lvgl_task_stack, // LVGL_TASK_STACK_SIZE, // 12, // 10); // // if (lvgl_task_handle != RT_NULL) // // { // // rt_thread_startup(lvgl_task_handle); // // } // // // Set RT-Thread tick hook to LVGL tick function // // rt_thread_idle_sethook(lvgl_tick_hook); // return 0; // } // INIT_APP_EXPORT(application_init); int default_task_creat(void) { // Create the default task default_task_handle = rt_thread_create("default_task", default_task_entry, RT_NULL, DEFAULT_TASK_STACK_SIZE, 10, 10); if (default_task_handle != RT_NULL) { rt_thread_startup(default_task_handle); } } MSH_CMD_EXPORT(default_task_creat,default_task_creat); int default_task_init(void) { // Initialize the default task rt_err_t result = rt_thread_init(&default_task, // Thread control block "default_task", // Thread name default_task_entry, // Thread entry function RT_NULL, // Parameter default_task_stack, // Stack start address DEFAULT_TASK_STACK_SIZE, // Stack size 14, // Thread priority 10); // Tick if (result == RT_EOK) { // Start the thread rt_thread_startup(&default_task); } else { rt_kprintf("Failed to initialize default task: %d\n", result); } return 1; } #if 0 int GUI_init(void) { rt_kprintf("Starting application_init...\n"); // Create the LVGL task rt_err_t result = rt_thread_init( &lvgl_task, "lvgl_task", lvgl_task_entry, RT_NULL, lvgl_task_stack, LVGL_TASK_STACK_SIZE, 10, 10); if (result == RT_EOK) { rt_kprintf("LVGL task created successfully.\n"); rt_thread_startup(&lvgl_task); } else { rt_kprintf("Failed to Init LVGL task.\n"); } return 1; } #endif int GUI_creat(void) { lvgl_task_handle =rt_thread_create( "lvgl_task", lvgl_task_entry, RT_NULL, LVGL_TASK_STACK_SIZE, 12, 10); if (lvgl_task_handle != RT_NULL) { rt_thread_startup(lvgl_task_handle); } else { rt_kprintf("Failed to create LVGL task.\n"); } } // INIT_APP_EXPORT(GUI_create); // INIT_APP_EXPORT(application_init); MSH_CMD_EXPORT(GUI_creat,GUI_creat); static void default_task_entry(void *parameter) { while (1) { // 按键任务 //Key_Scanf(); // page_logic(); rt_kprintf("Default task running...\n"); rt_thread_mdelay(1000); } } static void lvgl_task_entry(void *parameter) { rt_thread_mdelay(10); // LVGL initialization lv_init(); lv_port_disp_init(); //lv_port_indev_init(); // MD_REncoder_Init(&encoder, &encoder_diff, &encoder_button_val, INPUT_MODE_ENCODER, GPIO_MODE_INPUT_PULLUP, GPIOA, GPIO_PIN_0, GPIOA, GPIO_PIN_1, GPIOB, GPIO_PIN_0); // Create a GUI-Guider app setup_ui(&guider_ui);// // Create a timer, switching pages every 3 seconds //lv_timer_create(lvgl_timer_cb1, 3000, RT_NULL); while (1) { lv_task_handler();// rt_thread_mdelay(10); } } void lvgl_timer_cb1(lv_timer_t * timer) { printf("Timer expired!\n"); } |
|
相关推荐
1个回答
|
|
在使用debug调试时,如果无法进入main函数,可能是由以下几个原因导致的:
1. **中断向量表(Interrupt Vector Table)问题**:你提到的`__Vectors_Size`和`Reset_Handler`是与中断向量表相关的。如果中断向量表配置不正确,可能导致无法正确跳转到`main`函数。 2. **堆栈问题**:在进入`main`函数之前,系统需要设置堆栈。如果堆栈设置不正确,可能导致程序无法正常执行。 3. **初始化代码问题**:在进入`main`函数之前,编译器会生成一些初始化代码,用于初始化全局变量和静态变量。如果这些初始化代码出现问题,可能导致程序无法正常执行。 4. **LVGL库问题**:你提到加入了LVGL库后出现了死机。可能是LVGL库与你的系统不兼容,或者LVGL库的配置不正确。 5. **硬件问题**:如果硬件存在问题,可能导致程序无法正常执行。 为了解决这个问题,你可以尝试以下步骤: 1. **检查中断向量表配置**:确保中断向量表的大小和位置正确。 2. **检查堆栈设置**:确保堆栈的大小和位置正确。 3. **检查初始化代码**:检查编译器生成的初始化代码是否正确。 4. **检查LVGL库**:确保LVGL库与你的系统兼容,或者尝试使用其他版本的LVGL库。 5. **检查硬件**:如果可能的话,尝试在其他硬件上运行程序,以排除硬件问题。 6. **使用其他调试工具**:如果可能的话,尝试使用其他调试工具,以排除当前调试工具的问题。 7. **逐步调试**:从`Reset_Handler`开始,逐步调试代码,观察程序的执行流程,找出问题所在。 通过以上步骤,你应该能够找到导致无法进入`main`函数的原因,并采取相应的解决措施。 |
|
|
|
只有小组成员才能发言,加入小组>>
152个成员聚集在这个小组
加入小组【Vision Board创客营连载体验】基于RA8D1-Vision Board的自动路径规划小车
864 浏览 0 评论
【Vision Board创客营连载体验】基于Vision Board的垃圾分类
1188 浏览 0 评论
【Vision Board创客营连载体验】使用 Vision Board 做一个 UVC Camera
845 浏览 0 评论
【Vision Board创客营连载体验】TinyMaix进行手写数字识别
1150 浏览 0 评论
【Vision Board创客营连载体验】RA8D1-Vision Board使用7寸屏设置为RGB666大端模式模式成功显示摄像头图案
1138 浏览 0 评论
在RT-Thread Studio中新建的stm32f407-atk-explorer工程运行qemu失败,是什么原因引起的?
202浏览 3评论
STM32F407ZGT6 spi flash片选引脚无法被拉低的原因?怎么解决?
1185浏览 2评论
移植RT-THREAD在stm32开发板上,使用rt_kprintf不能正常打印的原因是什么?怎么解决?
508浏览 2评论
stm32f103zet用rtthread studio生成带finsh的项目程序,串口输入help没有反应是为什么?
512浏览 2评论
rtthread studio已经成功编写了外部flash下载算法,程序也能下载进去但是不能进行调试怎么办?
431浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 19:02 , Processed in 0.537422 second(s), Total 81, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号