分享

关于DSP中c_int00和引导程序

 吴家小院 2012-09-13
关于DSP中c_int00和引导程序
    1 ._c_int00符号的说明。它是运行支持库(RTS.lib)包含的一个重要函数。如果Linker选项使用-c或-cr选项,_c_int00被自动定义为程序的入口点。用c语言编程时要注意:在project-》options的linker属性页中要有-c,那是与c程序的入口。在Linker选项下面选择NoAutoinitialization
    2. _c_int00是c语言程序的入口。 系统上电复位后,首先执行reset矢量代码,如果这个代码是我们写的话,我们就令CPU转到c_int00,这段程序为c语言运行做准备。准备工作完成后,就转到c语言的main()。 
    3. 如果reset矢量代码不是我们写的,是TI公司写的那么就执行bootloader程序,该程序将从某个外部得到的真正程序放在规定的地方,改后转过去执行该代码。 如何决定reset矢量代码是ti写的还是我们写的,那就看复位后mp/mc脚的电平。要是调试的时候我们的mp/mc脚选择了我们不希望的方式,怎么办?(在调试的时候一般不管bootloader的,只有项目最后成功了才管),用jtag来控制。 
    4. C程序开始运行时,必须首先初始化C运行环境,这是通过_c_int00函数来完成的,这个函数在运行支持库(rts.lib)中。连接器会将这个函数的入口地址放在复位中断向量中,使其可以在初始化时被调用。_c_int00函数为建立C运行环境,需完成以下工作: 为系统堆栈产生.stack块,并初始化堆栈指针; 从.cinit块将初始化数据拷贝到.bss块中相应的变量; 调用main函数,开始运行C程序; 
  5. c_int00是C初始化代码的入口地址,在你用C编程的时候,DSP需要执行一段C运行支持库代码以完成C运行环境的初始化,_c_int00就是这段初始化代码的入口地址。执行完初始化代码后,库代码会自动跳到main函数继续运行。
    我以前遇到有汇编和c混合编程有c_int00() 错误和警告的问题,你的bootload程序运行到c_int00() 跳转不了!运行c_int00() 后直接死了,会不会是没有加载到合适的库(rts.lib),进入了一个死循环,跳不到主函数那去

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多