由于keil 版权问题,很多人开始使用开源的vscode + gcc作为开发环境,今天遇到keil rt-thread 工程转成vscode工程编译后,报下面错误:

Error: thumb conditional instruction should be in IT block -- `vstmdbeq r1!,{d8-d15}' 

Error: thumb conditional instruction should be in IT block -- `moveq r4,#0x01'

Error: thumb conditional instruction should be in IT block -- `vldmiane r1!,{d8-d15}'

thumb conditional instruction should be in IT block -- `bicne lr,lr,#0x10'

在网上搜了一圈,发现其他人也遇到过:

移植RT-Thread编译报错thumb conditional instruction should be in IT block_error: thumb conditional instruction should be in -CSDN博客

RtThread添加context_gcc.S后的GCC编译问题_stm32f407 rtthread gcc-CSDN博客

context_gcc.s:110: Error: thumb conditional instruction should be in IT block `vstmdbeq r1!,{d8-d15}-CSDN博客

大致的意思是要支持cortex-M4的浮点功能,需要在汇编编译配置参数中加上支持 CPU浮点计算的编译,具体怎么加,如果是工程中有makefile文件的直接就在makefile文件的ASFLAGS 汇编参数变量中添加“-Wa,-mimplicit-it=thumb” 即可

ASFLAGS += -Wa,-mimplicit-it=thumb
CFLAGS += -Wa,-mimplicit-it=thumb

$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)
    $(AS) -c $(ASFLAGS) -Wa,-mimplicit-it=thumb $< -o $@

$(BUILD_DIR)/%.o: %.S Makefile | $(BUILD_DIR)
    $(AS) -c $(ASFLAGS) -Wa,-mimplicit-it=thumb $< -o $@

而我的工程是直接从keil转换过来的,没有找到makefile文件,这个参数怎么添加呢?如下图所示,选择vscode的explorer,点击eide.json配置脚本,

在打开的eide脚本文件中找到ASM_FLAGS变量,将 -Wa,-mimplicit-it=thumb 配置进去,再编译就OK了

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐