CCS学习总结.docx
《CCS学习总结.docx》由会员分享,可在线阅读,更多相关《CCS学习总结.docx(18页珍藏版)》请在冰豆网上搜索。
CCS学习总结
1小知识点
1.1文件扩展名:
project.mak.CCS使用的工程文件
filename.lib.库文件
project.cmd.连接命令文件
program.obj.由源文件编译或汇编而得的目标文件
program.out.(经完整的编译、汇编以及连接的)可执行文件
project.wks.存储环境设置信息的工作区文件,
program.cdb.配置数据库文件。
采用DSP/BIOSAPI的应用程序需要
保存配置文件时将产生下列文件:
programcfg.cmd.连接器命令文件
programcfg.h54.头文件
programcfg.s54.汇编源文件
1.2在工程的创建过程中,CCS扫描文件间的依赖关系时将自动找出包含文件(头文件),因此不必人工地向工程中添加包含文件
1.3菜单Option-—font:
设置字体
1.4HELLO.CMD文件的代码,MEMORY分为程序空间IPRAM和数据空间IDRAM,并分别给出了起始地址origin和长度len,各段在MEMORY空间的分配也作了定义。
对于实际的目标板硬件系统,由实际的存储器空间及DSP芯片上的存储空间决定。
对于软件仿真,可以不考虑有没有MEMORY资源。
1.5不同的DSP芯片需要不同的运行时库来支持
1.6编译时双击错误光标会跳到错误的那行
1.7用C语言编写的函数在配置工具里必须在原C函数名前加一个下划线,
如C函数名为test则需填入_test
1.8Gel文件主要做一些系统初始化的工作
2DSP芯片系列
2.1美国德州仪器
(1)面向数字控制、运动控制的TMS320C2000系列,主要包括TMS320C24x/F24x、TMS320LC240x/LF240x、TMS320C24xA/LF240xA、TMS320C28xx等。
(2)面向低功耗、手持设备、无线终端应用的TMS320C5000系列,主要包括TMS320C54x、TMS320C54xx、TMS320C55x等。
(3)面向高性能、多功能、复杂应用领域的TMS320C6000系列,主要包括TMS320C62xx、TMS320C64xx、TMS320C67xx等。
2.2美国模拟器件公司
ADI公司在DSP芯片市场上也占有一定的份额,相继推出了一系列具有自己特点的DSP芯片,其定点DSP芯片有ADSP2101/2103/2105、ADSP2111/2115、ADSP2126/2162/2164、ADSP2127/2181、ADSP-BF532以及Blackfin系列,浮点DSP芯片有ADSP21000/21020、ADSP21060/21062,以及虎鲨TS101,TS201S。
2.3Motorola公司
Motorola公司推出的DSP芯片比较晚。
1986年该公司推出了定点DSP处理器MC56001;1990年,又推出了与IEEE浮点格式兼容的的浮点DSP芯片MC96002。
还有DSP53611、16位DSP56800、24位的DSP563XX和MSC8101等产品。
2.4杰尔公司
杰尔公司的SC1000和SC2000两大系列的嵌入式DSP内核,主要面向电信基础设施、移动通信、多媒体服务器及其它新兴应用。
3DSP/BIOS-API模块
3.1DSP/BIOSAPI划分为下列模块,模块内的任何API调用均以下述代码开头
3.2DSP/BIOSAPI被分成很多不同的模块,只有需要的模块才会链接到应用程序中,被使用的模块要在源代码中包含相应的头文件。
应用程序通过调用DSP/BIOSAPI函数来完成各种诊断调试功能。
3.3DSP/BIOSAPI专门为实时DSP程序优化,可以为嵌入式程序提供基本的运行服务。
与标准C库函数(如puts函数)不同,它可以再不中断目标板硬件的情况下对DSP系统进行实时分析。
同时,DSP/BIOSAPI代码占用更少的空间,运行速度比标准C输入/输出更快。
一个DSP程序可以根据需要使用一个或多个DSP/BIOS模块
3.3.1CLK。
片内定时器模块控制片内定时器并提供高精度的32位实时逻辑时钟,它能够控制中断的速度,使之快则可达单指令周期时间,慢则需若干毫秒或更长时间。
3.3.2HST。
主机输入/输出模块管理主机通道对象,它允许应用程序在目标系统和主机之间交流数据。
主机通道通过静态配置为输入或输出。
3.3.3HWI。
硬件中断模块提供对硬件中断服务例程的支持,可在配置文件中指定当硬件中断发生时需要运行的函数。
3.3.4IDL。
休眠功能模块管理休眠函数,休眠函数在目标系统程序没有更高优先权的函数运行时启动。
3.3.5LOG。
日志模块管理LOG对象,LOG对象在目标系统程序执行时实时捕捉事件。
开发者可以使用系统日志或定义自己的日志,并在CCS中利用它实时浏览讯息。
3.3.6MEM。
存储器模块允许指定存放目标程序的代码和数据所需的存储器段。
3.3.7PIP。
数据通道模块管理数据通道,它被用来缓存输入和输出数据流。
这些数据通道提供一致的软件数据结构,可以使用它们驱动DSP和其它实时外围设备之间的I/O通道。
3.3.8PRD。
周期函数模块管理周期对象,它触发应用程序的周期性执行。
周期对象的执行速率可由时钟模块控制或PRD_tick的规则调用来管理,而这些函数的周期性执行通常是为了响应发送或接收数据流的外围设备的硬件中断。
3.3.9RTDX。
实时数据交换允许数据在主机和目标系统之间实时交换,在主机上使用自动OLE的客户都可对数据进行实时显示和分析
3.3.10STS。
统计模块管理统计累积器,在程序运行时,它存储关键统计数据并能通过CCS浏览这些统计数据。
3.3.11SWI。
软件中断模块管理软件中断。
软件中断与硬件中断服务例程(ISRs)相似。
当目标程序通过API调用发送SWI对象时,SWI模块安排相应函数的执行。
软件中断可以有高达15级的优先级,但这些优先级都低于硬件中断的优先级。
3.3.12TRC。
跟踪模块管理一套跟踪控制比特,它们通过事件日志和统计累积器控制程序信息的实时捕捉。
如果不存在TRC对象,则在配置文件中就无跟踪模块。
有关各模块的详细资料,可参见CCS中的在线帮助,或TMS320C54DSP/BIOS用户指南。
3.4设备/实时分析
LOGMessageLogmanger
STSStatisticsaccumulatormanager
TRCTracemanager
RTDXReal-TimeDataExchangemanager
3.5线程类型
HWIHardwareinterruptmanager
SWISoftwareinterruptmanager
TSKMultitaskingmanager
IDLIdlefunction&processingloopmanager
3.6时钟和周期函数
CLKSystemclockmanager
PRDPeriodicfunctionmanger
3.7线程间的同步与通信
SEMSemaphoresmanager
MBXMailboxesmanager
LCKResourcelockmanager
3.8输入/输出
PIPDatapipemanager
HSTHostinput/outputmanager
SIOStreamI/Omanager
DEVDevicedriverinterface
3.9内存和低级原语
MEMMemorymanager
SYSSystemservicesmanager
QUEQueuemanager
ATMAtomicfunctions
GBLGlobalsettingmanager
4为了编译和运行程序,要按照以下步骤进行操作:
4.1点击工具栏按钮或选择Project→RebuildAll
,CCS重新编译、汇编和连接工程中的所有文件,有关此过程的信息显示在窗口底部的信息框中。
4.2选择File→LoadProgram,选择刚重新编译过的程序myhello.out(它应该在c:
\ti\myprojects\hello1文件夹中,除非你把CCS安装在别的地方)并点击Open。
CCS把程序加载到目标系统DSP上,并打开Dis_Assembly窗口,该窗口显示反汇编指令。
(注意,CCS还会自动打开窗口底部一个标有Stdout的区域,该区域用以显示程序送往Stdout的输出。
)
4.3点击Dis_Assembly窗口中一条汇编指令(点击指令,而不是点击指令的地址或空白区域)。
按F1键。
CCS将搜索有关那条指令的帮助信息。
这是一种获得关于不熟悉的汇编指令的帮助信息的好方法。
4.4点击工具栏按钮或选择Debug→Run。
5新建一个DSP/BIOS对象(配置)
5.1选择File——New——DSP/BIOSConfiguration
5.2在弹出的对话框中选择需要的开发平台(如在此选择sim64xx),单击OK
5.3DSP/DIOS配置
5.3.1图形方式:
其界面类似于windows的资源管理器
系统设备调度同步输入输出
指向配置的一个项点右键,InsertObject是插入一个对像,Propertrie是修改一个对像。
5.3.2文本方式:
用户将使用JavaScript语法来对配置编程
5.4如下图,选择配置的方法
5.5在配置窗口中新建、修改DSP/BIOS对象并保存
5.6将配置文件保存为XXX.tcf,此时还会产生其他的一些程序必需用到的链接命令文件(*cfg.cmd)、头文件(*cfg.h)、汇编源文件(*cfg.s64)等。
将产生的文件添加到工程中,注意有些文件可以自动添加有些则要手动添加。
5.7DSP/BIOS配置工具是一个与Windows资源管理器具有相似界面的可视化编辑器,创建目标程序DSP/BIOSAPI所调用的运行对象和设置其属性。
其配置工具模块树窗口如图:
5.8引用静态创建的DSP/BIOS对像
配置工具会在*cfg.h中声明已存在的静态对像
6DSP/BIOS插件(分析工具)
6.1DSP/BIOS插件的实时分析特性CCS能利用DSP/BIOS插件对DSP应用程序进行实时分析,并可以实时监测DSP应用程序的运行,同时对DSP应用程序的实时性的性能影响很小。
其提供的实时分析特性如下:
6.1.1程序跟踪:
能显示写入目标日志的事件并在程序执行过程中反应动态控制流程;
6.1.2性能监控:
能动态跟踪和统计DSP目标系统板上的资源使用情况,如DSP处理器的负载和线程的时序;
6.1.3文件流:
能将DSP目标系统板上的I/O对象与PC主机上的文件关联起来。
7DSP/BIOS应用程序的执行顺序
7.1当一个DSP/BIOS应用程序执行时,执行顺序由启动文件boot.s54文件(C54x平台)或autoinit.c文件和boot.snn文件(C6000和C55x平台)中的调用和指令所决定。
在bios.ann文件和bios.ann库文件中提供了一个已经编译好的启动文件,源代码位于产品中已分配的固定磁盘内。
启动文件中源代码所指定的DSP/BIOS启动时序如下。
用户不用改变启动时序。
7.2初始化DSP:
DSP/BIOS应用程序从C或C++环境语言入口点c_int00处开始执行。
当复位后,复位中断矢量把程序入口点设置到c_int00处。
同时:
7.3对于C54x平台,在C_int00处开始时,系统堆栈指针(SP)被设置为指向堆栈底部。
状态寄存器(如st0和st1)也被初始化。
7.4对于c55x平台,在C_int00处开始时,数据(用户)堆栈指针(XSP)和系统堆栈指针(XSSP)都各自的指向用户和系统堆栈的底部。
另外XSP对齐于一个平滑的地址边界。
7.5对于c6000平台,在C_int00处开始时,系统堆栈指针(B15)和全局页面指针(theglobalpagepointer)(B14)分别指向堆栈段底部和.bss的起始处。
控制寄存器(如AMR,IER和CSR)都被初始化。
8DSP/BIOS线程调度
8.1线程名词解析:
非抢占(Nopreemption):
资源不能被抢占,这意味着只有持有资源的进程才能释放它。
.
对象(Object):
DSP/BIOS提供的数据和代码结构集,如一个事件,任务,信号量。
挂起(Pend):
等待一个事件资源,暂时被淘汰出内存。
触发(Post):
给一个事件信号,如触发一个软中断,即将软中断置于准备队列中。
抢占(Preemption):
一个更高优先级的函数(或线程)打断优先级更低的函数(或线程)。
优先级调度(Priorityscheduling):
优先级调度可以是抢占的也可以是非抢占的。
一个抢占式优先级调度算法在有更高优先级的进程到来时会抢占(释放)CPU
进程(Process):
一个任务或执行线程。
调度器(Scheduler):
管理线程间执行的系统软件。
调度(Scheduling):
用于共享资源的方法。
信号量(Semaphore):
同步系统对象,使任务间能同步活动
8.2线程类型
8.2.1IDL:
空闲函数模块,管理空闲状态函数,当目标程序没有更高优先级的程序执行时,DSP处于空闲状态,此间可进行主机与目标系统的数据传输;
8.2.2HWI:
硬件中断模块,为硬件中断程序提供支持,在配置文件中可指定发生时要运行的函数;频率可达200KHz(5us),处理时限在2us~100us.
8.2.3SWI:
软件中断模块,管理软件中断,当一个目标程序使用API调用发送一个SWI对象时SWI模块调度相关函数的执行,软件中断共有15个优先级但都比硬件优先级低。
时限100us以上,SWI允许HWI将一些非关键处理在低优先级上延迟执行,这样可减少在中断服务程序中的驻留时间。
8.2.4TSK:
任务模块,管理比软件中断优先级低的任务线程;任务与软件中断不同的地方在于在运行过程中可以被挂起。
DSP/BIOS提供了一些任务间同步和通讯的机制,包括队列、信号灯和邮箱。
8.3各线程类型的特性:
8.3.1各个SWI都使用同一个堆栈,每个TDL拥有各自的堆栈
8.4硬件中断(HWI)
8.5软件中断(SWI)
8.5.1KNL_swi:
8.5.2SWI对象的邮箱(mailbox):
可以用于决定是否触发该软件中断,也可作为考察SWI函数的数值。
SWI被从等待列表中删除并被调度运行之后,其邮箱值立刻被复位。
8.5.3一个SWI对象在被移出队列之前,如果被多次触发,一般情况下,SWI管理器只会调度其函数执行一次。
8.5.4禁止和恢复SWI:
SWI_disableSWI_enable
8.6任务(TSK)
8.6.1TSK_idle任务
8.6.2动态创建任务
创建任务对象:
TSK_create函数
删除一个TSK对象:
TSK_delete函数
释放任务对象:
MEM_free
8.6.3静态创建任务
8.6.4任务的执行和调度
8.6.5检测堆栈溢出
8.6.6任务钩子
8.7空闲循环(IDL)
8.7.1特点:
空闲循环是DSP/BIOS的后台线程,只有没有硬件中断,软件中断,任务运行的时候才会循环运行,其他任何线程可以在任何时候抢占空闲循环。
8.8功率管理(PWRM)
DSP/BIO功率管理模块(PWRM)允许用户降低其应用程序的功耗。
8.9信号灯(SEM)
8.10邮箱(MailBox)
MBX模型为mailbox提供了一系列函数支持,比如MBX_pend和MBX_post。
而mailbox可以用来在同一块处理器上运行的进程相互通信。
mailbox是同步通信机制,而且mailbox在传递之前就已经确定了大小,这样可以保证成堆的信息接踵而来的时候不会超出系统的处理能力。
我们网络监控系统的mailbox初始化的时候mailbox每条信息容量的上限为500字节,长度为12,也就是可以存储12条信息。
8.11定时器,中断,系统时钟
8.11.1PRD_clock:
系统时钟
9DSP/BIOS中设备驱动
9.1IOM类驱动简介:
将设备驱动分为依赖于硬件层和不依赖于硬件层,两层之间使用通用接口进行数据通信,提高了软件的可重用性和模块化程度,简化了驱动程序的开始
在类/微型驱动模型中,类驱动通常用于完成多线程I/O请求的序列化功能和同步功能,同时对设备实例进行管理。
在包括视频系统I/O和异步I/O的典实时系统中,只有少数的类驱动需要表示出外部设备的类型。
类驱动通过每个外部设备独有的微型驱动对设备进行操作。
微型驱动通过控制外设的寄存器、内存和中断资源对外部设备实现控制。
微型驱动程序必须将特定的外部设备有效地表示给类驱动
9.2类驱动
DSP/BIOS定义了3种类驱动:
SIO/DIO、PIP/PIO和GIO。
这3种类驱动对应不同的数据
传输模式。
DSP/BIOS支持两种数据传输模式:
流(stream)和管道(pip)。
SIO模块执行流数据传输,PIP模块执行管道数据传输。
两种模块都必须通过各自的适配模块(adapter)与微驱动的IOM接口传输数据。
SIO的适配模块称作DIO,PIP的适配模块称作PIO。
GIO采用基于流的同步I/O数据传输模式,包含有内置的IOM适配层,可以直接与微驱动通信。
本文所述的DM642的VideoPort驱动采用GIO类驱动。
图2说明了GIO类驱动与系统中其他层的关系
9.3微驱动
直接控制外部设备,通常包括如下函数:
通道绑定函数(mdBindDev)、通道创建/删除函数(mdCreateChan/mdDeleteChan)、I/O请求发送函数(mdSubmitChan)、中断服务函数(ISRs)和设备控制函数(mdControlChan)。
这些函数入口放在微驱动的函数表中,GIO可通过函数表指针IOM_Fxn调用
10监测
10.1变量监测:
10.1.1WatchWindow(窗口):
10.1.2其有两个窗口:
WatchLables;Watch1;
WatchLables:
是显示正在执行的函数中定义的变量(必需在函数中设置断点)
Wath1:
用于查看全局的变量(可用右建选择
)
10.2LOG
10.2.1LOG模块概述
目标程序执行时,可以使用LOG模块中的事件日志来记录实时的事件。
我们可以使用系统日志,也可以创建用户自定义的日志。
如果日志类型是循环的,那么缓存区始终保存的是最后一次记录的信息。
如果日志类型是固定的,那么缓存区始终保存了第一次记录的信息。
LOG模块的系统日志存储与系统事件有关的消息,这些系统消息应该是我们在TRC跟踪模块中激活了的事件。
为了减少运行时间,日志数据的格式化处理总是在主机上完成。
也就是说,由运行CCS的主机而不是DSP目标系统来处理这些日志数据,理解这点很重要。
我们通常使用LOG_printf函数来替代标准C语言中的printf函数,以便更快的在CCS中显示需要打印的信息。
日志缓存区是在数据存储器中一段固定大小的存储空间。
在日志缓存区里,一个消息占用4个字的存储空间。
第一个字用来存储序号,这些序号控制事件日志用正确的顺序显示日志。
剩下的3个字记录数据,它们是调用API函数时写进日志的。
10.2.2LOG模块配置
打开DSP/BIOS配置文件,然后展开“Instrumentation”选项,LOG-EventLogManager菜单下:
“LOG_system”对象是系统创建该配置文件时自动添加的,用于系统事件记录;“LOG_msg”是用户自定义。
鼠标右键单击该对象名称,在弹出的菜单中选择“Properties”激活属性窗口。
comment:
添加一段注解来说明该LOG对象。
bufseg:
选择日志缓冲区的存储段的名称。
buflen:
说明日志缓冲区的大小(以字为单位)。
logtype:
说明日志类型,循环或者固定。
在缓冲区内,原有的循环类型的日志可以被新的事件覆盖,但是固定类型的日志不能被覆盖。
因此,当你的日志消息可以正常显示但不更新时,请设置日志类型。
fixed(固定):
只存储其最先接收的信息,当消息缓冲区满时就会拒绝接收新的信息。
circular(循环):
当消息缓冲区满时,新日志会自动覆盖原有的日志。
datatype:
如使用LOG_printf函数来打印输出日志信息时,请选择“printf”类型。
如使用LOG_event函数记录日志信息,请选择“rawdata”。
format:
当datatype选择“rawdata”即原始数据作为数据类型,那么就要写一段“printf风格”的格式串。
10.2.3LOG模块API函数说明
1、LOG_disable:
关闭指定对象的日志记录功能,此时日志缓冲区的内容将不会被更新。
2、LOG_enable:
允许日志记录事件。
DSP/BIOS默认日志记录功能为打开状态。
3、LOG_error:
将一个事件、数据或者出错信息按指定的格式串写入系统日志。
4、LOG_event:
将一个为格式化的事件消息吸入日志中。
5、LOG_message:
功能及用法与LOG_error相同,只是它要受跟踪管理模块的影响。
6、LOG_printf:
在指定的LOG窗口中显示消息,等效于标准C的printf()函数。
7、LOG_reset:
复位日志缓冲区。