保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 电子通信论文 >> 正文

C6202 ROM引导装载方式的研究


int00完成下面三个初始化任务:

(1)建立堆栈并初始化堆栈指针;

(2)初始化全局变量;

(3)运行主函数。

3.2 初始化变量

在程序运行前,全局变量必须初始化。编译器建立了.cinit段用来初始化全局变量和静态变量。

3.2.1 .cinit段

在.cinit段内有不同长度的初始化记录,每一个必须初始化的变量在.cinit段内都有一个对应的记录。如图3。

每个记录包含三部分:需要被初始化的变量的长度、变量的地址和变量初始值。

    3.2.2 运行时初始化变量

若在连接器中使用-c选项,则在程序开始运行时,函数c_int00初始化变量。具体过程如下:仿真器加载程序时,根据.cmd文件的定位,将.cinit段拷贝到C6202的程序存储区或数据存储区,并且用指针指向加载后的初始化表的首地址。当程序开始运行时,函数c_int00中的引导程序自动识别初始化表中的数据格式,初始化.bss段中对应的变量,完成初始化过程。如图4。

3.2.3 加载时初始化变量

若在连接器中使用-cr选项,连接器在.cinit段首设置STYP_COPY位。当仿真器加载程序时,加载器会判断这一位,识别目标文件中.cinit内的初始化记录格式并初始化.bss中的变量,而不是先将.cinit段拷贝到DSP的内存区域。如图5。

3.3 烧写FLASH

要想实现DSP ROM的正常加载,必须将程序存储区中的指令数据正确地写到FLASH里。图1中可以看出,访问片内程序存储器只有两个途径:CPU访问和DMA访问。CPU访问片内程序存储器是通过程序取指单元实现的,然后完成指令分配和指令译码。C6000没有提供任何对片内程序存储器操作的指令,因此不可能直接使用指令取出程序区的内容或者将数据写入程序区中。但是DMA可以访问片内数据存储区、片内程序存储区、片内集成外设、外接存储器等,可以在没有CPU参与的情况下完成映射存储空间中数据的搬移。因此,可以编写一个烧写FLASH的程序。在数据存储区开辟一个缓存区,使用DMA方式将程序区的内容读到这个缓存区,然后再使用指令将缓存区的内容烧写到FLASH内(具体的命令字和程序与C54类似)。如图6。

    为了保证DSP ROM加载后C运行环境正常,全局变量或者静态变量必须初始化。这比使用仿真器加载程序要复杂。解决这个问题,最简单的方法就是:将烧写FALSH的程序(不能含有全局变量和静态变量)和主程序编在一起,在连接器中选择-cr选项,用仿真器加载编译连接后的程序会自动初始化主程序中的变量。将DSP的PC指针直接跳转到烧写FALSH程序处,按照前面的方法使用DMA方式把主程序烧写到FLASH内部,再把已经初始化的变量烧写到FLASH的其他位置,不能覆盖已经写入的数据。另外,在主程序内要自己编写一个自加载函数,完成加载器的功能,即把固化在FLASH内部的变量值读入.cmd文件所定位的.bss中,实现脱机运行时变量的初始化。

笔者在实验中遇到了C6202 ROM加载的问题,通过对DSP内部功能单元的研究,发现采用DMA方式访问程序存储区,实现了程序块的搬移,克服了C6000指令系统的缺陷;对C6000的C语言运行环境进行研究,发现仿真器进行变量初始化的过程,采用自编程自初始化的方法,确保程序加载后能正常运行。

《C6202 ROM引导装载方式的研究(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/159932.html

★温馨提示:你可以返回到 电子通信论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。