您的位置:首页 > 运维架构

【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脚本中

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



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  stm32 cortex-m3 fans-rt