打印
[技术问答]

M051中不能直接使用指针赋值木?

[复制链接]
1638|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[]有可能出问题的。

使用特权

评论回复
5
vleboy|  楼主 | 2014-11-27 17:04 | 只看该作者
hardware fault了,我用STM32单片机都没问题。。

使用特权

评论回复
6
vleboy|  楼主 | 2014-11-27 17:06 | 只看该作者
Howard16 发表于 2014-11-27 16:30
仿真是怎麼過不了?
值不對?  進hardware fault?

值是对的,我用一个指针做间接,发现值是对的,但赋值过去就近hardware fault了。

使用特权

评论回复
7
vleboy|  楼主 | 2014-11-27 17:08 | 只看该作者
戈卫东 发表于 2014-11-27 16:42
可能是对齐的问题。你的BUF定义是char[],强制转换成int32[]有可能出问题的。

我只是把地址换成int32的类型了。等于是拿4个字节而已,因为数组在内存中是连续的啊,这个代码在STM32上跑是没问题的,所以我很奇怪这个问题。优化关了一样。。

使用特权

评论回复
8
Howard16| | 2014-11-27 17:15 | 只看该作者
試看看先直接給dat_buf地址
例如:
dat_buf = 0x20000400

使用特权

评论回复
9
vleboy|  楼主 | 2014-11-27 17:17 | 只看该作者
Howard16 发表于 2014-11-27 17:15
試看看先直接給dat_buf地址
例如:
dat_buf = 0x20000400

dat_buf是函数形参。。不知道能不能分配地址而不崩溃,现在只能用移位的方式搞定了。。

使用特权

评论回复
10
haolaishi| | 2014-11-27 21:55 | 只看该作者
会不会和dat_buf的取值有关了,M3和M0的外设地址不一样的,你指向的地址不同,外设正好出错了

使用特权

评论回复
11
john_lee| | 2014-11-28 21:29 | 只看该作者
cortex-m3 允许数据不对齐,而 cortex-m0 不允许,不要以为 cortex-m 都一样。

使用特权

评论回复
12
从小木丁丁| | 2014-11-28 21:31 | 只看该作者
仿真是最方便的东西,也是最不靠谱的东西

使用特权

评论回复
13
骗子的片子| | 2014-11-28 22:12 | 只看该作者
Howard16 发表于 2014-11-27 17:15
試看看先直接給dat_buf地址
例如:
dat_buf = 0x20000400

您的意思是数据对其的原因?

使用特权

评论回复
14
骗子的片子| | 2014-11-28 22:13 | 只看该作者
haolaishi 发表于 2014-11-27 21:55
会不会和dat_buf的取值有关了,M3和M0的外设地址不一样的,你指向的地址不同,外设正好出错了 ...

地址啥的我不懂,学习下

使用特权

评论回复
15
598330983| | 2014-12-4 21:58 | 只看该作者
嗯哼,能用就好,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

12

帖子

0

粉丝