[技术问答] M051中不能直接使用指针赋值木?

[复制链接]
2032|19
 楼主| vleboy 发表于 2014-11-27 12:05 | 显示全部楼层 |阅读模式
volatile uint32_t xxx=0;
        xxx = *(volatile uint32_t*)dat_buf;
dat_buf 是一个char型的数组地址的函数形参 unsigned char *dat_buf
 楼主| vleboy 发表于 2014-11-27 13:09 | 显示全部楼层
编译能过,但是仿真的时候过不了,不知道是什么原因,各位大大帮帮忙啊。
Howard16 发表于 2014-11-27 16:30 | 显示全部楼层
vleboy 发表于 2014-11-27 13:09
编译能过,但是仿真的时候过不了,不知道是什么原因,各位大大帮帮忙啊。 ...

仿真是怎麼過不了?
值不對?  進hardware fault?
戈卫东 发表于 2014-11-27 16:42 | 显示全部楼层
可能是对齐的问题。你的BUF定义是char[],强制转换成int32[]有可能出问题的。
 楼主| vleboy 发表于 2014-11-27 17:04 | 显示全部楼层
hardware fault了,我用STM32单片机都没问题。。
 楼主| vleboy 发表于 2014-11-27 17:06 | 显示全部楼层
Howard16 发表于 2014-11-27 16:30
仿真是怎麼過不了?
值不對?  進hardware fault?

值是对的,我用一个指针做间接,发现值是对的,但赋值过去就近hardware fault了。
 楼主| vleboy 发表于 2014-11-27 17:08 | 显示全部楼层
戈卫东 发表于 2014-11-27 16:42
可能是对齐的问题。你的BUF定义是char[],强制转换成int32[]有可能出问题的。

我只是把地址换成int32的类型了。等于是拿4个字节而已,因为数组在内存中是连续的啊,这个代码在STM32上跑是没问题的,所以我很奇怪这个问题。优化关了一样。。
Howard16 发表于 2014-11-27 17:15 | 显示全部楼层
試看看先直接給dat_buf地址
例如:
dat_buf = 0x20000400
 楼主| vleboy 发表于 2014-11-27 17:17 | 显示全部楼层
Howard16 发表于 2014-11-27 17:15
試看看先直接給dat_buf地址
例如:
dat_buf = 0x20000400

dat_buf是函数形参。。不知道能不能分配地址而不崩溃,现在只能用移位的方式搞定了。。
haolaishi 发表于 2014-11-27 21:55 | 显示全部楼层
会不会和dat_buf的取值有关了,M3和M0的外设地址不一样的,你指向的地址不同,外设正好出错了
john_lee 发表于 2014-11-28 21:29 | 显示全部楼层
cortex-m3 允许数据不对齐,而 cortex-m0 不允许,不要以为 cortex-m 都一样。
从小木丁丁 发表于 2014-11-28 21:31 | 显示全部楼层
仿真是最方便的东西,也是最不靠谱的东西
骗子的片子 发表于 2014-11-28 22:12 | 显示全部楼层
Howard16 发表于 2014-11-27 17:15
試看看先直接給dat_buf地址
例如:
dat_buf = 0x20000400

您的意思是数据对其的原因?
骗子的片子 发表于 2014-11-28 22:13 | 显示全部楼层
haolaishi 发表于 2014-11-27 21:55
会不会和dat_buf的取值有关了,M3和M0的外设地址不一样的,你指向的地址不同,外设正好出错了 ...

地址啥的我不懂,学习下
598330983 发表于 2014-12-4 21:58 来自手机 | 显示全部楼层
嗯哼,能用就好,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

12

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部