C28x DSP程序加载与运行

本文详细介绍了C28x DSP程序的加载和运行过程,包括加载地址和运行地址的区别、引导加载程序的功能、_c_int00()函数在运行时初始化中的作用,以及ROM模型和RAM模型的差异。程序加载可通过调试器、EPROM模块或专用外设引导加载。C28x DSP的启动程序c_int00负责初始化和调用主函数。RAM模型在加载时初始化变量,而ROM模型则在运行时自动初始化。

C28x DSP程序加载与运行

1 C28x DSP程序加载和运行

1.1 程序加载

在DSP复位后,执行程序之前,需要将程序放入目标设备的内存中,这就是程序的加载。加载过程初始化了设备内存、程序代码和数据,完成程序执行的准备工作。程序加载完成后,CPU会跳转到相应的入口地址继续执行程序。

加载程序可能是设备上的另一个程序,一个外部代理(例如,一个调试器),或者设备可能在开机后初始化自己,这称为引导加载(BootLoader)。

加载程序负责在程序启动之前在内存中构建加载镜像。加载镜像是程序执行前内存中的代码和数据。加载程序的组成部分取决于环境,例如操作系统是否存在。在使用COFF RAM模型时,加载程序负责解析.cinit部分,并在加载时执行.cinit代码的初始化。

程序可以通过以下方式加载:

  • 在连接调试器的主机工作站上运行:在典型的嵌入式开发设置中,设备从属于运行调试器(如Code Composer Studio (CCS))的主机。该设备与主机通过调试接口(如JTAG接口)连接。CCS读取程序并通过调试接口将加载镜像直接写入目标内存。
  • 将加载镜像“刻录”到EPROM模块上:hex转换器(hex2000)可以将可执行的目标文件转换成适合EPROM的格式,EPROM集成在设备中并成为设备内存的一部分。
  • 专用外设(如SCI外设)引导加载:在设备复位时,首先会运行BOOT ROM中的程序,该程序会通过判断BOOT引脚的状态来确定从FLASH启动还是RAM启动,或者是执行外设引导程序。BOOT ROM中有多个外设引导加载程序,通过配置BOOT引脚可以选择复位后执行哪个外设引导加载程序。C2Pro烧录工具就是使用SCI引导加载程序加载.hex文件的。
  • 设备上运行的另一个程序:正在运行的程序可以加载镜像并跳转到新加载的程序中继续执行。如果使用了操作系统,该操作系统可能具有加载和运行程序的能力。

1.1.1 加载地址和运行地址

加载地址是镜像文件中给数据对象分配的存储地址,运行地址是数据对象在程序执行期间存在的地址。(数据对象是一块内存,它表示一个Sector、段、函数或变量等数据)。

  • 程序代码和只读数据的加载地址和运行地址是相同的,如.econst Sector和.text Sector。在这种情况下,程序可以直接从加载地址读取数据。

  • 可写数据(如:变量)的加载地址和运行地址是不同的,如:.data Sector,.data Sector的起始内容加载到ROM中,运行时复制到RAM中。复制通常发生在程序启动期间(_c_int00启动函数自动完成,如:变量的初始化),但也可能是在启动后的某个时刻由用户显示实现(如:某个函数在FLASH中加载,在RAM中运行)。

  • 没有初始值的Sector,如.ebss Sector没有加载地址,或者说加载地址和运行地址相同。如果为未初始化的数据指定不同的加载地址和运行地址,链接器将提供警告并忽略加载地址。

汇编代码和目标文件中的符号几乎总是指向运行地址。当查看程序中的地址时,几乎总是在查看运行地址除了初始化之外,很少使用加载地址

一个Sector的加载地址和运行地址由链接命令文件(CMD文件)控制,并记录在目标文件中。加载地址决定加载程序将该Sector的原始数据存放在何处。运行地址决定了程序运行时该Sector的地址。对该Sector的任何引用(例如对其中的变量的引用)都指向它的运行地址。如果在CMD文件中为Sector指定了不同的的运行地址和加载地址,在调用该Sector中的数据之前,用户程序必须将该Sector从其加载地址复制到其运行地址。复制不会自动发生,所以需要在用户程序中显式地完成复制过程。

程序中的全局变量是可写的,所以全局变量必须位于可写内存中,通常是RAM中。然而,RAM是不稳定的,这意味着当断电时,它将失去数据。如果该数据有初始值,那么该初始值必须存储在非易失性内存中,如FLASH。在使用初始值之前,必须将初始值从非易失性ROM(如:FLASH)复制到RAM中。

1.1.2 引导加载程序

在设备复位时,首先会从BOOT ROM中获取复位中断向量,然后根据复位中断向量运行BOOT ROM

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值