搜索
bottom↓
回复: 1

gcc编译后出现与CMSIS相关的错误

[复制链接]

出0入0汤圆

发表于 2012-4-8 23:20:13 | 显示全部楼层 |阅读模式
本帖最后由 yiminglei 于 2012-4-8 23:22 编辑

本人刚接触GCC编译ARM,不知为何会出现以下错误,请各位指点一下,谢谢。

电脑操作系统:win7
STM固件库:STM32F10x_StdPeriph_Lib_V3.5.0
GCC工具链:arm-2011.09-69-arm-none-eabi
代码:ChaN's FAT-Module with STM32 SPI(http://www.siwawi.arubi.uni-kl.d ... .html#chanfat_stm32

编译后出现以下报错:
......
arm-none-eabi-gcc -c -mthumb -ggdb -Os -mcpu=cortex-m3 -mthumb-interwork  -DSTM3
2F10X_MD -DHSE_VALUE=8000000UL -DSYSCLK_FREQ_72MHz=72000000 -DUSE_STDPERIPH_DRIV
ER -DUSE_EK_STM32F -DSTM32_SD_USE_DMA -DSTARTUP_DELAY -DMOD_MTHOMAS_STMLIB -DUSE
_FULL_ASSERT -DVECT_TAB_FLASH -DFLASH_RUN -DSTM32F10x_128k_20k -DEK_STM32F -I./L
ibraries/STM32F10x_StdPeriph_Driver/inc -I./Libraries/CMSIS/CM3/DeviceSupport/ST
/STM32F10x -I./Libraries/CMSIS/CM3/CoreSupport -I./Libraries/fat_sd -I./Librarie
s/minIni -I./Libraries/EEPROMEmulation_AN/include -I. -ffunction-sections -fdata
-sections -Wall -Wextra -pedantic -Wimplicit -Wcast-align -Wpointer-arith -Wredu
ndant-decls -Wshadow -Wcast-qual -Wcast-align -Wa,-adhlns=FLASH_RUN/core_cm3.lst
-MMD -MP -MF FLASH_RUN/dep/core_cm3.o.d -Wnested-externs  -std=gnu99 Libraries/
CMSIS/CM3/CoreSupport/core_cm3.c -o FLASH_RUN/core_cm3.o
C:\Users\YIMING~1\AppData\Local\Temp\ccYkUFgg.s: Assembler messages:
C:\Users\YIMING~1\AppData\Local\Temp\ccYkUFgg.s:512: Error: registers may not be
the same -- `strexb r0,r0,[r1]'
C:\Users\YIMING~1\AppData\Local\Temp\ccYkUFgg.s:537: Error: registers may not be
the same -- `strexh r0,r0,[r1]'
make: *** [FLASH_RUN/core_cm3.o] Error 1


如果优化使用OPT = 0 则可以正常编译。

谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。

出0入0汤圆

 楼主| 发表于 2012-4-9 23:50:43 | 显示全部楼层
本帖最后由 yiminglei 于 2012-4-9 23:59 编辑

google后,发现有人处理了:

修改STM32的固件库V3.5的core_cm3.c文件:
uint32_t __STREXB(uint8_t value, uint8_t *addr)
{
   uint32_t result=0;

   //__ASM volatile ("strexb %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) );//yiming del 2012.04.09
   __ASM volatile ("strexb %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );//yiming add 2012.04.09
   return(result);
}

uint32_t __STREXH(uint16_t value, uint16_t *addr)
{
   uint32_t result=0;

   //__ASM volatile ("strexh %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) );//yiming del 2012.04.09
   __ASM volatile ("strexh %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );//yiming add 2012.04.09
   return(result);
}

需要注意,是打开 __GNUC__ 预编译的那个。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-9-27 06:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表