Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        6年前关闭。
                                                                                            
                
        
我正在尝试为Cortex M3建立一个简单的项目。我遇到的问题是,编译器为memset和其他mem * -functions(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特别节的结尾

最佳答案

这不是一个确切的答案...但是仍然。我不得不重新构建一个工具链。因此,现在一切看起来都像预期的那样。
在重新编译工具链之前,确实导致严重故障的那条线看起来像:

08004c10     blx     <memset>


重新编译工具链后,此行代码为:

08004a14      bl      <memset>


显然,工具链的配置和构建方式错误。

与我刚刚做的最接近的事情是这篇文章:http://www.bengreen.eu/fancyhtml/techiestuff/createcrosscompiletoolchainforlpcmbed.html

如果有人遇到类似问题,请检查我上面发布的链接。

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

补充:为什么在我的代码中看不到blx标签的原因很简单-Cortex M3没有手臂状态。伊戈尔·斯科钦斯基(Igor Skochinsky)指出了这一点。 Cortex M3仅在拇指和调试状态下工作+实现拇指2指令集。另外,armv7m手册说它仅在拇指状态下工作。也就是说,我们有一个原因,为什么它不起作用。谢谢Igor和Martin的帮助。

关于c - Cortex M3无法处理内存集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20587208/

10-09 01:36