Keil5compilerversion6对Core-创新互联

问题:使用Keil5编译器6编译代码会报错(core_cm3.c)

成都创新互联公司服务项目包括青阳网站建设、青阳网站制作、青阳网页制作以及青阳网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,青阳网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到青阳省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

最近由于突发原因,安装了最新的keil MDK-ARM 5.38a,发现新的MDK版本推出了编译器6(compiler version 6)且默认不带编译器5(compiler version 5),使用编译器6编译之前老的代码发现会报以下错误:

../core/src/core_cm3.c(445): error: non-ASM statement in naked function is not supported

uint32_t result=0;

^

../core/src/core_cm3.c(442): note: attribute is here

uint32_t __get_PSP(void) __attribute__( ( naked ) );

^

../core/src/core_cm3.c(465): error: parameter references not allowed in naked functions

"BX lr \n\t" : : "r" (topOfProcStack) );

^

../core/src/core_cm3.c(461): note: attribute is here

void __set_PSP(uint32_t topOfProcStack) __attribute__( ( naked ) );

^

../core/src/core_cm3.c(479): error: non-ASM statement in naked function is not supported

uint32_t result=0;

^

../core/src/core_cm3.c(476): note: attribute is here

uint32_t __get_MSP(void) __attribute__( ( naked ) );

^

../core/src/core_cm3.c(499): error: parameter references not allowed in naked functions

"BX lr \n\t" : : "r" (topOfMainStack) );

^

../core/src/core_cm3.c(495): note: attribute is here

void __set_MSP(uint32_t topOfMainStack) __attribute__( ( naked ) );

造成以上错误的原因主要是早前版本的core_cm3.c太老了(一般都是2009年出的)不支持版本6编译器,解决办法有两种:

解决方法一:安装版本5的编译器,继续用老的编译器编译。

方法主要看这两个大神的帖子:

https://blog.csdn.net/weixin_42587267/article/details/128115324

https://blog.csdn.net/qq_54995462/article/details/126533029

继续使用版本5编译器的好处是不用做任何更改即可继续使用,但弊端主要有两点:

  1. 版本5编译器官方已停止开发只提供维护,从趋势上来退出历史舞台只是时间问题了。

  1. 对比发现,版本6编译器的编译速度和效率对比5版本有了极大提升,编译速度肉眼可见的提高了。

综合以上,本文推荐使用版本6编译器,处理以上错误具体操作如下:

解决方法二:更新相关文件以支持版本6编译器

  1. 打开keil目录\keilUv5\ARM\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include

找到core_cm3.h并覆盖替换老的core_cm3.h,(如有必要)同时复制cmsis_armclang.h、cmsis_compiler.h、cmsis_version.h到core_cm3.h所在文件夹。

b.在工程中删除core_cm3.c

通过以上操作就可以顺利使用版本6编译器进行编译了。

另外:

如果之前有使用了c和汇编混合代码,在编译器5可以正常通过,但是更改编译器为V6.12后不识别__ASM关键字,并对汇编语法报错,如下:

__ASM void testwait()

{

bx lr

}

编译会报错:

主要是由于编译器6对于汇编和C的混合代码格式做了要求,按照以下方式修改汇编代码,即可编译通过:

void testwait()

{

__ASM("bx lr");

}

更多编译器版本6和版本5的差异可以看以下大神的帖子:

从Arm Compiler 5 迁移到 Arm Compiler 6

https://freertos.blog.csdn.net/article/details/109803651

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧

新闻标题:Keil5compilerversion6对Core-创新互联
本文链接:https://www.cdcxhl.com/article30/ceegpo.html

成都网站建设公司_创新互联,为您提供网页设计公司做网站网站设计外贸建站品牌网站制作微信公众号

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都定制网站网页设计