【Open】2015.08.03-连接脚本配置错误导致“不精确的数据访问违例”
2015-08-03 02:05
344 查看
【问题现象】
MUTEX测试用例中发生“不精确的数据访问违例”
testmutex.c 文件内定义在 .UserRWdata 段的变量 g_lpWakeupTaskName 连接后地址为 0x0800bd88。
【问题原因】
0x0800bd88 为片上FLASH地址,查看stm32-soft.map文件发现 g_lpWakeupTaskName 连接后被放入data group,由于STM32官方固件库中的数组/变量(不涉及改变):AHBPrescTable/SystemCoreClock/APBAHBPrescTable/ADCPrescTable等不需要执行写操作的变量被放入.data,可能和连接为lib文件有关,为节省
RAM空间,在stm32-soft.sct配置脚本中.data 被放入片上FLASH。
【解决办法】
将testmutex.c加入到stm32-soft.sct脚本中
解决 stm32官方固件库声明的 __I 变量被放入.data而不是.constdata的问题
stm32官方固件库对__I的声明:
MUTEX测试用例中发生“不精确的数据访问违例”
testmutex.c 文件内定义在 .UserRWdata 段的变量 g_lpWakeupTaskName 连接后地址为 0x0800bd88。
【问题原因】
0x0800bd88 为片上FLASH地址,查看stm32-soft.map文件发现 g_lpWakeupTaskName 连接后被放入data group,由于STM32官方固件库中的数组/变量(不涉及改变):AHBPrescTable/SystemCoreClock/APBAHBPrescTable/ADCPrescTable等不需要执行写操作的变量被放入.data,可能和连接为lib文件有关,为节省
RAM空间,在stm32-soft.sct配置脚本中.data 被放入片上FLASH。
【解决办法】
将testmutex.c加入到stm32-soft.sct脚本中
USER_RAM 0x20000000 0x00000200 { ; RW data testtask.o (.UserRWdata, +RW +ZI) testmutex.o (.UserRWdata, +RW +ZI) caobject.o (.UserRWdata, +RW +ZI) }【遗留问题】
解决 stm32官方固件库声明的 __I 变量被放入.data而不是.constdata的问题
stm32官方固件库对__I的声明:
<pre name="code" class="plain">#ifdef __cplusplus #define __I volatile /*!< Defines 'read only' permissions */ #else #define __I volatile const /*!< Defines 'read only' permissions */ #endif
相关文章推荐
- Keil STM32工程环境搭建
- stm32之RTC
- STM32串口操作相关事项
- STM32 SPI工作在主模式时用DMA方式接收数据
- STM32 配置定时器让引脚输出PWM波形
- [嵌入式裸机课程]Cortex-M3开发实训班
- stm32的1602操作显示
- STM32 UART DMA实现未知数据长度接收(转自amoBBs)
- STM32F429 LTDC学习笔记1
- stm32学习笔记---入门环境搭建及开发板的选用
- stm32中断服务函数的机制
- pc寄存器与可寻址空间
- 关于STM32 库函数3.5版的各种坑
- STM32 Printf函数实现方法 (转载)
- STM32 IAP
- 红龙103开发板CAN IAP
- STM32开发板点灯
- [学习笔记]使用GNU Toolchain在STM32上跑起一个最小OS
- STM32 入门教程 系统时钟 SysTick