我程序定义一个结构体,禁止编译器自动对齐,但是读非对齐成员变量就HardFault,
我看M4就支持非对齐访问,这个程序哪里有问题呢?
补充一下, taurus->rx_buf 这个指针动态分配地址是sdram上的一块内存
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);
谢谢回复,
这个是art-pi 目前配置
我要按这个配置吗,下面这个配置是关闭cache功能了吗?我想要cache提速呀
试了下,和原来配置成write through 速度一样
重点差异是
MPU_TEX_LEVEL0
和MPU_TEX_LEVEL1
的区别。你需要cache,把IsCacheable参数保持即可。
@aozima 我的理解, MPU_TEX_LEVEL0和MPU_TEX_LEVEL1就是 write alloc 还是no write alloc
下面配置
MPU_TEX_LEVEL1
,MPU_ACCESS_CACHEABLE
会HardFault
, 不能开cache,