资料介绍
在一个C/C++程序能正常运行之前,相关的C/C++运行时(run-time)环境首先要正确建立。在CCS软件编程的情况下,C/C++的实时运行库RTS的源程序库rts.src中包含了名为boot.c或者boot.asm的启动程序(在一些TI的例子里,则使用了CodeStartBranch.asm来完成启动工作,它会自动调用库文件中的boot.asm),用于在系统启动后调用c_int00函数,并通过其中的操作来完成运行时环境的建立。通常情况下,c_int00函数位于rts2800.lib库函数中的boot.obj(即TI官方编译boot.c或者boot.asm生成的目标文件)下,这也就是为什么我们在C28x编程的情况下通常要把rts2800.lib库函数加入工程中的原因(其它器件则根据型号、系列添加对应的库文件;否则就会出现初学者经常遇到的找不到boot.c之类的错误)。
注:小型内存模型含义是已初始化的段被链接至低 64Kw(字)可寻址空间内的非易失性内存,它使用rts2800.lib。对于定点器件,如果使用大内存模型(超过64K字),则需要使用库 rts2800_ml.lib;对于含有FPU的器件,用于标准 C 语言代码的为 rts2800_fpu32.lib,或者用于 C++ 代码的 rts2800_fpu32_eh.lib(没有针对浮点器件的较小内存模型库)。在 CCS v5/v6 中,有一个针对库的“自动”设置,此设置可据项目的设置(例如,浮点支持和内存模型选择)让 CCS 自动选择正确的库来使用。对于 DSP/BIOS 项目,DSP/BIOS 将负责将所需的库包括在内,我们用户不需要在项目中包含任何运行支持库。
如果在链接器选项中我们使用了--ram_model或者--rom_mode,则_c_int00函数自动被配置为整个程序执行的入口点。此外,在CPU复位之后(相当于一个软件或者硬件的复位中断),我们也可以把整个程序的入口点指向_c_int00,例如:
.def _Reset
.ref _c_int00
_Reset: .vec _c_int00, USE_RETA
则在执行CPU复位操作之后,系统自动跳转到_c_int00函数。
在c_int00函数中完成的功能主要有:
1. 设置/初始化CPU的状态和配置寄存器。
2. 为系统的栈定义一个.stack段,然后建立并初始化栈的指针。其中,栈需要被分配在单一的、连续的一段地址中,起始点为低地址,终点为高地址,栈指针SP的初始化值指向栈的顶端。
3. 从初始化表中,把数据复制到.bss段中,从而初始化全局变量。如果使用了—ram_model选项在加载程序时就初始化变量,则在程序运行前,会首先运行一个加载程序来完成变量的初始化。如果使用了--rom_model选项,则使用.cinit中的运行时初始化表来完成变量的初始化。
默认情况下,链接器使用--rom_model选项,在程序运行时完成变量的自动初始化。在程序运行时,.cinit段和其它初始化的段会被一起加载到内存中,从而使得C/C++的启动程序可以自动把.cinit中的初始化表格复制到.bss段中,完成全局变量的自动初始化。这种方法的特点在于,初始化的表格可以被存放在更加便宜且大容量的ROM或者FLASH,而不是RAM中,并且可以在程序启动时再自动加载到RAM中,这种方法在我们把程序烧写到FLASH中再运行的时候是经常使用的。关于Flash运行的更多信息,可以参考TI的的一个应用报告:http://www.ti.com.cn/cn/lit/an/zhca550l/zhca550l.pdf,从 TMS320F28xxx 数字信号处理器 (DSP) 上的内部闪存存储器上运行一个应用。
如果使用—ram_model的链接器选项,则链接器会在.cinit段的开头中配置STYP_COPY位(0010h),告诉加载器不要把.cinit段自动加载到内存中,并且把cinit这个符号设置为-1(默认情况下符号cinit指向初始化表格),从而向启动程序表明,内存中没有初始化表格,在启动时不需要执行运行时的初始化工作。在这种情况下,需要我们自定义一个加载程序,从而在加载程序时就完成初始化,它的主要内容包括:
ü 在目标文件中检测.cinit段的存在;
ü 在.cinit段的开头配置STYP_COPY位,使得该段不会被自动复制到内存中;
ü 需要我们理解并正确遵循初始化表格的格式。
这三个注意点貌似比较复杂,不过有读者可能会问,我们在直接把程序通过JTAG下载到DSP的RAM中并运行的时候,貌似并没有配置这么麻烦的步骤啊?那是因为CCS编程环境已经帮我们承担了这一重要任务,在我们用仿真器来调试、运行的时候经常会使用到这个方式。
注意:在C/C++程序运行之前,一些全局变量必须被赋予初始值。在ANSI/ISO C中,未明确初始化的全局和静态变量在程序执行前都需要被初始化为0,C/C++的编译器并不会对它们进行自动初始化。在把程序加载到RAM而不是ROM中的情况下,比较方便的方法是直接把.bss段初始化为0。
- 单片机 keil调试的时候进入不了main函数
- DSP软件编程与算法实现 25次下载
- 在CCSv5内建立DSP库 29次下载
- DSP的开发工具及开发环境的详细资料说明 23次下载
- MDK main函数运行前的详细资料分析 11次下载
- C语言程序的main函数免费下载 3次下载
- DSP的编程指令全集详细资料(免费下载) 8次下载
- TMS320C54xC语言编程和运行环境的详细中文资料概述 18次下载
- DSP编程技巧之运行时模型以及钩子函数与库函数 2次下载
- DSP编程技巧之编译流程与处理器选项 2次下载
- ARM启动文件中的__main, 介绍了C启动函数的设计 9次下载
- DSP正弦函数程序 22次下载
- DSP之AD教程 18次下载
- DSP之CMD文件 17次下载
- DSP环境下C语言的编程优化 22次下载
- 如何查看及更改函数/函数块的调用环境 653次阅读
- main函数的三个参数 933次阅读
- main函数不一定就是程序入口 551次阅读
- KUKA建立函数的方法和例子 996次阅读
- 如何搭建Python编程环境 4945次阅读
- 单片机main()函数退出之后,程序会跑去哪里? 665次阅读
- 深入理解函数式编程(下) 701次阅读
- 深入理解函数式编程(上) 637次阅读
- C语言编程中main()函数退出之后程序去哪儿了 2571次阅读
- 单片机led模块定义函数的问题 1514次阅读
- main函数的末尾没有return语句会有什么影响 5887次阅读
- 如何解决STM32调试无法进入main函数的问题? 1.5w次阅读
- 浅谈C语言return语句和main 函数的返回值 5161次阅读
- Curiosity PIC32MZEF学习教程之:如何建立独立的工程 2152次阅读
- 详解单片机程序的运行过程 9465次阅读
下载排行
本周
- 1新概念模拟电路第四册信号处理电路电子书免费下载
- 10.69 MB | 50次下载 | 免费
- 2SL6341B USB3.2 Gen1X1 接口的的4口HUB
- 2.94 MB | 5次下载 | 免费
- 3FT-7800R对讲机维修手册附原理图
- 3.35 MB | 2次下载 | 免费
- 4和芯润德USB3.0HUB芯片SL6341设计资料
- 2.58 MB | 2次下载 | 免费
- 5TPS80032原理图核对表
- 74.95KB | 2次下载 | 免费
- 6使用CR6850C设计并制作12V5A开关电源
- 1.53 MB | 2次下载 | 2 积分
- 7设计院eplan 500多页项目图纸
- 21.43 MB | 2次下载 | 1 积分
- 82.1 MHz类放大器电感选择指南
- 598.3KB | 1次下载 | 免费
本月
- 1新概念模拟电路第四册信号处理电路电子书免费下载
- 10.69 MB | 50次下载 | 免费
- 2SW6308V原理图设计指南
- 0.75 MB | 14次下载 | 1 积分
- 3SW6308V三口多协议升降压移动电源SOC中文手册
- 1.61 MB | 14次下载 | 1 积分
- 4纯电动汽⻋的主要部件及⼯作原理
- 5.76 MB | 12次下载 | 5 积分
- 5800VA纯正弦波逆变器的参考设计
- 2.96MB | 12次下载 | 免费
- 6GP328和GP88S对讲机的维修实列资料合集免费下载
- 0.03 MB | 10次下载 | 10 积分
- 7SW6308V寄存器手册
- 1.08 MB | 10次下载 | 1 积分
- 8IP5385_DEMO开发资料
- 1.96 MB | 8次下载 | 2 积分
总榜
- 1matlab软件下载入口
- 未知 | 935115次下载 | 10 积分
- 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
- 1.48MB | 420061次下载 | 10 积分
- 3Altium DXP2002下载入口
- 未知 | 233084次下载 | 10 积分
- 4电路仿真软件multisim 10.0免费下载
- 340992 | 191364次下载 | 10 积分
- 5十天学会AVR单片机与C语言视频教程 下载
- 158M | 183329次下载 | 10 积分
- 6labview8.5下载
- 未知 | 81581次下载 | 10 积分
- 7Keil工具MDK-Arm免费下载
- 0.02 MB | 73805次下载 | 10 积分
- 8LabVIEW 8.6下载
- 未知 | 65985次下载 | 10 积分
评论
查看更多