Stm32 错误:寄存器';sp&x27;不适用于此目标上的全局寄存器变量
我正在玩一个STM32µC项目。我在Mac OSX系统上使用workbench和CubeMX。我的项目本身很好,一切都会相应地编译,并在设备上按预期运行 为了进一步学习,我想使用该框架实现单元测试。我已经设置好了一切,得到了我的测试目录和一个makefile来配置MakefileWorker变量 但是,在执行Makefile时,我不断得到错误:Stm32 错误:寄存器';sp&x27;不适用于此目标上的全局寄存器变量,stm32,cpputest,Stm32,Cpputest,我正在玩一个STM32µC项目。我在Mac OSX系统上使用workbench和CubeMX。我的项目本身很好,一切都会相应地编译,并在设备上按预期运行 为了进一步学习,我想使用该框架实现单元测试。我已经设置好了一切,得到了我的测试目录和一个makefile来配置MakefileWorker变量 但是,在执行Makefile时,我不断得到错误: error: register 'sp' unsuitable for global register variables on this tar
error:
register 'sp' unsuitable for global register variables on this target
此错误源于syscalls.c文件(由CubeMX生成的文件)。导致错误的行是:
register char * stack_ptr asm("sp");
在做了研究之后,似乎没有简单的解决方法。源代码由Cube生成,在使用sw4stm32工具链(使用mcu gcc编译器)编译时运行良好。
然而,CppUTest工具链使用的是clang,它无法处理全局寄存器变量(正如错误所说)
我的问题是:
在OSx系统上为sw4stm32项目设置CppUTest时,你们中有没有人有过相同的错误或更多的经验?有人知道如何解决这个问题吗
如果您需要我提供更多信息/代码片段,我很乐意与您分享
非常感谢大家!任何帮助都将不胜感激:-)
干杯,
托比你能坚持像asm(“mov sp,%0”:“=r”(stack_ptr))这样的东西吗每次使用stack_ptr(并从声明中删除“register”和“asm”)之前的代码>?这(真的)很难看,但可能有用。或者甚至有一个(Inlineable)GetStackPtr()包含此代码?我在编译CubeMX生成的代码时遇到了相同的错误。它在Atolic Studio上运行良好,但当我在Sourcetrail中使用它时,出现了错误。您是否可以粘贴类似于
asm(“mov sp,%0”:“=r”(stack_ptr))每次使用stack_ptr(并从声明中删除“register”和“asm”)之前的代码>?这(真的)很难看,但可能有用。或者甚至有一个(Inlineable)GetStackPtr()包含此代码?我在编译CubeMX生成的代码时遇到了相同的错误。它在Atolic Studio上运行良好,但当我在Sourcetrail中使用它时,会出现错误。