首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:偏移量超出范围,在CoIDE中

错误:偏移量超出范围,在CoIDE中
EN

Stack Overflow用户
提问于 2013-04-28 15:39:03
回答 2查看 3K关注 0票数 0

我正在尝试将软件开发为STM32F100的CooCox CoIDE。

在添加CooCox实时操作系统(CoOS)后进行编译时,我收到一条错误消息:

代码语言:javascript
复制
   [cc] Starting link
   [cc] arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -g -nostartfiles -flto -Wl,-Map=OS_Test.map -O0 -Wl,--gc-sections -Wl,--entry=main -LC:\CooCox\CoIDE\configuration\ProgramData\OS_Test -Wl,-TC:\CooCox\CoIDE\configuration\ProgramData\OS_Test/arm-gcc-link.ld -g -o OS_Test.elf ..\obj\kernelHeap.o ..\obj\core.o ..\obj\startup_stm32f10x_md_vl.o ..\obj\core_cm3.o ..\obj\timer.o ..\obj\utility.o ..\obj\system_stm32f10x.o ..\obj\task.o ..\obj\serviceReq.o ..\obj\main.o ..\obj\mbox.o ..\obj\mm.o ..\obj\time.o ..\obj\event.o ..\obj\syscalls.o ..\obj\port.o ..\obj\queue.o ..\obj\mutex.o ..\obj\flag.o ..\obj\arch.o ..\obj\sem.o ..\obj\hook.o
   [cc] C:\Users\Jonas\AppData\Local\Temp\cccpkRF6.s: Assembler messages:
   [cc] C:\Users\Jonas\AppData\Local\Temp\cccpkRF6.s:240: Error: offset out of range
   [cc] C:\Users\Jonas\AppData\Local\Temp\cccpkRF6.s:241: Error: offset out of range

我知道这不是太多信息,但我以前没有见过这个错误,所以我完全是空白的,请帮助:)

编辑:哦,我发现如果我把优化从-O0改为-O1,错误会变成:

代码语言:javascript
复制
   [cc] ccKXT9LB.s:1163: Error: registers may not be the same -- `strexb r0,r0,[r1]'
   [cc] ccKXT9LB.s:1188: Error: registers may not be the same -- `strexh r0,r0,[r1]'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-30 23:49:54

找到了!

可能有比我更聪明的人可以解释它,但不管怎样,我通过取消选中链接器配置下的“启用LTO”框修复了这个问题。

右键单击project ->链接选项卡->取消选中"Enable LTO“。完成..。

我希望这会对其他人有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2013-09-09 06:04:25

哦,我发现如果将优化从-O0更改为-O1,错误将变成: cc ccKXT9LB.s:1163: Error:寄存器可能不同-- strexb r0,r0,[r1]' [cc] ccKXT9LB.s:1188: Error: registers may not be the same --strexh r0,r0,r1‘

转到firmware的cmsis目录,打开core_cm3.c并更改以下函数:

uint32_t __STREXB(uint8_t value,uint8_t *addr)

代码语言:javascript
复制
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));
   return(result);
}

uint32_t __STREXH(uint16_t value,uint16_t *addr)

代码语言:javascript
复制
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));
   return(result);
}

有关解决方案的源代码,请参阅herehere

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16260732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档