使用了STM32H7B0 ,裸机跑LVGL。
多次发生非对齐。
以下是cmbacktree的输出:
2001ffec data: 00000000 ==================================== ===================Registers information ==================== R0 : 002c3f03 R1 : 00000001 R2 : 20005624 R3 : 00000001 R12: 002c40c0 LR : 08059359 PC : 080549ec PSR: 21000000 ============================================================== Usage fault is causedby indicates that an unaligned access fault has taken place Show more call stackinfo by run: addr2line -e \RC.axf -a -f 080549ec 08059358 0800120a
使用addr2line找到汇编调用终点是:0x080549ec
R1寄存器为数值1,cpu访问R1的数值,这里发生非对齐完全找不门路。
跟硬汉总结的非对齐案例,一一比对,都对不号。
怀疑是mpu配置问题,但这个问题位置,又跟这个好像没关系。莫不是跟汇编指令后面的#0x00有关?
各位坛友路过看到请提出宝贵意见~
附上MPU的配置。H7B0的ram是分块的,我这里没有分块,因为axi sram采用了 768000B做帧缓存,而 0x30000000又开了个巨大的heap给lvgl做malloc。
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER0;
MPU_InitStruct.BaseAddress = 0x24000000;
MPU_InitStruct.Size = MPU_REGION_SIZE_1MB;
MPU_InitStruct.SubRegionDisable = 0x0;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
/** Initializes and configures the Region and the memory to be protected
*/
MPU_InitStruct.Number = MPU_REGION_NUMBER2;
MPU_InitStruct.BaseAddress = 0x30000000;
MPU_InitStruct.Size = MPU_REGION_SIZE_128KB;
MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
|