四轴飞行器DIY活动征集报名中!更有现金奉送哦~→ 立即报名 ←
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » [经验] 技术小课堂| µC/OS-III的应用中CSTACK重用

共2条 1/1 1 跳转至

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

菜鸟
2019-05-30 22:38:27    评分
当使用µ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只能用于在多任务处理启动后创建的用户任务。





关键词: OS-III     CSTACK     应用     技术     经验    

菜鸟
2019-05-30 22:48:30    评分
2楼

很实用,帮顶~


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]