请选择 进入手机版 | 继续访问电脑版
搜索
查看: 1437|回复: 4

[求助] STM32f0上为何uint32_t赋值会hardfault?

[复制链接]

该用户从未签到

1

主题

1

帖子

0

蝴蝶豆

新手上路

最后登录
2021-3-10
发表于 2021-3-4 14:45:56 | 显示全部楼层 |阅读模式
uint8_t nnn[]={0x12,0x34,0x56,0x78,0,0,0};
uint8_t* pbuf = nnn;
pbuf +=2;
uint8_t nData = *pbuf; // ok!
uint16_t nData = *((uint16_t*)pbuf); // ok!
uint32_t nData = *((uint32_t*)pbuf);// hardfault!

为何uint32_t赋值会hardfault?

回复

使用道具 举报

该用户从未签到

133

主题

4688

帖子

239

蝴蝶豆

版主

最后登录
2021-4-10
发表于 2021-3-4 15:44:14 | 显示全部楼层
把nnn改成8个长度是不是就正常了?目前还使用的是7个元素。32位对齐,至少得是4的倍数吧。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2017-12-6 11:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    49

    主题

    3724

    帖子

    429

    蝴蝶豆

    论坛元老

    最后登录
    2021-8-7
    发表于 2021-3-5 11:59:41 | 显示全部楼层
    你要后面以32位去操作,那么nnn[]数组定义时首地址需要是4的整数倍,请添加约束。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    246

    帖子

    172

    蝴蝶豆

    金牌会员

    最后登录
    2021-3-26
    发表于 2021-3-6 06:59:10 | 显示全部楼层
    第一, nnn的长度只有7, 把它改为8
    第二, pbuf +=2;, 这是没有4字节对齐, 把它改为pbuf +=4;
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    1306

    帖子

    929

    蝴蝶豆

    版主

    最后登录
    2021-3-31
    发表于 2021-3-22 11:21:59 | 显示全部楼层
    M0内核不支持非对齐访问,否则会出现这个问题。看到官方文件刚好有这个说明哦
    M0 address alignment.PNG
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

    GMT+8, 2024-3-29 08:50 , Processed in 0.183740 second(s), 37 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表