keil5.38升级编译器后裸函数问题

前言:
新工程,修改TAB选项,warning选项,c编译选项优化等级,添加文件,路径,编译宏等,且不能加入.i文件,会认为是镜像文件导致不能编译
小技巧:批量导出工程路径,命令ok,工程测试有点错误,工程目录级别要找对
git命令:find ./ -type d |sed ’s///\/g’
🉑keil中C99不支持函数隐式声明,所以消警告⚠的好习惯由此体现

正文问题解决:
keil工具编译器升级后,报错:
1、不支持non-ASM in naked function
2、must be in IT block
V5版本和V6版本的区别,V6手册中搜索支持naked,但实际之前针对gcc编译器的错误中断函数的写法不再适用,所以需要改写汇编指令
方案1:C与汇编混合编程
网上很多教程,不再赘述
方案2:查看指导手册Help>uVision Help
按照手册方式修改即可完美解决。
报错行汇编含义:先获取mcu使用的是MSP还是PSP?然后获取值。
报错:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更改后:
在这里插入图片描述
遗留问题:
非裸函数时有压栈操作,从堆栈提取数据时需改偏移x
_frame[x]
方法:
用跑飞的示例跑到此位置,调试观察mem堆栈里的值和SP寄存器,看看SP指针的地址往后偏移多少与跑飞的地址能对应上,反推出偏移。
另重点:linker>scf文件

后续:v6编译器支持裸函数,写法正确,报不支持non-ASM in naked function,是因为裸函数中带有C语言形式不支持,所以可以改写C语言部分为汇编语言即可,如果觉得麻烦,也可以把C语言部分的代码整体作为一个函数,用汇报语言的跳转指令BL function函数即可,改写后需验证是否可以正常执行到异常中断处理函数的while(1)!

  • 14
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值