环境:
keil版本为5.38,版本务必高于5.30
STM32F4的pack包版本要高于2.9
软件包下载所在:https://zhuanlan.zhihu.com/p/262507061
一、更改Keil中编译器
更改后编译,会报很多错,先不管。
二、更改头文件依赖
观察报错会有条报错为:error: unknown register name vfpcc in asm,这是CMSIS库的版本过低,导致AC6不兼容,办理方法是升级CMSIS库,链接里面有下载包,肯定要确保CMSIS库在5.0以上。
假如你Keil的CMSIS版本是5.0以上的还是存在报错,阐明你工程里面的文件是老版本的,就不消升级了,按照下面步骤继续。
1. 删除工程CORE里面的.h文件
把这四个.h文件都删除
2.把Keil安装路径中的.h新文件复制到工程中的core文件夹中
3. 假如你工程用到了FreeRTOS,还需要用FreeRTOS源码中GCC的文件代替你工程中RVDS的文件。
三、修改部分语法
新的AC6中部分语法有更新,完成上述步骤后还可能报错,根据报错位置修改为AC6支持的语法格式就可以了。
错误有 pragma import(__use_no_semihosting) 、__asm void WFI_SET(void)、__FILE 等
print重定向修改为如下,这种格式能同时兼容AC5和AC6编译器,此中__CC_ARM是AC5编译器界说的标识,GNUC 和__clang__是AC6界说的标识,由此判断编译器版本。
- #if 1
- #ifdef __CC_ARM
- #pragma import(__use_no_semihosting)
- struct __FILE
- {
- int handle;
- };
- #elif defined ( __GNUC__ ) || defined (__clang__)
- __asm (".global __use_no_semihosting\n\t");
- #endif
- FILE __stdout;
- //定义_sys_exit()以避免使用半主机模式
- void _sys_exit(int x)
- {
- x = x;
- }
- //重定义fputc函数
- int fputc(int ch, FILE *f)
- {
- while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
- USART1->DR = (u8) ch;
- return ch;
- }
- #endif
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |