首页 > 其他分享 >Keil编译遇到L6286E错误

Keil编译遇到L6286E错误

时间:2024-04-16 14:44:23浏览次数:30  
标签:__ 汇编 LDR Keil 编译 指令 main L6286E

在使用Keil(版本为uVision V5.38.0.0)编译工程的时候碰到了一个报错:

Error: L6286E: Relocation #REL:0 in cm0dasm.o(.text) with respect to __main. Value(0xfffffffa) out of range (0 - 0xff) for (R_ARM_THM_PC8)

启动汇编代码如下所示

Reset_Handler PROC
    GLOBAL Reset_Handler
    ENTRY
    IMPORT __main
    LDR R0,__main
    BX R0
    ENDP

在网上搜了一些解答,像是CSDN有人说将编译优化等价修改为-O1,这肯定是在胡说八道。实际上ARM社区已经对此问题作出了解答

此问题产生的原因是汇编指令尝试访问超出指令范围的符号,至于修改的方式,其实比较简单,只需要将第五行做如下改动

    LDR R0,=__main

之前调试的时候我就发现,这里写的汇编代码的LDR其实不是汇编指令,而是伪代码。它的使用方式有两种

LDR {{<cond>}} {.W} {<Rt>}, ={<expr>}
LDR {{<cond>}} {.W} {<Rt>}, ={<label_expr>}

其中<expr>是数值表达式,<label_expr>PC或者外部地址加减一个数值。这一点从汇编器的结果就可以发现,例如上面程序汇编的结果为

0x00000094 4800 LDR r0,[pc,#0] ; @0x00000098

所以说一开始的写法其实是错误的,要跳转到符号地址应该用LDR伪指令说明里提供的方法。
除此之外补充一点,因为LDR其实是伪指令,所以汇编出的结果不一定是LDR指令,也可能是MOV指令。

标签:__,汇编,LDR,Keil,编译,指令,main,L6286E
From: https://www.cnblogs.com/lzhj/p/18137952

相关文章

  • windows平台vs2019编译Luabind小记
    前言写这篇文章的目的是Luabind这个库比较老旧,对于新编译器需要做一些代码上的兼容,参考资料又都有点过时,所以特写此篇,记录踩坑过程;参考资料用VS2010编译luabind如何编译luabind支持vs2010之后所有版本Lua官网LuabindRepo编译前准备准备相关前置组件基本编译依赖Des......
  • CentOS 7.9编译安装Python-3.10.13
    目录查看CentOS版本、系统默认gcc版本、Python版本和pip版本部署Python-3.10.13测试将yum中的Python版本修改为系统原来的2.7.5版本查看CentOS版本、系统默认gcc版本、Python版本和pip版本cat/etc/redhat-releasegcc--versionpython-Vpip-V部署Python-3.10.13下载......
  • arm-linux-gcc 交叉编译工具链使用方法
    参考文献:[野火]嵌入式Linux基础与应用开发实战指南安装交叉编译工具链有如下三种方式:直接在Ubuntu下使用APT包管理工具下载安装。自行下载第三方制作好的工具链。使用crosstool-ng根据需要自己制作。在开发中比较多的开发者对所有程序都直接用arm-linux-gnueabihf-gc......
  • 立创泰山派学习05-虚拟机ubuntu安装交叉编译工具
    一、虚拟机Ubuntu系统交叉编译1、下载aarch64类型的gcc,链接如下https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/     2、拷贝到虚拟机ubuntu系统中,进行解压tar-xvfgcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux......
  • 【已解决】squashfs4.3编译过程中的一些问题
    Q:执行./build.sh时,mksquashfs.c和unsquashfs.c报错找不到major()和minor()函数的定义,找不到‘makedev’cc-O2-I.-D_FILE_OFFSET_BITS=64-D_LARGEFILE_SOURCE-D_GNU_SOURCE-DCOMP_DEFAULT=\"gzip\"-Wall-DGZIP_SUPPORT-DXATTR_SUPPORT-DXATTR_DEFAULT-c-omksqua......
  • dva使用yarn编译出错
    1.报错信息./src/models/example.jsModulebuildfailed:TypeError:/Users/user/Desktop/learn-code/10.React/01_dva-came/src/models/example.js:path.isPrivateisnotafunctionatArray.forEach()只要启动项目,然后修改example代码,只要example发生改变就会报该......
  • 编译优化学习
    转自:https://juejin.cn/post/69331807676567388241.介绍代码->词法语法分析->语义分析->中间代码生成->目标代码生成编译器:中间代码生成。编译器会尝试对中间代码进行优化,通过减少无效或冗余的代码、计算强度优化等手段,以助于减少最终生成的指令数,或使用更高效的指......
  • windows 使用MSVC2022编译 Qt 5.12.11
    准备准备一下安装程序,并添加到PATH环境变量。Perl选择64位Portable:PerlPortableRuby选择64位版本进行安装:ruby64bitPython安装Pythonjomnmake不支持并行编译,使用jom进行并行编译。下载jom,解压并添加到PATH环境变量。jomQt5.12.11编译下载地址:Qt5.12.11。使用MS......
  • 解决编译redis报错zmalloc.h:50:10: fatal error: jemalloc/jemalloc.h: No such file
    编译redis时报错:zmalloc.h:50:10:fatalerror:jemalloc/jemalloc.h:Nosuchfileordirectory,执行:#sudomakeMALLOC=libc1即可成功 需要先运行“makedistclean”,它设置删除所有早期的编译文件,然后运行“make”,这样就得到了redis服务器程序的新编译。执行后成功编......
  • 42 Typescript编译配置-webpack-babel
    TS编译配置自动编译单个文件tsc1.ts#如果想要自动监视文件的变化,需要添加`-W`配置tsc1.ts-W自动编译整个项目初始化,会自动生成一个tsconfig.json文件,然后直接执行tsc命令,就可以对当前目录的所有ts文件进行编译,生成对应的js文件#初始化项目tsc--init#编译......