关于KEIL的RTX 堆栈溢出问题
在MDK5下用RTX,之前用的好好的,这次出现了任务就堆栈溢出的问题,百度搜了一下,有说系统跑起来之前不能打开中断,而使能了microlib之后,系统是自动建好main任务,跑起来的,在RTX_CM_lib.h里
extern int main (void);
extern
const osThreadDef_t os_thread_def_main;
const osThreadDef_t os_thread_def_main = {(os_pthread)main, osPriorityNormal, 1U, 4*OS_MAINSTKSIZE };
#if defined (__CC_ARM)
#ifdef __MICROLIB
attribute((section(".ARM.Collect
000000FF")))
void _main_init (void);
void _main_init (void) {
osKernelInitialize();
osThreadCreate(&os_thread_def_main, NULL);
osKernelStart();
for (;?;
}
现修改如下:
取消RTX_CM_lib.h的只读属性。鼠标悬停在该文档处,可以跳出来该文档的具体路径,在资源管理器里找到该文档,右键属性,取消只读。
将_main_init函数更改如下:
void _main_init (void) {
// osKernelInitialize();
// osThreadCreate(&os_thread_def_main, NULL);
// osKernelStart();
// for (;?;
main();
}
main函数里执行完外设初始化后,初始化系统,创建任务,运行系统,
osKernelInitialize();//内核初始化
//创建任务
osKernelStart();//启动系统
经长期观察,再没出现堆栈溢出的情况。
原文链接:https://blog.csdn.net/flash1983/article/details/100688746
|