找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

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

[复制链接]
跳转到指定楼层
楼主
vleboy 发表于 2014-11-27 11:51:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
        volatile uint32_t xxx=0;
        xxx = *(volatile uint32_t*)dat_buf;
dat_buf 是一个char型的数组地址的函数形参 unsigned char *dat_buf
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 顶 踩
回复

使用道具 举报

沙发
 楼主| vleboy 发表于 2014-11-27 11:52:12 | 只看该作者
在这里老报错。
回复 支持 反对

使用道具 举报

板凳
 楼主| vleboy 发表于 2014-11-27 11:52:31 | 只看该作者
不对,不报错,仿真过不了。
回复 支持 反对

使用道具 举报

地板
chenwenbin 发表于 2014-11-27 14:37:49 | 只看该作者
你是要把dat_buf数组的地址赋值给xxx 吗,char *xxx; xxx = dat_buf; 这样就可以了
回复 支持 反对

使用道具 举报

5#
 楼主| vleboy 发表于 2014-11-27 15:26:42 | 只看该作者
chenwenbin 发表于 2014-11-27 14:37
你是要把dat_buf数组的地址赋值给xxx 吗,char *xxx; xxx = dat_buf; 这样就可以了

不是,我需要的是值。
回复 支持 反对

使用道具 举报

6#
David 发表于 2014-11-27 17:13:30 | 只看该作者
應該直接寫xxx = (uint32_t)*dat_buf,如果是寫xxx = *(volatile uint32_t*)dat_buf,會有產生hardfault的問題或者抓錯值的問題。
回复 支持 反对

使用道具 举报

7#
 楼主| vleboy 发表于 2014-11-27 17:26:18 | 只看该作者
David 发表于 2014-11-27 17:13
應該直接寫xxx = (uint32_t)*dat_buf,如果是寫xxx = *(volatile uint32_t*)dat_buf,會有產生hardfault的 ...

但是这样的话,只是把数组的第一个值转换成uint32的,并不是把数组的前4个char型的值合并成一个uint32的啊。
回复 支持 反对

使用道具 举报

8#
eeyrw 发表于 2014-12-17 11:03:32 | 只看该作者
这样做在ARM上不安全,万一你的dat_buf是个奇数地址,然后就直接硬fault了。
回复 支持 反对

使用道具 举报

9#
协霖Peter 发表于 2014-12-17 11:55:12 | 只看该作者
你是不是dat_buf没有对齐呀 强制转换成uint32_t指针需要优化,而你用了volatile修饰叫优化器绕过!
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU