




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 第九章第九章 dsp集成软件开发环境集成软件开发环境 第九章第九章 dsp集成软件开发环境集成软件开发环境 9.1 ccs集成开发环境集成开发环境 9.2 c语言程序基础语言程序基础 9.3 混合语言编程混合语言编程 9.4 芯片支持库芯片支持库( (csl) ) 9.1 ccs集成开发环境集成开发环境 ccs(code composer studio)是ti公司为dsp推出的 集成软件开发环境(ide),提供了配置、建立、调 试、跟踪和分析的工具,包括了应用程序开发必需 的所有功能,便于对实时信号处理程序的编制和测 试,能够加速开发进程,提高工作效率。 ccs是是dsp领域第一个领域第一个
2、 完整的、开放型集成完整的、开放型集成 开发环境开发环境(ide) 直观、易用直观、易用 无需停止无需停止dsp运行即运行即 可观察可观察dsp的信息的信息 具有实时分析功能开具有实时分析功能开 放的环境放的环境 可加入第三方插件可加入第三方插件 (plug-ins) ccs调试界面调试界面 ccs调试界面调试界面 菜单条菜单条标题区标题区 编辑工具条编辑工具条编译工具条编译工具条 数据显示数据显示 窗口窗口 图形显示图形显示 窗口窗口 变量观察窗变量观察窗 口口 c源程序编源程序编 辑窗口辑窗口 反汇编调试反汇编调试 窗口窗口 编译运行结果编译运行结果 显示窗口显示窗口 调试调试 工具条工具
3、条 工程管理工程管理 窗口窗口 信号分析图形化信号分析图形化 u以自然的格式观察信号以自然的格式观察信号 u在变量有效时修改其值在变量有效时修改其值 并观察它们的影响并观察它们的影响 u多种专用的画图工具多种专用的画图工具 n时域频域图时域频域图 nfft neye diagram nconstellation plot nimage displays 可视化图形可视化图形 ccs集成环境的组成集成环境的组成 软件开发流程软件开发流程 ccs集成开发环境集成开发环境 提供一些类似提供一些类似vc的代码编辑功能的代码编辑功能 语法高亮显示,自动缩近,文字查找等等语法高亮显示,自动缩近,文字查找等
4、等 原程序可以与反汇编同时显示原程序可以与反汇编同时显示 ccs项目管理项目管理 应用程序按项目来管理,应用程序按项目来管理, 按层次以图形化的方式按层次以图形化的方式 显示显示 *.cmd 文件文件 *.h 头文件头文件 *.lib 库文件库文件 *.c 源程序源程序 ccs图形化设置图形化设置 各种编译选项,如各种编译选项,如c 编译器选项,连接编译器选项,连接 器选项等通过图形器选项等通过图形 化方式来设置,不化方式来设置,不 需要手工添加选项需要手工添加选项 1、设置断点、设置断点 将光标放置在需要设置断点的程序行前,点击将光标放置在需要设置断点的程序行前,点击debug breakp
5、oints,或点,或点 击工具栏按钮击工具栏按钮 ,即可完成一个断点的设置,点击工具栏按钮,即可完成一个断点的设置,点击工具栏按钮 可清除可清除 所有的断点。所有的断点。 2、复位的、复位的3种方法种方法 (1) reset dsp:点击:点击debug reset cpu,初始化所有的寄存器内容并暂停,初始化所有的寄存器内容并暂停 运行中的程序。使用此命令后,要重新装载运行中的程序。使用此命令后,要重新装载.out 文件后,再执行程序。文件后,再执行程序。 (2) restart:点击:点击debug restart ,将,将pc 值恢复到当前载入程序的入口地值恢复到当前载入程序的入口地 址
6、。址。 (3) go main:点击:点击debug go main,将程序运行到主程序的入口处暂停。,将程序运行到主程序的入口处暂停。 3、执行程序的、执行程序的4种方法种方法 (1) 连续连续 执行:点击执行:点击debug run ,程序运行直到遇到断点为止。,程序运行直到遇到断点为止。 (2) 暂停执行:点击暂停执行:点击debug halt ,程序停止运行。,程序停止运行。 (3) 动画执行:点击动画执行:点击debug animate,用户反复运行程序,直到遇到断点,用户反复运行程序,直到遇到断点 为止。为止。 (4) 自由执行:点击自由执行:点击debug run free ,禁
7、止所有断点运行程序。,禁止所有断点运行程序。 ccs 常用功能常用功能 ccs 常用功能常用功能 4、单步执行的、单步执行的4 种方法种方法 (1) 单步进入:快捷键单步进入:快捷键f8,debug step into,当调试语句不是基本的汇,当调试语句不是基本的汇 编指令时,此操作进入语句内部编指令时,此操作进入语句内部 (2) 单步执行:点击单步执行:点击debug step over,此命令将函数或子函数当作一条,此命令将函数或子函数当作一条 语句执行,不进入内部调试语句执行,不进入内部调试 (3) 单步跳出:点击单步跳出:点击debug step out,此命令作用为从子程序中跳出,此
8、命令作用为从子程序中跳出 (4) 执行到光标处:快捷键执行到光标处:快捷键crtl+f10,debug run to cursor,此命令作,此命令作 用为将程序运行到光标处用为将程序运行到光标处 5、查看内存与变量、查看内存与变量 (1) 查看变量:使用查看变量:使用view watch window 命令命令 (2) 查看寄存器:使用查看寄存器:使用view registers cpu registers 命令命令 (3) 查看内存:使用查看内存:使用view memory 命令命令 6、探针(、探针(probe point) 1)适合于算法的开发,功能验证适合于算法的开发,功能验证 2)
9、可以完成这样的功能可以完成这样的功能 从一个文件中读入数据到一个从一个文件中读入数据到一个dsp的缓冲区的缓冲区 将一个将一个dsp的缓冲区内容写到文件中的缓冲区内容写到文件中 3)探点类似于断点,又不同于断点探点类似于断点,又不同于断点 运行到运行到probe point,dsp会停顿下来会停顿下来 完成一些动作后(读写文件),程序继续运行完成一些动作后(读写文件),程序继续运行 4)文件输入输出的设置:文件输入输出的设置:filefile i/o 5) probe的设置:类似断点的设置(用工具条)的设置:类似断点的设置(用工具条) 示例示例0901 ccs 常用功能常用功能 7. 图形显示
10、图形显示 ccs支持一维图形,二维图象(标准的数据格支持一维图形,二维图象(标准的数据格 式),眼图等显示方式式),眼图等显示方式 有放大、缩小等功能有放大、缩小等功能 可以方便直观地判断算法执行的效果可以方便直观地判断算法执行的效果 ccs 常用功能常用功能 ccs 常用功能常用功能 在ccs中可以将数据按图形化方式显示出来,包 括时频图、星图、眼图时频图、星图、眼图和和图像图像4种类型。 各种图形方式都是采用双缓冲区(采集缓冲区和采集缓冲区和 显示缓冲区显示缓冲区)分别存储和显示图形的。 采集缓冲区在目标处理器上,包含需要显示的数 据。显示缓冲区在主机上,用于保存采集缓冲区 数据的拷贝。图
11、形是由显示缓冲区的数据生成的。 当刷新图形时,采集缓冲区内容会被读到显示缓 冲区中。设置好显示参数后,ccs就可以从采集 缓冲区读取acquisition buffer size长度的数据到显 示缓冲区并显示数据了。 gelgeneral extension language 一种类似一种类似c的解释型语言,可实现循环等程序结的解释型语言,可实现循环等程序结 构构 提供基本的程序控制命令,类似以前提供基本的程序控制命令,类似以前emulator提提 供的命令,供的命令,gel_go(), gel_reset() 等等等等 可以制作菜单(可以加入到可以制作菜单(可以加入到ccs主菜单),对主菜单
12、),对 话框,滑动条话框,滑动条 ccs 常用功能常用功能 9.2 c语言程序基础语言程序基础 一个最小的c应用程序至少要包含如下几个文件: 1. 主程序文件program.c:这个文件必需包含一个main()函数作为c程序的 入口点; 2. 链接器命令文件link.cmd:这个文件定义了dsp的存储空间以及代码段、 数据段是如何分配到这些存储空间的; 3. c运行库rts6700.lib:c运行库提供了标准c函数,以及c环境下的初始化 函数c_int00()函数。库文件及其源代码位于ccs安装目录下的 c6000cgtoolslib子目录下。 4. 中断向量表文件vectors.asm:这个
13、文件的代码作为中断服务表,必须由 链接命令文件分配到0地址,或由istp指向的地址。dsp复位后,首先从0 地址开始运行,然后跳转到rts6700.lib库内c运行环境的入口点_c_int00, 完成初始化操作,再调用main()函数,执行用户的程序。 ccs 常用文件常用文件 文件名文件名描述描述 program.cc程序源文件程序源文件 program.asm汇编程序源文件汇编程序源文件 program.sa线性汇编程序源文件线性汇编程序源文件 vectors.asm中断向量表文件中断向量表文件 filename.hc程序的头文件,包含程序的头文件,包含dsp/bios api 模块的头文
14、件模块的头文件 filename.lib库文件库文件 project.cmd链接命令文件链接命令文件 program.obj由源文件编译或汇编而得的目标文件由源文件编译或汇编而得的目标文件 program.out经完整的编译、汇编以及链接后生成的可执行文件经完整的编译、汇编以及链接后生成的可执行文件 program.map经完整的编译、汇编以及链接后生成的空间分配文件经完整的编译、汇编以及链接后生成的空间分配文件 project.pjt存储环境设置信息的工程文件存储环境设置信息的工程文件 cmd文件 cmd文件由文件由3部分组成:部分组成: 输入输出定义:输入输出定义: v *.obj文件:文
15、件: 链接器要链接的目标文件链接器要链接的目标文件 v *.lib文件:文件: 链接器要链接的库文件链接器要链接的库文件 v *.map文件:链接器生成的交叉索引文件文件:链接器生成的交叉索引文件 v *.out文件:文件: 链接器生成的可执行代码链接器生成的可执行代码 v 链接器选项链接器选项 memory命令:描述系统实际的硬件资源命令:描述系统实际的硬件资源 sections命令:描述命令:描述“段段”如何定位如何定位 memory命令描述目标系统的存储空间命令描述目标系统的存储空间 memory pmem: o = 00000000h, l = 00010000h bmem: o =
16、00010000h, l = 00030000h memory 命命 令令 namesoriginslengths memory 存储器空间名: o = 十六进制存储器起始地址 , l = 十六进制存储器长度 sections命令描述命令描述“段段”如何定位如何定位 sections .text pmem .csldata pmem .stack pmem .far pmem .switch bmem .tables bmem .data bmem .bss bmem .sysmem bmem .cinit pmem .const bmem .cio bmem sections 段名段名 存储
17、器空间名存储器空间名 -o sample.out/定义输出文件名定义输出文件名 -m sample.map/定义存储器空间分配文件名定义存储器空间分配文件名 -stack 100 /定义堆栈大小定义堆栈大小 -l rts6700.lib /引用库文件引用库文件 memory pmem:o = 00000000hl = 00010000h bmem:o = 00010000hl = 00030000h sections .text pmem .csldata pmem .stack pmem .far pmem .switch bmem .tables bmem .data bmem .bss
18、bmem .sysmem bmem .cinit pmem .const bmem .cio bmem cmd 文件示例文件示例 cmd 文件常用段名含义文件常用段名含义 段名段名描述描述 .cinit存放存放c程序中的变量初值和常量程序中的变量初值和常量 .const 存放存放c程序中的字符常量、浮点常量和用程序中的字符常量、浮点常量和用const 声明声明 的常量的常量 .text存放存放c程序的代码程序的代码 .bss为为c程序中的全局和静态变量保留存储空间程序中的全局和静态变量保留存储空间 .far为为c程序中用程序中用far 声明的全局和静态变量保留空间声明的全局和静态变量保留空间
19、.stack 为为c程序系统堆栈保留存储空间,用于保存返回地址、程序系统堆栈保留存储空间,用于保存返回地址、 函数间的参数传递、存储局部变量和保存中间结果函数间的参数传递、存储局部变量和保存中间结果 .sysmem 用于用于c 程序中程序中malloc、calloc 和和realloc 函数动态分配函数动态分配 存储空间存储空间 section “段段” section “段段”概念:一块连续的存储空间,用于存放代概念:一块连续的存储空间,用于存放代 码块或数据块,目标文件的每一段都是单独的、独有的。码块或数据块,目标文件的每一段都是单独的、独有的。 在编程时,在编程时,“段段”没有绝对定位,
20、每个没有绝对定位,每个“段段”都认为是都认为是 从从0地址开始的一块连续的储存空间,所以软件开发人地址开始的一块连续的储存空间,所以软件开发人 员只需要将不同代码块和数据块放到不同的员只需要将不同代码块和数据块放到不同的“段段”中,中, 而无需关心这些而无需关心这些“段段”究竟定位于系统何处究竟定位于系统何处 优点:便于程序的模块化编程;便于工程化管理:可将优点:便于程序的模块化编程;便于工程化管理:可将 软件开发人员和硬件开发人员基本上分离开软件开发人员和硬件开发人员基本上分离开 重定位:由于所有的重定位:由于所有的“段段”都是从都是从0地址开始,所以程地址开始,所以程 序编译完成后无法直接
21、运行,要让程序正确运行,必须序编译完成后无法直接运行,要让程序正确运行,必须 对对“段段”进行重新定位,这个工作由链接器完成进行重新定位,这个工作由链接器完成 cmd文件:文件: memory命令描述系统硬件资源,命令描述系统硬件资源, sections命令描述软件人员程序中用到的命令描述软件人员程序中用到的“段段”如何如何 定位到恰当的硬件资源上定位到恰当的硬件资源上 汇编语言程序中,coff目标文件总是包含三 个默认段: .text段:通常包含可执行代码; .data段:通常包含已初始化的变量; .bss段:通常为未初始化的变量保留空间。 汇编器和链接器允许用户创建、命名和链接自 定义的段
22、,这些段的使用与.data,.text和.bss段 相同。 section “段段” 链接器的功能之一是将段重新定位到目标系 统的存储器映射,这一功能称作重定位。 section 伪指令伪指令 汇编语言程序中,有汇编语言程序中,有5个个section伪指令伪指令 .bsssymbol,size in word:在:在.bss段内保留空间段内保留空间 .text:创建已初始化的段:创建已初始化的段 .data:创建已初始化的段:创建已初始化的段 .sect“section name”:创建初始化段,像:创建初始化段,像.text和和.data段那样可以包段那样可以包 含代码和数据。含代码和数据。
23、 symbol .usect“section name”,size in word:创建未初始化段,可:创建未初始化段,可 以象以象.bss段那样使用。段那样使用。 其中其中symbol相当于变量名,相当于变量名,size in word保留的存储单元长度(以字为单保留的存储单元长度(以字为单 位)位) 初始化段和未初始化段:初始化段和未初始化段: .bss和和.usect为未初始化段,用于为变量、堆栈等为未初始化段,用于为变量、堆栈等 保留一块存储空间保留一块存储空间 .text、.data和和.sect为初始化段,用于存放代码块为初始化段,用于存放代码块 或有初值的数据块或有初值的数据块
24、系统定义的段和用户定义的段:系统定义的段和用户定义的段: .text、.data和和.bss为系统已定义好的段名为系统已定义好的段名 用户根据需要用用户根据需要用. sect和和.usect伪指令来定义段名,伪指令来定义段名, 创建相应的创建相应的“段段” 汇编程序中,程序员用汇编程序中,程序员用“段段”伪指令来组织程序的伪指令来组织程序的 代码和数据代码和数据 section 伪指令伪指令 汇编器对汇编器对“段段”的处理的处理 汇编器第一次遇到新汇编器第一次遇到新“段段”时,将该时,将该“段段”的段程序计的段程序计 数器(数器(spc)置为)置为0,并将随后的程序代码或数据顺序,并将随后的程
25、序代码或数据顺序 编译进该编译进该“段段”中中 汇编器遇到同名汇编器遇到同名“段段”时,将它们合并,然后将随后的时,将它们合并,然后将随后的 程序代码或数据顺序编译进该程序代码或数据顺序编译进该“段段”中中 当汇编器遇到当汇编器遇到.text、.data和和.sect伪指令时,汇编器停止伪指令时,汇编器停止 将随后的程序代码或数据顺序编译进当前将随后的程序代码或数据顺序编译进当前“段段”中,而中,而 是顺序编译进遇到的是顺序编译进遇到的“段段”中中 当汇编器遇到当汇编器遇到.bss和和.usect伪指令时,汇编器并不结束当伪指令时,汇编器并不结束当 前前“段段”,而只是简单地暂时脱离当前,而只
26、是简单地暂时脱离当前“段段”,随后的,随后的 程序代码或数据仍将顺序编译进当前程序代码或数据仍将顺序编译进当前“段段”中。中。 .bss和和.usect伪指令,可以出现在伪指令,可以出现在.text、.data或或.sect“段段” 中的任何位置,它们不会影响这些中的任何位置,它们不会影响这些“段段”的内容的内容 以上程序最终创建了4个段: .text段包含12个16位的目标代码。 .data包含712个16位的目标代码。 .bss段在存储器中保留10个字的空间。 newvars段为.usect伪指令创建的自定义段,在存储器中保留8个字存储空间。 链接器对链接器对“段段”的处理的处理 链接器对
27、链接器对“段段”的处理有的处理有2个方面:个方面: 将输入将输入“段段”组合产生输出组合产生输出“段段” v 将多个将多个.obj文件中的同名文件中的同名“段段”合并一个输出合并一个输出“段段” v 也可将不同名的也可将不同名的“段段”合并产生一个输出合并产生一个输出“段段” 将输出将输出“段段”定位到实际的存储空间中定位到实际的存储空间中 v memory命令:命令: 用于扫描系统实际的硬件资源用于扫描系统实际的硬件资源 v sections命令:用于描述程序中定义了哪些命令:用于描述程序中定义了哪些“段段”,这,这 些些“段段”是否需要合并?如何合并?合并产生的输出是否需要合并?如何合并?
28、合并产生的输出“段段” 定位到实际硬件资源的何处?定位到实际硬件资源的何处? 链接器通过链接器通过*.cmd文件来获得上述这些信息文件来获得上述这些信息 链接器还将检查各输出链接器还将检查各输出“段段”是否重叠、是否是否重叠、是否 超界,避免了人工检查边界带来的隐患超界,避免了人工检查边界带来的隐患 在代码生成工具程序中,除了汇编器和链接器等程序外,ti还提供了 可将c语言程序编译为汇编语言程序的c编译器。c编译器对编译器对c程序编译后程序编译后 也产生已初始化段和未初始化段两种,具体的段名稍有不同。除了不使也产生已初始化段和未初始化段两种,具体的段名稍有不同。除了不使 用用.data段之外,
29、还产生了一些新的段。段之外,还产生了一些新的段。 已初始化段包括:已初始化段包括:.text段、段、.cinit段、段、.const段和段和.switch段。段。 未初始化段包括:未初始化段包括:.bss段、段、.stack段和段和.sysmem段。段。 .cinit存放存放c程序中的变量初值和常程序中的变量初值和常 .const存放存放c程序中的字符常量、浮点常量和程序中的字符常量、浮点常量和const声明的常量声明的常量 .switch 存放存放c程序中程序中switch语句的跳针表语句的跳针表 .text存放存放c程序的代码程序的代码 .bss为为c程序中的全局和静态变量保留存储空间程序
30、中的全局和静态变量保留存储空间 .far为为c程序中用程序中用far声明的全局和静态变量保留空间声明的全局和静态变量保留空间 .stack为为c程序系统堆栈保留存储空间,用于保存返回地址、函数间的参程序系统堆栈保留存储空间,用于保存返回地址、函数间的参 数传递、存储局部变量和保存中间结果数传递、存储局部变量和保存中间结果 .sysmem 用于用于c程序中程序中malloc、calloc和和realloc函数动态分配存储空间函数动态分配存储空间 c运行环境运行环境 栈(栈(stack)是系统自动管理的一片内容,用于保存返回地址、)是系统自动管理的一片内容,用于保存返回地址、 函数间的参数传递、存
31、储局部变量和保存中间结果。函数间的参数传递、存储局部变量和保存中间结果。 堆(堆(heap)是用户想要自己独立灵活地控制一些内存时,用)是用户想要自己独立灵活地控制一些内存时,用 malloc( )、calloc()() 和和realloc()等函数开辟的一些动态内()等函数开辟的一些动态内 存区,将这些动态内存区称为堆。存区,将这些动态内存区称为堆。 c语言中有三种情况会产生语言中有三种情况会产生.const段:段: 由关键字由关键字const限定的带有全局变量的初始化值,如限定的带有全局变量的初始化值,如“const int a=100;”,但由关键字,但由关键字const限定的局部变量的
32、初始化值限定的局部变量的初始化值 不会产生不会产生.const段,局部变量都是运行时开辟在段,局部变量都是运行时开辟在.bss段中的。段中的。 出现在表达式中的字符串常数和用来初始化指针变量的字出现在表达式中的字符串常数和用来初始化指针变量的字 符串常数,如符串常数,如“strcpy(s,“abc”);”及及“char *p=“abc”;”。 但当字符串常数用来初始化数组变量时,无论是全局还是局但当字符串常数用来初始化数组变量时,无论是全局还是局 部数组变量,都不会产生部数组变量,都不会产生.const段,此时字符串常数生成的段,此时字符串常数生成的 是是.cinit段。如段。如“char s
33、4=“abc”;”。 数组和结构体的初始值。数组和结构体是局部变量,其初数组和结构体的初始值。数组和结构体是局部变量,其初 始值会产生始值会产生.const段。如段。如“int a8=1,2,3;”。但当数组。但当数组 和结构体是全局变量时,其初始值不会产生和结构体是全局变量时,其初始值不会产生.const段,此时生段,此时生 成的是成的是.cinit段。段。 c运行环境运行环境 用户定义用户定义 #pragma是标准是标准c中保留的预处理命令。用户可以中保留的预处理命令。用户可以 通过通过#pragma来定义自己的段。来定义自己的段。 #pragma的语法是:的语法是: v #pragma
34、code_section (symbol, section name) v #pragma data_section (symbol, section name) 说明: symbol是符合,可以是函数名也可以是全局变量名。 section name是用户自己定义在程序空间或数据空间的段名。 code_section用来定义代码段,data_section用来定义 数据段。 #pragma必须在符合被定义和使用前使用,并且不能在函数体内 声明#pragma。 下例程序将全局变量数组a100单独编译成一个新 的段,取名为“newsection” #pragma data_section(a ,“
35、newsection”) unsigned int a100; main( ) 程序内容 c运行环境运行环境 寄存器使用规则寄存器使用规则 c编译器如何使用编译器如何使用dsp的寄存器的寄存器 函数进入和返回前,寄存器的保护函数进入和返回前,寄存器的保护 函数调用规则函数调用规则 函数间的参数传递通过寄存器和系统堆栈进行函数间的参数传递通过寄存器和系统堆栈进行 调用函数与被调用函数必须对各自的寄存器进行保护调用函数与被调用函数必须对各自的寄存器进行保护 从被调用函数返回前,被调用函数必须归还所有已占用的堆从被调用函数返回前,被调用函数必须归还所有已占用的堆 栈空间栈空间 c和和asm混合编程混
36、合编程 c和和asm混合编程时,必须遵循寄存器使用规则和函数调用混合编程时,必须遵循寄存器使用规则和函数调用 规则规则 被被c调用的调用的asm函数,其函数名前应加函数,其函数名前应加“_” 中断服务程序中断服务程序 asm编写的中断服务程序必须对所有用到寄存器进行保护,编写的中断服务程序必须对所有用到寄存器进行保护, 以免破坏以免破坏c运行环境运行环境 c编写的中断服务程序应用编写的中断服务程序应用interrupt关键字声明关键字声明 c运行环境运行环境 系统初始化系统初始化 在运行在运行c程序前,必须建立程序前,必须建立c运行环境,此任务由运行环境,此任务由c引导引导 程序程序c _ i
37、nt00完成完成 _c_int00包含在库函数中,包含在库函数中,build时自动将其链接进可执时自动将其链接进可执 行程序中,程序的入口地址必须设为行程序中,程序的入口地址必须设为_c_int00起始地址起始地址 _c_int00的源程序存放在由的源程序存放在由rts.src分离出来的分离出来的boot.asm中,中, 用户可根据需要修改用户可根据需要修改 v 设置堆栈指针设置堆栈指针 v 初试化全局变量:将初试化全局变量:将.cinit”段段“中数据拷贝到中数据拷贝到.bss段中段中 v 调用调用c程序的主函数程序的主函数main( ) 软件编译流程软件编译流程 .cpp file.asm
38、 file .c file.asm file .asm file .obj file assembler .obj file .obj file.out file.hex filelinker 目标文件地址是浮动的,能被重定位目标文件地址是浮动的,能被重定位 链接器用链接器用.cmd文件对链接目标,进行重定位文件对链接目标,进行重定位 列出目标文件、库文件和链接器选项列出目标文件、库文件和链接器选项 用用memory命令描述目标系统存储空间配置命令描述目标系统存储空间配置 用用sections命令描述命令描述“段段”如何定位如何定位 hex转换程序也使用转换程序也使用cmd文件,配置转换选项文
39、件,配置转换选项 中断向量表中断向量表 .ref _timer0_isr .ref _exint4_isr .ref _exint6_isr .ref _c_int00 .global reset_rst .sect vectors“ reset_rst: mvkl .s2 _c_int00, b0 mvkh .s2 _c_int00, b0 b .s2 b0 nop 5 nmi_rst: nop 8 resv1: nop 8 resv2: nop 8 int4: b _exint4_isr nop 7 int5: nop 8 int6: b _exint6_isr nop 7 int7: n
40、op 8 int8: nop 8 int9: nop 8 int10: nop 8 int11: nop 8 int12: nop 8 int13: nop 8 int14: b _timer0_isr nop 7 int15: nop 8 c 语言语法接近自然语言,其可读性强、便于理解,在编语言语法接近自然语言,其可读性强、便于理解,在编 制、修改、实现算法方面比用汇编语言开发容易。制、修改、实现算法方面比用汇编语言开发容易。 汇编语言掌控系统硬件的能力强于汇编语言掌控系统硬件的能力强于c 语言,设计出来的程语言,设计出来的程 序更加贴近硬件特性,能将硬件效能发挥到极致。序更加贴近硬件特性,
41、能将硬件效能发挥到极致。 因此,一般情况下用因此,一般情况下用c 语言设计应用程序的总体框架、解语言设计应用程序的总体框架、解 决人机接口和对速度效率要求不太高的复杂算法,用汇编决人机接口和对速度效率要求不太高的复杂算法,用汇编 语言设计强调速度的算法。语言设计强调速度的算法。 9.3 混合语言编程混合语言编程 c语言和汇编语言的混合编程有三种形式:语言和汇编语言的混合编程有三种形式: 1. 在编写在编写c语言代码中插入汇编语句,只需在汇编语句两语言代码中插入汇编语句,只需在汇编语句两 边加上双引号和括号,在括号前面加上标识边加上双引号和括号,在括号前面加上标识asm,如:,如: asm(“
42、nop 5”); 2. 在编写在编写c代码的过程中调用直接映射为内联的代码的过程中调用直接映射为内联的c6000指指 令的特殊函数,内联函数用前下划线表示,使用时同调用令的特殊函数,内联函数用前下划线表示,使用时同调用 c语言的库函数一样调用它,如:语言的库函数一样调用它,如: m = _int_abs(n); 3. 用汇编代码编写独立的函数,在用汇编代码编写独立的函数,在c代码中直接调用代码中直接调用 混合编程的方法混合编程的方法 1. 采用采用c语言和汇编语言混合编程时,定义了一套严格的寄语言和汇编语言混合编程时,定义了一套严格的寄 存器规则,调用函数保护了寄存器存器规则,调用函数保护了寄
43、存器a0a9和和b0b9,但当使,但当使 用到寄存器用到寄存器a10a15或或b10b15的时候,则必须自行对它们的时候,则必须自行对它们 进行保护。在默认情况下:进行保护。在默认情况下: a3用作返回结构指针寄存器用作返回结构指针寄存器 b3用作被调用函数返回地址寄存器用作被调用函数返回地址寄存器 a15用作帧指针寄存器用作帧指针寄存器 b14用作数据页指针寄存器用作数据页指针寄存器 b15用作堆栈指针寄存器用作堆栈指针寄存器 混合编程的接口规范混合编程的接口规范 2. 调用函数将参数传递到被调用函数中,前十个参数将被调用函数将参数传递到被调用函数中,前十个参数将被 从左到右依次放入寄存器从
44、左到右依次放入寄存器a4、b4、a6、b6、a8、b8、a10、 b10、a12和和b12,如果传递的参数是长型、双精度型或者如果传递的参数是长型、双精度型或者 是长双精度型,则将参数依次放入寄存器组是长双精度型,则将参数依次放入寄存器组a5:a4、b5: b4、a7:a6等,并将剩下的变量按相反的顺序放在堆栈里。等,并将剩下的变量按相反的顺序放在堆栈里。 注意,如果传递的参数是一个结构类型的参数,则传递的注意,如果传递的参数是一个结构类型的参数,则传递的 是该结构类型的地址。是该结构类型的地址。 3. 如果在如果在c/c+调用函数中做了正确的函数返回声明,则被调用函数中做了正确的函数返回声明
45、,则被 调用的汇编函数可以返回有效值。如果返回值是整型或调用的汇编函数可以返回有效值。如果返回值是整型或32 位的浮点型,则放在寄存器位的浮点型,则放在寄存器a4中返回;如果返回值是双精中返回;如果返回值是双精 度或是长双精度型,则放在度或是长双精度型,则放在a5:a4中返回;如果返回值是中返回;如果返回值是 一个结构类型,则将其结构的地址放在一个结构类型,则将其结构的地址放在a3中返回。中返回。 混合编程的接口规范混合编程的接口规范 4. 对于只在汇编语言模块中用到的变量的标识符,不能从下对于只在汇编语言模块中用到的变量的标识符,不能从下 划线开始。划线开始。 任何一个在汇编语言中声明的对象
46、都要使其在任何一个在汇编语言中声明的对象都要使其在c/c+中是可中是可 访问的,那么在汇编语言中必须用访问的,那么在汇编语言中必须用.def 或或.global将其声明为将其声明为 外部变量。外部变量。 同样在汇编语言中要引用同样在汇编语言中要引用c/c+函数或对象时,必须用函数或对象时,必须用.ref 或或.global将将c/c+对象声明。对象声明。 中断子程序必须把该子程序将要用到的所有寄存器进行入栈中断子程序必须把该子程序将要用到的所有寄存器进行入栈 处理;处理; 除了全局变量的初始化外,汇编语言的模块不得因为任何目除了全局变量的初始化外,汇编语言的模块不得因为任何目 的而使用的而使用
47、.cinit段;段; 汇编代码的结束需用指令汇编代码的结束需用指令 “b b3” 将程序执行从被调用函数将程序执行从被调用函数 返回到返回到c语言调用函数中。语言调用函数中。 混合编程的接口规范混合编程的接口规范 打开工程打开工程complexdelay.pjt,可以看到该工程包含如下文,可以看到该工程包含如下文 件:件: umain.c:c语言编写的主程序文件,调用使用汇编语言语言编写的主程序文件,调用使用汇编语言 编写的延时程序编写的延时程序asm_delay()函数进行精确延时函数进行精确延时 udelay.asm:汇编语言编写的延时函数:汇编语言编写的延时函数 示例示例0903 混合编
48、程示例程序混合编程示例程序 9.4 芯片支持库芯片支持库csl u 为什么要设计为什么要设计csl dsp片上外设种类及其应用日趋复杂片上外设种类及其应用日趋复杂 提供一组标准的方法用于访问和控制片上外设提供一组标准的方法用于访问和控制片上外设 免除用户编写配置和控制片上外设所必需的定义和免除用户编写配置和控制片上外设所必需的定义和 代码代码 u 什么是什么是csl:chip support library 用于配置、控制和管理用于配置、控制和管理dsp片上外设片上外设 已为已为c6000和和c5000系列系列dsp设计了各自的设计了各自的csl库库 csl库函数大多数是用库函数大多数是用c语
49、言编写的,并已对代码语言编写的,并已对代码 的大小和速度进行了优化的大小和速度进行了优化 csl库是可裁剪的:即只有被使用的库是可裁剪的:即只有被使用的csl模块才会模块才会 包含进应用程序中包含进应用程序中 csl库是可扩展的:每个片上外设的库是可扩展的:每个片上外设的api相互独立,相互独立, 增加新的增加新的api,对其他片上外设没有影响,对其他片上外设没有影响 csl 的特点的特点 u 片上外设编程的标准协议:片上外设编程的标准协议: 定义一组标准的定义一组标准的apis:函数、数据类型、宏:函数、数据类型、宏 u 对硬件进行抽象,提取符号化的片上外设描述对硬件进行抽象,提取符号化的片
50、上外设描述 定义一组宏,用于访问和建立寄存器及其域值定义一组宏,用于访问和建立寄存器及其域值 u 基本的资源管理基本的资源管理 对多资源的片上外设进行管理对多资源的片上外设进行管理 u 已集成到已集成到dsp/bios中中 通过图形用户接口通过图形用户接口gui对对csl进行配置进行配置 u 使片上外设容易使用使片上外设容易使用 缩短开发时间,增加可移植性缩短开发时间,增加可移植性 csl 的结构的结构 csl中,中,每一个外设都有一个对应的每一个外设都有一个对应的api模块,如:模块,如: 直接存取器存取(直接存取器存取(edma)api模块模块 多通道缓冲串行端口(多通道缓冲串行端口(ms
51、bcp)api模块模块 这种结构允许对这种结构允许对csl进行扩展,因为可以添加新的进行扩展,因为可以添加新的api模模 块作为新的外设形式。块作为新的外设形式。 通用外设模块通用外设模块 外设外设 (per) 描述描述 include file module support symbol edma enhanced direct memory access module csl_edma.h edma_support emif external memory interface module csl_emif.h emif_support gpio general-purpose input
52、/output module csl_gpio.h gpio_support hpi host port interface module csl_hpi.h hpi_support i2c interintegrated circuit module csl_i2c.h i2c_support irq interrupt controller module csl_irq.h irq_support mcasp multichannel audio serial port module csl_mcasp.h mcasp_support mcbsp multichannel buffered
53、 serial port module csl_mcbsp.h mcbsp_support timer timer module csl_timer.h timer_support csl 命名规则和数据类型命名规则和数据类型 对象对象类型类型 名称名称 naming convention function per_funcname() variable per_varname macro per_macro_name typedef per_typename function argument funcarg structure member membername data type des
54、cription uint8 unsigned char uint16 unsigned short uint32 unsigned int uint40 unsigned long int8 char int16 short int32 int int40 long 通用的通用的csl 函数函数 handle = per_open( channelnumber, priority flags ) 功能:打开一个外设功能:打开一个外设 通道,根据标志执行相应的操作。使用通道前必须调用此通道,根据标志执行相应的操作。使用通道前必须调用此 函数,返回一个唯一的设备句柄用于后续函数,返回一个唯一的设
55、备句柄用于后续api调用。优先级调用。优先级(priority)参数仅适用参数仅适用 于于dat模块。模块。 per_config( handle, *configstructure ) 功能:将配置结构的值写入外设寄存器。使用整型常量、整型变量、功能:将配置结构的值写入外设寄存器。使用整型常量、整型变量、csl符号符号 常量常量 per_reg_default 、per_reg_rmk宏生成的合并域值进行初始化。宏生成的合并域值进行初始化。 per_configargs( handle, regval_1, . . . regval_n ) 功能:写值功能:写值 (regval_n) 到外设
56、寄存器。可写值包括:整型常量、整型变量、到外设寄存器。可写值包括:整型常量、整型变量、csl 符号常量符号常量 per_reg_default 、per_reg_rmk宏生成的合并域值。宏生成的合并域值。 per_reset( handle ) 功能:复位外设,将其所有值恢复到上电缺省值。功能:复位外设,将其所有值恢复到上电缺省值。 per_close( handle ) 功能:关闭由功能:关闭由per_open()函数打开的外设通道。通道寄存器恢复上电初始值,函数打开的外设通道。通道寄存器恢复上电初始值, 清除所有未执行的中断。清除所有未执行的中断。 通过寄存器来实现外设初始化通过寄存器来实
57、现外设初始化 csl提供了两种函数来初始化外设的寄存器:提供了两种函数来初始化外设的寄存器: 1、per-config() 用来初始化控制用来初始化控制per 外设的寄存器,其中外设的寄存器,其中 per 是是csl模块之一。这个函数需要一个地址来作为他的模块之一。这个函数需要一个地址来作为他的 参数。这个地址指出了这个结构的位置,他代表了外设寄参数。这个地址指出了这个结构的位置,他代表了外设寄 存器的值。每一个外设模块都定义了他的配置结构数据类存器的值。每一个外设模块都定义了他的配置结构数据类 型,包括型,包括per-config()函数。函数。 per_config myconfig =
58、reg0, reg1, ; per_config( 2、per-configargs() 允许将个别寄存器的值传给函数的变允许将个别寄存器的值传给函数的变 量,然后将独立的值传给寄存器。量,然后将独立的值传给寄存器。 per_configargs(reg0, reg1, ); 通用通用csl宏宏 1、per 表示外设,如表示外设,如 edma 2、reg 表示寄存器名,如表示寄存器名,如prictl0,auxctl 3、field 表示寄存器域,如表示寄存器域,如 esize 4、regval 表示外设域生成宏表示外设域生成宏per-fmk( )产生的整型常量,产生的整型常量, 整型变量,符号
59、常量整型变量,符号常量(per_reg_default),或者融合,或者融合 域值域值 5、fieldval 表示的是整常量,整型变量,或者符号常数表示的是整常量,整型变量,或者符号常数 (per_reg_field_symval) 6、x 表示整型常量,整型变量表示整型常量,整型变量 7、sym 表示符号常量表示符号常量 通用通用csl宏宏 per_reg_rmk( fieldval_n, . . . fieldval_0 ) 功能:产生外设寄存器值;功能:产生外设寄存器值;_rmk宏基于位域,使构建寄存器值变得很简单。宏基于位域,使构建寄存器值变得很简单。_rmk宏使用宏使用 规则:域必须
60、可写。首先指定域参数的最高有效位(规则:域必须可写。首先指定域参数的最高有效位(msb),不管用到与否,必须包含所有),不管用到与否,必须包含所有 可写域的值。如果所传值超出特定域所允许的位宽,可写域的值。如果所传值超出特定域所允许的位宽,_rmk宏将截断该域值。宏将截断该域值。 per_rget(reg ) 功能:返回外设寄存器值。功能:返回外设寄存器值。 per_rset(reg, regval ) 功能:将值写入外设寄存器。功能:将值写入外设寄存器。 per_fmk(reg, field , fieldval ) 功能:可与其他功能:可与其他_fmk宏的结果进行宏的结果进行或或(or)操
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 会计档案应急管理办法
- 企业复工疫情管理办法
- 企业员工考勤管理办法
- 京东平台加入管理办法
- 企业分时作业管理办法
- 保定车辆登记管理办法
- 价格评估管理办法试行
- 企业房屋销售管理办法
- 井下照明管理办法规定
- 2025年劳务员之劳务员基础知识考试题库及参考答案(模拟题)
- 阳光房制作安装合同协议书范本8篇
- 2025年供应链管理与优化专业考试试题及答案
- 租借医生执业证合同协议
- 山东省特种设备企业端管理平台 -操作手册
- GB/T 45449-2025再生粉末高温合金原料
- 工程投资人合同协议
- 分娩期产妇的心理护理
- 快速除甲醛知识培训课件
- 眼视光创业计划书
- 物业半年工作总结课件
- 非固化橡胶沥青防水涂料与改性沥青卷材防水施工方案
评论
0/150
提交评论