AnsweredAssumed Answered

基于freertos下的栈溢出问题

Question asked by 仕聪 蒋 on Oct 11, 2018
Latest reply on Oct 13, 2018 by 仕聪 蒋

开发板:nxp imxrt1052evkb

自己创建了一个基于freertos的工程,包含了lwip,emwin,fatfs,USB,SDcard,CAN等功能。各个任务创建如下图所示,分配的栈大小总共为 3316WORD,FreeRTOSConfig.h里面#define configTOTAL_HEAP_SIZE           ((size_t)(17 * 1024))。
问题是编译通过后,下载到开发板上,实际运行发现我基于lwip写的client端连接不上服务器,而且也ping不同client开发板,(理论上初始化lwip后,应该是可以ping通的)。后面我一个个任务调试,发现屏蔽掉emwin任务后,就可以了;或者我屏蔽掉SDcard和USB任务后也可以了。这两种注释方法的共同点就是分配的栈大小差不多,由此我推测出可能是栈溢出了,然后我想用vApplicationStackOverflowHook钩子函数查找是哪个任务导致栈溢出,很可惜没有检测到。。。现在不知道怎么办????栈空间的大小代码哪里有限制??求助大神。谢谢

钩子函数,FreeRTOSConfig.h里面#define configCHECK_FOR_STACK_OVERFLOW          2

存储器分配文件定义如下:
#define m_flash_config_start 0x60000000
#define m_flash_config_size 0x00001000

#define m_ivt_start 0x60001000
#define m_ivt_size 0x00001000

#define m_interrupts_start 0x60002000
#define m_interrupts_size 0x00000400

#define m_text_start 0x60002400
#define m_text_size 0x03FFDC00

#define m_data3_start 0x80000000
#define m_data3_size 0x01E00000

#define m_ncache_start 0x81E00000
#define m_ncache_size 0x00200000

#define m_data_start 0x20000000
#define m_data_size 0x00020000

#define m_data2_start 0x20200000
#define m_data2_size 0x00040000

/* Sizes */
#if (defined(__stack_size__))
#define Stack_Size __stack_size__
#else
#define Stack_Size 0x4000
#endif

#if (defined(__heap_size__))
#define Heap_Size __heap_size__
#else
#define Heap_Size 0x4000
#endif

Outcomes