从AC6重返AC5

前几天重装电脑系统,顺便把所有软件都更新了,MDK5.37版不支持AC5,自然就想把代码更新到AC6,没想到遇到各种坑,折腾了几天,最终没有爬过去,只好退回到AC5,体会如下:

一,AC6的优点(网上都有,我也是看见这些才想升级的)

1、代码小,AC6选Oz和LTO时152k,AC5选O3为172k
2、支持新C++17标准,是发展方向

二,AC6的缺点,网上没人写,本人实测结果

1、编译慢,与网上说的相反,不选Browse Infomation时,AC5是12秒,AC6是44秒,慢了4倍。
2、优化以后有BUG,代码如下:

		nBatRecharge		= 85;				// 充电电量,高于此值不自动充电
		nBatYellow			= 30;				// 黄色报警电量
		nBatRed					= 20;				// 红色报警电量
		nBatStop				= 10;				// 停止电量

编译器把上面4条字节型赋值语句合并成了一条32位赋值语句,但是没有考虑对齐的问题,偏移量0x4A不在4字节对齐处,触发HardFault_Handler中断。想起用MPU_Set_Protection解决这个问题,但是在备份内存中使用这个函数不成功,有时32位不能写,有时8位不能写。后来通过调整变量的位置解决这个问题。

3、case USART3: 不能用,提示USART3是变量,(AC5中没有问题),只好改用if else降低效率
4、上面两项改无以后还有未知的问题,只好放弃了,改回AC5。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值