| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 关于keil ARM编译器bug --- Internal fault: 0xb3b91b -> 正文阅读 |
|
[嵌入式]关于keil ARM编译器bug --- Internal fault: 0xb3b91b |
本文禁止转载。 本文提供了几种不切换ARM编译器版本的情况下解决该问题的方法。 在编写程序时, 大概编写的即使这样一个程序,这个96个字节的变量定义在main函数内部,上面还定义了一些其他变量 编译的时候遇到错误: Build started: Project: ble_app_uart_pca10056_s140 这个错误具体的原因及解决方法如下: 这个是ARM官方的一个解决方案。但是官方的这个解决方案好像并不是能够解决问题。 本文提供了一种新的解决方式。 首先介绍一下这个问题产生的原因,这个问题主要是因为ARM编译器版本产生的 具体的,是这两个版本产生了问题。 升级到6.13版本理论上就可以解决该问题了。 但是,升级ARM编译器的版本是比较耗时的。 首先,要下载新的ARM版本,然后要做一系列的配置,让keil5 开发环境能够支持6.13的ARM编译器。 但是这个配置是耗时的,这个配置可以到网上去搜索对应的参考解决方案。 但是可能不一定能成功。(我具体的没试过,我觉得太浪费时间了,之前在另一款IDE中,是不得不升级ARM编译器的版本,我才升级的,配置过程比较繁琐) 为什么升级ARM编译器的版本不一定成功? This issue was solved in Arm Compiler version 6.13 which will be part of Keil MDK version 5.29.? 因为官方介绍的是keil版本是5.29 而我的版本是5.27 我想,这条路还是算了吧。万一升级不成功,还要先升级keil5 的版本。为了解决这么个ARM编译器的错误,不至于,不值得浪费这么多时间。 我当前的keil环境下,有这么几个ARM编译器的版本,都尝试了切换了一下,编译,继续报错。 ?所以感觉,这不应该是ARM6.11和6.12 存在的问题,应该是以前的版本都有类似的问题。 官方提供了几种解决方案: 尝试了一下,都不行,? 第一种方法,更改优化方案,优化方案从-O0 到-O3,都不行 第二种方法,勾选掉 One ELF Section per Function,不行。这个其实也是一种优化方案,意思就是对没有调用到的函数就直接优化掉,不要放到最终的ELF二进制文件中 以上两种方法,官方也都认为是不安全的。 第三种方法,修改Scatter 文件 可是我们也没有应用到Scatter文件,所以这种也不行 最后,提出我的几种解决方案。 (1)把这个96字节的数组变量放到全局变量中去定义,放在main函数之外,错误没有了 (2)把这个96字节的数组变量加上static 关键字,错误没有了。加上static关键字之后,不管是放在main函数里面还是main函数外面,错误都解决 (3)定义这个96字节的数组变量的时候,不要赋初值,然编译器给他赋初值。错误解决。 (4)给这96个字节的数组扩展为97个字节的数组,但是最后一个成员不要赋值。 ? 之所以提出这个第四点方案,是基于第三点优化方案的考虑。当时不想把这个数组放在全局变量中,或者加上static关键字。第三点就取消掉定义的时候赋初值。然编译器默认给这个数组赋初值(一般情况下,默认赋初值就是为0) 然后我想,是不是ARM编译器赋初值之后 ,这个bug就自动规避掉了,我就扩展数组,扩大一个字节,最后一个字节不赋初值,然后发现好像确实是如自己所预测的那样。 如果大家遇到这个问题,能定位出来是哪个变量导致这个问题,可以尝试使用我这种方式,让编译器默认赋初值,然后自己在别的地方给这个变量手动赋值(虽然这种方式不是我们想要的,我们的编程习惯中一般是定义的时候即赋初值) 如果大家不想这么解决,就按照官方的介绍,首先先升级keil的版本,然后再升级ARM的版本。 这两个升级版本不在本文介绍范围之内 ? ? ? ? ? ? |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 10:15:16- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |