(笔记)KEIL经常碰到的错误(持续整理)

KEIL常碰到的错误

  • 一、ERROR报错
    • 1、Build时报错 Error: L6218E
    • 2、Build时报错 error 65
    • 3、Default Compiler Version 5
    • 4、core_cm3.h(1213): error: unknown type name 'inline'
  • 二、调试与仿真
    • 1、keil5软件仿真没有实时波形
    • 2、调试模式时,程序前没有灰块
    • 3、Peripherals显示空白
    • 4、示波器只有一个波峰
    • 5、示波器只有一条直线
  • 三、烧录
    • 1、程序正常运行无报错,烧录到板子上无反应
  • 未分类

一、ERROR报错

1、Build时报错 Error: L6218E

  1. 链接器设置不当
    在这里插入图片描述
    修改后如下:
    在这里插入图片描述

参考资料:
Error: L6218E: Undefined symbol ImageARM_LIB_STACKZILimit (referred from startup_armcm4.o)

  1. 未导入项目对应函数
    在这里插入图片描述
    显示未找到CPU_IntDis函数
    我们查阅资料,发现缺少cpu_a.asm文件
    在这里插入图片描述
    导入文件
    在这里插入图片描述
    编译,错误消失。
    在这里插入图片描述

参考资料:
uCOSIII启动过程分析笔记
keil 5 : Error: L6218E: Undefined symbol 问题解决方法小记
keil编译后报错Error:L6218E的解决方法
(已解决)STM32报错Error: L6218E: Undefined symbol assert_param (referred from misc.o).

2、Build时报错 error 65

参考资料:
keil仿真和使用逻辑分析仪调波形

3、Default Compiler Version 5

*** Target 'Fire_uCOS' uses ARM-Compiler 'Default Compiler Version 5' which is not available.

此错误是ARM编译器缺失导致的,解决办法是换成已安装的编译器
在这里插入图片描述

4、core_cm3.h(1213): error: unknown type name ‘inline’

错误是找不到 inline变量或函数,这个inline是在core_cm3.h里第1213行用到的
解决办法是把包含 inline的文件加入到工程里

inline可以是别的值,core_cm3.h也可以是别的文件
这些都是可以更改的

二、调试与仿真

1、keil5软件仿真没有实时波形

在view中点击 period windows update 即可
在这里插入图片描述

参考资料:
keil5软件仿真没有实时波形

2、调试模式时,程序前没有灰块

在这里插入图片描述

  1. 将优化等级选为-O0,但可能会加大最终代码大小
    在这里插入图片描述
  2. 然后重建工程
    在这里插入图片描述
  3. 进入调试界面,问题解决
    在这里插入图片描述

参考资料:
keil5软件仿真stm32设置 和 调试技巧

3、Peripherals显示空白

参考资料:
Peripherals显示空白?

4、示波器只有一个波峰

在这里插入图片描述
这个问题主要是编译器优化等级太低,导致堆栈冲突,OSTCBHighRdyPtr指针OSTCBCurPtr指针STMDB指令运行时被错误覆盖
在这里插入图片描述
此时 任务的切换 被破坏,系统陷入死循环,示波器 中只有一个波峰

解决方法是修改编译器优化等级
在这里插入图片描述
修改为O1或其他,可以挨个试
改完一定要 Build 才会生效

5、示波器只有一条直线

在这里插入图片描述
这个问题主要是编译器优化等级太高,导致时延函数被“优化”了
在这里插入图片描述
前面有绿块才代表被编译,delay直接被跳过去了
NND,偷我代码是吧!

解决办法为使用volatile关键字
volatile英文意思为易变的、易挥发的,在声明变量时加入这个关键字,意思就是告诉编译器这个变量随时能被外部修改,不要对此变量进行优化,代码中引用此变量必须访问内存中实际变量。

************************************************************************************************************************
*                                                    函数实现
************************************************************************************************************************
*/
/* 软件延时 */
void delay (volatile uint32_t count)
{for(; count!=0; count--);
}

给delay函数的 count变量加一个volatile关键字。
编译!仿真!
在这里插入图片描述

搞定!

参考资料:
C语言volatile用法/Keil编译器优化/delay被编译器优化

题外话:
这几个错误足足耗费了我三天时间,一点一点跟着代码看寄存器和变量的变化,不懂就搜,就查,提出各种猜测又全部否决
在这里插入图片描述
深夜公司里只有一个人,倒一杯热水看代码,喝第一口时水已经凉了
一个人的学习是漫漫长征,荆棘密布,坎坷不断。
但还好我们还有时间,与诸位共勉

三、烧录

1、程序正常运行无报错,烧录到板子上无反应

可能是库的问题,试试改成Micro Lib
在这里插入图片描述

Micro Lib是一个针对用C编写的基于ARM的嵌入式应用程序的高度优化的库。
与包含在ARM编译器工具链中的标准C库相比,MicroLib提供了许多嵌入式系统所需的代码大小的显著优势。

下图对使用标准库和使用微库代码大小进行了对比
在这里插入图片描述

MicroLib和标准C库之间的主要区别是:

1、MicroLib是专为深度嵌入式应用程序而设计的。

2、MicroLib经过优化,比使用ARM标准库使用更少的代码和数据内存。

3、MicroLib被设计成在没有操作系统的情况下工作,但是这并不妨碍它与任何操作系统或RTOS一起使用,如Keil RTX。

4、MicroLib不包含文件I/O或宽字符支持。

5、由于MicroLib已经优化到最小化代码大小,一些函数将比ARM编译工具中可用的标准C库例程执行得更慢。

6、MicroLib和ARM标准库都包含在Keil MDK-ARM中。

参考链接:keil勾选Use MicroLIB 的作用

未分类

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/615279.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序地图开发总结-规划路线

这是我做出来的自动规划效果,比较潦草 功能勉勉强强算是实现了的 在微信小程序中使用腾讯地图服务 虽然map组件使我们可以很方便的使用地图,但是map组件只提供了最基本的地图显示功能,同时,微信小程序提供的关于地图的API也只是提…

1.汉诺塔问题

C力扣 汉诺塔 class Solution { public:void hanota(vector<int>& a, vector<int>& b, vector<int>& c) {dfs(a,b,c,a.size());}void dfs(vector<int>& a, vector<int>& b, vector<int>& c,int n){if(n1){c.push…

CSS基础+基本选择器和复合选择器(如果想知道CSS的基础+基本选择器和复合选择器知识点,那么只看这一篇就足够了!)

前言&#xff1a;在我们学习完了html之后&#xff0c;我们就要开始学习三大件中的第二件—CSS&#xff0c;CSS 可以控制多重网页的样式和布局&#xff0c;也就是将我们写好的html代码加上一层华丽的衣裳&#xff0c;使网页变得更加精美。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨…

软考中级--网络工程师-计算机基础与理论第二节无线基础知识

IEEE802.11 规定了多种 WLAN 通信标准&#xff0c;其中&#xff08; &#xff09;与其他标准采用的频段不同&#xff0c;因而不能兼容。 A IEEE802.11a B IEEE802.11b C IEEE802.11g D IEEE802.11n 试题答案 正确答案&#xff1a; A 答案解析 IEEE 802.11a规定采用5GHz的 ISM频…

多态——C++

这里写目录标题 衔接继承总结继承和组合白箱复用黑箱复用 多态的概念多态的定义以及实现虚函数重写的两个例外协变面试题析构函数的重写 finalvoerride重载隐藏(重定义)重写(覆盖)抽象类什么是抽象类&#xff1f; 实现继承和接口继承多态的原理虚函数表 那多态的调用是怎么实现…

2024年mathorcup数学建模思路及论文助攻

题目C题 物流网络分拣中心货量预测及人员排班 电商物流网络在订单履约中由多个环节组成&#xff0c;图1是一个简化的物流网络示意图。其中&#xff0c;分拣中心作为网络的中间环节&#xff0c;需要将包裹按照不同流向进行分拣并发往下一个场地&#xff0c;最终使包裹到达消费者…

崩溃了news.163.com(求解)

崩溃了news.163.com&#xff08;求解&#xff09; 今天在测试学习的BeautifulSoup的时候&#xff0c;找到了news.163.com网易云新闻网&#xff0c;发现它的内容是加载在html里的&#xff0c;再尝试使用bs4获取下面这部分内容的时候。 分析过程&#xff1a; ​ 1.第一次怀疑自…

使用Postman创建Mock Server

这篇文章将教会大家如何利用 Postman&#xff0c;通过 Mock 的方式测试我们的 API。 什么是 Mock Mock 是一项特殊的测试技巧&#xff0c;可以在没有依赖项的情况下进行单元测试。通常情况下&#xff0c;Mock 与其他方法的主要区别就是&#xff0c;用于取代代码依赖项的模拟对…

【开发篇】十三、JVM基础参数设置与垃圾回收器的选择

文章目录 1、-Xmx 和 –Xms2、-XX:MaxMetaspaceSize 和 –XX:MetaspaceSize3、-Xss4、不建议改的参数5、其他参数6、选择GC回收器的调试思路7、CMS的并发模式失败现象的解决8、调优案例 GC问题解决方式&#xff1a; 优化JVM基础参数&#xff0c;避免频繁Full GC减少对象的产生…

ifconfig用法 、默认掩码

文章目录 概述2. ifconfig(尽量别用&#xff0c;已废弃)2.1 配置地址2.1.1 默认掩码 2.2 查看功能2.2.1 ifconfig 查看不含禁用的网卡2.2.2 ifconfig -a 查看含禁用的网卡2.2.3 ip a 2.3 启用、禁用网卡2.3.1 ifconfig eth1 up、 ifconfig eth1 down2.3.2 ifdown eth0、ifip et…

UTONMOS元宇宙游戏特点

在元宇宙的世界里&#xff0c;游戏不再只是一种娱乐方式&#xff0c;而是一种全新的生活体验。UTONMOS元宇宙游戏带你穿越虚拟与现实的边界&#xff0c;开启一段前所未有的冒险之旅。 在这个充满无限可能的UTONMOS元宇宙游戏中&#xff0c;你将成为自己游戏世界的主角。可以自…

图机器学习导论

图&#xff1a;描述关系数据的通用语言&#xff0c;起源于哥尼斯堡七桥问题 传统的机器学习&#xff1a;数据样本之间独立同分布&#xff0c;简单拟合数据边界&#xff0c;在传统的机器学习中&#xff0c;每个数据样本彼此无关。传统的神经网络&#xff0c;只能处理简单的表格、…