做笔记用,多为转载。
分类: C/C++
2013-11-19 20:17:43
转自:http://blog.sina.com.cn/s/blog_65492f12010182t5.html
最近有个项目需要dsp 6657的EMIF16来访问外部的一个逻辑器件,看dsp代码过程中发现其中一句不是很理解,如下,看起来是向某个地址写一个值,但是搜索了一下这个_c_int00,是个外部声明的变量,google之,是这么说的:
点击(此处)折叠或打开
_c_int00 是c语言程序的入口.首先上电后,系统执行reset矢量代码,该代码是我们写的话,我们就令cpu转到c_int00,这段程序为c语言运行作准备,准备工作做好后,就转到c语言的main()。
如果reset矢量代码不是我们写的,是ti写的,那么就执行bootloader程序,该程序先将从某个外部得到的真正程序放在规定的地方,然后转过去执行该代码。那么如何决定reset矢量代码是ti写的还是我们写的,那就看复位后mp/mc脚的电平。要是调试的时候我们的mp/mc脚选择了我们不希望的方式,怎么办?(在调试的时候一般不管bootloader的,只有项目最后成功了才管),用jtag来控制。
C程序开始运行时,必须首先初始化C运行环境,这是通过c_int0函数完成的,这个函数在运行支持库(rts,runtime-support library)中。连接器会将这个函数的入口地址放置在复位中断向量处,使其可以在初始化时被调用。c_int0函数进行以下工作以建立C运行环境:为系统堆栈产生.stack块,并初始化堆栈指针。从.cinit块将初始化数据拷贝到.bss块中相应的变量。调用main函数,开始运行C程序。用户可以对c_int0函数进行修改,但修改后的函数必须完成以上任务。
那么按google上到的说法就是我们将复位中断向量子程序_c_int00的入口地址写到复位中断向量处,系统复位后首先会执行该程序。