程序在RAM中调试的运行方式&程序固化后运行方式

发布者:Aq123456258最新更新时间:2015-11-09 来源: eefocus关键字:程序  RAM  调试  运行方式  程序固化 手机看文章 扫描二维码
随时随地手机看文章
程序固化后运行方式:

程序开始运行后需要将RW 和ZI段搬移到RAM中去,程序下载进Flash中以后,上电后是怎样将RW ZI断搬移到RAM中去的?注意IAR和ADS在进行完.s文件的初始化以后都不是直接跳转到main函数去执行,IAR是跳转到?main中而ADS是跳转到__main函数中,在这些函数中根据icf文件的配置,将RW和ZI段搬移到icf文件规定的RAM区域中。如果程序的运行时域是在片外RAM中,那程序是在什么时候对片外RAM控制器进行初始化呢?因为.s文件的开始部分是CODE RO的,不需要RAM空间,所以可以在.s文件中对片外RAM进行配置。还有一个问题,这个问题是在硬件设计时必须注意的,如果需要程序固化在外部Flash中,必须注意外接的Flash必须是片子上电后默认片外总线就支持的片子。

程序在RAM中调试的运行方式

为了调试的方便,程序有时候是不需要下载进flash进行调试,而是直接在RAM中运行,将icf文件中的ROM 和RAM地址都设成硬件RAM的地址,将Flashloader的使能关掉,那么程序就运行在RAM中了。但是问题又产生了,因为有时我们想在外部RAM中调试代码,所以片外RAM控制器需要在代码下载进RAM之前进行初始化,怎么能够实现呢?IAR是通过.mac文件实现的。在程序下载之前先执行了。mac文件中的程序,下面是一个例子

execUserFlashInit()
{
    __writeMemory32(0x1000ffef, 0xffe00000 , "Memory");
    __writeMemory32(0x0f000114, 0xE002C014, "Memory"); 
}

该例子是lpc初始化外部RAM的例子。配置好了外部RAM就可以在里面跑代码了。

程序的IAR下载

1.       文件在片内Flash中下载运行

这是最简单也是最常用的方式,一般的ARM芯片都会带有片内Flash,IAR会通过Flashloader将二进制的可执行文件下载到Flash中。下载的方式如下:如果要将程序B下载到片子里,IAR先将一个程序A(IAR事先编好的程序)下载到片内的RAM中,然后利用这个程序A通过JTAG和Flashloader交互完成程序B的下载。

2.       文件在片外Flash中下载

IAR下载进RAM中的程序A必须支持片外的Flash,他能够完成片外Flash的擦除。往往这个程序需要自己写。像HJTAG的下载机制也是这样,HJTAG中列举了很多HJTAG支持的芯片,所谓支持就是HJTAG很有这些芯片的A程序。在HJTAG中必须要指定程序A将要下载到的RAM的地址,而且这个地址的RAM必须是可用的,比如如果用的片外SDRAM的话就必须初始化SDRAM控制器。这在HJTAG的Init Script中完成、在IAR的mac文件中完成。

3.       文件在片内RAM中下载 、文件在片外RAM中下载

由于这两种方式不需要Flashloader的参与,这时程序的加载时域和运行时域是相同的,程序运行后不涉及程序的搬移,所以只要给IAR指定运行时域的RAM地址就行了,如果是内部RAM,那非常省事,直接在icf文件中将地址都设置成内部RAM就行,如果是外部RAM那么在mac文件中初始化外部SDRAM控制器或者其他的RAM,然后IAR就可以完成将程序放在已经初始化好的外部RAM里,并运行。

关键字:程序  RAM  调试  运行方式  程序固化 引用地址:程序在RAM中调试的运行方式&程序固化后运行方式

上一篇:关于单片机的N多问题
下一篇:MSP430的上拉电阻&I/O口的第二功能

推荐阅读最新更新时间:2024-03-16 14:38

C语言程序执行的第一条指令,并不在 main 函数中
C语言程序执行的第一条指令,并不在 main 函数中。当我们生成一个C程序的可执行文件时,编译器总是在我们的代码前加一段固定的代码 crt0.o,它是编译器自带的一个文件。此段代码设置 C 程序的堆栈等,然后调用 main 函数。很可惜,在我们的裸板上,这段代码无法执行,所以我们得自己写一个。这段代码很简单,只有 3条指令。crt0.s 代码: 1 .text 2 .global _start 3 _start: 4 ldr sp, =1024*4 @设置堆栈,注意:不能大于 4k(栈区是向下增长的) @nand flash 中的代码在复位后会自动
[单片机]
手把手教你学单片机,学完马上能自己编写开发程序
学习单片机,我们要分几个步骤: 第一步:买一个学习开发板,大概要花个100多个大洋。 开发板大家要购买一个适合初学者的,有基本的功能就可以,不要看起来资源非常丰富,但适合学习的资料却非常的少,很多的资料都用不到。 第二步:搭建单片机的开发环境,开发板拿到手之后,安装Keil 软件,新建工程,完成一个控制LED 灯的程序,烧录程序,展示控制LED的效果。 简单的掌握单片机开发的整个流程。 在这之前不需要做任何事情,例如学习C语言灯,0基础也没有问题。 大家只需要按照视频一模一样的模仿即可。 第三步:学习单片机C语言。 C语言是单片机开发的工具,大家一定要掌握。 C语言课程的内容比较多,如果系统学习,需要花很多的时间。 单片机开
[单片机]
#pragma vector语句在IAR for MSP430中断程序编程过程中的使用
在使用keil对STC89C52单片机程序开发过程中使用 void Name_Function interrupt n 来作为中断服务函数程序的入口,但是在IAR for MSP430程序开发过程中则使用#pragma vector提供中断函数入口地址,并使用 _interrupt void _Name_Function来定义中断函数名称,示例如下: #pragma vector = 0xFFF4; //WDT_VECTOR = 0xFFF4 是看门狗定时器中断地址 __interrupt void Watchdog_Timer(void) { /****/ } 1、上面的入口地址也可写成#pragma vector
[单片机]
arm-linux之为开发板写上电自启动程序之方法
开发环境 开发板:AM335 虚拟机:ubuntu 14.04 编译器:gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf 开发板内核:linux 4.4.12 首先开发板的文件使用的是systemd 并没有/etc/rc.local文件 所以要想修改rc.local这一简单的操作已经不存在 但是也是可以用systemd和initd两种方式解决这个问题 1.systemd 我这里是修改自带的service root@am335x-evm:/etc/rc5.d# ls /lib/systemd/system/rc-local.service /lib/systemd/sy
[单片机]
The MathWorks为并行应用程序、多线程计算和64位平台提供关键功能
新功能为大型数据集提供更强的性能和支持 美国马萨诸塞州内蒂克市(NATICK, Mass.) – 2007年11月12日 – The MathWorks 今天宣布在 MATLAB和分布式计算工具中推出四项增强功能,提供更高的性能和大型数据集处理能力。MATLAB 现在包括了针对多核系统和 64 位Solaris平台的多线程计算支持。“分布式计算工具”现在提供的功能可用于开发能插入并行和串行代码的应用程序,并通过运行四个本地 MATLAB 会话在台式机上交互式制作并行算法的原型。 这些增强功能让今天的工程师和科学家不依赖可执行的资源即可开发并行应用程序,帮助他们在更短的时间内开发越来越复杂的建模系统。 运用MATLAB和“分布
[新品]
uClinux下中断驱动的I/O方式
引 言   在32位微处理器逐渐成为嵌入式系统主流的同时,嵌入式应用也变得越来越复杂。许多嵌入式系统都不得不借助于专用的操作系统来支撑自己的应用。uClinux作为类Unix操作系统,继承了Linux的各种优秀的品质,成为首选的嵌入式系统的操作系统。   为自己的设备在操作系统下添加驱动程序,是嵌入式设计必不可少的部分。针对不同的设备类型,选择合适的驱动程序的模式,同样也是十分重要的。通常的设备驱动采用直接I/O的方式,如存储器、看门狗等;而对于象网络这样的数据流设备的驱动,则应该用到中断机制。   本文以uClinux为背景,以一种数据流设备为目标,介绍中断驱动的I/O设备驱动的开发。 1 应用背景 1.1 硬件描述   
[嵌入式]
用C程序语言点亮流水灯
     第一步确定目标:      用C程序语言,编写一个程序,让我们的 电路 板上,产生一组流水灯,让大家看到我们的产品像流水一样闪动。      第二步:找到工具并学会搭建第一个Keil开发平台 首先下载一个Ke112开发软件,相关下载也可找电子报网站下载,解压缩之后就下面的文件。 先安装主程序内的Setup.EXE,双击。这就是我们大名鼎鼎的KEil编译环境了。   第三步程序编写      点击P工程-N新建工程一在下图中输入 LED ,一选择,89C52。一点击确认,一个新的工程就已经建立。      点击F文件一新建一即可建立一个编写文本,我们的程序就是在文本框里编写的,点击保存并且
[单片机]
用C<font color='red'>程序</font>语言点亮流水灯
嵌入式系统内存管理方案研究
摘要:嵌入式系统的内存管理机制必须满足实时性和可靠性的要求。本文以开源的的操作系统RTEMS为例,介绍嵌入式系统中内存管理的要求、存在的问题以及解决的策略。 关键词:嵌入式系统 内存管理 静态分配 动态分配 引言 内存管理机制是嵌入式系统研究中的一个重点和难点的问题,它必须满足以下几个特性: ①实时性。从实时性的角度出发,要求内存分配过程要尽可能地快。因此,在嵌入式系统中,不可能采用通用操作系统的一些复杂而完善的内存分配策略,一般没有段页式的虚存管理机制;而是采用简单、快速的内存分配方案,其分配方案也因程序对实时性的要求而异。例如,VxWorks系统采用简单的“首次适应,立即聚合”方法;VRTX中采用多个固定尺寸存储块的
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
502 Bad Gateway

502 Bad Gateway


openresty
设计资源 培训 开发板 精华推荐

502 Bad Gateway

502 Bad Gateway


openresty
何立民专栏 单片机及嵌入式宝典

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

502 Bad Gateway

502 Bad Gateway


openresty
502 Bad Gateway

502 Bad Gateway


openresty
502 Bad Gateway

502 Bad Gateway


openresty
随便看看
    502 Bad Gateway

    502 Bad Gateway


    openresty
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
502 Bad Gateway

502 Bad Gateway


openresty