当前位置:网站首页>_main C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_20.2.1.LTS/lib/rts2800_fpu32.lib<ar在线升级跳转疑问

_main C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_20.2.1.LTS/lib/rts2800_fpu32.lib<ar在线升级跳转疑问

2022-08-09 11:16:00 量子力学和生命科学

kernel程序编写的时候,主函数main()的名字改成CKFAmain()。

由于该函数在RAM中运行,所以CMD中指定:

BEGINckfa        : origin = 0x008000, length = 0x000002

codestart        : >    BEGINckfa,     PAGE = 0

编译后报错:

undefined first referenced                                                                               
  symbol       in file                                                                                    
 --------- ----------------                                                                               
 _main     C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_20.2.1.LTS/lib/rts2800_fpu32.lib<args_main.c.obj>

原因:

 *_c_int00函数在in RTS library中,这个库其实有汇编源文件boot28._asm,这个源文件就是 _c_int00所在的位置.
 *即使是在RAM中运行,JTAG为运行准备好了运行环境,CMD 的BEGIN 指定的code_start段运行CKFA_Start.asm中的code_start函数,这个函数调用_c_int00,跳转到main,
 *但是在库中,main无法修改,所以要找到库中的源文件,自己修改,也就是boot28._asm这个文件,把main修改成CKFAmain,然后在工程中加入boot28._asm,
 *于是工程就不再调用库中的那个boot28._asm了。这样就不会报错没有定义main了

三者关系:BOOT ROM中的程序,DSP2803x_CodeStartBranch.asm和 rts lib
CPU上电复位,复位向量里面装的跳转指令将BOOT ROM中程序的首地址给了PC,运行BOOT ROM中的程序,默认情况下,
该程序退出后,跳转到0x3F7FF6,而这个地址里面装的就是跳转指令LB _c_int00,该指令就在DSP2803x_CodeStartBranch.asm中,
 _c_int00函数在rts lib中,正常情况下,要包含该库,且该函数做完一些列动作后,调用main函数,
但是在SBL程序中,主函数的名字,要改一下,改成SBLmain(),所以直接调用rts lib,会报错,说main符号没有定义,
所以就要把rst lib库中,函数 _c_int00对main的引用改成对SBLmain的引用,但是rts lib库没办法该,不过这个库也是源文件生成的,
直接把 _c_int00所在的源文件boot28.asm复制到工程中来,在其中重新定义一个全局变量SBLmain,然后替代main的应用,在工程配置文件中,
不再配置对rts LIB的引用,编译后,程序直接使用boot28.asm

BOOT ROM 中的函数,本工程中的函数,RTS LIB中的函数 关系式底层,中层,上层

原网站

版权声明
本文为[量子力学和生命科学]所创,转载请带上原文链接,感谢
https://blog.csdn.net/blueoce/article/details/120569089