初级会员
- 积分
- 113
- 金钱
- 113
- 注册时间
- 2015-12-6
- 在线时间
- 15 小时
|
1金钱
ARM7如何结合ucos使用,一般都会让它工作在SVC管理模式,我从micrium官网下载了个例程,仔细阅读了它的启动代码文件和APP函数在启动代码文件init.s中定义了各种模式的堆栈,如下代码IRQ_STK_SIZE EQU 0x00000200FIQ_STK_SIZE EQU 0x00000100
SVC_STK_SIZE EQU 0x00000200
ABT_STK_SIZE EQU 0x00000200
UND_STK_SIZE EQU 0x00000200
SYS_STK_SIZE EQU 0x00000200
从上可知SVC模式的堆栈大小为0x200也就是512个字节,但是当我查看它的任务堆栈时,如下:
#define APP_TASK_START_STK_SIZE 256
#define APP_TASK_KBD_STK_SIZE 256
#define OS_PROBE_TASK_STK_SIZE 256
#define APP_TASK_USER_IF_STK_SIZE 324
#define APP_TASK_PROBE_STR_STK_SIZE 324
共有5个任务,很明显任务的总使用堆栈大小远远超过了启动代码里定义的在SVC模式下的堆栈,但是工程却可以正常的运行。我同时查看了我的前辈们写的多个工程,也存在上面这个情况,真的很纳闷了,使用的堆栈远远超过了定义堆栈的大小还能正常跑?难道是我的理解错了?
|
最佳答案
查看完整内容[请看2#楼]
ucos的栈不是用ARM的栈,ucos的栈实际是定义的一个数组,只要数组空间没有超出RAM的范围就可以
|