OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3602|回复: 1

ARM7结合ucos应用的堆栈分配问题

[复制链接]

9

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2015-12-6
在线时间
15 小时
发表于 2016-6-23 20:43:18 | 显示全部楼层 |阅读模式
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的范围就可以
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

0

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2020-1-12
在线时间
12 小时
发表于 2016-6-23 20:43:19 | 显示全部楼层
ucos的栈不是用ARM的栈,ucos的栈实际是定义的一个数组,只要数组空间没有超出RAM的范围就可以
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-26 00:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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