国外比较有名的设计工作室网站,东莞已出现病例,海外全球购官网,重庆市建设工程信息网络环境#xff1a;
keil版本为5.38#xff0c;版本务必高于5.30 STM32F4的pack包版本要高于2.9 软件包下载地址#xff1a;https://zhuanlan.zhihu.com/p/262507061
一、更改Keil中编译器 更改后编译#xff0c;会报很多错#xff0c;先不管。
二、更改头文件依赖
观察…环境
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);
#endifFILE __stdout;
//定义_sys_exit()以避免使用半主机模式
void _sys_exit(int x)
{ x x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{ while((USART1-SR0X40)0);//循环发送,直到发送完毕 USART1-DR (u8) ch; return ch;
}#endif