软件设计与开发_第1页
软件设计与开发_第2页
软件设计与开发_第3页
软件设计与开发_第4页
软件设计与开发_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件设计与开发硬件软件成本比较%硬件HW、软件SW成本比较HWSWt系统的成本软件取代硬件例子:计算器词典:金山词霸VCD播放器电子图书e_bookPID调节器:运放,模拟->数字化,软件化第2页,共62页,2024年2月25日,星期天开发工具开发工具硬件:

TIXDS510(ExtendedDevelopmentSystem)硬件仿真器(Emulator)(JTAG接口:基于扫描的仿真)

DSK初学者开发套件(DSPStarterKit)闻亭XDS-EPPDSP开发系统

(PC机插卡式-EISA,PCI总线,并口式,USB接口式,RS232串口式-PC机通过串口与评估板相连)第3页,共62页,2024年2月25日,星期天EVM评估板(Evaluation,DEMO板,实验板板上资源):DSP芯片(定时器,WD),JTAG接口,A/D转换,PWM输出,捕获单元输入,QEP输入,并行接口,RS232串口,SPI接口,CAN接口,片外扩展的程序存储器与数据存储器,键盘显示人机交互接口,电源(如5V转3.3V芯片TITPS77666),有源晶体振荡器,复位电路

软件:集成开发环境CC/CCS第4页,共62页,2024年2月25日,星期天开发工具:仿真器第5页,共62页,2024年2月25日,星期天开发工具:评估板(EVM)第6页,共62页,2024年2月25日,星期天软件开发流程

编辑:生成源程序(*.asm,*.c)与命令文件(*.cmd)编译与汇编:生成目标文件(*.obj为COFF格式)及列表文件(*.lst)连接:生成可执行代码(*.out)及映射文件(*.map)调试:通过JTAG接口下载到目标系统EVM程序固化烧写到FlashEPROM第7页,共62页,2024年2月25日,星期天软件开发流程第8页,共62页,2024年2月25日,星期天几种基本文件源文件源程序:

汇编语言文件(*.asm),C文件(*.c)头文件(*.h):定义寄存器映射地址,用户自定义的常量等命令文件(*.cmd)实现程序存储器空间和数据存储器空间的分配库文件(*.lib)生成文件目标文件(*.obj):COFF目标文件格式列表文件(*.lst):汇编生成的文件映射文件(*.map):存储器分配可执行代码文件(*.out)第9页,共62页,2024年2月25日,星期天汇编语言命令(伪指令)

段(块、Section)定义命令共用目标文件格式COFF:TI的汇编与联接程序建立的目标文件采用共用目标文件格式COFF(CommonObjectFileFormat)。其核心是程序员在编写DSP程序时基于代码块和数据块的概念,而不是一条条指令,一个个数据。基于这种文件格式编写的DSP程序,具有可读性强,可移植性好等特点。便于模块化编程、管理代码段和存储器,即不必为程序代码或变量指定目标地址。第10页,共62页,2024年2月25日,星期天段是目标文件的最小单位,是在存储器中占据连续空间的代码和数据块,各段相互独立。

COFF文件格式包括三个缺省的段:.text段,通常包含可执行代码。.data段,通常包含已初始化的数据。.bss段,通常为未初始化的数据保留空间。第11页,共62页,2024年2月25日,星期天汇编语言命令段可分为已初始化段与未初始化段:已初始化段:包含程序代码和数据,.text,.data.sect,.asect汇编命令创建的段;未初始化段:为未初始化的数据在存储器中保留空,.bss,.usect汇编命令创建的段。确定段的地址由连接程序完成。第12页,共62页,2024年2月25日,星期天定义已初始化段的命令:.text;建立的段名为.text.data;建立的段名为.data.sect“段名”;自定义段.asect“段名”,地址;建立的段具有绝对地址,一般不用

第13页,共62页,2024年2月25日,星期天汇编语言命令定义未初始化段的命令:

.bss符号,字数

.符号usect

“段名”,字数(自定义段)常数初始化命令

.word

将一个或多个16bit的值,放入当前段中的连续字中

.byte将一个或多个8bit的值,放入当前段中的连续字中

.bes,.space在当前段内保留特定的bit数第14页,共62页,2024年2月25日,星期天

.float计算单精度32bitIEEE浮点的数值,并将其存入当前段中的两个连续的字中

.int将一个或多个16bit的数,放入当前段中的连续字中

.long将32bit的数,放入当前段的连续字中

.string将一个或多个8bit的字符放入当前段第15页,共62页,2024年2月25日,星期天汇编语言命令例,使用.word,.byte,.float,.int,.string汇编指令的例子。0000aa.byte0AAH,0BBH0001bb0002cccc.word0CCCCH0003dddd.int0DDDDH0004ffff.long0EEEEFFFFH0005eeee00066865.string“help”00076c700008ffa8.float1.9999900093fff第16页,共62页,2024年2月25日,星期天汇编语言命令其它命令.include告诉汇编器从其它文件读入源语句.global定义一个全局符号,在连接时可供其他模块使用外部符号指在一个模块中定义,在另一个模块中使用的符号。可使用.def、.ref或.global汇编伪指令将符号定义为外部符号。.def在当前模块中定义,可以在别的模块中使用的符号;.ref在当前模块中引用,但在别的模块中定义的符号;.global可用于以上任何一种情况.if/.elseif/.else/.endif条件汇编命令.set和.equ为一个符号设置一个常数值。该符号存在符号表中,不能再定义.end汇编结束宏定义、宏指令、宏展开第17页,共62页,2024年2月25日,星期天汇编语言程序举例1指示灯闪烁程序;FileName:xfdemo.asm;本程序使XfLED闪烁

global_c_int0;全局符号

.text;text段包含可执行代码_c_int0:;_c_int0符号用于CodeComposerC规范

clrcxf;xf=0,LED亮

setcxf;xf=1,LED灭,用于单步调试_start:clrcxf;LED亮

calldelay;调用延时程序

setcxf;LED灭

calldelay;延时

b_start;循环闪烁第18页,共62页,2024年2月25日,星期天汇编语言程序举例1;延时子程序delay: larar2,#10h;延时常数delay0: nop larar1,#0ffffh nopdelay1: nop mar*,ar1;ar1设为当前ar banzdelay1 mar*,ar2 banzdelay0 retend;汇编语言程序结束第19页,共62页,2024年2月25日,星期天汇编语言程序举例2求W=5X+10Y-3Z。;File:aa.asm;W=5X+10Y-3Zx.set2f96hy.set18f5hz.set053ahw.usect“sum”,2;定义一个段sum,符号w占2个字

.text;建立一个段为.text的代码段START:MAR*,AR2;AR2为当前AR LARAR2,#x;x的地址

LT*;T←x第20页,共62页,2024年2月25日,星期天汇编语言程序举例2MPY#5;P←5xLARAR2,#y;y的地址LTP*;y→T,P→ACCMPY#10LARAR2,#zLTA*;z→T,ACC+P→ACCLARAR2,#wspm0;SACL*+要加入rpt#2;或mpy#3;SACH*subar2;spac;.end第21页,共62页,2024年2月25日,星期天连接器命令文件连接器命令文件(*.cmd):该文件实现对程序存储器和数据存储器空间的分配。该文件常用的伪指令有MEMORY和SECTIONS。

MEMORY伪指令定义目标系统中可以使用的存储器范围,每个存储器范围具有名字、起始地址和长度。一般形式为

MEMORY{

PAGE0:name:origin=constant,length=constant;

PAGEn:name:origin=constant,length=constant;}PAGEn:定义存储器空间。n=0-254.通常PAGE0定义程序存储器,

PAGE1定义数据存储器。name:

存储器范围的名字。可以是1-8个字符。origin或o:存储器范围的起始地址。length或l:存储器范围的长度。第22页,共62页,2024年2月25日,星期天连接器命令文件SECTIONS定义段。一般形式为SECTIONS{name:[property,property,…]name:[property,property,…]

…}在段名之后是是特性列表,定义段的内容以及是怎样分配的。段的可能的特性是:装载位置、运行位置、输入段、段类型等。第23页,共62页,2024年2月25日,星期天连接器命令文件例1命令文件/*Name:xfdemo.cmd*//*连接器命令,存储器分配*/ xfdemo.obj -oxfdemo.out/* 存储器分配*/MEMORY{ PAGE0: /*程序存储器*/ PM_F:origin=8000hlength=7e00h /*PAGE1: /*数据存储器*/}SECTIONS{ .text: {}>PM_F PAGE0}第24页,共62页,2024年2月25日,星期天连接器命令文件例2命令文件

**//*LINKERCOMMANDFILE-MEMORYSPECIFICATION*//*FORMSK243BOARD*//**//*Name:pmsms.cmdFile*//**//*LINKERDIRECTIVES连接命令*//**//**/-c/*LINKUSINGCCONVENTIONS用C规范连接*/"pmsms.obj"-lc:\2xxtool\rts2xx.lib/*RUN-TIMESUPPORT-STACKMODEL*/-l第25页,共62页,2024年2月25日,星期天连接器命令文件例2..\obj\logdata.obj..\obj\pi_id_a.obj..\obj\pi_iq_a.obj..\obj\pi_omg_a.obj..\obj\refer.obj-mpmsms.map/*映射文件*/-opmsms.out/*输出可执行文件*//**//*MEMORYALLOCATION存储器分配*//**/MEMORY{PAGE0:/*Programmemory程序存储器*/FLASH:origin=0,length=0x2000/*on-chipFlash8K字*/PM_F:o=8000H,l=7e00H/*externalSRAMPM扩展*/第26页,共62页,2024年2月25日,星期天连接器命令文件例2

B0PM_F:o=0xfe00,l=0x100/*B0PM*/

PAGE1:/*Datamemory数据存储器*/REGS:o=0,l=0x60/*memory-mapedregs.*/INTVEC:o=0x60,l=0x20/*DMB2int.vectors*/B0DM_F:o=0x200,l=0x100/*DMB0free*/M_VARS:o=0x300,l=0x60/*DMB1usedbymonitor*/SPS:o=0x360,l=0x20/*stackassignedbymonitor*/B1_F:o=0x380,l=0x20/*DMB1free*/DM_F:o=8000H,l=2000H/*externalSRAMDMfree*/BMCK:o=0xa000,l=0x2000/*MCK_DEMOVariables*/B_SAV:o=0xc000,l=0x2000/*SAVEDRESULTSBUFFER*/REF:o=0xe000,l=0x200/*externalDMfree*/}第27页,共62页,2024年2月25日,星期天连接器命令文件例2SECTIONS/*Linkerdirectivetospecifysectionplacementinthememorymap*/{/*vectors:{}>FLASHPAGE0/*INTERRRUPTVECTORTABLE00-3FH*//*CODE0040-1FFFH*/vectors:{}>PM_FPAGE0.text:{}>PM_FPAGE0/*CODE:8000~FE00*/.cinit:{}>PM_FPAGE0/*._c_int0:{}>PM_FPAGE0*//*.switch:{}>PM_FPAGE0*/.const:{}>PM_FPAGE0.data:{}>PM_FPAGE0/*.sysmem{}>B1_FPAGE1*/RAM_B11:{}>B1_F1PAGE1

第28页,共62页,2024年2月25日,星期天连接器命令文件例2

/*.bss:{}>B1_FPAGE1*/MCK_DEMO:{}>BMCKPAGE1RES:{}>B_SAVPAGE1 .stack:{}>B1_FPAGE1/*user'sstack*/LOGGER:{}>B_SAVPAGE1/*采集记录*/REFER:{}>REFPAGE1/*指令参考值给定*/}第29页,共62页,2024年2月25日,星期天C语言程序设计C语言程序设计优缺点C24xC语言基础存储器模式寄存器规则中断处理汇编与C语言混合编程C程序举例第30页,共62页,2024年2月25日,星期天C语言程序设计优缺点汇编语言程序设计:

执行速度快开发周期长、移植性和可读性差C语言程序设计:

开发周期短、移植性和可读性好执行速度可以满足要求第31页,共62页,2024年2月25日,星期天C语言基础:段C24x将存储器处理为程序存储器和数据存储器两个线性块。程序存储器包含可执行代码;数据存储器主要包含外部变量、静态变量和系统堆栈。编译器的任务是产生可重定位的代码,允许链接器将代码和数据定位进合适的存储空间。C编译器对C语言编译后除了生成3个基本段,即.text、.data、.bss外,还生成.cinit、.const、.stack、.sysmem段。第32页,共62页,2024年2月25日,星期天C语言基础:C系统堆栈:.stack不同于DSP汇编指令定义的堆栈。DSP汇编程序中要将堆栈指针SP指向一块RAM,用于保存中断、调用时的返回地址,存放PUSH指令的压栈内容。.stack定义的系统堆栈实现的功能是保护函数的返回地址,分配局部变量,在调用函数时用于传递参数,保护临时结果。.stack定义的段大小(堆栈大小)可用链接器选项-stacksize设定,链接器还产生一个全局符号__STACK_SIZE,并赋给它等于堆栈长度的值,以字为单位,缺省值为1K。第33页,共62页,2024年2月25日,星期天C程序设计:存储器分配(1)运行时间支持函数。(2)动态存储器分配。(3)静态和全局变量的存储器分配。(4)位域/结构的对准。第34页,共62页,2024年2月25日,星期天C程序设计:寄存器规则寄存器规则明确了编译器如何使用寄存器以及在函数调用过程中如何保护寄存器。(1)辅助寄存器(2)堆栈指针SP(3)ARP(4)在默认情况下,编译器总是假定ST0中的OVM在硬件复位时被清0。若在汇编代码中对OVM置位为1,返回到C环境时必须复位。(5)寄存器变量(可以加快变量访问速度)第35页,共62页,2024年2月25日,星期天寄存器规则寄存器用法调用时是否保存AR0帧指针是AR1堆栈指针是AR2-AR5局部变量指针否AR3-AR5表达式分析否AR6-AR7寄存器变量是ACC表达式分析/返回值否P表达式分析否T表达式分析否第36页,共62页,2024年2月25日,星期天域名称预设值修改ARP辅助寄存器指针1是C进位位-是DP数据页指针-是OV溢出位-是OVM溢出模式0否PM成绩移位模式0否SXM符号扩展位-是TC测试控制位-是第37页,共62页,2024年2月25日,星期天C语言程序设计:中断处理

(1)中断的使能和屏蔽必须由程序员自己来设置。(2)中断程序没有参数传递,即使说明,也会被忽略(3)中断处理程序不能被正常的C程序调用。(4)为了使中断程序与中断一致,在相应的中断矢量中必须放置一条转移指令,可以用.sect汇编伪指令建立一个简单的跳转指令表来完成此项功能。第38页,共62页,2024年2月25日,星期天(5)在汇编语言中,注意在符号名前面加上一个下划线,例如c_int00记为_c_int00。(6)中断程序使用的所有寄存器,包括状态寄存器和程序中调用函数使用的寄存器都必须予以保护。(7)C24xC编译器将C语言进行了扩展,中断可以利用interrupt关键字由C/C++函数直接处理。第39页,共62页,2024年2月25日,星期天汇编与C语言混合编程独立的C模块和汇编模块接口独立编写C程序与汇编程序,分别编译、汇编生成目标代码模块,然后用连接器连接起来。从C程序中访问汇编程序变量在C程序中直接嵌入汇编语句第40页,共62页,2024年2月25日,星期天访问I/O端口空间关键字ioport使DSP能够访问I/O端口空间。关键字格式为:ioporttypeporthex_num其中,关键字ioport指明这是一个端口变量,变量类型必须为charshortint或unsigned,porthex_num为16进制端口号示例:ioportunsignedport10;

/*端口号为10h的I/O端口变量*/intfunc(){……port10=a;……b=port10;……}第41页,共62页,2024年2月25日,星期天独立的C模块和汇编模块接口在编写独立的汇编程序时,必须注意以下几点:(1)不论是用C语言编写的函数还是用汇编语言编写的函数,都必须遵循寄存器使用规则。(2)必须保护函数要用到的几个特定寄存器。(3)中断程序必须保护所有用到的寄存器。(4)从汇编程序调用C函数时,第一个参数(最左边)必须放入累加器A中,剩下的参数按自右向左的顺序压入堆栈。(5)调用C函数时,注意C函数只保护了几个特定的寄存器,而其他是可以自由使用的。第42页,共62页,2024年2月25日,星期天独立的C模块和汇编模块接口(6)长整型和浮点数在存储器中存放的顺序是低位字在高地址,高位字在低地址。

(7)如果函数有返回值,返回值存放在累加器A中。(8)汇编语言模块不能改变由C模块产生的.cinit段,如果改变其内容将会引起不可预测的后果。(9)编译器在所有标识符(函数名、变量名等)前加下划线“_”。

(10)任何在汇编程序中定义的对象或函数,如果需要在C程序中访问或调用,则必须用汇编指令.global定义。第43页,共62页,2024年2月25日,星期天从C程序中访问汇编程序变量从C程序中访问在汇编程序中定义的变量或常数,可以分为以下3种情况:(1)访问在.bss块中定义的变量;(2)对于访问不在.bss块中定义的变量;(3)对于在汇编程序中用.set和.global伪指令定义的全局常数,也可以使用特殊的操作从C程序中访问它们。第44页,共62页,2024年2月25日,星期天在C程序中直接嵌入汇编语句在C程序中嵌入汇编语句是一种直接的C模块和汇编模块接口方法。采用这种方法一方面可以在C程序中实现用C语言难以实现的一些硬件控制功能。另一方面,也可以用这种方法在C程序中的关键部分用汇编语句代替C语句以优化程序。采用这种方法的一个缺点是它比较容易破坏C环境,因为C编译器在编译嵌入了汇编语句的C程序时并不检查或分析所嵌入的汇编语句。直接在C语言程序中相应位置嵌入汇编语句,只需在汇编语句加上双引号和小括号,前面加ASM标识符号。即,

ASM

(“汇编语句”)例如ASM(“LACC#10H”)第45页,共62页,2024年2月25日,星期天C程序举例1-Lab0102intx,y,z;main(){

x=1;y=2; while(1){ z=x+y; //x++;y++;}}第46页,共62页,2024年2月25日,星期天C程序举例2-Lab0301-Led:4个指示灯显示#include"DSP281x_Device.h"//DSP281xHeaderfileIncludeFile#include"DSP281x_Examples.h"//DSP281xExamplesIncludeFile#include"f2812a.h"//定义指示灯寄存器地址和寄存器类型#defineLBDS(*((unsignedint*)0xc0000))voidDelay(unsignedintnDelay); //延时子程序main(){ unsignedintuLED[4]={1,2,4,8};//控制字0001,0010,0100,1000 inti; InitSysCtrl(); //初始化DSP运行时钟

while(1) {第47页,共62页,2024年2月25日,星期天C程序举例2for(i=0;i<4;i++) { LBDS=uLED[i]; //正向顺序送控制字

Delay(256); //延时

}for(i=3;i>=0;i--) { LBDS=uLED[i]; //反向顺序送控制字

Delay(256); //延时

} }}第48页,共62页,2024年2月25日,星期天C程序举例2voidDelay(unsignedintnDelay)//延时程序{ intii,jj,kk=0; for(ii=0;ii<nDelay;ii++) { for(jj=0;jj<512;jj++) { kk++; } }}第49页,共62页,2024年2月25日,星期天C程序举例3-Lab0302-Dip

开关状态显示#include"DSP281x_Device.h"//DSP281xHeaderfileIncludeFile#include"DSP281x_Examples.h"//DSP281xExamplesIncludeFile#include"f2812a.h"//定义指示灯控制寄存器地址和寄存器类型#defineLBDS(*((unsignedint*)0xc0000))//定义拨码开关控制寄存器地址和寄存器类型#defineDIPS(*(unsignedint*)0xc0001)main(){ InitSysCtrl(); //初始化DSP运行时钟

while(1) { LBDS=DIPS; //读取拨码开关状态直接送指示灯显示

}} 第50页,共62页,2024年2月25日,星期天集成开发环境CCSCodeComposerStudio(CC,CCS)软件安装与设置集成环境与使用(主要菜单与功能)调试功能与实例第51页,共62页,2024年2月25日,星期天CCS主要工具1.建立源程序2.C编译器(CCompiler)3.汇编

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论