DSP bootloader学习笔记1
2015-06-29 23:04
281 查看
DSP bootloader学习笔记1
彭会锋
参考:
彭会锋
参考:
1 TMS320F28xx DSP中内部Flash的应用研究 http://wenku.baidu.com/view/83e9837931b765ce050814fd.html[/code]
1 关于_c_int00问题
从代码注释可以看到 :_c_int00 is branch to start of boot.asm in RTS libray //翻译为中文就是:_c_int00是rts2800_ml.lib的入口地址;
_c_int00是C初始化代码的入口地址
在你用C编程的时候,DSP需要执行一段C运行支持库代码以完成C运行环境的初始化,_c_int00就是这段初始化代码的入口地址,
_c_int00函数在运行支持库(rts,runtime-support library)中。连接器会将这个函数的入口地址放置在复位中断向量处,使其可以在初始化时被调用。c_int0函数进行以下工作以建立C运行环境:为系统堆栈产生.stack块,并初始化堆栈指针。从.cinit块将初始化数据拷贝到.bss块中相应的变量;
执行完初始化代码后,就跳转到main函数,开始运行C程序;
2 f2802x_codestartbranch.asm的分析
此文件是.asm文件,所以需要懂得些汇编指令问题,下面是一些学习到的汇编命令:
跳转指令:LB;
.set : 设置常量给标号 - The .set directive sets a constant value to a symbol;
.ref 在别的地方定义的,在这里被应用,类似于c语言的extern;.def是在当前文件中定义变量; .global 应用的范围相对更广些,可以代替.ref和.def;
.sect 定义包含代码和数据的自定义段,类似于函数定义,注意这里的格式;
注释从分号“;”开始,可以放在指令或汇编命令的后面,也可以放在单独的一行或多行;
3 在阅读的代码中,我发现了一个很有意思的事情,程序应用的是rts2800_ml.lib,印象中的都是rts2800.lib,所以搜索了一些,还是有些不同的!
rts2800.lib:C/C++运行支持库;
rts2800_ml.lib C/C++大内存模式运行支持库.
rts2800_ml.lib中有大量浮点运算处理的函数而rts2800.lib没有
在指针的访问空间上有区别,rts2800.lib中库函数的指针为near,故不能访问3Fxxxx,rts2800_ml.lib可以访问(大小内存模式故名思议就是可以访问的内存的大小有区别,小内存模式只能访问低64k地址,也就是16位地址线)
4 最后附上一张dsp启动的完整示意图,方便大家理解,稍后继续写后续几篇学习笔记
相关文章推荐
- Qt之QTextCodec乱谈
- matlab数据精度
- C++基础知识 --- GDB使用指南
- C#实现键盘钩子
- Oracle PLSQL Demo - 18.02.管道function[查询零散的字段组成list管道返回] [字段必须对上]
- 在Hbase Endpoint Coprocessor中使用coprocessorProxy操作例子与问题解析
- 【读书笔记:C++ primer plus 第六版 中文版】第12章 类和动态内存分配
- Function类型(JS高程3)—— JS学习笔记2015-6-29(第70天)
- Oracle PLSQL Demo - 18.01管道function[查询零散的字段组成list管道返回]
- 解决首次安装android sdk platform-tools文件夹下adb命令无法运行
- Oracle PLSQL Demo - 17.游标查询个别字段(非整表)
- 作业2.29
- LeetCode-The Skyline Problem-解题报告
- C# 基础 new 、override实现多台区别
- Oracle PLSQL Demo - 16.弱类型REF游标[没有指定查询类型,已指定返回类型]
- poj 2942 圆桌骑士 二分图判定判奇圈,点双连通分量 大白经典题目
- 使用jquery.uploadify丢失session信息
- sql server 有用的函数和表
- Oracle PLSQL Demo - 15.强类型REF游标[预先指定查询类型与返回类型]
- Objective-C 快速入门--基础(四)