61ic电子在线 首页 技术 嵌入式系统 查看内容

TMS320C28x Software Development Flow

2017-8-22 15:00| 发布者: 61ic| 查看: 1022| 评论: 0|原作者: 61ic|来自: 61ic

摘要: 在做了一些DSP项目之后,越发觉得这个见过很多次的软件开发流程其实真的很重要,无论是CCS还是MATLAB都是围绕这个软件开发流程来进行的。今天参考TI的文档对其进行一个细致的了解。 ...
在做了一些DSP项目之后,越发觉得这个见过很多次的软件开发流程其实真的很重要,无论是CCS还是MATLAB都是围绕这个软件开发流程来进行的。今天参考TI的文档对其进行一个细致的了解。


TMS320C28x Software Development Flow
所有蓝色的部分都是软件开发工具所提供的部分,其中图中的灰色区域是开发C语言程序最常规的途径。

C/C++ Compiler接收C语言代码并生成C28x汇编语言代码。
Assembler将汇编源文件翻译为relocatable object file。relocatable object file中的代码和数据都是从0开始的, 如果不将这些符号进行relocation,那么程序不可能执行起来。
Linker的作用就是将多个relocatable object file组织成单个可执行的object file。Linker以relocatable object file和object库作为输入。cmd文件在此环节使用。它指示了每个段所处的位置。
Archiver用于将一组文件打包为一个归档文件,称为Library。删除,添加,取代,提取成员。Archiver最重要的功能就是创建目标文件库。
run-time-support libraries包含了标准ISO规定的C以及C++库函数,compiler-utility函数,浮点计算函数,C语言IO操作函数,这些函数由编译器提供支持。rts2800_ml.lib跟这个环节有关系。
Hex-conversion utility用于将目标文件转化为其他格式的目标文件(Hex文件)以用于EPROM编程器。
Absolute lister用于将链接的目标文件转化为.abs文件,这个文件拥有汇编代码的绝对地址。
Cross-reference lister是一个调试工具,用于将linked object files(.out文件)转化为交叉引用列表文件。这个列表展示了符号和它们的定义以及它们源文件中的引用。
C/C++ name demangling utility用于将C/C++形式的代码转化为汇编语言形式的代码,比如CCS中C语言代码与汇编代码同时出现便是利用这个工具。
比如如下C++代码

int compute(int val, int *err);

int foo(int val, int *err)

{

static int last_err = 0;

int result = 0

if (last_err == 0)

result = compute(val, &last_err);

*err = last_err;

return result;

}

编译之后会变成:

;***************************************************************

;* FNAME: _foo_FiPi FR SIZE: 4 *

;* *

;* FUNCTION ENVIRONMENT *

;* *

;* FUNCTION PROPERTIES *

;* 0 Parameter, 3 Auto, 0 SOE *

;***************************************************************

_foo_FiPi:

ADDB SP,#4

MOVZ DP,#_last_err$1

MOV *-SP[1],AL

MOV AL,@_last_err$1

MOV *-SP[2],AR4

MOV *-SP[3],#0

BF L1,NEQ

; branch occurs

MOVL XAR4,#_last_err$1

MOV AL,*-SP[1]

LCR #_compute__FiPi

; call occurs [#_compute__FiPi]

MOV *-SP[3],AL

L1:

MOVZ AR6,*-SP[2]

MOV *+XAR6[0],*(0:_last_err$1)

MOV AL,*-SP[3]

SUBB SP,#4

LRETR

; return occurs

再经过name demangler之后:

输入命令:dem2000 foo.asm之后,会输出:

;***************************************************************

;* FNAME: foo(int, int *) FR SIZE: 4 *

;* *

;* FUNCTION ENVIRONMENT *

;* *

;* FUNCTION PROPERTIES *

;* 0 Parameter, 3 Auto, 0 SOE *

;***************************************************************

foo(int, int *):

ADDB SP,#4

MOVZ DP,#_last_err$1

MOV *-SP[1],AL

MOV AL,@_last_err$1

MOV *-SP[2],AR4

MOV *-SP[3],#0

BF L1,NEQ

; branch occurs

MOVL XAR4,#_last_err$1

MOV AL,*-SP[1]

LCR #compute(int, int *)

; call occurs [#compute(int, int *)]

MOV *-SP[3],AL

L1:

MOVZ AR6,*-SP[2]

MOV *+XAR6[0],*(0:_last_err$1)

MOV AL,*-SP[3]

SUBB SP,#4

LRETR

; return occurs

post-link optimizer移除或修改汇编语言指令以产生更优化代码。
disassembler用于将目标文件反编译为汇编指令。
整个过程会产生一个可在TMS320C28x设备上执行的目标文件。
在安装CCS的过程中,比如CCSv6。C:\ti\ccsv6\tools\compiler文件夹中包含了各种设备(TMS320C28x,其他设备还有C6000,C5000,MSP430,ARM

)所需要的工具,所有上述工具和在一起称为CGT即Code Generation Tools。所以Code Generation Tools绝不只是C语言编译器,它其实包含了整个软件开发流程所需的工具集。理论上,不需要CCS(CCS是一个GUI形式的开发环境,它的操作实则是对CGT的调用。)在CGT工具集中包含了一堆命令行程序,集中在例如ti-cgt-c2000_6.4.6\bin的文件夹中。

这也是MATLAB能得以实现自动代码生成的基础吧。MATLAB生成C文件后,使用TI的code Generation tools生成相应的.out文件。最终下载到DSP中,因此原来的那种能自动链接到 CCSv3.3实在不是必须的步骤。在自动代码生成的模式下,MATLAB就是编写代码的GUI,之后的事情由TI提供的CGT提供,如果其他嵌入式系统的设计也是这种模式,软件的集成开发环境-CGT-程序下载,调试器-硬件板的形式的话。那么自动代码生成的过程就可以理解了。

鲜花

握手

雷人

路过

鸡蛋

地址 :湖南省株洲市天元区利江花园
合作 Email: administration@61ic.com

  • 关注61ic官方微博
    了解最新动态

  • 关注61ic微信公众号
    这里有好玩的讯息

  • 加入61ic交流群
    不断在这里成长

© 2014-2017 HuNan 湖南索炜达电子科技有限公司 . All rights reserved.
湘公网安备 43020202000020号

Archiver|手机版|小黑屋||湘ICP备13001086号-2 QQ 
返回顶部