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

KEIL常碰到的错误

一、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

c 复制代码
*** 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英文意思为易变的、易挥发的,在声明变量时加入这个关键字,意思就是告诉编译器这个变量随时能被外部修改,不要对此变量进行优化,代码中引用此变量必须访问内存中实际变量。

c 复制代码
************************************************************************************************************************
*                                                    函数实现
************************************************************************************************************************
*/
/* 软件延时 */
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 的作用

未分类

相关推荐
摇滚侠12 分钟前
《SpringBoot 3:入门与应用实战》第 15 章 生产级特性 监控指标 Metrics 阅读笔记
java·spring boot·笔记
LCMICRO-1331084774613 分钟前
国产长芯微LPS7118完全pin-pin替代ADP7118,是一款采用 CMOS 技术设计的低噪声、高 PSRR、快速瞬态响应、低压差线性稳压器
arm开发·单片机·嵌入式硬件·fpga开发·硬件工程·线性稳压器·adp7118
LCMICRO-1331084774616 分钟前
国产长芯微LM3042完全P2P替代LT3042,是一款高性能低压差线性稳压器
arm开发·单片机·嵌入式硬件·fpga开发·硬件工程·线性稳压器·lt3042
qq_4017004123 分钟前
TPS5430电源芯片18V转3V的电源电路,效率可高达90%
单片机·嵌入式硬件
fanged34 分钟前
高通学习21--调试(TODO)
学习
噜~噜~噜~1 小时前
操作系统笔记-1.1.3 操作系统的特征
笔记·操作系统
超爱西西鸭1 小时前
鸿蒙大型项目高级模块化拆分:高内聚低耦合架构设计/HSP动态交付/接口契约/依赖倒置落地规范
学习·华为·harmonyos·鸿蒙
杨先生哦1 小时前
【2026热端攻防系列 10/12】前端凭据安全深度攻防:Cookie/Storage劫持、会话固定、凭据泄露与浏览器最新加固方案
前端·笔记·安全·web安全
大模型丫丫1 小时前
Loop Engineering:从强化学习视角看 Agent 循环的本质
java·人工智能·学习
hongmai6668881 小时前
ESP8684-WROOM-02C:一块被低估的RISC-V Wi-Fi模组
单片机·嵌入式硬件·物联网·5g·智能路由器·risc-v