Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 皮质M3罐';t柄记忆集_C_Gcc_Makefile_Arm_Cortex M3 - Fatal编程技术网

C 皮质M3罐';t柄记忆集

C 皮质M3罐';t柄记忆集,c,gcc,makefile,arm,cortex-m3,C,Gcc,Makefile,Arm,Cortex M3,我正在尝试为Cortex M3构建一个简单的项目。我遇到的问题是,编译器为memset和其他mem*函数(memcpy、memcmp)包含了错误的库。每次执行接近memset(arr,0x55,10)时,都会导致硬故障 在列表文件中,它的编写方式类似于blx。 我正在使用arm none eabi gcc编译器。我不使用arm none eabi ld进行链接,而是使用arm none eabi gcc(4.8.2) 对于gcc编译器,我使用以下标志:-mthumb-mcpu=cortex-m3

我正在尝试为Cortex M3构建一个简单的项目。我遇到的问题是,编译器为memset和其他mem*函数(memcpy、memcmp)包含了错误的库。每次执行接近
memset(arr,0x55,10)时,都会导致硬故障
在列表文件中,它的编写方式类似于
blx
。 我正在使用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函数声明-Wredundant decls-Wmissing原型-Wstrict原型-Wundef-Wshadow-fno公共-fffunction节-fdata节

对于链接器脚本,我使用以下标志:
-L$(工具链目录)-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$(链接器脚本)
$(链接器脚本)是我自己的链接器脚本 $(工具链_DIR)-libc.a、libnosys.a库的路径 $(LIBGCC)-LIBGCC.a库的路径

arm none eabi gcc版本为4.8.2

所以,我的问题是:哪里可能出现问题?为什么字符串.h中的memset和其他函数根本不起作用?你能告诉我我错过了什么吗

仅适用于dwelch的特殊部分: 我不能给你提供这段代码,因为我已经没有那个工具链了。你看,当你向我要汇编程序时,我已经重新编译了一个工具链,并得到了关于这个错误的反馈。一个新的工具链会产生完全不同的asm代码,这是可行的。你想让我给你提供一个已经不存在的东西。这很容易。最后,我明白了blx指令。此外,还有很多话题,人们抱怨mem*功能。在这些主题中,人们通常会忘记向链接器添加架构标志

相信我,我已经研究这段代码很长时间了,我在网络上看到了很多例子。基本上,它看起来像:
08004c10 blx/*这里有一个错误*/
现在看起来像<代码>08004a14 BL
!!!它工作时没有任何异常和硬故障。因此,重新编译工具链是一个解决方案。在这种情况下,您要求一个不再存在的代码,并试图说我不理解一个问题,这是非常错误的


特别部分的结尾#fordwelchonly

这不完全是一个答案。。。但仍然如此。我不得不重新构建一个工具链。所以,现在一切看起来都和想象的一样。 在重新编译工具链之前,确实导致硬故障的管线如下所示:

08004c10     blx     <memset>
08004c10 blx
重新编译工具链后,这一行代码是:

08004a14      bl      <memset>
08004a14 bl
显然,工具链是以错误的方式配置和构建的

最接近我刚才所做的事情是这篇帖子:

如果有人有类似的问题,请查看我上面发布的链接

补充:看看马丁对这个话题的评论。马丁对链接库的看法是正确的


补充:我在代码中看不到blx标签的原因很简单——Cortex M3没有arm状态<斯特朗>伊戈尔·斯科金斯基指出了这一点。Cortex M3仅在thumb和debug状态下工作+实现thumb2指令集。此外,armv7m手册还指出,它只在拇指状态下工作。也就是说,我们有一个原因,为什么它不起作用。谢谢伊戈尔和马丁的帮助

嗯。。是否确实正在使用正确的库集进行链接?您为互通指定-mthumb,但调用blx始终会导致对thumb模式的更改。。。不是在Allsure发生了什么,但我打赌这是一些手臂/拇指/互通问题:(是的,我确定。我试过使用和不使用-mthumb和-mthumb交互。结果仍然是一样的。是的,我读过关于这个问题的文章,但目前似乎没有解决方案。这是一个gcc错误还是我有罪?请发布显示问题的反汇编。我发布了它;问题的原因是blx-line。请阅读Martin的公司mment和我下面的答案。你错了,Cortex-M3不能进入ARM状态。只有Cortex-R和Cortex-A系列支持ARM代码。这就是为什么你永远不能在M3代码中看到
BLX
指令的原因之一(
BLX reg
)。