当前位置:网站首页>_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中的函数 关系式底层,中层,上层
边栏推荐
猜你喜欢
随机推荐
x86 Exception Handling and Interrupt Mechanism (1) Overview of the source and handling of interrupts
MDK添加注释模板
PAT1012
全网最简单解决OneNote中英字体不统一
STM32使用静态队列保存数据
PAT1004
OC-NSTimer
PTA 矩阵运算
gdb 10.2的安装
End-to-End Object Detection with Fully Convolutional Network学习笔记
mysql参数学习----max_allowed_packet
log4net使用指南(winform版,sqlserver记录)
x86异常处理与中断机制(2)中断向量表
SQL Server查询优化
MySQL传统方案和通过SSH连接哪个好?
二叉树 前序是根在前(根左右)中序(左根右)
PAT 1015 进制转换
Qt 国际化翻译
Arduino学习总结 + 实习项目
剖析STM32F103时钟系统