你还在为HAL库超长的编译时间而苦恼吗?赶紧升级使用MDK的AC6编译器吧!
STM32 MDK AC6
fighter-12315
发布时间: 2019-04-10
阅读: 453

    自从接触到stm32HAL库之后就被HAL库超慢长的编译时间折磨的不要不要的~~~

    现在ST也是主推HAL库,标准库不再更新了,F7,、H7也只有HAL库,以后使用HAL库必然是主流,但是HAL库超长的编译时间实在是太磨人了,将许多“新手”“老手”纷纷劝退,有人建议过我更换到IAR,但是MDK用惯了更换IAR用起来不舒服,于是我选择使用MDKV6编译器。

终于在今天解决了成功升级V6编译器后无法跳转的问题,从今以后就可以愉快的使用HAL库加V6编译器了。现在将MDK编译器V5升级到V6的心得体会分享给大家。

    准备工作:官方文档Migrate ARM Compiler 5 to ARM Compiler 6.pdfMDK官网或者本帖)、官方固件库(ST官网)、MDK55.23以上就有,下限到哪没有我也不清楚,大家可以在options->target选项卡的arm compiler里面有没有V6编译器,没有的话版本更新一下就行了)、一款开发板用来验证、USBTTL用来验证串口。

 

    具体步骤:

    可以使用现成的工程修改(注意备份):

    1、文件更换:将你的CORE文件夹下的cmsis_armcc.h替换为cmsis_armcc_V6.h(路径:STM32Cube_FW_F1_V1.6.0\Drivers\CMSIS\Include,其他固件库路径类似)

    2、如果你使用了正点原子的SYSTEM文件夹,则需要修改sys.cuart.c

    sys.cAC5AC6的内联汇编格式不同需要修改为以下形式

图片1.png

    也可以直接删除,一般我们用不到这些汇编,参考官方文档

图片2.png

    uart.c需要注释以下代码或者直接删掉。

#pragma import(__use_no_semihosting)             

//标准库需要的支持函数                 

struct __FILE

{

int handle;

};

    注意不要注释掉了FILE __stdout; 否则串口无法映射到printf

    如果你想新建个AC6的工程只需要在复制CORE文件夹里的文件时将cmsis_armcc.h替换为cmsis_armcc_V6.h即可。

    Options选项卡的修改:

    Target选项卡:

图片3.png

    建议选择第二项,虽然第四项也是一样的,但是如果你以后MDK版本升级了这个选项还是需要再次修改,不然会报错!

    C/C++

 图片4.png

    Link Time Optimization链接优化,官方文档建议勾选,warnings选择AC5-like warnings没什么警告选ALL warnings警告会相当多

    关于Optimization选项选择:

图片5.png

    新手建议选择不优化即-O0,优化时速度与代码大小是对立的,即速度快代码大,代码小速度慢,O1O3是优化速度,Oz是纯粹优化代码大小,Os则是平衡优化,二者兼顾一点。

 

    最后,强调一下,你的工程路径里面最好不要有中文,不然无法正确生成browse信息,就是说代码无法跳转,go to defF12)没有反应。如果你按照如上方式仍然编译后有error,两种方法:

    1、按照下面的AC5AC6不兼容的指令自行修改

图片6.png
    2、将固件库更新至最新版(官方已经做好了)


最后,相关工程压缩包和文档:https://gitee.com/xwl_fighter/stm32ac6_template/tree/master


原创作品,未经权利人授权禁止转载。详情见转载须知 举报文章

展开查看更多
点赞 (0)
打赏
当前打赏1人    
fighter-12315
相关文章推荐
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回

我要举报该内容理由

×
请输入您举报的理由(50字以内)