打印
[开发生态]

关于KEIL的RTX 堆栈溢出问题

[复制链接]
319|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 内部机制和堆栈管理的理解,确实可以有效解决堆栈溢出的情况。

使用特权

评论回复
5
shenxiaolin| | 2024-8-30 14:41 | 只看该作者
RT需要需要修改堆栈大小的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

1284

帖子

0

粉丝