Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
内存对齐_align
内存对齐_align
stm32h7 非对齐访问出现HardFault
发布于 2021-12-16 15:44:42 浏览:1444
订阅该版
我程序定义一个结构体,禁止编译器自动对齐,但是读非对齐成员变量就HardFault, 我看M4就支持非对齐访问,这个程序哪里有问题呢? 补充一下, taurus->rx_buf 这个指针动态分配地址是sdram上的一块内存 ```c typedef struct { uint8_t head1; uint8_t head2; uint16_t len; uint32_t frame_id; uint8_t cmd; uint32_t total; uint16_t pack_size; uint8_t checksum; }__attribute__((packed)) SpiMsg; SpiMsg *msg = (SpiMsg *)taurus->rx_buf; msg->head1 = TAURUS_HEAD1; msg->head2 = TAURUS_HEAD2; msg->pack_size = 2048; msg->total = 131072; msg->frame_id = 1; msg->len = 14; msg->checksum = 0x19; log_i("head1=%x", msg->head1); log_i("cmd=%x", msg->cmd); log_i("frame_id", msg->frame_id); log_i("total=%x", msg->total); //<---- **此处出现hardFault** log_i("pack_size=%d", msg->pack_size); ```
查看更多
2
个回答
默认排序
按发布时间排序
aozima
2021-12-16
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
M4确实支持,但是sdram所在地址默认为**设备内存类型**,所以SDRAM中不支持,SRAM默认是可以的。 你打开MPU,并把SDRAM配置为**普通内存类型**后应该可以支持非对齐访问时内部自动转换。 参考链接: - http://www.keil.com/appnotes/files/apnt209.pdf - https://developer.arm.com/documentation/ka002886/latest
李肯陪你玩赚嵌入式
认证专家
2021-12-17
2022年度和2023年度RT-Thread社区优秀开源布道师,COC深圳城市开发者社区主理人,专注于嵌入式物联网的架构设计
如你的结构体定义: ```c typedef struct { uint8_t head1; uint8_t head2; uint16_t len; uint32_t frame_id; uint8_t cmd; uint32_t total; uint16_t pack_size; uint8_t checksum; }__attribute__((packed)) SpiMsg; ``` 如果不对齐的情况下,uint32_t total是一个非对齐的地址; 如果它是一个uint8_t的变量,没有问题,但是如果是uint32_t的就会出问题。 你可以调整下结构体变量的顺序,试试看: ```c typedef struct { uint32_t frame_id; //凑满4字节 uint32_t total; //凑满4字节 uint16_t len; uint16_t pack_size; //上面凑满4字节 uint8_t head1; uint8_t head2; uint8_t cmd; uint8_t checksum; //上面凑满4字节 }__attribute__((packed)) SpiMsg; ``` 我想表达的观点是,可以`尝试调整结构体成员变量的位置,避开不对齐的问题`。
撰写答案
登录
注册新账号
关注者
0
被浏览
1.4k
关于作者
enzo26
这家伙很懒,什么也没写!
提问
3
回答
0
被采纳
0
关注TA
发私信
相关问题
1
studio 字节对齐问题求解
2
ALIGN(RT_ALIGN_SIZE)问题
3
线程中对double赋值会引起 UNALIGNED ?
4
SCB_CFSR_UFSR:0x100 UNALIGNED问题
5
程序75行一赋值就挂掉,不知什么原因
6
字节对齐 ALIGN(RT_ALIGN_SIZE)的用法
7
函数地址指针赋值问题
8
给float指针赋值引发 UNALIGNED 错误,请教原因与优化手段
9
AC6优化等级-OZ后,触发错误中断,错误原因:企图执行非对齐访问,如何解决?
10
[星火一号] 代码模板, 手动写启动代码, 开机后 snprintf 不能处理 %llu 了, 是有什么配置上的冲突吗?
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
国产MCU移植系列教程汇总,欢迎查看!
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
【RA8D1-Vision Board】基于RT-Thread的UART实践
2
【RA8D1-Vision Board】基于RT-Thread的usb设备msc驱动测试
3
【RA8D1-Vision Board】基于RT-Thread的usb设备cdc驱动测试
4
NXP MCXN947测评:ETH设备(二)提交了关于ETH设备的PR
5
【RA8D1-Vision Board】 RA8D1 Vision Board上的USB实践
热门标签
RT-Thread Studio
串口
LWIP
Env
SPI
Bootloader
AT
ART-Pi
Hardfault
CAN总线
FinSH
USB
文件系统
DMA
RT-Thread
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
ota在线升级
WIZnet_W5500
I2C_IIC
UART
flash
cubemx
packages_软件包
freemodbus
潘多拉开发板_Pandora
PWM
定时器
ADC
BSP
中断
编译报错
socket
keil_MDK
GD32
MicroPython
msh
flashDB
Debug
ulog
SFUD
SDIO总线
rt_mq_消息队列_msg_queue
本月问答贡献
用户名由3_15位
23
个答案
3
次被采纳
踩姑娘的小蘑菇
16
个答案
3
次被采纳
xiaorui
7
个答案
3
次被采纳
sakumisu
5
个答案
3
次被采纳
JonasWen
5
个答案
2
次被采纳
本月文章贡献
比特饼干
4
篇文章
15
次点赞
ZVML_9668
3
篇文章
3
次点赞
Z_Y
2
篇文章
5
次点赞
xusiwei1236
2
篇文章
3
次点赞
yinxiangxv
2
篇文章
3
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部