失败现象:
create msgq failed.
Create GUI server failed.
finsh>>post when server is not running
create win: main failed
Create window "main" failed!
(app != RT_NULL) assert failed at rtgui_send_sync:600
app->mq = rt_mq_create(mq_name, sizeof(union rtgui_event_generic), 32, RT_IPC_FLAG_FIFO);
if (app->mq == RT_NULL)//经过跟踪,发现此处失败的原因是rt_malloc 分配失败.
{
rt_kprintf("create msgq failed.\n");
goto __mq_err;//失败后进而导致Create GUI server failed.以至于server is not running
}
通过对gui前期的rt_malloc分析.
uint8_t * buffer = rt_malloc(4096);
而
rt_device_read(device, search_page, buffer, pages);
对buffer的操作大小为8192,远大于所分配的大小.
将其改为uint8_t * buffer = rt_malloc(8192);后,程序正常执行.
由以上分析得出结论,对动态分配的内存操作越界后,可能导致后续内存分配失败.
因此以后遇到动态内存分配失败时可从此入手分析.
|