历史上的今天
返回首页

历史上的今天

今天是:2025年06月10日(星期二)

正在发生

2020年06月10日 | mini2440---keil for ARM下的调试与下载环境的搭建

2020-06-10 来源:eefocus

题外话:编译环境选择推荐


对于刚刚接触ARM裸机编程的各位,我要特别的进行提醒一下,就是关于编译环境的选择问题。目前主流的有ADS+AXD,KEIL FOR ARM,IAR FOR ARM三种,我开始使用的ADS+AXD进行学习,因为光盘里面自带,而且很多资料都是他的,但是个人感觉真心调试十分的不方便,而且各种容易死机,并且现在也已经不更新了,北航一本讲嵌入式的书出了一个第二版,就是把ADS换成了KEIL,而且以后KEIL会是主流,因此我推荐选择KEIL进行学习。IAR听我一个同学说也十分好用,但是在网上找有关方面的资料不是很多。而且我想北航一群教授编书都用KEIL进行,说明KEIL自有他的优势,书上这么说了,那以后会有更多学生用,这样慢慢也会更加流行与主流。闲话就说这些。


正题:Keil for ARM的环境搭建


提醒一下各位就是在keil for ARM进行环境搭建的时候,要注意调试时环境搭建与下载环境的搭建是不同的,因为在下载环境搭建的时候是把程序下载到nor flash里面直接进行运行,而调试环境是把程序下载到RAM里面进行执行。nor flash里面也可以进行调试环境的搭建,但是在nor flash里面只能建立两个端点,而且flash擦写次数有限对寿命有影响。所以不推荐。所以调试的时候推荐在RAM里面进行调试。


配置方法的测试环境:MDK 4.11    JLINK 4.08  开发板是mini2440 其他的环境配置类似,


首先介绍关于程序下载的方法


①建立一个project芯片选择S3C2440(在SAMSUNG里面)并且加入启动代码。


②编辑自己的测试程序。


测试程序如下


#include

void delay()

{

int i,j;

for(i=0;i<10000;i++)

{

for(j=0;j<50;j++);

}

}

int main()

{

GPBCON = 0x155555;

while(1)

{

GPBDAT |= 0x1E0;

GPBDAT &= 0x1C0;

delay();

GPBDAT |= 0x1E0;

GPBDAT &= 0x1A0;

delay();

GPBDAT |= 0x1E0;

delay();

}

}


实现的两个LED循环间歇显示。


③开始进行工程的配置,配置分为以下几步(程序下载的配置)


第一步


也是非常要注意的一点就是:打开S3C3440.S这个文件夹,点击configuration wizard


进入这个界面,把所有选项都勾上。

第二步现在进入Target的配置


现在点击中的魔棒,出现配置环境。

第三部配置Target这个选项栏。配置如下

后面我会进行介绍为什么需要这样去配置它。编译器回根据这个环境生成一个.sct的文件与之对应,作为程序加载,执行的一些信息。


第四步:进入output这个选项中勾选Creat HEX file,如下图所示。

第五步:进入Utilities这个选择中,选择如下

因为在此我使用的是JLINK,再点击setting进行设置,设置情况如下图

对于flash算法的选择可以选择一个相近的,对于我的板子,nor flash是AM29LV160DB,因此我选择了这个类型的nor flash,做完以上配置后,点击OK,不断OK就可以配置成功了。就可以编译,没有任何错误再进行下载。就可以看到LED循环点亮了。 


下面是关于程序调试的配置方式。我们调试是在RAM里面进行的。


第一步:同样需要对S3C2440.S进行configuration wizard进行勾选。如果开始已经做了,这步略过。


第二步:进入到配置界面的Target选项栏。进行如下配置。

第三步,进入到output选项栏勾选Creat HEX file,如果已经勾选可以略过。


第四步:进入Debug选项栏,进行如下的配置

Ext_RAM.ini(来自事例程序中)文件代码如下并且要进行修改


FUNC void SetupForStart (void) {

 

// Program Entry Point

  PC = 0x30000000;

}

 

FUNC void Init (void) {

 

  _WDWORD(0x4A000008, 0xFFFFFFFF);      // Disable All Interrupts

 

  _WDWORD(0x53000000, 0x00000000);      // Disable Watchdog Timer

  

                                        // Clock Setup 

                                        // FCLK = 300 MHz, HCLK = 100 MHz, PCLK = 50 MHz

  _WDWORD(0x4C000000, 0x0FFF0FFF);      // LOCKTIME

  _WDWORD(0x4C000014, 0x0000000F);      // CLKDIVN

  _WDWORD(0x4C000004, 0x00043011);      // MPLLCON

  _WDWORD(0x4C000008, 0x00038021);      // UPLLCON

  _WDWORD(0x4C00000C, 0x001FFFF0);      // CLKCON

 

                                        // Memory Controller Setup for SDRAM

  _WDWORD(0x48000000, 0x22000000);      // BWSCON

  _WDWORD(0x4800001C, 0x00018005);      // BANKCON6

  _WDWORD(0x48000020, 0x00018005);      // BANKCON7

  _WDWORD(0x48000024, 0x008404F3);      // REFRESH

  _WDWORD(0x48000028, 0x00000032);      // BANKSIZE

  _WDWORD(0x4800002C, 0x00000020);      // MRSRB6

  _WDWORD(0x48000030, 0x00000020);      // MRSRB7

 

  _WDWORD(0x56000000, 0x000003FF);      // GPACON: Enable Address lines for SDRAM

}

 

 

// Reset chip with watchdog, because nRST line is routed on hardware in a way 

// that it can not be pulled low with ULINK

 

_WDWORD(0x40000000, 0xEAFFFFFE);        // Load RAM addr 0 with branch to itself

CPSR = 0x000000D3;                      // Disable interrupts

PC   = 0x40000000;                      // Position PC to start of RAM

_WDWORD(0x53000000, 0x00000021);        // Enable Watchdog

g, 0                                    // Wait for Watchdog to reset chip

 

Init();                                 // Initialize memory

LOAD .led.axf INCREMENTAL         // Download program

SetupForStart();                        // Setup for Running

g, main                                 // Goto Main


 


第一个标红的地方即:第三行------PC = 0x30000000是程序的普通入口(entry point),(个人觉得:在我们这个程序中这个普通入口同时也是初始入口)


第二个标红的地方是倒数第三行------LOAD .led.axf INCREMENTAL需要我们进行修改的地方,要改成与你生成的***.axf文件名相对应。

这里就可以看到你要生成的目标文件名。


进行以上步骤后,就可以点击Debug进行调试了。

推荐阅读

史海拾趣

AAC [American Accurate Components]公司的发展小趣事

进入21世纪,AAC公司继续加大市场拓展力度。2003年,AAC成功拓展了台湾市场,与明基、仁宝电脑和华宇电脑等知名企业建立了合作关系。为了满足这些客户对高品质耳机的需求,AAC开始生产制造耳机产品。这一创新举措不仅丰富了AAC的产品线,也进一步提升了其在电子消费产品市场的竞争力。

CHIMEI(奇美)公司的发展小趣事

随着电子行业的快速发展,市场竞争也日益激烈。奇美公司深知创新是企业发展的核心动力,因此不断加大研发投入,推动技术创新和产品升级。公司研发团队积极探索新技术、新工艺和新材料的应用,推出了一系列具有创新性和竞争力的产品。这些产品不仅满足了客户的需求,还为公司开拓了新的市场领域。

Dicon Fiberoptics Inc公司的发展小趣事

作为一家具有高度责任感的企业,DiCon长期以来一直致力于为国防工业提供高质量的光纤通信产品。公司的首批产品之一FDDI交换机在许多海军舰艇上部署了30多年,为国家的安全稳定做出了重要贡献。这一里程碑事件不仅彰显了DiCon在光纤通信技术领域的实力,也进一步提升了公司的品牌形象和市场地位。

ELESTA GmbH公司的发展小趣事

ELESTA GmbH的前身可以追溯到1952年ELESTA Elektrotechnik AG的成立。在成立初期,该公司就开始在电子领域进行一系列的创新和研发。到了1996年,ELESTA已经成功开发出光学传感器、测量和控制系统以及继电器等关键产品,这些产品奠定了公司在电子行业中的坚实基础。

Anvo-Systems公司的发展小趣事

Anvo-Systems深知人才是企业发展的核心动力。因此,公司一直注重与高校和研究机构的合作,共同开展电子技术的研发与创新。通过与高校合作开展科研项目、设立奖学金等方式,Anvo-Systems吸引了大批优秀的人才加入公司。同时,公司还建立了完善的培训体系,为员工的职业发展提供了有力支持。这些举措不仅提升了公司的研发实力,也为公司的未来发展储备了丰富的人才资源。

Bridgelux公司的发展小趣事

XXXX年,Bridgelux与Cree公司爆发了一场专利纠纷。Cree公司指控Bridgelux侵犯了其LED专利技术。经过一段时间的激烈争辩,双方最终达成了和解协议。Bridgelux同意支付一定的赔偿金,并获得了部分专利的授权。这次纠纷虽然给Bridgelux带来了一定的经济损失,但也使其更加注重知识产权保护,提升了自身的技术实力。

问答坊 | AI 解惑

PIC单片机16F84的内部硬件资源(一)

PIC单片机16F84的内部硬件资源(一) …

查看全部问答>

恶意广告的帖子管理员处理一下吧

有一些问题提出来后就惨遭恶意广告的刷屏,管理员请处理一下吧,如果确实不错的广告也不应该一次性的发出来吧,如果建议提的不对,那不好意思了。…

查看全部问答>

开关电源原理与设计(连载31)推挽式开关电源变压器参数的计算

0.4.推挽式开关电源变压器参数的计算 推挽式开关电源使用的开关变压器有两个初级线圈,它们都属于励磁线圈,但流过两个线圈的电流所产生的磁力线方向正好相反,因此,推挽式开关电源变压器属于双激式开关电源变压器;另外,推挽式开关电源变压器 ...…

查看全部问答>

LPC1114函数的命名规则!!!!

In function \'LoadDATA\':../src/aa.c:95: error: number of arguments doesn\'t match prototype       出现的啦上面提示的错误 !!!!!   经过分析 大家主要你的函数的名字要 不要超过13个字母或数字  void A ...…

查看全部问答>

plc控制系统的7个步骤

1. 系统设计与设备选型    a. 分析你所控制的设备或系统。PLC最主要的目的是控制外部系统。这个系统可能是单个机器,机群或一个生产过程。    b. 判断一下你所要控制的设备或系统的输入输出点数是否符合可编程控制器的点数要求。(选型要求) ...…

查看全部问答>

WINCE下,已给窗口句柄,获取应用程序的主窗口的小图标。

用了不少方法都不行 ExtractIcon编译不通过 GetClassLong失败 SendMessage(hwnd,WM_GETICON,(WPARAM)ICON_SMALL,0);   也是失败 用了这个帖子最后回复中的方法http://topic.eeworld.net/t/20061030/15/5119437.html 还是不行,该帖l ...…

查看全部问答>

急!请教WinCE下HalAllocateCommonBuffer使用的问题

大家好,最近我在调试WinCE平台下的摄像头模块时,遇到了如下的问题无法前进了,特向大家请教。 我的系统中最初使用的是一块64MB的RAM chip作为内存,三星主控芯片的CAMIF要求开辟四个ping-pong memory作为帧缓存,我在摄像头驱动中使用HalAllocat ...…

查看全部问答>

我想知道在WINCE的环境下如何实现TrueType字体的显示

初开始学习WINCE, 我想知道在WINCE的环境下如何实现TrueType字体的显示 最重要是将思路写出给我,最好附代码或者一部分主要的代码. 谢谢! 万分感激!…

查看全部问答>

AT+CPBF指令参数

AT指令+CPBF查找电话本记录,对于查找汉字有点不明白 比如说电话本内有条记录是+CPBR: 2,\"13519154544\",129,\"5F207389\" 如果我想找到这条记录应该怎么写CPBF的参数呢 用超级终端测试的时候用AT+CPBF=\"5F20\"查找,如果AT+CSCS=\"GSM”,返 ...…

查看全部问答>

LCD程序

大家谁告诉我这几句是什么意思,谢谢 uint8 xdata   LCD_Command _at_ 0xfdff;uint8 xdata  LCD_Data    _at_ 0xfcff;#define  LCD_Data     XBYTE[0x8000]/*数据入口*/ 附件为电路 ...…

查看全部问答>