牛卧堂MCU技术交流

标题: M051中不能直接使用指针赋值木? [打印本页]

作者: vleboy    时间: 2014-11-27 11:51
标题: M051中不能直接使用指针赋值木?
        volatile uint32_t xxx=0;
        xxx = *(volatile uint32_t*)dat_buf;
dat_buf 是一个char型的数组地址的函数形参 unsigned char *dat_buf
作者: vleboy    时间: 2014-11-27 11:52
在这里老报错。
作者: vleboy    时间: 2014-11-27 11:52
不对,不报错,仿真过不了。
作者: chenwenbin    时间: 2014-11-27 14:37
你是要把dat_buf数组的地址赋值给xxx 吗,char *xxx; xxx = dat_buf; 这样就可以了
作者: vleboy    时间: 2014-11-27 15:26
chenwenbin 发表于 2014-11-27 14:37
你是要把dat_buf数组的地址赋值给xxx 吗,char *xxx; xxx = dat_buf; 这样就可以了

不是,我需要的是值。
作者: David    时间: 2014-11-27 17:13
應該直接寫xxx = (uint32_t)*dat_buf,如果是寫xxx = *(volatile uint32_t*)dat_buf,會有產生hardfault的問題或者抓錯值的問題。
作者: vleboy    时间: 2014-11-27 17:26
David 发表于 2014-11-27 17:13
應該直接寫xxx = (uint32_t)*dat_buf,如果是寫xxx = *(volatile uint32_t*)dat_buf,會有產生hardfault的 ...

但是这样的话,只是把数组的第一个值转换成uint32的,并不是把数组的前4个char型的值合并成一个uint32的啊。
作者: eeyrw    时间: 2014-12-17 11:03
这样做在ARM上不安全,万一你的dat_buf是个奇数地址,然后就直接硬fault了。
作者: 协霖Peter    时间: 2014-12-17 11:55
你是不是dat_buf没有对齐呀 强制转换成uint32_t指针需要优化,而你用了volatile修饰叫优化器绕过!




欢迎光临 牛卧堂MCU技术交流 (http://www.nuvoton-mcu.com/) Powered by Discuz! X3.2