发 帖  
原厂入驻New
申请华秋企业认证 多层板首单免费打样!
30s提交资料,10分钟通过审核(免费赔付+顺丰包邮)>>立即报名
stm32下的ucos与内存有什么关系?
128 STM32 UCOS 函数
分享
前段时间发过一个关于STM32+ucos进入hard fault的帖子,没人回我,自己后来调试后找到问题报告为:试图切入ARM状态。本人在排查过程中发现了问题所在,但是不知道该怎么解释这个问题,而且解决办法也不是很标准,求懂的人解释一下原因和解决办法。
问题描述:
声明了一个unsigned int A[8]数组,在某个函数中使用时出错进入hardfalut状态。
在这个数组前面再申明一个unsigned  int数组  当数组大于等于3的时候系统可以跑了。
当我将数组声明为unsigned  int A[11],而不对数组前三个操作时,系统也正常。
分析原因:
此数组在内存中的物理地址与cpu处理地址的对齐方式是不是存在着某种牵连导致了数组不能正常被使用。
在此欢迎大家讨论!
0
2019-10-22 21:54:04   评论 分享淘帖 邀请回答

相关问题

11个回答
给的代码里面更该过,我没注意看确实没有,我试试剥离其他工作。还有就是忘了说,这个没有在ucos下跑,只是跑逻辑的时候是没有问题的!
2019-10-23 06:27:29 评论

举报

看你怎么用这个数组的了。。。用了sprintf这些东西没有?
2019-10-23 06:32:52 评论

举报

2019-10-23 07:08:07 评论

举报

对数组操作的指针是没有越界的!
2019-10-23 07:19:26 评论

举报

一般出现这种越界可能机会大,或者有些指针没有初始化,野指针。
至于你说的对齐,你可以把数组添加__align(4)进行对齐试试就知道了,我觉得不是。
项目里int各种数组多着呢,也没遇到你的情况。
2019-10-23 07:26:11 评论

举报

用斜体好难看啊。
你最后的描述是用个短的全局变量替换一个长的全局变量做参数就变正常了。好像跟你这里说的不一样。
在另外buf没有传递参数的样子,我怎么看起来一直在赋值buf[0]??
2019-10-23 08:06:13 评论

举报

我都没看到你的buf有进行移动,而传递进来也就首地址,所以其实不是只操作第一个元素吗
你可以去掉硬件读取数据部分,直接用随机数赋值。然后模拟出问题的情况。
2019-10-23 08:29:22 评论

举报

并没有什么buf+i。这个问题我还是觉得是别的问题引起的。你如果要说明这个问题存在,就必须剥离其他工作,单独跑一个task,然后传递参数赋值看看。
我的项目160K左右,都没遇到unsigned int传递有问题。
2019-10-23 08:51:38 评论

举报

我在ucosiii下跑,没问题。
2019-10-23 09:04:39 评论

举报

只能说硬件这个环境太不可控了,现在我将工程还原已经不能捕获到那个异常了!
2019-10-23 09:21:02 评论

举报

额不会玩这个帖子  最佳准备给你的,怎么就变成自己的了
2019-10-23 09:26:18 评论

举报

只有小组成员才能发言,加入小组>>

182个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /6 下一条

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