你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F0 系列单片机,指针取整型值错误,用F0的进来看下

[复制链接]
mark0668 提问时间:2015-4-19 13:55 /
STM32F0 系列单片机,指针取整型值错误,用F0的进来看下,代码如下,附件里也有个工程可以下来单步运行下,这是什么问题如何解决.

uint8_t a[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};        //定义a 数组
int main(void){
        
        uint32_t*b=0;        //指针b
        uint32_t cc;        //临时变量
        b=(uint32_t*)(a+1);        //给a的指针地址+1他        
        cc  =*b;                                        //取值这步运行就出错    //如果程序没出错cc的值应该为0x04030201,    但取值就出错
        if(cc == 1)cc=0;
        while(1){
                        
        }
}


STM32F051.rar

下载

302.05 KB, 下载次数: 1, 下载积分: ST金币 -1

这是F0空工程包函上面的代码.

收藏 评论3 发布时间:2015-4-19 13:55

举报

3个回答
wu1169668869 回答时间:2015-4-19 16:48:29
可惜没有这个板子,
地址不是要考虑对齐的问题#还是说8位不用考虑这个问题
mark0668 回答时间:2015-4-20 00:04:03
在cortex-m0上,总线对访问内存数据是有一个对齐约束的:访问32位内存数据,该数据必须对齐到32位地址;访问16位内存数据,该数据必须对齐到16位地址,否则访问时将导致 hard fault。
你定义的 a 数组,链接器应该是将其对齐到了 32 位(或 16 位)地址,那么 a + 1 的地址,显然不满足访问的总线约束。


应该就是这问题了,M0的问题,M4 执行这代码是没有问题的.
sting 回答时间:2015-4-20 00:32:40
mark0668 发表于 2015-4-20 00:04
在cortex-m0上,总线对访问内存数据是有一个对齐约束的:访问32位内存数据,该数据必须对齐到32位地址;访 ...

说的真好,拍拍手
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版