项目场景:

ARM KEIL

问题描述:

.\Objects\jiangjie.axf: Warning: L6665W: Neither Lib Request armlib Lib Request cpplib defined, not searching ARM libraries.
.\Objects\jiangjie.axf: Error: L6411E: No compatible library exists with a definition of startup symbol __main.

Error: L6411E: No compatible library exists with a definition of startup symbol __main

以及*** error 65: access violation at 0x00000000 : no ‘execute/read’ permission的解决

我遇到这个问题是在初学ARM时候(现在)刚刚安装完ARM KEIL之后想要运行一个独立的汇编.s文件,就非常简单的代码然后经过各种更改Linker什么的剩余的最后一个问题,关于这个报错其他博主写了更改什么环境变量之类的我试过都不好使。
我有两个解决办法,反正这样做是达到了我想要的目的,看到debug环境下的寄存器内的变化。

首先,我的Linker设置是这样的

解决方案:

在这个位置不要选择’是’(没错,这一手什么问题都没有了)

在上图选择’是’之后,只写一个.s文件不写其他文件会报错(反正我是这样)
是如下的错误:
.\Objects\jiangjie.axf: Warning: L6665W: Neither Lib Request armlib Lib Request cpplib defined, not searching ARM libraries.
.\Objects\jiangjie.axf: Error: L6411E: No compatible library exists with a definition of startup symbol __main.

在此需要添加一个.c文件里面只需要写一个main入口就可以
以我的水平就是:
#include <stdio.h>
int main(){
}
就这个代码
添加到你的工程文件目录后就不会报错了

在这里又遇到一个问题…

*** error 65: access violation at 0x00000000 : no ‘execute/read’ permission

进入debug环境会发现你的R0位置始终指向(0x00000000)
我是在这里直接改掉了pc:

然后再单步执行就能看到想要的了(反正是我想要的。。。)
注:因为我的代码是这样的

所以我就把pc改为R0的地址了

更新:后面这里,不用手动改pc,更改debug下的memorymap range值,我这个代码写0x00000000, 0x00008000后直接运行一下然后再单步执行就可以了,图如下:

最后:(现在刚开始学,希望能帮助某些同为新手的人吧,第一次写博客,实在看不下去那些水帖霸着问题榜,我就想吐槽一下,不解决问题在帖子里摆一堆基础知识磨磨唧唧的那些东西随便一本教科书都写着的用你写博客?不写理解不写操作写书本知识的人你们发帖子是为了什么呢?)

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐