[STM32问题解决(1)]一类问题的解决办法——编译错误:XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o).

这篇具有很好参考价值的文章主要介绍了[STM32问题解决(1)]一类问题的解决办法——编译错误:XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o).。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 问题说明

1.1 问题回顾

学习自己手动搭建一个STM32HAL库工程模板文件的时候,我发现了有6个错误,6个错误的类型是一样的,其中有3个通过添加hal_rcc.h和hal_gpio.c文件得以解决。所以另外3个我也想到了时缺少了对应的.c文件导致的错误。
但是在STM32F1xx_HAL_Driver文件夹中,我没有找到类似如有“rcc”和“GPIO”这样的标志性符号。这3个错误如下:
[STM32问题解决(1)]一类问题的解决办法——编译错误:XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o).
分别是HAL_NVIC_SetPriorityHAL_NVIC_SetProtityGroupingHAL_SYSTICK_Config
STM32F1xx_HAL_Driver文件夹中未找到类似于“NVIC”或者“SYSTICK”的.c文件。
copy了问题在网上也没有找到合适的回答,因为我根本不知道如何描述我的问题。找了一个学长问了之后,他只用了5分钟就帮我解决了问题

1.2 寻找解答所犯的错误

这个问题的解决,在互联网上是无法找打解答的,因为无法描述其问题。打个比方就是:

一个人要煮方便面,但是家里没有锅。于是,这个在网上搜索为什么这个面煮不开。这个问题在互联网上无法回答。
但是,因为煮面过程中,先放调料还是先放面,影响了最后的口感,这个时候是可以在网上询问:怎么煮面更好吃。其他网友才能回复自己的煮面方法。方法并不包括考虑这个提问者是不是家里有锅。

2 解决办法(试用于一系列问题)

2.1 重审问题

…\Output\Template.axf: Error: L6218E: Undefined symbol HAL_NVIC_SetPriority (referred from stm32f1xx_hal.o).

问题中有两个关键词,我们一个一个看

2.1.1 Undefined symbol xxx.c

含义是:“xxx.c”这个符号,没有被定义

2.1.2 referred from xxxx.o

含义是:上面的“xxx.c”文件在xxxx.o中被调用过

“.o”文件是什么?
.o文件在工程里面是没有的,它是在编译过程中由.c文件生成的。所以我们只需要找到工程里面的.c文件即可,这里对应这个名字的就是 xxxx.c 了

2.2 解决步骤

2.2.1 如何寻找xxxx.c的位置?

step1:Ctrl+F弹出搜索框
step2:在Find in Files选项卡中搜索xxxx.c文件
[STM32问题解决(1)]一类问题的解决办法——编译错误:XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o).
step3:在keil下方会返回在整个工程文件中找到该文件的位置
[STM32问题解决(1)]一类问题的解决办法——编译错误:XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o).
step4:从左侧任务栏中会找到,这个xxxx.c文件已经存在
[STM32问题解决(1)]一类问题的解决办法——编译错误:XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o).

2.2.2 相同办法全局搜索没有定义的“xxx.c”符号

得到了以下回复:
[STM32问题解决(1)]一类问题的解决办法——编译错误:XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o).
出现了HAL_NVIC_SetPriority的.c文件和.h文件有:hal_gpio.c、hal.c和cortex.h

2.2.3 继续分析

从左侧任务栏,可知hal_gpio.c和hal.c已经添加进入工程文件了
[STM32问题解决(1)]一类问题的解决办法——编译错误:XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o).
寻找一下hal_cortex.h文件
[STM32问题解决(1)]一类问题的解决办法——编译错误:XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o).
可见,在hal_cortex.h文件中,我们找到了对应函数的声明,缺少了定义,因此需要把hal_cortex.c的文件添加进入工程文件中。
[STM32问题解决(1)]一类问题的解决办法——编译错误:XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o).

2.2.4 再次编译

[STM32问题解决(1)]一类问题的解决办法——编译错误:XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o).
发现所有错误全部解决,说明问题“HAL_SYSTICK_Config”的声明和定义也是在“cortex.h”和“cortex.c”中完成的。
至此,问题解决了。

3 一点说明

3.1 为什么全局域搜索可以找到“cortex.h”中也存在这个函数?

原因有两个:
1、打开魔术棒,打开C/C++选项卡,按步骤打开,会发现,我们在之前已经把存储的路径保存了
[STM32问题解决(1)]一类问题的解决办法——编译错误:XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o).
2、虽然我们没有把“cortex.c”文件放进工程文件,目的是节约编译时间不用把所有hal库文件都放进工程中,但是在“stm32fxx_hal.c”中又调用了所有hal库的“.h”文件。所以在检索的时候,keil可以发现并找到搜索的函数和位置
[STM32问题解决(1)]一类问题的解决办法——编译错误:XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o).

3.2 我为什么写这篇博客?

1、这个问题是一个非常意外的问题,在互联网上,我暂时还没找到。
2、这种解决问题的思路是我的一个学长教给我的,以前遇到问题我只会在网络检索,现在需要学习直接解决问题的办法和方式步骤。因此,我把它进行了梳理并整理了出来。
3、如何手动搭建一个hal库的工程模板,而不使用cubemx,在之后的博客中,我会再次分享我的经验。(已经写完了: 库函数版的工程模板的搭建(HAL库版本))文章来源地址https://www.toymoban.com/news/detail-416469.html

到了这里,关于[STM32问题解决(1)]一类问题的解决办法——编译错误:XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o).的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Keil写STM32程序.axf: Error: L6218E: Undefined symbol HAL_RTC_Init (referred from rtc.o)报错解决办法

    在写RTC的程序时,报如下的错误:....Outputatk_f103.axf: Error: L6218E: Undefined symbol HAL_RTC_Init (referred from rtc.o) 显示没有定义 网上有很多解决办法,这里提供一种思路 就是可能是由于没有添加相应的驱动文件,所以需要添加相应的stm32的驱动文件到工程中 点击添加文件,我的是

    2024年02月06日
    浏览(41)
  • stm32通过STM32 ST-LINK Utility 下载程序,由于程序错误,造成芯片无法连接,解决办法

    1 安装 STM32 ST-LINK Utility 2 打开 3 没有正确连接st-link 4 没有正确连接芯片 5 芯片被读保护,防止盗版 6 解除读保护功能后 7 下载程序 8 下载中 9 下载成功 10 . 由于程序错误,造成芯片无法连接 请RST键接地,启动连接,3秒钟后,松开就能进入写程序状态.

    2024年02月09日
    浏览(67)
  • 解决keil5无法生成axf文件(国信长天STM32G431R8)

    我安装了keil5和STM32cubemx,这两个软件都是从官网下载,速度挺快的,参考博文如下: 【STM32】STM32 CubeMx使用教程一--安装教程_Z小旋的博客-CSDN博客 这里需要注意的就是Java版本一定要选对,我一般的处理方式就是全都 下载最新 的,基本上就不会出错。  Keil

    2024年02月05日
    浏览(52)
  • 使用STM32CubeMX配置工程,烧录时出现No target connected(没有目标连接)的错误解决办法

    目录      一、解决方法: 二、错误原因: 在Keil5使用ST-link烧录重新到STM32时出现如图错误解决方法:          网上看到的方法很多都是按住复位键不动,然后在点击下载的同时快速松开单片机复位键,这就要考验我们的手速了,虽然这样也行,不过这样并不能解决根本

    2024年02月15日
    浏览(49)
  • STM32 Keil5报错-*** Target ‘XXX‘ uses ARM-Compiler ‘Default Compiler Version 5‘ which -安装编译器解决

    安装的keil 版本是V5.38, 显示缺少编译器 Compiler Version 5\\\' *** Target \\\'MUSICPLAYER\\\' uses ARM-Compiler \\\'Default Compiler Version 5\\\' which is not available. 下载编译器:  Arm Compiler 5.06 update 7 (build 960)  下载地址:https://developer.arm.com/downloads/view/ACOMP5 Legacy Arm Compiler 5, 4.1, and RVCT (ACOMP5) https://developer.ar

    2024年04月11日
    浏览(61)
  • STM32:HAL_RCC_OscConfig中程序卡死问题解决办法

    首先,参考该博主的文章(感谢博主的刨根问底),了解卡死的原理:https://blog.csdn.net/qq153471503/article/details/114700884 在了解原理后,发现在IAP跳转后,APP卡死是因为不能再次对PLL进行初始化操作,所以导致了卡死现象。 经过思考,HAL库所有模块的Init,都会有对应的DeInit,所

    2024年02月09日
    浏览(90)
  • python遇到AttributeError: module ‘XXX‘ has no attribute ‘XXX‘的错误,解决办法

    错误原因: 主要的原因看可能有3个: 1、检查一下有没有拼错函数,有时候写的快了真的有可能手误; 2、如果没拼错那就检测一下该模块的函数是否是更新了,因为python的第三方库是时常会更新的,有时候函数名会有轻微的变动这也很正常,解决方法就是查看一下对应版本

    2024年04月12日
    浏览(45)
  • [STM32] - STM32F407VET6使用STM32CubeMX配置FatFs,以及挂载时返回03错误码问题的解决

    为测试新买的开发板TF卡读写是否正常,使用STM32CubeMX(后简称CubeMX)进行代码构建。生成代码后烧录测试,发现在挂载TF卡时无法成功,返回值为错误3( FR_NOT_READY )。经排查后问题已解决,遂记录配置过程供大家参考,并讲解挂载时返回错误3的解决方式。 ①为了输出TF卡(

    2024年02月22日
    浏览(66)
  • 如果STM32/GD32一类的ARM单片机解除读写保护的方法

    有时候啊,使用ST-Link给STM32一类的ARM单片机下载程序的时候,发现怎么也下载不了,可能是由于芯片被写保护了。那怎么办呢?可以使用STM32 ST-LINK Utility工具解除芯片的写保护,本篇博文介绍操作步骤,文章最后有工具下载链接。 双击“STM32 ST-LINK Utility.exe”,打开软件。 软

    2024年02月09日
    浏览(47)
  • variable `xxx‘ has initializer but incomplete type 错误分析及解决办法

    编译时报错: variable `xxx’ has initializer but incomplete type 在编译某一个文件时,对变量进行了初始化,但是在初始化之前,没有定义过这个变量,只是声明过。 初始化、声明、定义,这几个的不同一定要清楚。 举个浅显的例子: 在这个例子当中,当你编译的时候,先编译mai

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包