DSP学习(2)—— CCS工程创建
参考教程:bilibili Tronlong创龙
前言
本文主要记录学习使用CCS软件的历程。
一、CCS新工程创建与配置
1. 创建新工程
。。。待补充
复制工程直接CRTL+C/V就好了,如果使用不同的芯片记得把cmd文件修改一下,在build之前把debug文件夹删掉,重新编译即可。
2. 完整的工程至少需要4个文件
参考链接:https://blog.csdn.net/Sir_Rain/article/details/47374781
CCS建立一个完整的工程,至少需要以下4个文件:存储器分配cmd文件、C语言系统库rts2xx.lib、包含main函数的c源文件、矢量跳转表asm汇编文件。
(1)cmd命令文件是用来分配存储空间的,也可以修改链接选项(建工程的时候有选链接“connect”)。CMD文件时要自己写的,而且该文件对于DSP编程是非常重要的,硬件不同,这个文件也就不一样,如果使用错误的CMD配置文件,不仅无法编译,更加无法下载。
(2)rts2xx.lib是C语言系统库,包含了编译器提供的所有功能:①初始化C语言环境(入口地址是_c_int0),②设置堆栈,③提供标准的c语言函数库。
(3)有且只有一个包含main函数的c源文件,系统库初始化完毕后就把控制权交给main()函数了。
(4)矢量跳转表文件,通常是汇编文件(asm)形式,此文件需要准确的定位在程序的起始地址,其内容是汇编语句中的无条件跳转语句“B”。
程序执行的常规流程是:矢量表的第一条指令可设置为"B _c_int0” ,从而在上电复位后,把控制权交给系统库,系统库初始化完毕后,把控制权交给main()函数。
cmd文件编写:
关键字有:
MEMORY;
SECTION;
align ALIGN;
attr ATTR;
LENGTH length len I
ORIGIN origin org o
PAGE page
RUN run
LOAD load
Copy
fill FILL
type TYPE
…
MEMORY
{ // DSP内部的存储空间
名称 可选关键字[RWIX] : o 十六进制地址 l 十六进制地址
}
SECTION
{
.text > MEMORY中定义的名称
}
MEMEORY{} :内存分配描述, MSMCRAM:多核共享内存段,关键字o(origin缩写)代表起始位置,l(length)代表长度。内存段还可以指定一些属性。名称:可以是任意的名字,只要自己能够理解就可以;可选关键字:代表内存区域的属性,R表示内存空间可以读取,W表示内存空间可以被写入,I代表内存空间可以被初始化,X代表内存空间的代码可以被执行。默认省略,代表这段空间同时具有RWIX四种属性;
SECTION{} : 把程序段分配到内存段当中。例如:.text 程序代码本身;.cinit 触发;.const常量表;.switch跳转表;.stack栈空间;.fardata全局变量静态变量;.cio 缓冲区。。。。。CCS有自带模板
对每一个段可以指定一些属性:
RUN run:运行地址
LOAD load:加载地址
fill FILL:初始填充值
type TYPE:类型
align ALIGN:内存对齐,对齐的好处是提高CPU对内存的读取效率。对32位的CPU来说,进行一次内存读取一般默认读取4个字节的内容。
3. build project
build工程以后文件夹会多出一个debug文件夹,记录了编译过程当中的中间文件,debug和工程配置有关。注意里面的map文件,记录程序所使用的内存。
4. 其他后缀文件
转自链接:https://blog.csdn.net/Sir_Rain/article/details/47374781
- .include头文件(.h)的主要作用
头文件,一般用于定义程序中的函数、参数、变量和一些宏单元,同库函数配合使用。因此,在使用库时,必须用相应的头文件说明。
- .DSP/BIOS CONFIG FILES
开发基于DSP/BIOS的程序保存BIOS配置之后自动产生的文件。在保存BIOS配置时候会产生program.cbd/programcfg.h54/programcfg.s54/programcfg.cmd/programcfg.h/programcfg_c.c(C5000的example,program为你的项目名),这些文件被分配在project不同目录。
- Source Files
源程序,实现DSP系统指定功能的主要代码部分
- Program.cmd
链接文件,在源文件经过汇编器(Assembler)输出的OBJ Files(目标文件)需要通过Linker(链接器)才能得到OUT files,在链接阶段Linker根据.cmd里面存储区、Section分配以及lib来链接rst.lib、csl.lib、DSP/BIOS library跟对段的重定位
- Library Filers的作用
Rst.lib:C语言实时运行支持库,建立C运行环境,由_c_int00主要完成设置堆栈指针、初始化全局变量、调用main()
Csl.lib:芯片支持库,实现片内外设的操作
DSPLIB/IMGLIB:信号处理库,利用针对不同DSP的优化的函数进行数学运算
通用的视/音LIB:例如263、264、jpeg、G.7XX、mp3、wmv。。。
其他自己封装的LIB:例如bsl.lib(board source library),对DSP系统板上资源的操作。
- 其他文件:
.opt工程关于开发环境的参数文件。如工具条位置等信息;
.aps (AppStudio File),资源辅助文件,二进制格式,一般不用去管他.
.clw ClassWizard信息文件,实际上是INI文件的格式,有兴趣可以研究一下.有时候ClassWizard出问题,手工修改CLW文件可以解决.如果此文件不存在的话,每次用ClassWizard的时候绘提示你是否重建.
.dsp (DeveloperStudio Project):项目文件,文本格式,不过不熟悉的话不要手工修改.DSW(DeveloperStudio
Workspace)是工作区文件,其他特点和DSP差不多.
.plg 是编译信息文件,编译时的error和warning信息文件(实际上是一个html文件),一般用处不大.在Tools->Options里面有个选项可以控制这个文件的生成.
.hpj (Help Project)是生成帮助文件的工程,用microsfot Help Compiler可以处理.
.mdp (Microsoft DevStudio
Project)是旧版本的项目文件,如果要打开此文件的话,会提示你是否转换成新的DSP格式.
.bsc 是用于浏览项目信息的,如果用Source Brower的话就必须有这个文件.如果不用这个功能的话,可以在Project Options里面去掉Generate Browse Info File,可以加快编译速度.
.map 是执行文件的映像信息纪录文件,除非对系统底层非常熟悉,这个文件一般用不着.
.pch (Pre-Compiled File)是预编译文件,可以加快编译速度,但是文件非常大.
.pdb (Program Database)记录了程序有关的一些数据和调试信息,在调试的时候可能有用.
.exp 只有在编译DLL的时候才会生成,记录了DLL文件中的一些信息.一般也没什么用.
.ncb 无编译浏览文件(no compile browser)。当自动完成功能出问题时可以删除此文件。build后会自动生成。CMD文件时要自己写的(用文本编辑器如写字板),而且该文件对于DSP编程是非常重要的,硬件不同,这个文件也就不一样,如果使用错误的CMD配置文件,不仅无法编译,更加无法下载。这里给一个CMD文件给楼主参考一下,是以前做毕设时写的
二、代码编写注意事项
- volatile
读寄存器数据的时候要加上关键字 volatile
,即告诉编译器不要做优化,每次都按指定位置来读取,这是由于寄存器的数据除了被CPU改变还可以被外设改变,为保证我们访问寄存器的时候读到的数据都是最新的,我们就需要加上这个关键词,尤其是读寄存器的时候。比如我们连续两次读寄存器数据,如果没有这个关键字,第二次读取操作就会被优化掉,就不会重新读了。
- 指针的使用
*(volatile unsigned int *)(地址,eg. 0X00000001)