Chinaunix首页 | 论坛 | 博客
  • 博客访问: 346745
  • 博文数量: 73
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 421
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-03 15:18
个人简介

做笔记用,多为转载。

文章分类

全部博文(73)

文章存档

2016年(2)

2015年(29)

2014年(19)

2013年(23)

我的朋友

分类: C/C++

2013-11-19 20:17:43

转自:http://blog.sina.com.cn/s/blog_65492f12010182t5.html

最近有个项目需要dsp 6657的EMIF16来访问外部的一个逻辑器件,看dsp代码过程中发现其中一句不是很理解,如下,看起来是向某个地址写一个值,但是搜索了一下这个_c_int00,是个外部声明的变量,google之,是这么说的:

点击(此处)折叠或打开

  1. DEVICE_REG32_W(BOOT_MAGIC_ADDR(core),(uint32_t)&_c_int00);


_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的入口地址写到复位中断向量处,系统复位后首先会执行该程序。


阅读(3256) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~