发 帖  
张飞软硬开源基于STM32 BLDC直流无刷电机驱动器开发视频套件, 👉戳此立抢👈

[经验] 技术小课堂| µC/OS-III的应用中CSTACK重用

2019-5-17 16:25:57  477
分享
0
​​当使用µC/OS-III开发应用时,C启动堆栈可能会丢失,导致嵌入式应用中可用的RAM量减少。
本篇展示了如何恢复这段RAM空间,作为任务堆栈使用。

在Cortex-M架构的处理器上,向量表中包含堆栈指针的初始值,该值自动分配给CPU的主堆栈指针(MSP)。对于IAR工具链(EWARM),初始堆栈的存储空间由链接器命令文件设置,堆栈空间称为CSTACK。启动完成后,MSP通常保持不变, CSTACK用于中断服务程序(ISR)。

在EWARM中,CSTACK的大小(以字节为单位)和存储空间在链接器命令脚本中定义,如下所示(参见MCU工程中对应的*.icf文件):
define symbol__ICFEDIT_size_cstack__= 0x400;
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };

默认CSTACK为1KB,对于典型启动代码来说是足够的。但是,如果您的启动代码需要更多(或更少)的堆栈空间,可以简单地更改其值以满足应用需要。

Cortex-M架构还包含一个进程堆栈指针(PSP),用于任务级代码。

µC/OS-III供了设置独立的ISR堆栈的能力,允许应用代码控制ISR堆栈大小;允许RTOS计算堆栈使用率,并可以在运行时显示ISR堆栈使用情况。在µC/OS-III中,ISR堆栈称为OSCfg_ISRStk[],通常
当使用µC/OS-III开发应用时,C启动堆栈可能会丢失,导致嵌入式应用中可用的RAM量减少。
本篇展示了如何恢复这段RAM空间,作为任务堆栈使用。

如下面的代码片段所示(基于IAR EWARM),很容易恢复用于CSTACK的存储区域,并且将其分配给应用任务。但是,CSTACK只能用于在多任务处理启动后创建的用户任务。
rtos.jpg


24不可说 2019-5-17 22:06:20
感谢分享。
1回复

举报

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

发经验
课程
    关闭

    站长推荐 上一条 /8 下一条

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