[开发生态] 关于KEIL的RTX 堆栈溢出问题

[复制链接]
 楼主| ccook11 发表于 2024-6-25 13:30 | 显示全部楼层 |阅读模式
AI, ma, os, RT, keil
关于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

黑心单片机 发表于 2024-6-27 16:55 | 显示全部楼层
可以开辟大一点的堆栈解决吗
埃娃 发表于 2024-6-28 17:36 | 显示全部楼层
空间太小了吧
突然下起雨 发表于 2024-8-28 12:33 | 显示全部楼层
你的解决方案看起来是基于对 RTX 内部机制和堆栈管理的理解,确实可以有效解决堆栈溢出的情况。
shenxiaolin 发表于 2024-8-30 14:41 | 显示全部楼层
RT需要需要修改堆栈大小的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

1533

帖子

1

粉丝
快速回复 返回顶部 返回列表