**已关闭。**此问题不符合Stack Overflow guidelines。它目前不接受回答。
要求代码的问题必须证明对要解决的问题有最低限度的理解。包括尝试的解决方案,为什么它们不起作用,以及expected
的结果。标签:Stack Overflow question checklist
9年前关闭。
Improve this question的
我正在尝试为Cortex M3构建一个简单的项目。我遇到的问题是编译器包含了错误的memset和其他mem* 函数库(memcpy,memcmp)。这导致每次执行接近列表文件中的memset(arr, 0x55, 10);
时都会出现硬故障,它被写成blx <memset>
。我使用的是arm-none-eabi-gcc编译器。我没有使用arm-none-eabi-ld进行链接,而是使用arm-none-eabi-gcc(4.8.2)。
对于gcc编译器,我使用这些标志:-mthumb -mcpu=cortex-m3 -msoft-float -Os -gdwarf-2 -g3 -Wall -Wextra -Wimplicit-function-declaration -Wredundant-decls -Wmissing-prototypes -Wstrict-prototypes -Wundef -Wshadow -fno-common -ffunction-sections -fdata-sections
个
对于链接器脚本,我使用这些标志:-L$(TOOLCHAIN_DIR) -L$(LIBGCC) --static -Wl,--start-group -lc -lgcc -lnosys -Wl,--end-group -nostartfiles -Wl,--gc-sections -Wl,--allow-multiple-definition -mthumb -mcpu=cortex-m3 -msoft-float -Wl,--print-gc-sections -T$(LINKER_SCRIPT)
其中$(LINKER_SCRIPT)是我自己的链接器脚本$(TOOLCHAIN_DIR)-libc.a、libnosys.a库的路径$(LIBGCC)-libgcc.a库的路径
arm-none-eabi-gcc版本为4.8.2
所以我的问题是哪里可能有问题?为什么string.h中的memset和其他函数根本不起作用?你能告诉我我错过了什么吗
**特殊部分只为居住:*我不能提供你这个代码,因为我没有那个工具链了.你看,当你问我要汇编器的时候,我已经重新编译了一个工具链,并且避免了那个错误。一个新的工具链产生了非常不同的asm代码,这确实有效。你想让我提供给你已经不存在的东西。很简单。最后一件事,我抓住是blx指令。此外,还有很多主题,人们抱怨mem 函数。在这些主题中,人们通常会忘记向链接器添加体系结构标志
相信我,我已经看了这个代码很长时间了,我在网络上看到了很多例子。基本上,它看起来像:08004c10 blx <memset> /*here was an error*/
现在看起来像!!!08004a14 BL <memset>
!!!而且它的工作没有任何例外和硬故障。因此,重新编译工具链是一个解决方案。在这种情况下,你是非常错误的要求一个代码,不存在了,并试图说,我不明白的问题。
特殊部分#fordwelchonly结束
1条答案
按热度按时间vlurs2pr1#
这不算是个答案但我还是得重建工具链所以,现在一切看起来就像它应该是。在重新编译工具链之前,导致硬故障的行看起来像:
字符串
重新编译工具链后,这行代码是:
型
显然,工具链的配置和构建方式是错误的。
最接近我刚才做的事情是这篇文章:http://www.bengreen.eu/fancyhtml/techiestuff/createcrosscompiletoolchainforlpcmbed.html
如果有人有类似的问题,请查看我上面发布的链接。
补充说:看看马丁对这个主题的评论。Martin关于链接库的观点是正确的。
补充:我在代码中看不到blx标签的原因很简单- Cortex M3没有arm状态。”伊戈尔·斯科钦斯基(Igor Skochinsky)指出。Cortex M3仅在thumb和debug状态下工作+实现thumb 2指令集。此外,armv7 m手册说,它只在拇指状态下工作。也就是说,我们有一个原因,为什么它没有工作。感谢伊戈尔和马丁的帮助。