OK2440的KEIL裸机调试心得

2020-07-03来源: eefocus关键字:OK2440  KEIL  裸机调试

初次接触ARM裸机调试,记录于此,供遇到相同问题的人参考。


首先要使下载对应三星的keil库,在keil官网的legend下载页面中可以找到,是一个.exe文件,直接安装即可。


第二创建工程,编译报错:


.test.axf: Error: L6630E: Invalid tokenstart expected number or ( but found n at position 5 on line 5


.test.axf: Error: L6629E: Unmatchedparentheses expecting ) but found n at position 5 on line 5


.test.axf: Error: L6226E: Missing baseaddress for region LR_.


.test.sct(5): error: L6292E: Ignoringunknown attribute 'null' specified for region LR_.


.test.sct(5): error: L6228E: Expected '{',found ')...'.


.test.sct: Error: L6372E: Image needs atleast one load region.


Not enough information to list imagesymbols.


Not enough information to list the imagemap.


Finished: 2 information, 0 warning and 6error messages.


".test.axf" - 6 Error(s), 1Warning(s).


Target not created


这个错误通过修改options选项中的linker选项卡可以解决。如下图,将Use Memory Layout fromTarget Dialog选项的勾取消。此时在箭头指向的Scatter File中会出现一个.sct文件,将这个文件名删除即可。


第三,通过上述修改后编译错误改变成:


linking...


.test.axf: Error: L6218E: Undefined symbolImage

ERROM1

ERROM1

RO$$Length (referred from s3c2440.o).


.test.axf: Error: L6218E: Undefined symbolImage

RWRAM1

RWRAM1

RW$$Length (referred from s3c2440.o).


Finished: 0 information, 0 warning and 2error messages.


".test.axf" - 2 Error(s), 1Warning(s).


Target not created


这个问题是keil提供的启动文件(.s文件)中这两句话造成的:


 IF      :LNOT::DEF:__EVAL 

                IMPORT  ||Image$$ER_ROM1$$RO$$Length||

                IMPORT  ||Image$$RW_RAM1$$RW$$Length||

                ENDIF

IF      :DEF:__EVAL

                  DCD   0x4000

                ELSE 

                  DCD   ||Image$$ER_ROM1$$RO$$Length||+

                        ||Image$$RW_RAM1$$RW$$Length||

                ENDIF

这里的语句 IF:LNOT::DEF:__EVAL大概是说假如没有定义宏__EVAL就执行下述语句(或者是报下述错误的意思,汇编不清楚具体意思),要解决这个问题只需在options的Asm选项卡中Define选项中添加__EVAL宏即可,如下图:

第四,keil提供的启动文件中有一个main函数入口点设置:


; Enter the C code -------------------------------------------------------------


                IMPORT  __main

                LDR     R0, =__main

                BX      R0

这里工程的主函数名字要和IMPORT的入口点名字对应,测试发现main作为主函数名可以与这个入口点名对应,当然这里的__两个下划线是起什么作用不太清楚。


第五.经过上面的修改,已经没有编译错误了,但是ARM的下载(使用DNW软件下载)需要.bin文件,假如下载.hex文件的话会报undefined instructionexception的错误。那么就需要使keil生成.bin文件,方法是选择options的User标签页,进行如下图一样的配置:


第六,以上解决了编译和下载的错误,接下来是重点设置,关于程序入口点地址(可能称为PC指针更合适)和程序的下载地址设置!


图中R/OBase的设置会改变下面方框中Linker control string的值,可以看到该地址的设置会使-entry等值改变,这个应该是在指定程序在内存空间中的入口位置。另外,在DNW中有程序下载地址的配置:如图所示


该地址指定了程序被下载到ARM的地址空间的哪个位置。而上面的设置指定了程序的入口地址,假设两个地址设置不一样则会出现CPU在指定位置找不到程序的现象,则程序不会运行。


第七,关于ARM(S3C2440)的地址空间,地址映射可以参照用户手册,对于OK2440的该块核心板,可以验证在地址0x30000000~0x31FFFFFF是映射了一个SDRAM,在0x32000000~0x33FFFFFF映射了一片flash(ROM),并且内部RAM映射地址起始为0x40000000的一个4K大小空间。假如将程序下载地址设置为0x29000000则DNW报下错:Now, Downloading [ADDRESS:29000000h,TOTAL:674]

RECEIVED FILE SIZE:     674

(101.8KB/S,0.0S)

Now, Checksum calculation

Checksum Error!!! MEM:86b2 DN:4


假如将程序下载地址设置为0x34000000则DNW报下异常:


Download&Run is selected.



Dabort exception!!!


以上错误是和ARM的地址映射相关的。


第八,程序在外部RAM跑和在内部RAM跑的区别,假设将程序下载地址(也要设置入口地址)设置为0x40000000(当然,程序必须小于4K),可以看到程序运行速度(比如流水灯)大大大于程序下载到0x30000000~0x31FFFFFF的即时运行速度,当然这里可以把程序下载到0x32000000~0x33FFFFFF的FLASH中,下次启动可以直接启动程序,并且程序由于被搬运到内部RAM运行而很快。

关键字:OK2440  KEIL  裸机调试 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic502050.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:为mini2440开发板建立Keil MDK/Jlink开发调试环境
下一篇:使用keil5 搭建2440开发环境

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

使用Jlink仿真及ADS1.2调试(ok2440)
1.将Jlink PC ok2440连接起来2.给ok2440上电3.打开Jlink程序中的J-link ARM v4.08k(可观察到jlink的型号及CPU的各种参数) 并打开DNW 按任意键不要让开发板进入操作系统4.打开ADS CodeWarrior for ARM 载入镜像  可先将工程中的code值先去除 project-remove project code 在点make按钮 在弹出的窗口中没错误后可 点debug来调试  进入AXD 在options-configure target中选择multi-ICE 确定 进入 然后load image-全速执行也可以单步执行(在使用ADS仿真时先要
发表于 2020-07-01
使用Jlink仿真及ADS1.2调试(ok2440
1.将Jlink PC ok2440连接起来2.给ok2440上电3.打开Jlink程序中的J-link ARM v4.08k(可观察到jlink的型号及CPU的各种参数) 并打开DNW 按任意键不要让开发板进入操作系统4.打开ADS CodeWarrior for ARM 载入镜像  可先将工程中的code值先去除 project-remove project code 在点make按钮 在弹出的窗口中没错误后可 点debug来调试  进入AXD 在options-configure target中选择multi-ICE 确定 进入 然后load image-全速执行也可以单步执行(在使用ADS仿真时先要
发表于 2020-06-17
Keil MDK和IAR 两款ARM开发工具对比
首先要说明,没有那款开发工具是万能的,也没有那款工具在所有方面都具有绝对优势。对于Keil MDK-ARM和IAR两款工具择,可以根据自己的习惯来选择,而不应该在使用其中的一款时贬低另外一款,或者总是赞美自己的选择。好了,下面开始讲Keil MDK-ARM和IAR的区别。一、概述Keil MDK-ARM(旧称RealView MDK)开发工具源自德国Keil公司,被全球上百万的嵌入式开发工程师验证和使用,是ARM公司目前最新推出的针对各种嵌入式处理器的软件开发工具。KEIL MDK集成了业内最领先的技术,包括uVision3、uVision4、uVision5集成开发环境与 ARM编译器。支持ARM7、ARM9
发表于 2020-08-02
<font color='red'>Keil</font> MDK和IAR 两款ARM开发工具对比
学51单片机-KEIL的使用与程序的下载
,废话少说,开始!      先说keil uvision,第一步,双击打开该软件,界面如下:      写代码的话,需要新建一个工程,点击:Project->New uvision project ,弹出如下界面:      为每个工程建立一个单独的文件夹,例如LED01, 然后输入工程名,可以与文件夹名称相同,例如 LED01. 点击保存。      注:这个软件不需要考虑中英文路径的问题,印象里调试CPLD的时候,用的软件生成的工程,保存在中文路径下会出
发表于 2020-07-23
学51单片机-<font color='red'>KEIL</font>的使用与程序的下载
LPC2138+LCD12864显示实时时钟程序 keil与proteus联调
近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,在通讯、网络、工控、医疗、电子等领域发挥着越来越重要的作用。嵌入式系统无疑成为当前最热门最有发展前途的IT应用领域之一。32位嵌入式系统发展很快,32位单片机已逐渐占领8位机的市场,并以很高的性价比赢得了越来越多的用户的青睐。随着科技和工艺的进步,32位单片机的优势会更加突显出来,将会成为嵌入式系统的主流。在32位嵌入式系统中,基于ARM的应用占据了大部分份额。实时时钟(RTC)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常用作各种计算机系统的时钟信号源和参数设置存储电路。RTC具有计时准确、耗电低和体积小等特点,特别适用于在各种嵌入式系统忠记录事件发生的
发表于 2020-07-12
LPC2138+LCD12864显示实时时钟程序 <font color='red'>keil</font>与proteus联调
keil5中找不到lpc2368的解决方法
在用lpc2368的时候在MDK5 Software Packs找不到lpc236在官网搜寻了一番找到了这个下载后完美解决问题
发表于 2020-07-03
<font color='red'>keil</font>5中找不到lpc2368的解决方法
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved