在使用GHS编译FreeRTOS的时候,遇到了port.c文件编译错误,按照错误信息打开文件一看人麻了,全汇编。
错误提示的内容是”Only basic asm expressions are allowed for functions with attribute((naked))“,翻译成中文就是”attribute((naked))定义的函数只能使用基本汇编语法”,去查看了函数声明的地方,确实使用了naked定义。
好嘛,我上哪儿知道哪些才是汇编的基本语法(╯°□°)╯︵ ┻━┻。
多方搜索无果,最后在GHS的技术支持那里获取到了手册的关键信息,查询了手册里的语法,发现上图里面第449行里面同样用了“%0”这个通配符。
所以最终解决方案就是,查看了通配符对应的变量,其实是一个宏,它是由几个宏计算得来的。确认在代码里是一个固定值之后,直接把结果计算出来放在这里。
但需要注意是这里是一个坑,但凡与之相关的参数配置发生变化,这个值就得跟着变。特立此帖,以便后续踩坑的时候反思,同时也征集广大网友的智慧,看还有没有更好的方法避免这个坑。
03-31
3268

03-16