C语言的字节型指针转换为字型指针导致死机

2019-07-21 04:45发布

本帖最后由 ZDawn 于 2019-3-4 15:48 编辑

测试代码如下:
uint8_t a[8] = {0};
int main(void)
{
    uint32_t temp;
    uint32_t *p = (uint32_t *)&a[0];


    temp = *p;    //运行此句会硬件跑飞
    while(1);
}


这种情况会是什么原因呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
ZDawn
1楼-- · 2019-07-21 22:47
323232 发表于 2019-3-4 15:33
uint32_t *p = (uint32_t *)&a[0];   改一改这句

我试过把这句改为
uint32_t *p = (uint32_t *)a;
也会死机
ZDawn
2楼-- · 2019-07-22 02:41
lvkanger 发表于 2019-3-4 15:37
我测试了,不跑飞啊,代码正常

我在STM32上测试也没问题,但是GD32就会死机。不知道是不是GD32的问题。。。还是编译器
ZDawn
3楼-- · 2019-07-22 03:58
 精彩回答 2  元偷偷看……
asdbhk
4楼-- · 2019-07-22 07:59
查一下字节对其的相关资料就好了
edmund1234
5楼-- · 2019-07-22 09:54
如果说字节数组是需要你类型转换, 就应该在定义数组前加#pragma pack (4)对齐
ZDawn
6楼-- · 2019-07-22 11:46
edmund1234 发表于 2019-3-5 11:52
如果说字节数组是需要你类型转换, 就应该在定义数组前加#pragma pack (4)对齐

是GD32的问题,在ST上使用字类型指针指向一个 不是4倍数的地址时候(比如0x07),MCU是会分两次存取完成的。在GD32上这么用就会死机

一周热门 更多>