2812的C语言中的.reset段的含义以及其在存储器中的定位

问题如下:

疑问一:仿真调试下载程序或把程序已烧写至FLASH后脱机上电运行程序时,程序是不是必须要执行“从0X3F FFC0处复位→执行0X3F FC00地址处的初始化引导函数(Initboot) →根据GPIO选择引导模式→确定用户程序入口地址→从入口处开始执行用户程序”这一系列过程吗?对于用C语言编程时,通常在复位地址向量处(对于F240而言,复位地址在0X0000地址处?),常需要放置指令:“B  _c_int0”来规定初始化入口地址,意即C语言函数“_c_int0”完成的功能就是初始化引导函数(Initboot)的功能吗?但对F2812来说,复位向量地址为0X3F FFC0,处于ROM区,是一次性编程ROM,怎么把_c_int0这个入口地址放在0X3F FFC0处呢?
疑问二:
由于引导模式由GPIO引脚状态决定,那对于一个已经设计好的DSP最小系统,引脚状态在硬件上已经固定好了,意即是不是此时只能局限于一种引导模式了?不能同时进行仿真调试和烧写至FLASH内进行硬件调试吗?(因为仿真调试时,用户程序入口地址一般在SARAMH0处,烧写至FLASH内进行允许时,用户程序入口地址在FLASH处。)

解答如下:

1:上电运行时根据MP/MC引脚的状态决定是从片外的3fffc0处读取复位向量或者时从片内的rom的3fffc0处读取复位向量。MC方式下从片内读取,MP方式下从片外读取。
2:一般我们用的是MC方式,即从片内读取复位向量,在片内的rom 3fffc0处有一个地址为3ffc00。
3:复位后处理器从3fffc0处读取3ffc00这个地址,所以程序从3ffc00处开始执行
4:3ffc00处开始的就是initboot过程吧,根据IO管教的状态判断该进入那一种引导方式
5:在SCITXA{即GPIOF4脚}引脚为高电平时就是flash boot方式,此时置PC=3F7FF6
6:在片内flash的3F7FF6和3F7FF7处有一个跳转指令,该跳转指令就是LB _c_int00
7:执行这个跳转指令后程序就开始运行c_int00这个函数了
8:这个函数就是建立一个c程序的运行环境,等建立完c运行环境后c_int00调用main函数
9:main函数开始就是我们自己编写的应用程序了。

以上是2812上电(复位)后运行过程的描述

如果你选择了MP方式,那么3fffc0处的复位向量可以自己设置,因为此时处理器从片外的ZONE7区的ram中读取复位向量的,当然初始化引导过程也可以自己编写。

lhfnjj 2005-12-6 14:29

在第5步中,为选择片内FLASH,则使SCITXA为高电平。如果SCITXA还用作串口通讯,那怎么办?

haomaru 2005-12-7 08:13

SCITXA引脚有内部上拉,所以只要没有强制下拉的话,DSP检测的都是高电平。
对于通讯不影响。

SCITXA不用在外部上拉。不能直接接到高电平上。


 

我自己理解的是,即 : .reset段表示跳转到_c_int00处的一个程序段 
首先:    .reset段区别于处于复位向量3fffc0(即复位指针,即DSP复位时PC所装的地址,在这个地址中存放了初始化BOOT的程序地址3ffc00,其事先已固化在bootrom的程序)

即系统复位以后首先跳转到复位向量3fffc0处,然后从此处跳转到初始化intboot (3ffc00)处,执行完初始化BOOT.并根据GPIOF口选择启动模式,例如选择从FLASH启动,则退出初始化BOOT程序时,程序则会跳到0x3F7FF6处执行,此处距0x3F7FF8(密码设置区)只有两个字的距离,故在此也就只能放一个跳转指令,即跳转到C语言程序入口,即_c_int00处,个人认为当CMD文件将.reset段配置到0x3F7FF6时,起到的作用就是:即在0x3F7FF6处使程序跳转到_c_int00处。

MEMORY
{
PAGE 0 : 

      。。。
      BEGIN       : origin = 0x3F7FF6, length = 0x000002    

     。。。     
PAGE 1 : 
    。。。 


SECTIONS
{
     .reset              : > BEGIN       PAGE = 0 
  }

 

同理当仿真模式时,初始化BOOT时完成时,程序会跳到H0RAM起始地址0x3F8000处,则此时按如下方式配置CMD文件:即把跳转到_c_int00处的程序段.reset配置到0x3F8000

MEMORY
{
PAGE 0 : 
   PRAMH0     : origin = 0x3f8000, length = 0x001000      

。。。

}

SECTIONS
{
   /* Allocate program areas: */
   .reset           : > PRAMH0,      PAGE = 0

     。。。

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值