You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Keil µVision切换到Makefile后内置汇编编译报错如何解决

问题原因

你当前使用的是Keil MDK(ARMCC编译器)专属的内嵌汇编语法,而自研Makefile大概率调用的是arm-none-eabi-gcc这类GNU ARM工具链,二者内嵌汇编语法完全不兼容,既不是缺少头文件,也不是缺少编译选项。

两个报错的对应逻辑:

  • 第一个报错指向__asm void vPortSVCHandler( void ):GCC不识别ARMCC的__asm加函数定义的语法,会把__asm当成普通变量名,进而报函数定义格式错误。
  • 第二个报错指向mov r0, #0:由于GCC没有识别到这是内嵌汇编块,会把大括号内的内容当成C代码解析,自然不认识汇编语法里的立即数前缀#,报非法字符错误。

解决方案

  • 优先直接替换移植文件:FreeRTOS官方针对GNU工具链提供了对应架构的移植包,你直接找到和你所用芯片内核匹配的GCC版本port.c、portasm.S文件,替换当前Keil版本的port文件即可,不需要手动修改汇编语法。
  • 若需要手动适配语法:可以将该纯汇编函数迁移到单独的.S汇编文件中,改用GNU汇编器(GAS)语法编写,需要调整的点包括:
    • 函数声明前加.global vPortSVCHandler、.thumb_func伪指令
    • PRESERVE8对应替换为.preserve8伪指令
    • 其余汇编指令语法基本兼容,直接保留即可

内容的提问来源于stack exchange,提问作者GabrielT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:45:03