OpenEdv-开源电子网

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

uCOS堆栈大小问题

[复制链接]

14

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2014-6-19
在线时间
0 小时
发表于 2014-11-13 16:10:26 | 显示全部楼层 |阅读模式
5金钱
我将每个任务的堆栈大小从例程上的64改成了20或者更小,结果系统进入硬件错误,堆栈大死机还能理解,为什么改小了还会死机呢?(前提是我的任务基本都不使用自己的堆栈空间,基本都是修改的定义的全局变量)请问这是为什么啊?

最佳答案

查看完整内容[请看2#楼]

因为你堆栈小了嘛。。。 一般是越大越好,你给往死里整,死了自然不奇怪。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165225
金钱
165225
注册时间
2010-12-1
在线时间
2107 小时
发表于 2014-11-13 16:10:27 | 显示全部楼层
因为你堆栈小了嘛。。。
一般是越大越好,你给往死里整,死了自然不奇怪。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2014-11-13 16:10:27 | 显示全部楼层
很明显,你给任务分配的堆栈太小了!!,你计算栈空间大小的方法是错误的。
1、任务所需分配的栈空间大小与具体应用相关,在分配栈空间时,必须考虑该任务调用的函数的嵌套情况、任务调用的嵌套函数所使用的局部变量的数目以及所嵌套的ISR对堆栈的需求。另外任务栈必须有足够的空间,能够存储所有的CPU寄存器,并且CPU有浮点寄存器FPU的情况下,还要存储FPU寄存器!
2、假如你现在给某个任务分配20的堆栈(也就是20*4=80字节),其中通用CPU寄存器就有R0-R15共16个32位的寄存器,这些寄存器压栈就需要16个(16*4=64字节),这样你的任务堆栈还剩下4个(16字节),更别说如果是F4的话还有FPU寄存器!你说剩下这16个字节任务栈能干嘛!如果是我的话我会这么安排这16个字节:挑出其中11个来组个足球队,还剩下5个全做啦啦队,我不要替补!让他们和国足较量!
  最后在吐槽一句,任务堆栈分配小导致hardfault我可以理解,但是任务堆栈分配大导致hardfault我是万万不能理解,刚好和你相反。
  在吐槽一句,为了给你认真的回复,痛失1楼,结果沦为了2楼!!听说有个那啥2楼定律,所以:
   我是二楼,我傻逼!我为二楼代言!
开往春天的手扶拖拉机
回复

使用道具 举报

14

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2014-6-19
在线时间
0 小时
 楼主| 发表于 2014-11-13 19:06:31 | 显示全部楼层
回复【3楼】zuozhongkai:
---------------------------------
哈哈,谢谢你的认真回答,长知识了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-1 12:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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