执行完上一步的时候,你的 C/C++标签 就会变成 C/C++(AC6) ,然后修改红框中的选项:
很多RTOS都有一个或多个与汇编有关的源代码文件,所以,很多有RTOS的工程,编译后都会存在许多错误。
cubeMX的FreeRTOS也是如此,它生成的port.c、portmacro.h不支持GNU,内部有大量的内联汇编,需更换为GCC版本。
即:将工程目录中的 RVDS/ARM_CM4F 内的文件全部替换成GCC/ARM_CM4F里的文件。
然而这有一个问题,如果只是替换掉工程里的文件,下一次用cube生成工程的时候就会覆盖掉我们替换的文件,我们又得重新替换,搞得很沙雕,这该怎么办呢?
哈哈,我们都知道cube生成的工程里的文件都是从一个地方拷过来的(固件库),所以我们虽然不知道如何修改cube选择哪一个文件,但是可以修改cube选择的那个文件呀!
直接把固件库里的 RVDS/ARM_CM4F文件夹 替换成 GCC/ARM_CM4F 就可以了,固件库里两个文件夹都有,他们放在一起的
欧克,那么如何替换固件库的文件呢?
首先找到固件库,下图红框中路径的就是cube的固件库
然后,找到固件库里RVDS/ARM_CM4F文件夹,怎么找呢,只要根据你自己的工程里 RVDS/ARM_CM4F 路径找就可以了。固件库跟工程的文件结构是一样的,只是多了些东西
RVDS/ARM_CM4F在你自己工程里的目录:
RVDS/ARM_CM4F在固件库里的目录:
GCC/ARM_CM4F在固件库里的目录:
最后,只要把固件库里GCC/ARM_CM4F的两个文件复制到RVDS/ARM_CM4F里就好了
再用cube重新生成一下工程,你工程里RVDS/ARM_CM4F文件夹下的文件就被替换成GCC/ARM_CM4F里面的了
这个可以先不急着改,因为这个只会给警告,不会报错,可以先把error弄完了,再回头改这个。
不兼容的指令也没多少,基本都在图里了
例如:
//原版本:
typedef __packed struct
{
int16_t a;
fp32 b;
} rx_buff;
//根据上表把__packed 修改为 attribute((packed)) :
typedef struct attribute((packed))
{
int16_t a;
fp32 b;
} rx_buff;
我也不清楚为啥,我没删的时候一直有几百个error,删掉__CC_ARM 就好了,也上板子试了一下,没有问题。