完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我将每个任务的堆栈大小从例程上的64改成了20或者更小,结果系统进入硬件错误,堆栈大死机还能理解,为什么改小了还会死机呢?(前提是我的任务基本都不使用自己的堆栈空间,基本都是修改的定义的全局变量)请问这是为什么啊?
|
|
相关推荐
3个回答
|
|
|
|
|
|
很明显,你给任务分配的堆栈太小了!!,你计算栈空间大小的方法是错误的。
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楼定律,所以: 我是二楼,我***!我为二楼代言! |
|
|
|
哈哈,谢谢你的认真回答,长知识了
|
|
|
|
只有小组成员才能发言,加入小组>>
680 浏览 0 评论
1099 浏览 1 评论
2463 浏览 5 评论
2797 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2634 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
645浏览 9评论
641浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
772浏览 6评论
618浏览 5评论
660浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-17 20:23 , Processed in 1.223276 second(s), Total 83, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号