《C55x处理器的软件设计优秀课件》由会员分享,可在线阅读,更多相关《C55x处理器的软件设计优秀课件(103页珍藏版)》请在金锄头文库上搜索。
1、第第4章章 C55x处理器的软件设计处理器的软件设计 内容提要内容提要内容提要内容提要内容提要内容提要 C55xC55xC55x系列处理器应用灵活、处理能力强大,为系列处理器应用灵活、处理能力强大,为系列处理器应用灵活、处理能力强大,为系列处理器应用灵活、处理能力强大,为系列处理器应用灵活、处理能力强大,为系列处理器应用灵活、处理能力强大,为开发、使用提供了一个很好的硬件平台,要使这个平开发、使用提供了一个很好的硬件平台,要使这个平开发、使用提供了一个很好的硬件平台,要使这个平开发、使用提供了一个很好的硬件平台,要使这个平开发、使用提供了一个很好的硬件平台,要使这个平开发、使用提供了一个很好的
2、硬件平台,要使这个平台更好的发挥作用,高效、方便的软件设计是不可或台更好的发挥作用,高效、方便的软件设计是不可或台更好的发挥作用,高效、方便的软件设计是不可或台更好的发挥作用,高效、方便的软件设计是不可或台更好的发挥作用,高效、方便的软件设计是不可或台更好的发挥作用,高效、方便的软件设计是不可或缺的。缺的。缺的。缺的。缺的。缺的。 程序的主体框架和对实时性要求不高的部分采用程序的主体框架和对实时性要求不高的部分采用程序的主体框架和对实时性要求不高的部分采用程序的主体框架和对实时性要求不高的部分采用程序的主体框架和对实时性要求不高的部分采用程序的主体框架和对实时性要求不高的部分采用C/C+C/C
3、+C/C+C/C+C/C+C/C+语言,而算法实现采用汇编语言,这样能够充语言,而算法实现采用汇编语言,这样能够充语言,而算法实现采用汇编语言,这样能够充语言,而算法实现采用汇编语言,这样能够充语言,而算法实现采用汇编语言,这样能够充语言,而算法实现采用汇编语言,这样能够充分发挥二者的优点,解决易读性和效率之间的矛盾。分发挥二者的优点,解决易读性和效率之间的矛盾。分发挥二者的优点,解决易读性和效率之间的矛盾。分发挥二者的优点,解决易读性和效率之间的矛盾。分发挥二者的优点,解决易读性和效率之间的矛盾。分发挥二者的优点,解决易读性和效率之间的矛盾。同时也改善了软件的移植性,在软件移植时不用改变同时
4、也改善了软件的移植性,在软件移植时不用改变同时也改善了软件的移植性,在软件移植时不用改变同时也改善了软件的移植性,在软件移植时不用改变同时也改善了软件的移植性,在软件移植时不用改变同时也改善了软件的移植性,在软件移植时不用改变程序的主体框架,只要为处理器提供相应的算法即可。程序的主体框架,只要为处理器提供相应的算法即可。程序的主体框架,只要为处理器提供相应的算法即可。程序的主体框架,只要为处理器提供相应的算法即可。程序的主体框架,只要为处理器提供相应的算法即可。程序的主体框架,只要为处理器提供相应的算法即可。 本章主要介绍了本章主要介绍了本章主要介绍了本章主要介绍了本章主要介绍了本章主要介绍了
5、C55xC55xC55xC55xC55xC55x处理器的程序基本结构,处理器的程序基本结构,处理器的程序基本结构,处理器的程序基本结构,处理器的程序基本结构,处理器的程序基本结构,C C C C C C语言编程以及优化,语言编程以及优化,语言编程以及优化,语言编程以及优化,语言编程以及优化,语言编程以及优化,C C C C C C语言与汇编语言的混合编程,语言与汇编语言的混合编程,语言与汇编语言的混合编程,语言与汇编语言的混合编程,语言与汇编语言的混合编程,语言与汇编语言的混合编程,通用目标文件格式,最后对通用目标文件格式,最后对通用目标文件格式,最后对通用目标文件格式,最后对通用目标文件格式
6、,最后对通用目标文件格式,最后对C55xC55xC55xC55xC55xC55x处理器的数字信号处处理器的数字信号处处理器的数字信号处处理器的数字信号处处理器的数字信号处处理器的数字信号处理库和图像、视频处理库进行了介绍。理库和图像、视频处理库进行了介绍。理库和图像、视频处理库进行了介绍。理库和图像、视频处理库进行了介绍。理库和图像、视频处理库进行了介绍。理库和图像、视频处理库进行了介绍。 2024/9/192024/9/191 1DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第4章章 C55x处理器的软件设计处理器的软件设计 4.1 C55x处
7、理器程序基本结构处理器程序基本结构4.2 C语言程序开发及优化语言程序开发及优化4.3 C语言与汇编语言的混合编程语言与汇编语言的混合编程4.4 通用目标文件格式通用目标文件格式4.5 C55x处处理理器器的的数数字字信信号号处处理理库库和和图图像像、视频处理库视频处理库2024/9/192024/9/192 2DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第4 4 4 4章章章章 C55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 C55x处理器软件开发流程 C/C+源文件C编译器汇编源代码CO
8、FF目标文件汇编器链接器可执行COFF文件宏源文件归档器宏调用库归档器目标文件库运行支持库建立运行支持库2024/9/192024/9/193 3DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第4 4 4 4章章章章 C55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 汇编器:汇编器:汇编器:汇编器:是把汇编源代码转换成机器语言。是把汇编源代码转换成机器语言。是把汇编源代码转换成机器语言。是把汇编源代码转换成机器语言。 汇编器:汇编器:汇编器:汇编器:是把汇编源代码转换成机器语言。是把汇编源代码转
9、换成机器语言。是把汇编源代码转换成机器语言。是把汇编源代码转换成机器语言。 链接器:链接器:链接器:链接器:则将多个目标文件结合成一个可执行则将多个目标文件结合成一个可执行则将多个目标文件结合成一个可执行则将多个目标文件结合成一个可执行文件文件文件文件 。 归档器:归档器:归档器:归档器:可以把一组文件归档为一个库,供用可以把一组文件归档为一个库,供用可以把一组文件归档为一个库,供用可以把一组文件归档为一个库,供用户使用。户使用。户使用。户使用。 如果用户只用汇编语言编写程序,则将跳过如果用户只用汇编语言编写程序,则将跳过如果用户只用汇编语言编写程序,则将跳过如果用户只用汇编语言编写程序,则将
10、跳过C C编译器而编译器而编译器而编译器而直接通过汇编器生成目标文件。直接通过汇编器生成目标文件。直接通过汇编器生成目标文件。直接通过汇编器生成目标文件。2024/9/192024/9/194 4DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.1 C55x4.1 C55x处理器程序基本结构处理器程序基本结构 根据任务调度的方式不同,根据任务调度的方式不同,
11、根据任务调度的方式不同,根据任务调度的方式不同,C55xC55xC55xC55x处理器程序大体可以分处理器程序大体可以分处理器程序大体可以分处理器程序大体可以分为两类为两类为两类为两类 :(1)(1)(1)(1) 由程序自己完成任务调度由程序自己完成任务调度由程序自己完成任务调度由程序自己完成任务调度 程序运行效率高,对硬件中断响应快,程序运行稳定,程序运行效率高,对硬件中断响应快,程序运行稳定,程序运行效率高,对硬件中断响应快,程序运行稳定,程序运行效率高,对硬件中断响应快,程序运行稳定,适合于任务较为单一,实时性较强的应用;适合于任务较为单一,实时性较强的应用;适合于任务较为单一,实时性较
12、强的应用;适合于任务较为单一,实时性较强的应用;(2) (2) 由嵌入式操作系统完成任务调度由嵌入式操作系统完成任务调度由嵌入式操作系统完成任务调度由嵌入式操作系统完成任务调度 但如果要利用处理器同时完成多个任务,应用嵌入式操但如果要利用处理器同时完成多个任务,应用嵌入式操但如果要利用处理器同时完成多个任务,应用嵌入式操但如果要利用处理器同时完成多个任务,应用嵌入式操作系统是十分有必要的,这是因为嵌入式操作系统可以将应作系统是十分有必要的,这是因为嵌入式操作系统可以将应作系统是十分有必要的,这是因为嵌入式操作系统可以将应作系统是十分有必要的,这是因为嵌入式操作系统可以将应用分解为多个任务,简化
13、了应用系统软件设计,更为重要的用分解为多个任务,简化了应用系统软件设计,更为重要的用分解为多个任务,简化了应用系统软件设计,更为重要的用分解为多个任务,简化了应用系统软件设计,更为重要的是良好的多任务设计有助于提高系统的稳定性和可靠性。是良好的多任务设计有助于提高系统的稳定性和可靠性。是良好的多任务设计有助于提高系统的稳定性和可靠性。是良好的多任务设计有助于提高系统的稳定性和可靠性。2024/9/192024/9/195 5DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55x
14、C55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.1.1 4.1.1 4.1.1 4.1.1 自我调度程序的基本结构自我调度程序的基本结构自我调度程序的基本结构自我调度程序的基本结构 虽然嵌入式操作系统已经发展得较为成熟,但通虽然嵌入式操作系统已经发展得较为成熟,但通过程序自身完成任务调度仍然保持着旺盛的生命力,过程序自身完成任务调度仍然保持着旺盛的生命力,这是因为这种方式适合于这是因为这种方式适合于DSPDSP这种需要对大量实时数这种需要对大量实时数据完成顺序处理的应用。下面给出自我调度程序的基据完成顺序处理的应用。下面给出
15、自我调度程序的基本结构。本结构。 中断程序1;中断程序m;Main()DSP_INT();/DSP初始化For(;) /主循环if(条件1)/判断条件1处理模块1;/条件满足运行处理模块1;if(条件n)/判断条件n处理模块n;/条件满足运行处理模块n;2024/9/192024/9/196 6DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 初始化部分通常完成
16、初始化部分通常完成DSPDSP软、硬件的初始化设置,启动系软、硬件的初始化设置,启动系 统硬件,使能统硬件,使能DSPDSP中断,启动中断,启动DMADMA传送等工作。传送等工作。 主循环部分是程序的主体,将由它完成数据输入、处理和主循环部分是程序的主体,将由它完成数据输入、处理和输出等工作。主循环由条件判断和处理模块组成,当满足条件时输出等工作。主循环由条件判断和处理模块组成,当满足条件时运行处理模块,不满足条件则自动跳到下一个判断条件。运行处理模块,不满足条件则自动跳到下一个判断条件。 中断程序通常不进行数据处理,只通过设置判断标志来影中断程序通常不进行数据处理,只通过设置判断标志来影响主
17、循环部分的运行。响主循环部分的运行。 自我调度程序通常由中断程序部分、初始化部分自我调度程序通常由中断程序部分、初始化部分和主循环部分组成和主循环部分组成 :4.1.1 4.1.1 4.1.1 4.1.1 自我调度程序的基本结构自我调度程序的基本结构自我调度程序的基本结构自我调度程序的基本结构2024/9/192024/9/197 7DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件
18、设计处理器的软件设计 为了满足实时运行的要求,自我调度程序的主循为了满足实时运行的要求,自我调度程序的主循环部分必须将处理时延限制在最大可接受时延内,具环部分必须将处理时延限制在最大可接受时延内,具体来说就是运行主循环的所有分支的时间总和必须小体来说就是运行主循环的所有分支的时间总和必须小于最大可接受时延,如果不能满足这一条件,则在最于最大可接受时延,如果不能满足这一条件,则在最坏情况下,会造成处理数据的不连续,而无法实现数坏情况下,会造成处理数据的不连续,而无法实现数据的实时处理。据的实时处理。 当所编写的程序没有满足上述条件时,则需要对当所编写的程序没有满足上述条件时,则需要对处理流程进行
19、修改,或修改处理算法以满足条件。处理流程进行修改,或修改处理算法以满足条件。 4.1.14.1.14.1.14.1.1 自我调度程序的基本结构自我调度程序的基本结构自我调度程序的基本结构自我调度程序的基本结构2024/9/192024/9/198 8DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 在数字信号处理器中运行的操作系统必须满足系统实时在数字信号处理器
20、中运行的操作系统必须满足系统实时性要求,而操作系统的实时方式可以分成两种性要求,而操作系统的实时方式可以分成两种硬实时方硬实时方式和软实时方式。式和软实时方式。 软实时系统由软件来进行任务的切换,而硬实时系统则软实时系统由软件来进行任务的切换,而硬实时系统则按照固定时钟节拍切换任务。软实时系统使各个任务尽快运按照固定时钟节拍切换任务。软实时系统使各个任务尽快运行,而不要求限定某个任务在多长时间内完成;硬实时系统行,而不要求限定某个任务在多长时间内完成;硬实时系统中各任务不仅要执行无误,而且要准时。中各任务不仅要执行无误,而且要准时。 4.1.24.1.24.1.24.1.2 应用嵌入式操作系统
21、应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统 嵌入式实时操作系统的作用就是合理调度、分配任务的嵌入式实时操作系统的作用就是合理调度、分配任务的运行,使各个任务正确、及时地执行。运行,使各个任务正确、及时地执行。 2024/9/192024/9/199 9DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 嵌入式操作系统的核心是操作系统内核,在多嵌入式操作
22、系统的核心是操作系统内核,在多任务系统中,内核负责管理各个任务,为每个任务任务系统中,内核负责管理各个任务,为每个任务分配分配CPUCPU时间,负责任务间的通信和任务切换。根据时间,负责任务间的通信和任务切换。根据其重要程度的不同系统中每个任务被赋予一定的优其重要程度的不同系统中每个任务被赋予一定的优先级,内核将根据任务的优先级进行任务调度。基先级,内核将根据任务的优先级进行任务调度。基于优先级的内核可以分成不可剥夺型和可剥夺型两于优先级的内核可以分成不可剥夺型和可剥夺型两种类型。种类型。 4.1.24.1.24.1.24.1.2 应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统应用嵌入
23、式操作系统 2024/9/192024/9/191010DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 1.1.1.1. 不可剥夺型内核不可剥夺型内核不可剥夺型内核不可剥夺型内核 不可剥夺型内核要求每个任务主动放弃不可剥夺型内核要求每个任务主动放弃不可剥夺型内核要求每个任务主动放弃不可剥夺型内核要求每个任务主动放弃CPUCPUCPUCPU使用权,这种任使用权,
24、这种任使用权,这种任使用权,这种任务的调度方法也可以叫做合作型多任务,每个任务相互合作,共务的调度方法也可以叫做合作型多任务,每个任务相互合作,共务的调度方法也可以叫做合作型多任务,每个任务相互合作,共务的调度方法也可以叫做合作型多任务,每个任务相互合作,共享一个享一个享一个享一个CPUCPUCPUCPU。 不可剥夺型内核中的异步事件由中断服务来处理,中断服务不可剥夺型内核中的异步事件由中断服务来处理,中断服务不可剥夺型内核中的异步事件由中断服务来处理,中断服务不可剥夺型内核中的异步事件由中断服务来处理,中断服务可以使一个高优先级的任务由挂起态变为就绪态;但在中断服务可以使一个高优先级的任务由
25、挂起态变为就绪态;但在中断服务可以使一个高优先级的任务由挂起态变为就绪态;但在中断服务可以使一个高优先级的任务由挂起态变为就绪态;但在中断服务之后,之后,之后,之后,CPUCPUCPUCPU的使用权还给原来被中断的任务,直到该任务主动放的使用权还给原来被中断的任务,直到该任务主动放的使用权还给原来被中断的任务,直到该任务主动放的使用权还给原来被中断的任务,直到该任务主动放弃弃弃弃CPUCPUCPUCPU的使用权,一个高优先级的任务才能进入运行态。的使用权,一个高优先级的任务才能进入运行态。的使用权,一个高优先级的任务才能进入运行态。的使用权,一个高优先级的任务才能进入运行态。 4.1.24.1
26、.24.1.24.1.2 应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统 2024/9/192024/9/191111DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 这种内核的优点是响应中断快,采用不可剥夺型内核允这种内核的优点是响应中断快,采用不可剥夺型内核允许任务使用不可重入函数,每个任务调用不可重入型函数不许任务使用不可重入函数
27、,每个任务调用不可重入型函数不必担心其他任务可能使用该函数而造成数据破坏。使用不可必担心其他任务可能使用该函数而造成数据破坏。使用不可剥夺型内核时,任务的响应时间取决于最长任务的执行时间。剥夺型内核时,任务的响应时间取决于最长任务的执行时间。使用该内核很少需要使用信号量保护共享数据,这是因为正使用该内核很少需要使用信号量保护共享数据,这是因为正在运行的任务不必担心其他任务抢占在运行的任务不必担心其他任务抢占CPUCPU;但如果任务使用共;但如果任务使用共享设备时,还应使用互斥型信号量。享设备时,还应使用互斥型信号量。 4.1.24.1.24.1.24.1.2 应用嵌入式操作系统应用嵌入式操作系
28、统应用嵌入式操作系统应用嵌入式操作系统 1.1.1.1. 不可剥夺型内核不可剥夺型内核不可剥夺型内核不可剥夺型内核 2024/9/192024/9/191212DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 不可剥夺型内核的缺点是响应时间具有不确定性,无法确不可剥夺型内核的缺点是响应时间具有不确定性,无法确不可剥夺型内核的缺点是响应时间具有不确定性,无法确不可
29、剥夺型内核的缺点是响应时间具有不确定性,无法确定最高优先级的任务何时能够获得定最高优先级的任务何时能够获得定最高优先级的任务何时能够获得定最高优先级的任务何时能够获得CPUCPUCPUCPU的使用权。的使用权。的使用权。的使用权。 2. 2. 2. 2. 可剥夺型内核可剥夺型内核可剥夺型内核可剥夺型内核 可剥夺型内核运行时,一旦具有最高优先级的任务就绪,就可剥夺型内核运行时,一旦具有最高优先级的任务就绪,就可剥夺型内核运行时,一旦具有最高优先级的任务就绪,就可剥夺型内核运行时,一旦具有最高优先级的任务就绪,就总能得到总能得到总能得到总能得到CPUCPUCPUCPU的使用权。当有一个具有更高优先
30、权的任务进入就的使用权。当有一个具有更高优先权的任务进入就的使用权。当有一个具有更高优先权的任务进入就的使用权。当有一个具有更高优先权的任务进入就绪态时,当前运行的任务将被挂起,更高级的任务立刻得到绪态时,当前运行的任务将被挂起,更高级的任务立刻得到绪态时,当前运行的任务将被挂起,更高级的任务立刻得到绪态时,当前运行的任务将被挂起,更高级的任务立刻得到CPUCPUCPUCPU的使用权。的使用权。的使用权。的使用权。1.1.1.1. 不可剥夺型内核不可剥夺型内核不可剥夺型内核不可剥夺型内核 4.1.24.1.24.1.24.1.2 应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统应用嵌入式
31、操作系统 2024/9/192024/9/191313DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 如果是中断服务子程序使一个高优先级的任务进如果是中断服务子程序使一个高优先级的任务进如果是中断服务子程序使一个高优先级的任务进如果是中断服务子程序使一个高优先级的任务进入就绪状态,中断完成后,被中断的任务被挂起,开入就绪状态,中断完成后,被中断的任务被挂起,开
32、入就绪状态,中断完成后,被中断的任务被挂起,开入就绪状态,中断完成后,被中断的任务被挂起,开始运行更高级的任务。使用可剥夺型内核可以随时执始运行更高级的任务。使用可剥夺型内核可以随时执始运行更高级的任务。使用可剥夺型内核可以随时执始运行更高级的任务。使用可剥夺型内核可以随时执行最高级任务,这使得任务的响应时间得以最优化。行最高级任务,这使得任务的响应时间得以最优化。行最高级任务,这使得任务的响应时间得以最优化。行最高级任务,这使得任务的响应时间得以最优化。使用可剥夺内核要求应用程序不应直接使用不可重入使用可剥夺内核要求应用程序不应直接使用不可重入使用可剥夺内核要求应用程序不应直接使用不可重入使
33、用可剥夺内核要求应用程序不应直接使用不可重入函数,如果要使用则应满足互斥条件。函数,如果要使用则应满足互斥条件。函数,如果要使用则应满足互斥条件。函数,如果要使用则应满足互斥条件。 4.1.24.1.24.1.24.1.2 应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统 2. 2. 2. 2. 可剥夺型内核可剥夺型内核可剥夺型内核可剥夺型内核 2024/9/192024/9/191414DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC5
34、5x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.1.24.1.24.1.24.1.2 应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统 内核的主要工作是完成任务的调度,任务也可称内核的主要工作是完成任务的调度,任务也可称内核的主要工作是完成任务的调度,任务也可称内核的主要工作是完成任务的调度,任务也可称作线程,是一个简单的程序,该程序认为作线程,是一个简单的程序,该程序认为作线程,是一个简单的程序,该程序认为作线程,是一个简单的程序,该程序认为CPUCPUCPUCPU完全属于完全属于完全属于完全属于自己。操作系统
35、要求把系统所要完成的工作分解为多自己。操作系统要求把系统所要完成的工作分解为多自己。操作系统要求把系统所要完成的工作分解为多自己。操作系统要求把系统所要完成的工作分解为多个任务,每个任务都是应用的一部分。任务都被赋予个任务,每个任务都是应用的一部分。任务都被赋予个任务,每个任务都是应用的一部分。任务都被赋予个任务,每个任务都是应用的一部分。任务都被赋予一定的优先级,并拥有自己的一套一定的优先级,并拥有自己的一套一定的优先级,并拥有自己的一套一定的优先级,并拥有自己的一套CPUCPUCPUCPU寄存器和堆栈空寄存器和堆栈空寄存器和堆栈空寄存器和堆栈空间。间。间。间。2024/9/192024/9
36、/191515DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.1.24.1.24.1.24.1.2 应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统 任务是一个无限循环,它必须处于下列任务是一个无限循环,它必须处于下列任务是一个无限循环,它必须处于下列任务是一个无限循环,它必须处于下列5 5 5 5个状态之一:个状态之一:个状态之一
37、:个状态之一: 休眠状态休眠状态休眠状态休眠状态是任务驻留在内存之中,但并没有被系统内核所调用;是任务驻留在内存之中,但并没有被系统内核所调用;是任务驻留在内存之中,但并没有被系统内核所调用;是任务驻留在内存之中,但并没有被系统内核所调用; 就绪状态就绪状态就绪状态就绪状态是任务已经准备好,但由于该任务的优先级比正在运行的任务的是任务已经准备好,但由于该任务的优先级比正在运行的任务的是任务已经准备好,但由于该任务的优先级比正在运行的任务的是任务已经准备好,但由于该任务的优先级比正在运行的任务的 优先级低,还暂时不能运行;优先级低,还暂时不能运行;优先级低,还暂时不能运行;优先级低,还暂时不能运
38、行; 运行状态运行状态运行状态运行状态是任务拥有是任务拥有是任务拥有是任务拥有CPUCPU的使用权,正在运行;的使用权,正在运行;的使用权,正在运行;的使用权,正在运行; 挂挂挂挂起起起起状状状状态态态态是是是是任任任任务务务务正正正正在在在在等等等等待待待待某某某某一一一一个个个个事事事事件件件件的的的的发发发发生生生生以以以以结结结结束束束束目目目目前前前前的的的的等等等等待待待待(如如如如等等等等待待待待外外外外设的设的设的设的I/OI/O操作、等待共享资源、等待定时或超时信息等事件);操作、等待共享资源、等待定时或超时信息等事件);操作、等待共享资源、等待定时或超时信息等事件);操作、
39、等待共享资源、等待定时或超时信息等事件); 发发发发生生生生中中中中断断断断时时时时,CPUCPU进进进进入入入入中中中中断断断断服服服服务务务务程程程程序序序序,而而而而暂暂暂暂时时时时不不不不能能能能运运运运行行行行当当当当前前前前的的的的任任任任务务务务,任任任任务务务务就进入了被中断态。就进入了被中断态。就进入了被中断态。就进入了被中断态。 2024/9/192024/9/191616DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计
40、处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.1.24.1.24.1.24.1.2 应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统 操作系统需要在多个任务之间转换和调度,这是因为操作系统需要在多个任务之间转换和调度,这是因为操作系统需要在多个任务之间转换和调度,这是因为操作系统需要在多个任务之间转换和调度,这是因为CPUCPUCPUCPU在某一时刻只能为一个任务提供服务,在某一时刻只能为一个任务提供服务,在某一时刻只能为一个任务提供服务,在某一时刻只能为一个任务提供服务,CPUCPUCPUCPU必须为一系列任务必须为一系列任务必
41、须为一系列任务必须为一系列任务轮流服务。多任务运行可以使轮流服务。多任务运行可以使轮流服务。多任务运行可以使轮流服务。多任务运行可以使CPUCPUCPUCPU的利用率达到最高,并使应的利用率达到最高,并使应的利用率达到最高,并使应的利用率达到最高,并使应用程序模块化,使用多任务可以使程序更容易设计和维护。用程序模块化,使用多任务可以使程序更容易设计和维护。用程序模块化,使用多任务可以使程序更容易设计和维护。用程序模块化,使用多任务可以使程序更容易设计和维护。 当任务从当前任务切换到另一个任务时,必须保存正在执当任务从当前任务切换到另一个任务时,必须保存正在执当任务从当前任务切换到另一个任务时,
42、必须保存正在执当任务从当前任务切换到另一个任务时,必须保存正在执行的任务的当前状态。所谓行的任务的当前状态。所谓行的任务的当前状态。所谓行的任务的当前状态。所谓“任务的当前状态任务的当前状态任务的当前状态任务的当前状态”即即即即CPUCPUCPUCPU寄存器寄存器寄存器寄存器中的所有内容;这些内容被保存在任务自己的堆栈中,以备任中的所有内容;这些内容被保存在任务自己的堆栈中,以备任中的所有内容;这些内容被保存在任务自己的堆栈中,以备任中的所有内容;这些内容被保存在任务自己的堆栈中,以备任务下次执行时恢复当前状态。在保存完当前任务后,要把下一务下次执行时恢复当前状态。在保存完当前任务后,要把下一
43、务下次执行时恢复当前状态。在保存完当前任务后,要把下一务下次执行时恢复当前状态。在保存完当前任务后,要把下一个任务的当前状态装入个任务的当前状态装入个任务的当前状态装入个任务的当前状态装入CPUCPUCPUCPU寄存器,并开始下一个任务的运行,寄存器,并开始下一个任务的运行,寄存器,并开始下一个任务的运行,寄存器,并开始下一个任务的运行,这一过程叫做这一过程叫做这一过程叫做这一过程叫做“任务切换任务切换任务切换任务切换”。2024/9/192024/9/191717DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章
44、章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.1.24.1.24.1.24.1.2 应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统 每个任务都有其优先级,任务越重要,被赋予的每个任务都有其优先级,任务越重要,被赋予的每个任务都有其优先级,任务越重要,被赋予的每个任务都有其优先级,任务越重要,被赋予的优先级应越高。如果程序执行过程中任务的优先级不优先级应越高。如果程序执行过程中任务的优先级不优先级应越高。如果程序执行过程中任务的优先级不优先级应越高。如果程序
45、执行过程中任务的优先级不变,则称为静态优先级;反之则称为动态优先级。变,则称为静态优先级;反之则称为动态优先级。变,则称为静态优先级;反之则称为动态优先级。变,则称为静态优先级;反之则称为动态优先级。 所谓所谓所谓所谓“ “任务管理任务管理任务管理任务管理” ”就是在内核的控制下任务在五就是在内核的控制下任务在五就是在内核的控制下任务在五就是在内核的控制下任务在五种状态之间切换。种状态之间切换。种状态之间切换。种状态之间切换。 OSIntExit( )OSTaskDel( ) OSTaskDel( )挂起状态休眠状态就绪状态运行状态被中断状态OSTaskCreate( )OSTaskCreat
46、eExt( )OSFlagPost( )OSMboxPost( )OSMboxPost( )OSMutexPost( )OSQPost( )OSQPostFront( )OSSemPost( )OSTaskResume( )OSTimeDlyResume( )OSTimeTick( )OSStart( )OSIntExt( )OS_TASK_SW( )CPU使用权被剥夺OSTaskDel( )OSFlagPend( )OSMboxPend( )OSMutexPend( )OSQPend( )OSSemPend( )OSTaskSuspend( )OSTimeDly ( )OSTimeDlyHM
47、SM( )中断2024/9/192024/9/191818DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.1.24.1.24.1.24.1.2 应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统 不同任务之间有可能会使用共同的资源,当它们同不同任务之间有可能会使用共同的资源,当它们同不同任务之间有可能会使用共同的资源,当它们同不同任务
48、之间有可能会使用共同的资源,当它们同时使用共享资源时有可能发生错误,嵌入式操作系统提时使用共享资源时有可能发生错误,嵌入式操作系统提时使用共享资源时有可能发生错误,嵌入式操作系统提时使用共享资源时有可能发生错误,嵌入式操作系统提供了信号量这一约定机制,通过该机制可以控制共享资供了信号量这一约定机制,通过该机制可以控制共享资供了信号量这一约定机制,通过该机制可以控制共享资供了信号量这一约定机制,通过该机制可以控制共享资源的使用权,或标志某一事件的发生,也可以用来为两源的使用权,或标志某一事件的发生,也可以用来为两源的使用权,或标志某一事件的发生,也可以用来为两源的使用权,或标志某一事件的发生,也
49、可以用来为两个任务同步。信号量有两种类型个任务同步。信号量有两种类型个任务同步。信号量有两种类型个任务同步。信号量有两种类型二进制型和计数器二进制型和计数器二进制型和计数器二进制型和计数器型,实际上二进制型可以看作一个只有一位的计数器型型,实际上二进制型可以看作一个只有一位的计数器型型,实际上二进制型可以看作一个只有一位的计数器型型,实际上二进制型可以看作一个只有一位的计数器型信号量。信号量。信号量。信号量。 2024/9/192024/9/191919DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C
50、55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.1.24.1.24.1.24.1.2 应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统 信号量可以看作一把钥匙。当任务要运行时首先信号量可以看作一把钥匙。当任务要运行时首先信号量可以看作一把钥匙。当任务要运行时首先信号量可以看作一把钥匙。当任务要运行时首先要取得这把钥匙。如果信号量已经被其他任务占用,要取得这把钥匙。如果信号量已经被其他任务占用,要取得这把钥匙。如果信号量已经被其他任务占用,要取得这把钥匙。如果信号量已经被其
51、他任务占用,那么该任务只好挂起并等待信号量被当前使用者释放。那么该任务只好挂起并等待信号量被当前使用者释放。那么该任务只好挂起并等待信号量被当前使用者释放。那么该任务只好挂起并等待信号量被当前使用者释放。 2024/9/192024/9/192020DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.1.24.1.24.1.24.1.2 应用嵌入式操作系统应用
52、嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统 任务要使用信号量,首先要对信号量进行初始任务要使用信号量,首先要对信号量进行初始任务要使用信号量,首先要对信号量进行初始任务要使用信号量,首先要对信号量进行初始化。化。化。化。 如果任务要得到信号量,首先要执行如果任务要得到信号量,首先要执行如果任务要得到信号量,首先要执行如果任务要得到信号量,首先要执行“等待等待等待等待”操作。操作。操作。操作。 如果该信号量有效(信号量的值大于如果该信号量有效(信号量的值大于如果该信号量有效(信号量的值大于如果该信号量有效(信号量的值大于0 0 0 0), , , ,则该则该则该则该信号量值减信号量值减信
53、号量值减信号量值减1 1 1 1,任务得以继续执行。,任务得以继续执行。,任务得以继续执行。,任务得以继续执行。 如果信号量的值为如果信号量的值为如果信号量的值为如果信号量的值为0 0,等待信号量的任务就被列,等待信号量的任务就被列,等待信号量的任务就被列,等待信号量的任务就被列入等待信号量任务表。入等待信号量任务表。入等待信号量任务表。入等待信号量任务表。 2024/9/192024/9/192121DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器
54、的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 如果等待时间超过某一设定值,该信号量还无效,如果等待时间超过某一设定值,该信号量还无效,如果等待时间超过某一设定值,该信号量还无效,如果等待时间超过某一设定值,该信号量还无效,那么等待信号量的任务自动进入就绪状态并准备运行,那么等待信号量的任务自动进入就绪状态并准备运行,那么等待信号量的任务自动进入就绪状态并准备运行,那么等待信号量的任务自动进入就绪状态并准备运行,并向系统报一个并向系统报一个并向系统报一个并向系统报一个“ “超时错误超时错误超时错误超时错误” ”信息。信息。信息。信息。4.1.24.1
55、.24.1.24.1.2 应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统 2024/9/192024/9/192222DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 实际上,等待该信号量的任务可能有多个。在嵌入式操作实际上,等待该信号量的任务可能有多个。在嵌入式操作实际上,等待该信号量的任务可能有多个。在嵌入式操作实际上,等待该信号量
56、的任务可能有多个。在嵌入式操作系统中通常依照优先级来决定由哪个任务取得信号量。系统中通常依照优先级来决定由哪个任务取得信号量。系统中通常依照优先级来决定由哪个任务取得信号量。系统中通常依照优先级来决定由哪个任务取得信号量。 任务还可以释放信号量。任务还可以释放信号量。任务还可以释放信号量。任务还可以释放信号量。 如果有任务等待该信号量,那么就会有一个任务进入就绪如果有任务等待该信号量,那么就会有一个任务进入就绪如果有任务等待该信号量,那么就会有一个任务进入就绪如果有任务等待该信号量,那么就会有一个任务进入就绪状态,信号量的值不增加。状态,信号量的值不增加。状态,信号量的值不增加。状态,信号量的
57、值不增加。 如果这时没有任务等待信号量,则信号量的值加如果这时没有任务等待信号量,则信号量的值加如果这时没有任务等待信号量,则信号量的值加如果这时没有任务等待信号量,则信号量的值加1 1 1 1。4.1.24.1.24.1.24.1.2 应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统 2024/9/192024/9/192323DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的
58、软件设计处理器的软件设计处理器的软件设计 4.1.24.1.24.1.24.1.2 应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统 两个任务之间可以利用信号量来取得同步,这种两个任务之间可以利用信号量来取得同步,这种两个任务之间可以利用信号量来取得同步,这种两个任务之间可以利用信号量来取得同步,这种同步可以分成两类同步可以分成两类同步可以分成两类同步可以分成两类单向同步和双向同步。所谓单向同步和双向同步。所谓单向同步和双向同步。所谓单向同步和双向同步。所谓“单向同步单向同步单向同步单向同步”是指任务用一个信号量触发另一个任务。是指任务用一个信号量触发另一个任务。是指任
59、务用一个信号量触发另一个任务。是指任务用一个信号量触发另一个任务。单向同步单向同步2024/9/192024/9/192424DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 当两个任务需要相互同步对方,这时就要用到双当两个任务需要相互同步对方,这时就要用到双当两个任务需要相互同步对方,这时就要用到双当两个任务需要相互同步对方,这时就要用到双向同步。向同步。向同
60、步。向同步。 两个任务的双向同步两个任务的双向同步两个任务的双向同步两个任务的双向同步4.1.24.1.24.1.24.1.2 应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统 2024/9/192024/9/192525DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.1.24.1.24.1.24.1.2 应用嵌入式操作系统应用嵌入
61、式操作系统应用嵌入式操作系统应用嵌入式操作系统 任务之间的通信可以通过两个途径:全局变量或任务之间的通信可以通过两个途径:全局变量或任务之间的通信可以通过两个途径:全局变量或任务之间的通信可以通过两个途径:全局变量或消息。消息。消息。消息。 使用全局变量必须保证任务或中断服务子程序,使用全局变量必须保证任务或中断服务子程序,使用全局变量必须保证任务或中断服务子程序,使用全局变量必须保证任务或中断服务子程序,在使用该变量时没有其他的任务或中断服务子程序访在使用该变量时没有其他的任务或中断服务子程序访在使用该变量时没有其他的任务或中断服务子程序访在使用该变量时没有其他的任务或中断服务子程序访问该变
62、量。问该变量。问该变量。问该变量。 另外,如果任务没有其他机制通知其变量已经被另外,如果任务没有其他机制通知其变量已经被另外,如果任务没有其他机制通知其变量已经被另外,如果任务没有其他机制通知其变量已经被修改了,任务就只能周期性地查询该变量的值。要避修改了,任务就只能周期性地查询该变量的值。要避修改了,任务就只能周期性地查询该变量的值。要避修改了,任务就只能周期性地查询该变量的值。要避免这种情况,可以考虑使用消息邮箱或消息队列。免这种情况,可以考虑使用消息邮箱或消息队列。免这种情况,可以考虑使用消息邮箱或消息队列。免这种情况,可以考虑使用消息邮箱或消息队列。2024/9/192024/9/19
63、2626DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.1.24.1.24.1.24.1.2 应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统 消息邮箱是一个任务或一个中断程序。通过一个消息邮箱是一个任务或一个中断程序。通过一个消息邮箱是一个任务或一个中断程序。通过一个消息邮箱是一个任务或一个中断程序。通过一个指针型变量把一个消息(
64、指针)放到邮箱之中,而一指针型变量把一个消息(指针)放到邮箱之中,而一指针型变量把一个消息(指针)放到邮箱之中,而一指针型变量把一个消息(指针)放到邮箱之中,而一个或多个任务通过内核服务可以接收到这个消息。个或多个任务通过内核服务可以接收到这个消息。个或多个任务通过内核服务可以接收到这个消息。个或多个任务通过内核服务可以接收到这个消息。 内核可以提供下列邮箱服务:内核可以提供下列邮箱服务:内核可以提供下列邮箱服务:内核可以提供下列邮箱服务: 初始化邮箱内的消息;初始化邮箱内的消息;初始化邮箱内的消息;初始化邮箱内的消息; 将消息放入邮箱;将消息放入邮箱;将消息放入邮箱;将消息放入邮箱; 等待消
65、息进入邮箱;等待消息进入邮箱;等待消息进入邮箱;等待消息进入邮箱; 从邮箱中取得消息。从邮箱中取得消息。从邮箱中取得消息。从邮箱中取得消息。2024/9/192024/9/192727DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 消息队列则是任务或中断程序把一个消息指针放消息队列则是任务或中断程序把一个消息指针放消息队列则是任务或中断程序把一个消息指针放消息
66、队列则是任务或中断程序把一个消息指针放到消息队列之中,而一个或多个任务通过内核服务从到消息队列之中,而一个或多个任务通过内核服务从到消息队列之中,而一个或多个任务通过内核服务从到消息队列之中,而一个或多个任务通过内核服务从消息队列中接收消息。消息队列中接收消息。消息队列中接收消息。消息队列中接收消息。 内核提供消息队列服务如下:内核提供消息队列服务如下:内核提供消息队列服务如下:内核提供消息队列服务如下: 消息队列初始化,即将消息队列清空;消息队列初始化,即将消息队列清空;消息队列初始化,即将消息队列清空;消息队列初始化,即将消息队列清空; 将一个消息放到消息队列之中;将一个消息放到消息队列之
67、中;将一个消息放到消息队列之中;将一个消息放到消息队列之中; 等待消息到来;等待消息到来;等待消息到来;等待消息到来; 得到消息。得到消息。得到消息。得到消息。4.1.24.1.24.1.24.1.2 应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统应用嵌入式操作系统 2024/9/192024/9/192828DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件
68、设计 TMS320C55xTMS320C55xTMS320C55xTMS320C55x处理器为处理器为处理器为处理器为C C C C语言开发提供了一系列工语言开发提供了一系列工语言开发提供了一系列工语言开发提供了一系列工具,包括:优化具,包括:优化具,包括:优化具,包括:优化C/C+C/C+C/C+C/C+编译器、链接器和归档器。编译器、链接器和归档器。编译器、链接器和归档器。编译器、链接器和归档器。 并支持混合编程。并支持混合编程。并支持混合编程。并支持混合编程。 C C C C语言的优点在于程序可读性强。语言的优点在于程序可读性强。语言的优点在于程序可读性强。语言的优点在于程序可读性强。4
69、.2 C4.2 C语言程序开发及优化语言程序开发及优化2024/9/192024/9/192929DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.2.14.2.14.2.14.2.1 C C C C语言中的数据类型语言中的数据类型语言中的数据类型语言中的数据类型 C55xC55xC55xC55x支持下列数据类型包括字符、定点数、浮点支持下列数据类型包括字符
70、、定点数、浮点支持下列数据类型包括字符、定点数、浮点支持下列数据类型包括字符、定点数、浮点数、指针等。数、指针等。数、指针等。数、指针等。 4.2 C4.2 C语言程序开发及优化语言程序开发及优化类类类类型型型型长长长长度度度度内容内容内容内容最小最小最小最小值值值值最大最大最大最大值值值值signed char(signed char(有符号字符有符号字符) )1616位位ASCIIASCII码码-32768-327683276732767char, unsigned charchar, unsigned char( (无符号字符无符号字符) )1616位位ASCIIASCII码码0 065
71、53565535short, signed short(short, signed short(短整型短整型) )1616位位二二进进制制补补码码-32768-327683276732767unsigned short(unsigned short(无符号短整无符号短整型型) )1616位位二二进进制数制数0 065535655352024/9/192024/9/193030DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处
72、理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 char, unsigned charpointers(数据指针)小存储器模式16位0xFFFF类类类类 型型型型长长长长 度度度度内内内内 容容容容最最最最 小小小小 值值值值最最最最 大大大大 值值值值int, signed intint, signed int(整型)(整型)1616位位二二进进制制补补码码 32768327683276732767unsigned intunsigned int(无符号整型)(无符号整型)1616位位二二进进制数制数0 06553565535long, signed longlong, si
73、gned long(长长整型)整型)3232位位二二进进制制补补码码 2 147 483 2 147 483 6486482 147 483 6472 147 483 647unsigned longunsigned long(无符号(无符号长长整型)整型)3232位位二二进进制数制数0 04 249 967 2954 249 967 295long longlong long(4040位位长长整型)整型)4040位位二二进进制制补补码码 549 755 549 755 813 888813 888549 755 813 887549 755 813 887unsigned long long
74、unsigned long long(4040位位无符号无符号长长整型)整型)4040位位二二进进制数制数0 01 099 511 627 1 099 511 627 775775emumemum(枚(枚举举型)型)1616位位二二进进制制补补码码 32768327683276732767floatfloat(浮点型)(浮点型)3232位位3232位浮点位浮点数数1.175 1.175 494e494e 38383.40 282 3.40 282 346e+38346e+382024/9/192024/9/193131DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理
75、及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 类类 型型长长 度度内内 容容最最 小小 值值最最 大大 值值doubledouble(双精度浮点数)(双精度浮点数)3232位位3232位浮点位浮点数数1.175 1.175 494e494e 38383.40 282 3.40 282 346e+38346e+38long doublelong double(长长双精度浮双精度浮点数)点数)3232位位3232位浮点位浮点数数1.17
76、5 1.175 494e494e 38383.40 282 3.40 282 346e+38346e+38大存大存储储器模式器模式2323位位二二进进制数制数0 00x7FFFFF0x7FFFFFpointerspointers(程序指(程序指针针)2424位位二二进进制数制数0 00xFFFFFF0xFFFFFF 指针分为程序指针和数据指针两种,其区别在指针分为程序指针和数据指针两种,其区别在指针分为程序指针和数据指针两种,其区别在指针分为程序指针和数据指针两种,其区别在于程序指针寻址是按字节寻址,而数据指针以字为于程序指针寻址是按字节寻址,而数据指针以字为于程序指针寻址是按字节寻址,而数据
77、指针以字为于程序指针寻址是按字节寻址,而数据指针以字为单位进行寻址。单位进行寻址。单位进行寻址。单位进行寻址。 2024/9/192024/9/193232DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 C55xC55x处理器包含数据空间和处理器包含数据空间和处理器包含数据空间和处理器包含数据空间和I/OI/O空间,为了在空间,为了在空间,为了在空间,为了在C
78、/C+C/C+中对中对中对中对I/OI/O空间进行寻址,编译器给出了关键字空间进行寻址,编译器给出了关键字空间进行寻址,编译器给出了关键字空间进行寻址,编译器给出了关键字ioportioport,以支持,以支持,以支持,以支持I/OI/O寻寻寻寻址模式。址模式。址模式。址模式。 ioportioport关键字可以用在数组、结构、联合以及枚举类型当关键字可以用在数组、结构、联合以及枚举类型当关键字可以用在数组、结构、联合以及枚举类型当关键字可以用在数组、结构、联合以及枚举类型当中。中。中。中。 当用在数组中时,当用在数组中时,当用在数组中时,当用在数组中时,ioportioport可以作为数组中
79、的元素;在结构中可以作为数组中的元素;在结构中可以作为数组中的元素;在结构中可以作为数组中的元素;在结构中使用使用使用使用ioportioport,只能是指向,只能是指向,只能是指向,只能是指向ioportioport数据的指针而不能直接作为结构数据的指针而不能直接作为结构数据的指针而不能直接作为结构数据的指针而不能直接作为结构的成员。的成员。的成员。的成员。 4.2 C4.2 C语言程序开发及优化语言程序开发及优化4.2.2 4.2.2 4.2.2 4.2.2 对对对对I/OI/OI/OI/O空间进行寻址空间进行寻址空间进行寻址空间进行寻址 2024/9/192024/9/193333DSP
80、DSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 ioport ioport ioport ioport类型只能用来声明全局或静态变量,如果在本地变类型只能用来声明全局或静态变量,如果在本地变类型只能用来声明全局或静态变量,如果在本地变类型只能用来声明全局或静态变量,如果在本地变量中使用量中使用量中使用量中使用ioportioportioportioport类型,则变
81、量必须用指针声明。接下来给出指类型,则变量必须用指针声明。接下来给出指类型,则变量必须用指针声明。接下来给出指类型,则变量必须用指针声明。接下来给出指针声明针声明针声明针声明ioportioportioportioport类型的例子:类型的例子:类型的例子:类型的例子:void foo (void)void foo (void)void foo (void)void foo (void) ioport int i; /* ioport int i; /* ioport int i; /* ioport int i; /* 无效的声明无效的声明无效的声明无效的声明 * * * */ / / /
82、ioport int *j; /* ioport int *j; /* ioport int *j; /* ioport int *j; /* 有效声明有效声明有效声明有效声明 * * * */ / / / 应当注意声明应当注意声明应当注意声明应当注意声明ioportioportioportioport类型的指针只有类型的指针只有类型的指针只有类型的指针只有16161616位,这是因为位,这是因为位,这是因为位,这是因为I/OI/OI/OI/O空间是空间是空间是空间是16161616位位位位寻址,而不受大寻址,而不受大寻址,而不受大寻址,而不受大/ / / /小存储器模式的限制。小存储器模式的
83、限制。小存储器模式的限制。小存储器模式的限制。4.2.24.2.24.2.24.2.2 对对对对I/OI/OI/OI/O空间进行寻址空间进行寻址空间进行寻址空间进行寻址 2024/9/192024/9/193434DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 在在在在printf()printf()printf()printf()中不能直接引用中不能直接引用
84、中不能直接引用中不能直接引用ioportioportioportioport指针,如果要引用,则指针,如果要引用,则指针,如果要引用,则指针,如果要引用,则必须进行强制类型转换必须进行强制类型转换必须进行强制类型转换必须进行强制类型转换“void *”void *”void *”void *”,具体例子如下:,具体例子如下:,具体例子如下:,具体例子如下: ioport int *p; ioport int *p; printf(“%pn”, (void*)p); printf(“%pn”, (void*)p); 4.2.24.2.24.2.24.2.2 对对对对I/OI/OI/OI/O空间进
85、行寻址空间进行寻址空间进行寻址空间进行寻址 2024/9/192024/9/193535DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 这段代码的编译结果如下:这段代码的编译结果如下:这段代码的编译结果如下:这段代码的编译结果如下: _foo:_foo: MOV #_i,port(#_ioport_pointer) MOV #_i,port(#_ioport_
86、pointer) ; ; 存储存储i i在在I/OI/O空间的地址空间的地址 MOV port(#_ioport_pointer),AR3 ; MOV port(#_ioport_pointer),AR3 ; 载入载入i i的地址的地址 MOV *AR3,AR1 MOV *AR3,AR1 ; ; 将将i i的内容存放到的内容存放到AR1AR1中中 MOV AR1,*abs16(#_j) MOV AR1,*abs16(#_j) ; ; 将将i i的内容保存到的内容保存到j j return return 给出在本地变量中使用给出在本地变量中使用给出在本地变量中使用给出在本地变量中使用ioport
87、ioportioportioport类型的例子:类型的例子:类型的例子:类型的例子: int * ioport ioport_pointer; /* ioport int * ioport ioport_pointer; /* ioport 指针指针 * */ /int i;int i;int j;int j;void foo (void)void foo (void) ioport_pointer = &i; ioport_pointer = &i; j = *ioport_pointer; j = *ioport_pointer; 2024/9/192024/9/193636DSPDSP原
88、理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 下来给出一个指向下来给出一个指向下来给出一个指向下来给出一个指向I/OI/OI/OI/O空间数据指针的例子:空间数据指针的例子:空间数据指针的例子:空间数据指针的例子: /* /* 指向指向ioportioport数据数据: */: */ioport int * ptr_to_ioport;ioport int * ptr_t
89、o_ioport;ioport int i;ioport int i;void foo (void)void foo (void) int j; int j; i = 10; i = 10; ptr_to_ioport = &i; ptr_to_ioport = &i; j = *ptr_to_ioport; j = *ptr_to_ioport; 上面代码编译结果如下:上面代码编译结果如下:上面代码编译结果如下:上面代码编译结果如下: _foo:_foo: MOV #_i,*abs16(#_ptr_to_ioport) MOV #_i,*abs16(#_ptr_to_ioport) ; ;
90、存储存储_i_i的地址的地址 MOV *abs16(#_ptr_to_ioport),AR3 MOV *abs16(#_ptr_to_ioport),AR3 AADD #1, SP AADD #1, SP MOV #10,port(#_i) MOV #10,port(#_i) ; ; 向向_i_i中存入中存入1010 MOV *AR3,AR1 MOV *AR3,AR1 MOV AR1,*SP(#0) MOV AR1,*SP(#0) AADD #1,SP AADD #1,SP return return 2024/9/192024/9/193737DSPDSP原理及应用原理及应用原理及原理及应用
91、原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 上面代码编译结果如下:上面代码编译结果如下:上面代码编译结果如下:上面代码编译结果如下: _foo:_foo: MOV #10,port(#_i) MOV #10,port(#_i) ; ; 将将1010存在存在_i_i中中 MOV #_i,port(#_iop_ptr_to_ioport) ; MOV #_i,port(#_iop_ptr_to_ioport
92、) ; 存储存储_i_i的地址的地址 MOV port(#_iop_ptr_to_ioport),AR3 MOV port(#_iop_ptr_to_ioport),AR3 ; ; 载入载入_i_i的地址的地址 MOV *AR3, AR1 MOV *AR3, AR1 ; ; 载入载入_i_i MOV AR1,port(#_j) ; MOV AR1,port(#_j) ; 将将1010存到存到_j_j中中 return return下面的例子是利用下面的例子是利用下面的例子是利用下面的例子是利用ioportioportioportioport指针指向指针指向指针指向指针指向I/OI/OI/OI/
93、O空间的数据:空间的数据:空间的数据:空间的数据: /* /* 指向指向ioportioport数据的数据的ioportioport指针指针: */: */ioport int * ioport iop_ptr_to_ioport;ioport int * ioport iop_ptr_to_ioport;ioport int i;ioport int i;ioport int j;ioport int j;void foo (void)void foo (void) i = 10; i = 10; iop_ptr_to_ioport = &i; iop_ptr_to_ioport = &i;
94、 j = *iop_ptr_to_ioport; j = *iop_ptr_to_ioport; 2024/9/192024/9/193838DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.2.34.2.34.2.34.2.3 interrupt interrupt interrupt interrupt关键字关键字关键字关键字 中断操作需要使用特定的寄存
95、器保存规则,并中断操作需要使用特定的寄存器保存规则,并中断操作需要使用特定的寄存器保存规则,并中断操作需要使用特定的寄存器保存规则,并具有特殊的返回顺序。具有特殊的返回顺序。具有特殊的返回顺序。具有特殊的返回顺序。 C55xC55xC55xC55x编译器使用了关键字编译器使用了关键字编译器使用了关键字编译器使用了关键字“interrupt”interrupt”interrupt”interrupt”定义中定义中定义中定义中断函数。断函数。断函数。断函数。 当当当当C/C+C/C+C/C+C/C+代码被中断时,中断程序必须保存所有代码被中断时,中断程序必须保存所有代码被中断时,中断程序必须保存所
96、有代码被中断时,中断程序必须保存所有与程序有关的寄存器。与程序有关的寄存器。与程序有关的寄存器。与程序有关的寄存器。 当使用当使用当使用当使用“interrupt”interrupt”interrupt”interrupt”关键字定义函数时,中断关键字定义函数时,中断关键字定义函数时,中断关键字定义函数时,中断函数必须返回空并且没有参数传递。函数必须返回空并且没有参数传递。函数必须返回空并且没有参数传递。函数必须返回空并且没有参数传递。 2024/9/192024/9/193939DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4
97、 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.2.34.2.34.2.34.2.3 interrupt interrupt interrupt interrupt关键字关键字关键字关键字 中断函数可以定义本地变量并且使用堆栈。接下中断函数可以定义本地变量并且使用堆栈。接下中断函数可以定义本地变量并且使用堆栈。接下中断函数可以定义本地变量并且使用堆栈。接下来给出定义中断函数的例子:来给出定义中断函数的例子:来给出定义中断函数的例子:来给出定义中断函数的例子: inte
98、rrupt void int_handler()interrupt void int_handler() unsigned int flags; unsigned int flags; . . c_int00c_int00是是C/C+C/C+程序的入口点,这个函数名被系程序的入口点,这个函数名被系统复位中断保留,该中断服务程序用来初始化系统并统复位中断保留,该中断服务程序用来初始化系统并调用调用mainmain函数。函数。2024/9/192024/9/194040DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章
99、章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 onchiponchiponchiponchip关键字的作用是告诉编译器由该关键字定义的指关键字的作用是告诉编译器由该关键字定义的指关键字的作用是告诉编译器由该关键字定义的指关键字的作用是告诉编译器由该关键字定义的指针所指向的数据可以作为一个双乘法指令中的操作数。针所指向的数据可以作为一个双乘法指令中的操作数。针所指向的数据可以作为一个双乘法指令中的操作数。针所指向的数据可以作为一个双乘法指令中的操作数。 如果如果如果如果onchiponc
100、hiponchiponchip关键字向函数传递数据,或者最终所引用的关键字向函数传递数据,或者最终所引用的关键字向函数传递数据,或者最终所引用的关键字向函数传递数据,或者最终所引用的数据是用数据是用数据是用数据是用onchiponchiponchiponchip定义的,则该数据必须在片上内存。定义的,则该数据必须在片上内存。定义的,则该数据必须在片上内存。定义的,则该数据必须在片上内存。 如果该数据在片外,则当通过如果该数据在片外,则当通过如果该数据在片外,则当通过如果该数据在片外,则当通过BBBBBBBB数据总线访问该数据时数据总线访问该数据时数据总线访问该数据时数据总线访问该数据时将产生一
101、个总线错误。将产生一个总线错误。将产生一个总线错误。将产生一个总线错误。 下面给出用下面给出用下面给出用下面给出用onchiponchiponchiponchip定义数组和指针的例子。定义数组和指针的例子。定义数组和指针的例子。定义数组和指针的例子。 onchip int x100;onchip int x100; /* array declaration */ /* array declaration */onchip int *p;onchip int *p; /* pointer declaration */ /* pointer declaration */ 4.2.44.2.44.2
102、.44.2.4 onchip onchip onchip onchip关键字关键字关键字关键字 2024/9/192024/9/194141DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.2.54.2.54.2.54.2.5 C C C C语言的优化语言的优化语言的优化语言的优化 如果将未经优化的如果将未经优化的如果将未经优化的如果将未经优化的C C C
103、C语言程序直接运行会发现运行语言程序直接运行会发现运行语言程序直接运行会发现运行语言程序直接运行会发现运行效率较低,并且产生的代码较大,而通过优化可以较效率较低,并且产生的代码较大,而通过优化可以较效率较低,并且产生的代码较大,而通过优化可以较效率较低,并且产生的代码较大,而通过优化可以较好地解决这些问题。好地解决这些问题。好地解决这些问题。好地解决这些问题。优化的作用是对循环进行化简,重新组织表达式和声优化的作用是对循环进行化简,重新组织表达式和声优化的作用是对循环进行化简,重新组织表达式和声优化的作用是对循环进行化简,重新组织表达式和声明,将变量直接分配到寄存器中。明,将变量直接分配到寄存
104、器中。明,将变量直接分配到寄存器中。明,将变量直接分配到寄存器中。 通过优化可以提高程序运行效率,缩小程序编码通过优化可以提高程序运行效率,缩小程序编码通过优化可以提高程序运行效率,缩小程序编码通过优化可以提高程序运行效率,缩小程序编码数量。数量。数量。数量。 2024/9/192024/9/194242DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.2.
105、54.2.54.2.54.2.5 C C C C语言的优化语言的优化语言的优化语言的优化 C/C+ C/C+ C/C+ C/C+编译器提供了不同的优化选择,通过修改编译器提供了不同的优化选择,通过修改编译器提供了不同的优化选择,通过修改编译器提供了不同的优化选择,通过修改cl55cl55cl55cl55命令行中的命令行中的命令行中的命令行中的-on-on-on-on选择就可以方便地选择不同的优选择就可以方便地选择不同的优选择就可以方便地选择不同的优选择就可以方便地选择不同的优化等级,化等级,化等级,化等级,n n n n代表优化等级,包括代表优化等级,包括代表优化等级,包括代表优化等级,包括0
106、 0 0 0、1 1 1 1、2 2 2 2和和和和3 3 3 3。下面给。下面给。下面给。下面给出不同优化等级的功能。出不同优化等级的功能。出不同优化等级的功能。出不同优化等级的功能。 (1 1 1 1) O0O0O0O0 简化控制流图简化控制流图简化控制流图简化控制流图 把变量分配到寄存器把变量分配到寄存器把变量分配到寄存器把变量分配到寄存器 分析循环的各种情况,只保留一个退出循环的分析循环的各种情况,只保留一个退出循环的分析循环的各种情况,只保留一个退出循环的分析循环的各种情况,只保留一个退出循环的分支分支分支分支 删除未用的代码删除未用的代码删除未用的代码删除未用的代码 简化表达式和声
107、明简化表达式和声明简化表达式和声明简化表达式和声明 把用把用把用把用inlineinline声明的函数变为调用关系声明的函数变为调用关系声明的函数变为调用关系声明的函数变为调用关系2024/9/192024/9/194343DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.2.54.2.54.2.54.2.5 C C C C语言的优化语言的优化语言的优化语言
108、的优化 (2 2 2 2) O1O1O1O1 除了除了除了除了O0O0O0O0的各种优化功能外,还有如下功能:的各种优化功能外,还有如下功能:的各种优化功能外,还有如下功能:的各种优化功能外,还有如下功能: 在分配变量时,将数值直接赋给变量而不是给在分配变量时,将数值直接赋给变量而不是给在分配变量时,将数值直接赋给变量而不是给在分配变量时,将数值直接赋给变量而不是给出变量的索引值出变量的索引值出变量的索引值出变量的索引值 去掉没有用的分配变量和表达式去掉没有用的分配变量和表达式去掉没有用的分配变量和表达式去掉没有用的分配变量和表达式 去掉本地通用表达式去掉本地通用表达式去掉本地通用表达式去掉本
109、地通用表达式2024/9/192024/9/194444DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 (3 3 3 3) O2O2O2O2 除了除了除了除了O1O1O1O1的各种优化功能外,还有如下功能:的各种优化功能外,还有如下功能:的各种优化功能外,还有如下功能:的各种优化功能外,还有如下功能: 完成循环优化完成循环优化完成循环优化完成循环优化 去掉全局
110、通用的子表达式去掉全局通用的子表达式去掉全局通用的子表达式去掉全局通用的子表达式 去掉全局没有用的分配变量和表达式去掉全局没有用的分配变量和表达式去掉全局没有用的分配变量和表达式去掉全局没有用的分配变量和表达式 完成循环的化解完成循环的化解完成循环的化解完成循环的化解 当只用当只用当只用当只用-o-o-o-o选项时优化器自动进行选项时优化器自动进行选项时优化器自动进行选项时优化器自动进行-O2-O2-O2-O2优化优化优化优化4.2.54.2.54.2.54.2.5 C C C C语言的优化语言的优化语言的优化语言的优化 2024/9/192024/9/194545DSPDSP原理及应用原理及
111、应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 (4 4 4 4) O3 O3 O3 O3 除了除了除了除了O2O2O2O2的各种优化功能外,还有如下功能:的各种优化功能外,还有如下功能:的各种优化功能外,还有如下功能:的各种优化功能外,还有如下功能: 去掉未调用的函数去掉未调用的函数去掉未调用的函数去掉未调用的函数 简化返回值未使用的函数简化返回值未使用的函数简化返回值未使用的函数简化
112、返回值未使用的函数 将小函数进行内嵌调用将小函数进行内嵌调用将小函数进行内嵌调用将小函数进行内嵌调用 对被调用的函数声明进行重新排序,以便被优对被调用的函数声明进行重新排序,以便被优对被调用的函数声明进行重新排序,以便被优对被调用的函数声明进行重新排序,以便被优化的调用方能够找到该函数化的调用方能够找到该函数化的调用方能够找到该函数化的调用方能够找到该函数 完成文件级优化完成文件级优化完成文件级优化完成文件级优化4.2.54.2.54.2.54.2.5 C C C C语言的优化语言的优化语言的优化语言的优化 2024/9/192024/9/194646DSPDSP原理及应用原理及应用原理及原理
113、及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.2.54.2.54.2.54.2.5 C C C C语言的优化语言的优化语言的优化语言的优化 优化器分析数据流时将尽量减少对内存的访问,优化器分析数据流时将尽量减少对内存的访问,优化器分析数据流时将尽量减少对内存的访问,优化器分析数据流时将尽量减少对内存的访问,如果这个数据必须从内存中得到,则该数据必须用如果这个数据必须从内存中得到,则该数据必须用如
114、果这个数据必须从内存中得到,则该数据必须用如果这个数据必须从内存中得到,则该数据必须用volatilevolatilevolatilevolatile关键字定义,这样可以使编译器不对该变量关键字定义,这样可以使编译器不对该变量关键字定义,这样可以使编译器不对该变量关键字定义,这样可以使编译器不对该变量进行优化。进行优化。进行优化。进行优化。 例如声明一个指针例如声明一个指针例如声明一个指针例如声明一个指针 unsigned int *ctrl; unsigned int *ctrl; unsigned int *ctrl; unsigned int *ctrl; 当在循环中有如下语句时当在循环
115、中有如下语句时当在循环中有如下语句时当在循环中有如下语句时 while (*ctrl != 0xFF);while (*ctrl != 0xFF);while (*ctrl != 0xFF);while (*ctrl != 0xFF); 优化器将只在进入循环的初始化中进行一次内存优化器将只在进入循环的初始化中进行一次内存优化器将只在进入循环的初始化中进行一次内存优化器将只在进入循环的初始化中进行一次内存读,而在循环当中不在更新该变量的内容,如果该变读,而在循环当中不在更新该变量的内容,如果该变读,而在循环当中不在更新该变量的内容,如果该变读,而在循环当中不在更新该变量的内容,如果该变量被中断或
116、其他程序改变,由于循环中的量被中断或其他程序改变,由于循环中的量被中断或其他程序改变,由于循环中的量被中断或其他程序改变,由于循环中的ctrlctrlctrlctrl的值没的值没的值没的值没有更新,将会使程序不能按照正确的方式执行,这里有更新,将会使程序不能按照正确的方式执行,这里有更新,将会使程序不能按照正确的方式执行,这里有更新,将会使程序不能按照正确的方式执行,这里应当用如下方法声明应当用如下方法声明应当用如下方法声明应当用如下方法声明ctrlctrlctrlctrl: volatile unsigned int *ctrl; volatile unsigned int *ctrl; v
117、olatile unsigned int *ctrl; volatile unsigned int *ctrl; 特别当该变量在中断函数中被赋值,而该变量在特别当该变量在中断函数中被赋值,而该变量在特别当该变量在中断函数中被赋值,而该变量在特别当该变量在中断函数中被赋值,而该变量在主函数的循环中被用到时,必须用主函数的循环中被用到时,必须用主函数的循环中被用到时,必须用主函数的循环中被用到时,必须用volatilevolatilevolatilevolatile声明该变声明该变声明该变声明该变量。量。量。量。 2024/9/192024/9/194747DSPDSP原理及应用原理及应用原理及原
118、理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.3.14.3.14.3.14.3.1 在在在在C C C C语言中直接嵌套汇编语句语言中直接嵌套汇编语句语言中直接嵌套汇编语句语言中直接嵌套汇编语句 C55x C55x C55x C55x的的的的C/C+C/C+C/C+C/C+编译器允许使用者在编译器允许使用者在编译器允许使用者在编译器允许使用者在C C C C语言代码中直语言代码中直语言代码中直
119、语言代码中直接嵌套汇编语句,嵌套汇编语句的语法十分简单,只接嵌套汇编语句,嵌套汇编语句的语法十分简单,只接嵌套汇编语句,嵌套汇编语句的语法十分简单,只接嵌套汇编语句,嵌套汇编语句的语法十分简单,只需在嵌入的汇编语句前面加上需在嵌入的汇编语句前面加上需在嵌入的汇编语句前面加上需在嵌入的汇编语句前面加上asmasmasmasm标示符,左右加上标示符,左右加上标示符,左右加上标示符,左右加上一个双引号和一个小括号即可。一个双引号和一个小括号即可。一个双引号和一个小括号即可。一个双引号和一个小括号即可。 asm ( asm ( asm ( asm (汇编语句汇编语句汇编语句汇编语句) 4.3 C4.3
120、 C语言与汇编语言的混合编程语言与汇编语言的混合编程2024/9/192024/9/194848DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.3.14.3.14.3.14.3.1 在在在在C C C C语言中直接嵌套汇编语句语言中直接嵌套汇编语句语言中直接嵌套汇编语句语言中直接嵌套汇编语句 采用直接嵌套汇编语句的方法比较适合完成对采用直接嵌套汇编语句的方
121、法比较适合完成对采用直接嵌套汇编语句的方法比较适合完成对采用直接嵌套汇编语句的方法比较适合完成对硬件进行操作、设置状态寄存器、开关中断等工作,硬件进行操作、设置状态寄存器、开关中断等工作,硬件进行操作、设置状态寄存器、开关中断等工作,硬件进行操作、设置状态寄存器、开关中断等工作,这样做往往要比用这样做往往要比用这样做往往要比用这样做往往要比用C C C C语言实现效率更高。语言实现效率更高。语言实现效率更高。语言实现效率更高。 用用用用C C C C语言打开中断的代码:语言打开中断的代码:语言打开中断的代码:语言打开中断的代码:IRQ_globalEnable();IRQ_globalEnab
122、le();IRQ_globalEnable();IRQ_globalEnable();/全局开中断全局开中断全局开中断全局开中断 下面给出该代码编译后的结果:下面给出该代码编译后的结果:下面给出该代码编译后的结果:下面给出该代码编译后的结果: 0115A6 IRQ_globalEnable:0115A6 IRQ_globalEnable: 0115A6 3C3B MOV #3,AR3 0115A6 3C3B MOV #3,AR3 0115A8 DF6105 MOV uns(*AR3),AC0 0115A8 DF6105 MOV uns(*AR3),AC0 0115AB 76080040 BFX
123、TR #2048,AC0,T0 0115AB 76080040 BFXTR #2048,AC0,T0 0115AF 20 NOP 0115AF 20 NOP 0115B0 46B2 BCLR ST1_INTM 0115B0 46B2 BCLR ST1_INTM 0115B2 4804 RET 0115B2 4804 RET 可以看到采用可以看到采用可以看到采用可以看到采用C C C C语言打开全局中断共用了语言打开全局中断共用了语言打开全局中断共用了语言打开全局中断共用了6 6 6 6条语条语条语条语句,考虑到调用子函数的开销,完成该功能一共要句,考虑到调用子函数的开销,完成该功能一共要句,考
124、虑到调用子函数的开销,完成该功能一共要句,考虑到调用子函数的开销,完成该功能一共要花费花费花费花费10101010个左右的指令周期,而采用嵌套汇编语句的个左右的指令周期,而采用嵌套汇编语句的个左右的指令周期,而采用嵌套汇编语句的个左右的指令周期,而采用嵌套汇编语句的方法则只用一条指令即可:方法则只用一条指令即可:方法则只用一条指令即可:方法则只用一条指令即可: asm (BCLR ST1_INTM)asm (BCLR ST1_INTM) 2024/9/192024/9/194949DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4
125、 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.3.1 4.3.1 4.3.1 4.3.1 在在在在C C C C语言中直接嵌套汇编语句语言中直接嵌套汇编语句语言中直接嵌套汇编语句语言中直接嵌套汇编语句 采用直接嵌套的方法要十分小心,这是因为采用直接嵌套的方法要十分小心,这是因为采用直接嵌套的方法要十分小心,这是因为采用直接嵌套的方法要十分小心,这是因为C C C C语语语语言编译器并不检查和分析所嵌入的汇编语句,而嵌言编译器并不检查和分析所嵌入的汇编语句,而嵌言编译
126、器并不检查和分析所嵌入的汇编语句,而嵌言编译器并不检查和分析所嵌入的汇编语句,而嵌入的语句很可能改变入的语句很可能改变入的语句很可能改变入的语句很可能改变C C C C语言的运行环境。语言的运行环境。语言的运行环境。语言的运行环境。 例如嵌入跳转指令或者标号将会引起不可预测例如嵌入跳转指令或者标号将会引起不可预测例如嵌入跳转指令或者标号将会引起不可预测例如嵌入跳转指令或者标号将会引起不可预测的后果。的后果。的后果。的后果。 如果采用嵌套汇编语句,在编译程序时不应采如果采用嵌套汇编语句,在编译程序时不应采如果采用嵌套汇编语句,在编译程序时不应采如果采用嵌套汇编语句,在编译程序时不应采用优化功能,
127、采用优化功能可能会调整汇编语句周用优化功能,采用优化功能可能会调整汇编语句周用优化功能,采用优化功能可能会调整汇编语句周用优化功能,采用优化功能可能会调整汇编语句周围代码的排列顺序,有可能改变程序的运行结果。围代码的排列顺序,有可能改变程序的运行结果。围代码的排列顺序,有可能改变程序的运行结果。围代码的排列顺序,有可能改变程序的运行结果。 如果采用该方法实现较复杂的功能,会造成程如果采用该方法实现较复杂的功能,会造成程如果采用该方法实现较复杂的功能,会造成程如果采用该方法实现较复杂的功能,会造成程序的可读性较差,并影响程序的可移植性,因此在序的可读性较差,并影响程序的可移植性,因此在序的可读性
128、较差,并影响程序的可移植性,因此在序的可读性较差,并影响程序的可移植性,因此在采用汇编语言实现较复杂的功能时,更可行的方法采用汇编语言实现较复杂的功能时,更可行的方法采用汇编语言实现较复杂的功能时,更可行的方法采用汇编语言实现较复杂的功能时,更可行的方法是独立编写是独立编写是独立编写是独立编写C C C C语言程序和汇编程序,语言程序和汇编程序,语言程序和汇编程序,语言程序和汇编程序,C C C C语言通过函数语言通过函数语言通过函数语言通过函数调用汇编子程序,这样既可以提高程序的运行效率,调用汇编子程序,这样既可以提高程序的运行效率,调用汇编子程序,这样既可以提高程序的运行效率,调用汇编子程
129、序,这样既可以提高程序的运行效率,又保证了程序的可移植性,这要做的优点还有程序又保证了程序的可移植性,这要做的优点还有程序又保证了程序的可移植性,这要做的优点还有程序又保证了程序的可移植性,这要做的优点还有程序的结构性较好,并不影响的结构性较好,并不影响的结构性较好,并不影响的结构性较好,并不影响C C C C语言编译器的优化功能。语言编译器的优化功能。语言编译器的优化功能。语言编译器的优化功能。 2024/9/192024/9/195050DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55
130、xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 要很好地使用要很好地使用要很好地使用要很好地使用C C语言与汇编的混合编程技术,语言与汇编的混合编程技术,语言与汇编的混合编程技术,语言与汇编的混合编程技术,必须对必须对必须对必须对C C语言调用子函数的规则详细掌握,这些规则语言调用子函数的规则详细掌握,这些规则语言调用子函数的规则详细掌握,这些规则语言调用子函数的规则详细掌握,这些规则包括包括包括包括C/C+C/C+中寄存器的使用、函数的结构及调用规则中寄存器的使用、函数的结构及调用规则中寄存器的使用、函数的结
131、构及调用规则中寄存器的使用、函数的结构及调用规则等,只有这样才能正确完成等,只有这样才能正确完成等,只有这样才能正确完成等,只有这样才能正确完成C C语言对汇编模块的调用。语言对汇编模块的调用。语言对汇编模块的调用。语言对汇编模块的调用。4.3.2 C4.3.2 C4.3.2 C4.3.2 C语言调用汇编模块的接口语言调用汇编模块的接口语言调用汇编模块的接口语言调用汇编模块的接口 2024/9/192024/9/195151DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55x
132、C55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.3.2 4.3.2 4.3.2 4.3.2 C C C C语言调用汇编模块的接口语言调用汇编模块的接口语言调用汇编模块的接口语言调用汇编模块的接口 1. C/C+1. C/C+1. C/C+1. C/C+中的寄存器规则中的寄存器规则中的寄存器规则中的寄存器规则 这些规则决定编译器在这些规则决定编译器在这些规则决定编译器在这些规则决定编译器在C C C C语言环境下如何使用寄语言环境下如何使用寄语言环境下如何使用寄语言环境下如何使用寄存器和如何在调用函数时传递参数。存器和如何在调
133、用函数时传递参数。存器和如何在调用函数时传递参数。存器和如何在调用函数时传递参数。 在函数调用时把函数调用方叫做父函数,被调在函数调用时把函数调用方叫做父函数,被调在函数调用时把函数调用方叫做父函数,被调在函数调用时把函数调用方叫做父函数,被调用方叫做子函数。用方叫做子函数。用方叫做子函数。用方叫做子函数。 规则规定在函数调用时所用到的寄存器需要预规则规定在函数调用时所用到的寄存器需要预规则规定在函数调用时所用到的寄存器需要预规则规定在函数调用时所用到的寄存器需要预先保存,保存工作部分由父函数完成,父函数没有先保存,保存工作部分由父函数完成,父函数没有先保存,保存工作部分由父函数完成,父函数没
134、有先保存,保存工作部分由父函数完成,父函数没有保存的而又被子函数用到的寄存器由子函数保存。保存的而又被子函数用到的寄存器由子函数保存。保存的而又被子函数用到的寄存器由子函数保存。保存的而又被子函数用到的寄存器由子函数保存。 2024/9/192024/9/195252DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 寄寄寄寄 存存存存 器器器器 保保保保 存存存
135、存 方方方方 保保保保 存存存存 方方方方 AC0,AC1,AC2,ACAC0,AC1,AC2,AC3 3 父函数父函数父函数父函数1616位、位、位、位、3232位或位或位或位或4040位数据,或位数据,或位数据,或位数据,或2424位代码指位代码指位代码指位代码指针针针针 (X)AR0(X)AR0(X)AR4(X)AR4(X)AR5(X)AR5(X)AR7 (X)AR7 父函数父函数父函数父函数子函数子函数子函数子函数 1616位或位或位或位或2323位指针,获位指针,获位指针,获位指针,获1616位数据位数据位数据位数据 T0T0、T1T1T2T2、T3 T3 父函数父函数父函数父函数子
136、函数子函数子函数子函数 1616位数据位数据位数据位数据 RPTCRPTCCSRCSRBRC0BRC0、BRC1BRC1BRS1BRS1RSA0RSA0、RSA1RSA1REA0REA0、REA1REA1父函数父函数父函数父函数父函数父函数父函数父函数父函数父函数父函数父函数父函数父函数父函数父函数父函数父函数父函数父函数父函数父函数父函数父函数寄寄寄寄 存存存存 器器器器 保保保保 存存存存 方方方方 保保保保 存存存存 方方方方 SPSPSSPSSPPCPCRETARETACFCT CFCT 子函数子函数子函数子函数子函数子函数子函数子函数 2024/9/192024/9/195353DS
137、PDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 状态寄存器作为标志状态寄存器作为标志状态寄存器作为标志状态寄存器作为标志DSPDSPDSPDSP运行状态的寄存器在运运行状态的寄存器在运运行状态的寄存器在运运行状态的寄存器在运行中起着重要的作用,表行中起着重要的作用,表行中起着重要的作用,表行中起着重要的作用,表4-34-34-34-3介绍了各状态寄存器各介绍了各状
138、态寄存器各介绍了各状态寄存器各介绍了各状态寄存器各字段的作用、默认值以及是否可以修改。字段的作用、默认值以及是否可以修改。字段的作用、默认值以及是否可以修改。字段的作用、默认值以及是否可以修改。 ST0-55ST0-55ST0-55ST0-551. C/C+1. C/C+1. C/C+1. C/C+中的寄存器规则中的寄存器规则中的寄存器规则中的寄存器规则字字字字 段段段段名名名名 称称称称默默默默认值认值认值认值编译编译编译编译器是否修改器是否修改器是否修改器是否修改ACOV0ACOV033溢出溢出溢出溢出标标标标志志志志是是是是CARRYCARRY进进进进位位位位标标标标志志志志是是是是TC
139、1TC122检验检验检验检验、控制、控制、控制、控制标标标标志志志志是是是是DP7DP71515数据数据数据数据页页页页寄存器寄存器寄存器寄存器否否否否2024/9/192024/9/195454DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 ST1-55ST1-55ST1-55ST1-55字字字字 段段段段名名名名 称称称称默默默默认值认值认值认值编译编译编
140、译编译器是否修改器是否修改器是否修改器是否修改BRAF BRAF 快重复快重复快重复快重复标标标标志志志志 否否否否 CPL CPL 编译标编译标编译标编译标志志志志 1 1 否否否否 XF XF 外部外部外部外部标标标标志志志志 否否否否 HM HM 保持保持保持保持标标标标志志志志 否否否否 INTM INTM 中断中断中断中断标标标标志志志志 否否否否 M40 M40 运算模式运算模式运算模式运算模式 0 0 当当当当为为为为4040位运算位运算位运算位运算时时时时可修改可修改可修改可修改 SATD SATD 报报报报和和和和标标标标志志志志 0 0 是是是是 SXMD SXMD 符号符
141、号符号符号扩扩扩扩展模式展模式展模式展模式 1 1 否否否否 C16 C16 双双双双1616位运算模式位运算模式位运算模式位运算模式 0 0 否否否否 FRCT FRCT 小数模式小数模式小数模式小数模式 0 0 是是是是 54CM 54CM C54xC54x兼容模式兼容模式兼容模式兼容模式 0 0在在在在调调调调用用用用C54xC54x子函数可修改子函数可修改子函数可修改子函数可修改 ASM ASM 累加器移位模式累加器移位模式累加器移位模式累加器移位模式 否否否否2024/9/192024/9/195555DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用
142、原理及应用ST2-55ST2-55ST2-55ST2-55字字字字 段段段段名名名名 称称称称默默默默认值认值认值认值编译编译编译编译器是否修改器是否修改器是否修改器是否修改ARMS ARMS 辅辅辅辅助寄存器助寄存器助寄存器助寄存器间间间间接接接接寻寻寻寻址模式址模式址模式址模式 1 1否否否否 DBGM DBGM 调试调试调试调试模式模式模式模式 否否否否 EALLOW EALLOW 仿真仿真仿真仿真访问访问访问访问使能使能使能使能 否否否否 RDM RDM 舍入模式舍入模式舍入模式舍入模式 0 0否否否否 CDPLC CDPLC CDPCDP指指指指针线针线针线针线性性性性/ /循循循循
143、环环环环状状状状态态态态 0 0否否否否 AR0AR07LC 7LC AR0AR077线线线线性性性性/ /循循循循环环环环状状状状态态态态 0 0 否否否否第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 2024/9/192024/9/195656DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用ST3-55ST3-55ST3-55ST3-55字字字字 段段段段名名名名 称称称称默默默默认值认值认值认值编译
144、编译编译编译器是否修改器是否修改器是否修改器是否修改CAFRZ CAFRZ 缓缓缓缓冲冲冲冲冻结冻结冻结冻结 否否否否 CAEN CAEN 缓缓缓缓冲使能冲使能冲使能冲使能 否否否否 CACLR CACLR 缓缓缓缓冲清零冲清零冲清零冲清零 否否否否 HINT HINT 主机中断主机中断主机中断主机中断 否否否否 CBERR CBERR 总线错误标总线错误标总线错误标总线错误标志志志志 否否否否 MPNMC MPNMC 微微微微处处处处理器理器理器理器/ /微机模式微机模式微机模式微机模式 否否否否SATA SATA 饱饱饱饱和模式(和模式(和模式(和模式(A A 单单单单元)元)元)元) 0
145、 0 是是是是 CLKOFF CLKOFF CLKOUTCLKOUT关关关关闭闭闭闭 否否否否 SMUL SMUL 乘法乘法乘法乘法饱饱饱饱和模式和模式和模式和模式 0 0 是是是是SST SST 存存存存储饱储饱储饱储饱和模式和模式和模式和模式 否否否否第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 2024/9/192024/9/195757DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4
146、 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 2. 2. 2. 2. 函数调用规则函数调用规则函数调用规则函数调用规则 父函数在调用子函数时首先要将所要传递的参父函数在调用子函数时首先要将所要传递的参父函数在调用子函数时首先要将所要传递的参父函数在调用子函数时首先要将所要传递的参数放入寄存器或堆栈:数放入寄存器或堆栈:数放入寄存器或堆栈:数放入寄存器或堆栈: 如果一个函数的变量用一个省略号声明(标志参如果一个函数的变量用一个省略号声明(标志参如果一个函数的变量用
147、一个省略号声明(标志参如果一个函数的变量用一个省略号声明(标志参数的数量是变化的),则剩余的参数跟着最后一个数的数量是变化的),则剩余的参数跟着最后一个数的数量是变化的),则剩余的参数跟着最后一个数的数量是变化的),则剩余的参数跟着最后一个被声明的参数被传到堆栈,而堆栈的地址将作为访被声明的参数被传到堆栈,而堆栈的地址将作为访被声明的参数被传到堆栈,而堆栈的地址将作为访被声明的参数被传到堆栈,而堆栈的地址将作为访问其他未声明参数的索引。问其他未声明参数的索引。问其他未声明参数的索引。问其他未声明参数的索引。2024/9/192024/9/195858DSPDSP原理及应用原理及应用原理及原理及
148、应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 2. 2. 2. 2. 函数调用规则函数调用规则函数调用规则函数调用规则 编译器通常先对所要传递的参数归类,之后按照编译器通常先对所要传递的参数归类,之后按照编译器通常先对所要传递的参数归类,之后按照编译器通常先对所要传递的参数归类,之后按照所归类别将参数放到寄存器中,参数可以分成三类:所归类别将参数放到寄存器中,参数可以分成三类:所归类别将参数放到寄存器
149、中,参数可以分成三类:所归类别将参数放到寄存器中,参数可以分成三类: 数据指针(数据指针(数据指针(数据指针(int *, long *, int *, long *, 等)等)等)等) 1616位数据(位数据(位数据(位数据(char, short, intchar, short, int) 3232位数据(位数据(位数据(位数据(long, float, double, long, float, double, 以及函数指针)以及函数指针)以及函数指针)以及函数指针) 如果参数是指向数据类型的指针,则该参数就是数据指如果参数是指向数据类型的指针,则该参数就是数据指如果参数是指向数据类型的指
150、针,则该参数就是数据指如果参数是指向数据类型的指针,则该参数就是数据指针;如果一个参数能够放入一个针;如果一个参数能够放入一个针;如果一个参数能够放入一个针;如果一个参数能够放入一个16161616位寄存器,则被看成一个位寄存器,则被看成一个位寄存器,则被看成一个位寄存器,则被看成一个16161616位数据;否则该参数被看成一个位数据;否则该参数被看成一个位数据;否则该参数被看成一个位数据;否则该参数被看成一个32323232位数据。位数据。位数据。位数据。 2024/9/192024/9/195959DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用
151、第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 2. 2. 2. 2. 函数调用规则函数调用规则函数调用规则函数调用规则 一个一个一个一个32323232位(两个字)或小于位(两个字)或小于位(两个字)或小于位(两个字)或小于32323232位的结构被当作一位的结构被当作一位的结构被当作一位的结构被当作一个个个个32323232位数据通过寄存器传送。位数据通过寄存器传送。位数据通过寄存器传送。位数据通过寄存器传送。 如果结构的长度大于如果结构的长度大
152、于如果结构的长度大于如果结构的长度大于2 2 2 2个字,则通过索引传送,即个字,则通过索引传送,即个字,则通过索引传送,即个字,则通过索引传送,即编译器把该结构的地址作为一个数据指针传送。编译器把该结构的地址作为一个数据指针传送。编译器把该结构的地址作为一个数据指针传送。编译器把该结构的地址作为一个数据指针传送。 如果子函数返回的值是一个结构或一个联合,则如果子函数返回的值是一个结构或一个联合,则如果子函数返回的值是一个结构或一个联合,则如果子函数返回的值是一个结构或一个联合,则父函数在本地堆栈为结构分配相应的大小。父函数将父函数在本地堆栈为结构分配相应的大小。父函数将父函数在本地堆栈为结构
153、分配相应的大小。父函数将父函数在本地堆栈为结构分配相应的大小。父函数将该空间的地址作为第一个隐含参数送给子函数,这个该空间的地址作为第一个隐含参数送给子函数,这个该空间的地址作为第一个隐含参数送给子函数,这个该空间的地址作为第一个隐含参数送给子函数,这个参数被看作一个数据指针。参数被看作一个数据指针。参数被看作一个数据指针。参数被看作一个数据指针。 下面的例子说明了这一情况。下面的例子说明了这一情况。下面的例子说明了这一情况。下面的例子说明了这一情况。 struct s result = fn(x,y);struct s result = fn(x,y);struct s result = f
154、n(x,y);struct s result = fn(x,y); 这个例子是被调用子函数返回一个结构的例子,这个例子是被调用子函数返回一个结构的例子,这个例子是被调用子函数返回一个结构的例子,这个例子是被调用子函数返回一个结构的例子,实际调用是该函数做了如下转化:实际调用是该函数做了如下转化:实际调用是该函数做了如下转化:实际调用是该函数做了如下转化: fn(&result, x, y); fn(&result, x, y); fn(&result, x, y); fn(&result, x, y);2024/9/192024/9/196060DSPDSP原理及应用原理及应用原理及原理及应用
155、原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 2. 2. 2. 2. 函数调用规则函数调用规则函数调用规则函数调用规则 参数在函数声明中的排列位置是与其所分配的寄存参数在函数声明中的排列位置是与其所分配的寄存参数在函数声明中的排列位置是与其所分配的寄存参数在函数声明中的排列位置是与其所分配的寄存器有直接关系的,它们按照表中所列顺序排列。器有直接关系的,它们按照表中所列顺序排列。器有直接关系的,它们按照表中
156、所列顺序排列。器有直接关系的,它们按照表中所列顺序排列。 参参参参 数数数数 类类类类 型型型型 寄存器分配顺序寄存器分配顺序寄存器分配顺序寄存器分配顺序 对应的数据类型对应的数据类型对应的数据类型对应的数据类型 1616位或位或位或位或3232位数据指针位数据指针位数据指针位数据指针1616位数据位数据位数据位数据 32 32位数据位数据位数据位数据 (X)AR0,(X)AR1, (X)AR2,(X)AR0,(X)AR1, (X)AR2,(X)AR3,(X)AR4 (X)AR3,(X)AR4 T0, T1, AR0, AR1, AR2, T0, T1, AR0, AR1, AR2, AR3,
157、 AR4AR3, AR4AC0, AC1, AC2 AC0, AC1, AC2 数组、字符串、指针、或占用空数组、字符串、指针、或占用空数组、字符串、指针、或占用空数组、字符串、指针、或占用空间长度超过两个字节的结构间长度超过两个字节的结构间长度超过两个字节的结构间长度超过两个字节的结构(无符号)字符、短整数,整数(无符号)字符、短整数,整数(无符号)字符、短整数,整数(无符号)字符、短整数,整数长整数、浮点数以及长度小于等长整数、浮点数以及长度小于等长整数、浮点数以及长度小于等长整数、浮点数以及长度小于等于两个字节的结构于两个字节的结构于两个字节的结构于两个字节的结构 2024/9/1920
158、24/9/196161DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 2. 2. 2. 2. 函数调用规则函数调用规则函数调用规则函数调用规则 如果参数的数量超过可使用寄存器数量,多余的参数会被如果参数的数量超过可使用寄存器数量,多余的参数会被如果参数的数量超过可使用寄存器数量,多余的参数会被如果参数的数量超过可使用寄存器数量,多余的参数会被压入堆栈,子函数通
159、过堆栈得到剩余参数。压入堆栈,子函数通过堆栈得到剩余参数。压入堆栈,子函数通过堆栈得到剩余参数。压入堆栈,子函数通过堆栈得到剩余参数。 子函数的返回参数也将根据返回参数的类型使用不同的寄子函数的返回参数也将根据返回参数的类型使用不同的寄子函数的返回参数也将根据返回参数的类型使用不同的寄子函数的返回参数也将根据返回参数的类型使用不同的寄存器,表给出了这一对应关系。存器,表给出了这一对应关系。存器,表给出了这一对应关系。存器,表给出了这一对应关系。 子函数返回类型子函数返回类型子函数返回类型子函数返回类型 所使用寄存器所使用寄存器所使用寄存器所使用寄存器 说说说说 明明明明 VoidVoidcha
160、r, unsigned char, short int, intchar, unsigned char, short int, int long int, float, double long int, float, double struct struct T0T0AC0AC0(X)AR0 (X)AR0 无返回参数无返回参数无返回参数无返回参数返回返回返回返回1616位数据位数据位数据位数据返回返回返回返回3232位数据位数据位数据位数据返回地址返回地址返回地址返回地址 2024/9/192024/9/196262DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及
161、应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 2. 2. 2. 2. 函数调用规则函数调用规则函数调用规则函数调用规则 给出参数传递的例子:给出参数传递的例子:给出参数传递的例子:给出参数传递的例子: 首先声明两个结构,其中首先声明两个结构,其中首先声明两个结构,其中首先声明两个结构,其中bigbig的长度大于两个字节,的长度大于两个字节,的长度大于两个字节,的长度大于两个字节,smallsmall的长度等于两个字节。的长度等于两个字
162、节。的长度等于两个字节。的长度等于两个字节。 struct big long x10; ; struct big long x10; ; struct small int x; ; struct small int x; ; int fn(int i1, long l2, int *p3); int fn(int i1, long l2, int *p3); / /参数返回参数返回参数返回参数返回T0T0,传递参数分别占用,传递参数分别占用,传递参数分别占用,传递参数分别占用 T0T0、AC0AC0、AR0AR0寄存寄存寄存寄存器器器器 long fn(int *p1, int i2, int
163、 i3, int i4); long fn(int *p1, int i2, int i3, int i4); / /返回返回返回返回AC0AC0,参数通过,参数通过,参数通过,参数通过AR0AR0、T0T0、T1T1、AR1AR1传递传递传递传递 struct big fn(int *p1); struct big fn(int *p1); / /返回返回返回返回AR0AR0,参数通过,参数通过,参数通过,参数通过AR1AR1传递传递传递传递 int fn(struct big b, int *p1); int fn(struct big b, int *p1); / /返回返回返回返回T0
164、T0,参数通过,参数通过,参数通过,参数通过AR0AR0、AR1AR1传递传递传递传递 struct small fn(int *p1); struct small fn(int *p1); / /参数返回参数返回参数返回参数返回AC0AC0,参数通过,参数通过,参数通过,参数通过AR0AR0传递传递传递传递 int fn(struct small b, int *p1); int fn(struct small b, int *p1); / /参数返回参数返回参数返回参数返回T0T0,参数通过,参数通过,参数通过,参数通过AC0AC0、AR0AR0传递传递传递传递 int printf(ch
165、ar *fmt, .); int printf(char *fmt, .); / /参数返回参数返回参数返回参数返回T0T0,其余参数通过堆栈传递,并通过,其余参数通过堆栈传递,并通过,其余参数通过堆栈传递,并通过,其余参数通过堆栈传递,并通过fmtfmt的地址的地址的地址的地址进行索引进行索引进行索引进行索引 void fn(long l1, long l2, long l3, long l4, int i5); void fn(long l1, long l2, long l3, long l4, int i5); / /参数通过参数通过参数通过参数通过AC0AC0、AC1AC1、AC2A
166、C2、堆栈和、堆栈和、堆栈和、堆栈和T0T0传递传递传递传递 void fn(long l1, long l2, long l3, int *p4, int *p5, int *p6, void fn(long l1, long l2, long l3, int *p4, int *p5, int *p6, int *p7, int *p8, int i9, int i10);int *p7, int *p8, int i9, int i10); / /参数通过参数通过参数通过参数通过AC0AC0、AC1AC1、AC2AC2、AR0AR0、AR1AR1、AR2AR2、AR3AR3、AR4AR4
167、、T0T0、T1T1传递传递传递传递2024/9/192024/9/196363DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 3 3 3 3被调用函数的响应被调用函数的响应被调用函数的响应被调用函数的响应 被调用函数需要完成如下工作:被调用函数需要完成如下工作:被调用函数需要完成如下工作:被调用函数需要完成如下工作: 子函数为本地变量、暂存空间以及函数本身可
168、能子函数为本地变量、暂存空间以及函数本身可能子函数为本地变量、暂存空间以及函数本身可能子函数为本地变量、暂存空间以及函数本身可能调用函数的参数分配足够的空间,这些工作要在函调用函数的参数分配足够的空间,这些工作要在函调用函数的参数分配足够的空间,这些工作要在函调用函数的参数分配足够的空间,这些工作要在函数调用之初完成。数调用之初完成。数调用之初完成。数调用之初完成。 如果子函数修改一些寄存器,如如果子函数修改一些寄存器,如如果子函数修改一些寄存器,如如果子函数修改一些寄存器,如T2T2T2T2、T3T3T3T3、AR5AR5AR5AR5AR7AR7AR7AR7,需要子函数将这些数压栈或把它们存
169、储到一个,需要子函数将这些数压栈或把它们存储到一个,需要子函数将这些数压栈或把它们存储到一个,需要子函数将这些数压栈或把它们存储到一个没有使用的寄存器中。如果子函数修改其他寄存器则没有使用的寄存器中。如果子函数修改其他寄存器则没有使用的寄存器中。如果子函数修改其他寄存器则没有使用的寄存器中。如果子函数修改其他寄存器则不需要预先存储这些数。不需要预先存储这些数。不需要预先存储这些数。不需要预先存储这些数。2024/9/192024/9/196464DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC
170、55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 3 3 3 3被调用函数的响应被调用函数的响应被调用函数的响应被调用函数的响应 如果子函数的参数是一个结构,它所收到的是指如果子函数的参数是一个结构,它所收到的是指如果子函数的参数是一个结构,它所收到的是指如果子函数的参数是一个结构,它所收到的是指向这个结构的指针。向这个结构的指针。向这个结构的指针。向这个结构的指针。 如果在被调用函数中需要对结构进行写操作,就如果在被调用函数中需要对结构进行写操作,就如果在被调用函数中需要对结构进行写操作,就如果在被调用函数
171、中需要对结构进行写操作,就需要把这个结构复制到本地空间中,如果不进行写操需要把这个结构复制到本地空间中,如果不进行写操需要把这个结构复制到本地空间中,如果不进行写操需要把这个结构复制到本地空间中,如果不进行写操作,则可以直接通过指针访问这个结构作,则可以直接通过指针访问这个结构作,则可以直接通过指针访问这个结构作,则可以直接通过指针访问这个结构。 子函数执行代码。子函数执行代码。子函数执行代码。子函数执行代码。 2024/9/192024/9/196565DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章
172、C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 3 3 3 3被调用函数的响应被调用函数的响应被调用函数的响应被调用函数的响应 函数按照表函数按照表函数按照表函数按照表4-54-54-54-5的规则返回参数,如果子函数返回的规则返回参数,如果子函数返回的规则返回参数,如果子函数返回的规则返回参数,如果子函数返回一个结构,父函数为这个结构分配空间,并传递指针一个结构,父函数为这个结构分配空间,并传递指针一个结构,父函数为这个结构分配空间,并传递指针一个结构,父函数为这个结构分配空间,并传递指针到到到
173、到(X)AR0(X)AR0(X)AR0(X)AR0中。如果父函数没有使用这个结构,则在中。如果父函数没有使用这个结构,则在中。如果父函数没有使用这个结构,则在中。如果父函数没有使用这个结构,则在(X)AR0(X)AR0(X)AR0(X)AR0中返回的地址为中返回的地址为中返回的地址为中返回的地址为0 0 0 0。 子函数将先前存储的寄存器值重新放到寄存器中。子函数将先前存储的寄存器值重新放到寄存器中。子函数将先前存储的寄存器值重新放到寄存器中。子函数将先前存储的寄存器值重新放到寄存器中。 子函数使堆栈返回调用前状态。子函数使堆栈返回调用前状态。子函数使堆栈返回调用前状态。子函数使堆栈返回调用前
174、状态。 函数返回。函数返回。函数返回。函数返回。2024/9/192024/9/196666DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 C/C+C/C+与汇编语言可以通过多种方式联系在一起,与汇编语言可以通过多种方式联系在一起,与汇编语言可以通过多种方式联系在一起,与汇编语言可以通过多种方式联系在一起,其中包括在其中包括在其中包括在其中包括在C/C+C/C
175、+中引用汇编语言中的常量或变量,中引用汇编语言中的常量或变量,中引用汇编语言中的常量或变量,中引用汇编语言中的常量或变量,并可以在并可以在并可以在并可以在C C语言模块中调用汇编代码模块。语言模块中调用汇编代码模块。语言模块中调用汇编代码模块。语言模块中调用汇编代码模块。 C/C+C/C+调用汇编语言模块时需要符合前面所述的调用汇编语言模块时需要符合前面所述的调用汇编语言模块时需要符合前面所述的调用汇编语言模块时需要符合前面所述的寄存器规则和函数调用规则。在调用汇编模块时还应寄存器规则和函数调用规则。在调用汇编模块时还应寄存器规则和函数调用规则。在调用汇编模块时还应寄存器规则和函数调用规则。在
176、调用汇编模块时还应注意如下问题:注意如下问题:注意如下问题:注意如下问题:4 4 4 4C/C+C/C+C/C+C/C+与汇编语言的接口与汇编语言的接口与汇编语言的接口与汇编语言的接口 调用调用调用调用C54xC54xC54xC54x汇编函数时,应使用汇编函数时,应使用汇编函数时,应使用汇编函数时,应使用C54X_CALLC54X_CALLC54X_CALLC54X_CALL或或或或C54X_FAR_CALLC54X_FAR_CALLC54X_FAR_CALLC54X_FAR_CALL关键字。关键字。关键字。关键字。 如果用汇编语言编写中断例程,则需要保存在中断如果用汇编语言编写中断例程,则需
177、要保存在中断如果用汇编语言编写中断例程,则需要保存在中断如果用汇编语言编写中断例程,则需要保存在中断例程中使用的所有寄存器。例程中使用的所有寄存器。例程中使用的所有寄存器。例程中使用的所有寄存器。 如果在汇编程序中调用如果在汇编程序中调用如果在汇编程序中调用如果在汇编程序中调用C/C+C/C+C/C+C/C+函数,则只有特定的函数,则只有特定的函数,则只有特定的函数,则只有特定的寄存器在寄存器在寄存器在寄存器在C/C+C/C+C/C+C/C+中被保存,而其他寄存器则可能被中被保存,而其他寄存器则可能被中被保存,而其他寄存器则可能被中被保存,而其他寄存器则可能被C/C+C/C+C/C+C/C+函
178、数改变。函数改变。函数改变。函数改变。 在定义汇编函数名和变量时,需要在函数名前加上在定义汇编函数名和变量时,需要在函数名前加上在定义汇编函数名和变量时,需要在函数名前加上在定义汇编函数名和变量时,需要在函数名前加上下划线下划线下划线下划线“ “ “ “ _ ”_ ”_ ”_ ”来让编译器识别。来让编译器识别。来让编译器识别。来让编译器识别。 2024/9/192024/9/196767DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器
179、的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 下面分别给出定义汇编函数和变量,以及在下面分别给出定义汇编函数和变量,以及在下面分别给出定义汇编函数和变量,以及在下面分别给出定义汇编函数和变量,以及在C C C C语语语语言中调用这些函数和变量的例子。言中调用这些函数和变量的例子。言中调用这些函数和变量的例子。言中调用这些函数和变量的例子。 调用汇编函数的例子如下:调用汇编函数的例子如下:调用汇编函数的例子如下:调用汇编函数的例子如下: 4 4 4 4C/C+C/C+C/C+C/C+与汇编语言的接口与汇编语言的接口与汇编语言的接口与汇编语言的接口C C语言程序:语言
180、程序:语言程序:语言程序: /* /* 声明外部汇编函数声明外部汇编函数声明外部汇编函数声明外部汇编函数 * */ / extern int asmfunc extern int asmfunc(int, int *int, int *); ; int gvar; /* int gvar; /* 定义全局变量定义全局变量定义全局变量定义全局变量 * */ / main main()()()() int i; int i; i = asmfunc i = asmfunc(i, &gvari, &gvar); /* ; /* 调用调用调用调用 函数函数函数函数 * */ / 汇编程序:汇编程序:汇
181、编程序:汇编程序: _asmfunc: _asmfunc: ADD *AR0, T0, T0 ; gvar + T0 = i ADD *AR0, T0, T0 ; gvar + T0 = i ,i= T0i= T0 RETURN ; RETURN ; 返回返回返回返回2024/9/192024/9/196868DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4
182、 4 4 4C/C+C/C+C/C+C/C+与汇编语言的接口与汇编语言的接口与汇编语言的接口与汇编语言的接口 调用汇编模块中所定义变量的例子如下:调用汇编模块中所定义变量的例子如下:调用汇编模块中所定义变量的例子如下:调用汇编模块中所定义变量的例子如下: 汇编程序:汇编程序:汇编程序:汇编程序: .bss _var,1 ; .bss _var,1 ; 定义变量定义变量定义变量定义变量 .global _var ; .global _var ; 定义其为外部引用定义其为外部引用定义其为外部引用定义其为外部引用 C C语言程序:语言程序:语言程序:语言程序: extern int var; /*
183、extern int var; /* 外部变量外部变量外部变量外部变量 * */ / var = 1; /* var = 1; /* 使用变量使用变量使用变量使用变量 * */ /2024/9/192024/9/196969DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4 4 4 4C/C+C/C+C/C+C/C+与汇编语言的接口与汇编语言的接口与汇编语言的
184、接口与汇编语言的接口 如果如果如果如果C/C+C/C+C/C+C/C+中的变量要在汇编语言中访问,则该变中的变量要在汇编语言中访问,则该变中的变量要在汇编语言中访问,则该变中的变量要在汇编语言中访问,则该变量应用量应用量应用量应用.global.global.global.global声明。声明。声明。声明。 编译器所默认的编译器所默认的编译器所默认的编译器所默认的CPLCPLCPLCPL值为值为值为值为1 1 1 1,即采用间接绝对方式寻,即采用间接绝对方式寻,即采用间接绝对方式寻,即采用间接绝对方式寻址,如果在汇编函数中址,如果在汇编函数中址,如果在汇编函数中址,如果在汇编函数中CPLCP
185、LCPLCPL被设置为被设置为被设置为被设置为0 0 0 0,在函数返回时,在函数返回时,在函数返回时,在函数返回时应当把这个值改为应当把这个值改为应当把这个值改为应当把这个值改为1 1 1 1。下面的例子是对应。下面的例子是对应。下面的例子是对应。下面的例子是对应CPL=1CPL=1CPL=1CPL=1或或或或=0=0=0=0时时时时所使用的不同汇编语句:所使用的不同汇编语句:所使用的不同汇编语句:所使用的不同汇编语句:MOV *MOV *MOV *MOV *(#global_var#global_var#global_var#global_var),AR3 ; CPL = = 1,AR3
186、; CPL = = 1,AR3 ; CPL = = 1,AR3 ; CPL = = 1MOV global_var, AR3 ; CPL = = 0MOV global_var, AR3 ; CPL = = 0MOV global_var, AR3 ; CPL = = 0MOV global_var, AR3 ; CPL = = 0 2024/9/192024/9/197070DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用 在汇编语言中可以通过在汇编语言中可以通过在汇编语言中可以通过在汇编语言中可以通过.set.set.set.set、.globa
187、l.global.global.global命令声明全命令声明全命令声明全命令声明全局常量,这些常量在局常量,这些常量在局常量,这些常量在局常量,这些常量在C/C+C/C+C/C+C/C+中可以通过特殊的方式访问。中可以通过特殊的方式访问。中可以通过特殊的方式访问。中可以通过特殊的方式访问。例如试图访问常量例如试图访问常量例如试图访问常量例如试图访问常量X X X X,则在该常量名前需要加上,则在该常量名前需要加上,则在该常量名前需要加上,则在该常量名前需要加上“&”&”&”&”操作符,即在操作符,即在操作符,即在操作符,即在C/C+C/C+C/C+C/C+中该常量名为中该常量名为中该常量名为
188、中该常量名为&X&X&X&X。例如:。例如:。例如:。例如: 第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4 4 4 4C/C+C/C+C/C+C/C+与汇编语言的接口与汇编语言的接口与汇编语言的接口与汇编语言的接口汇编语言:汇编语言:汇编语言:汇编语言: _table_size .set 10000 _table_size .set 10000 ; ; 定义常量定义常量定义常量定义常量 .global _table_size .global _
189、table_size ; ; 定义的变量可以被全局访问定义的变量可以被全局访问定义的变量可以被全局访问定义的变量可以被全局访问C C语言程序:语言程序:语言程序:语言程序: extern int table_size; extern int table_size; /* /*外部参数外部参数外部参数外部参数 * */ / #define TABLE_SIZE #define TABLE_SIZE (intint) (&table_size&table_size) for for (i0; iTABLE_SIZE; +ii0; iTABLE_SIZE; +i) /* /* 使用该常数使用该常数使
190、用该常数使用该常数 * */ /2024/9/192024/9/197171DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 汇编器和链接器产生的可执行文件所采用的格式汇编器和链接器产生的可执行文件所采用的格式汇编器和链接器产生的可执行文件所采用的格式汇编器和链接器产生的可执行文件所采用的格式是通用目标文件格式(是通用目标文件格式(是通用目标文件格式(是通用目标
191、文件格式(COFFCOFFCOFFCOFF),采用通用目标文件格),采用通用目标文件格),采用通用目标文件格),采用通用目标文件格式有助于实现模块化编程式有助于实现模块化编程式有助于实现模块化编程式有助于实现模块化编程 。 汇编器和链接器都支持用户创建多个代码段和数汇编器和链接器都支持用户创建多个代码段和数汇编器和链接器都支持用户创建多个代码段和数汇编器和链接器都支持用户创建多个代码段和数据段,这也有助于用户的灵活编程。据段,这也有助于用户的灵活编程。据段,这也有助于用户的灵活编程。据段,这也有助于用户的灵活编程。 编译器产生的可以重新定位的代码和数据块叫做编译器产生的可以重新定位的代码和数据
192、块叫做编译器产生的可以重新定位的代码和数据块叫做编译器产生的可以重新定位的代码和数据块叫做段。段。段。段。 4.4 4.4 通用目标文件格式通用目标文件格式2024/9/192024/9/197272DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 初始化段装有数据或代码。常用的初始化段包括初始化段装有数据或代码。常用的初始化段包括初始化段装有数据或代码。常用的
193、初始化段包括初始化段装有数据或代码。常用的初始化段包括代码段(代码段(代码段(代码段(.text.text.text.text段)、常数段(段)、常数段(段)、常数段(段)、常数段(.const.const.const.const段)等。段)等。段)等。段)等。 未初始化段的作用是在存储器中保留一定空间供未初始化段的作用是在存储器中保留一定空间供未初始化段的作用是在存储器中保留一定空间供未初始化段的作用是在存储器中保留一定空间供程序生成和存储变量使用。常用的未初始化段包括堆程序生成和存储变量使用。常用的未初始化段包括堆程序生成和存储变量使用。常用的未初始化段包括堆程序生成和存储变量使用。常用的
194、未初始化段包括堆栈和系统堆栈段(栈和系统堆栈段(栈和系统堆栈段(栈和系统堆栈段(.stack.stack和和和和.sysstack.sysstack)、存储全局和静)、存储全局和静)、存储全局和静)、存储全局和静态变量的态变量的态变量的态变量的.bss.bss段以及为分配动态存储器保留的段以及为分配动态存储器保留的段以及为分配动态存储器保留的段以及为分配动态存储器保留的.sysmem.sysmem段等。段等。段等。段等。 段可以分成两大类段可以分成两大类段可以分成两大类段可以分成两大类初始化段和未初始化段。初始化段和未初始化段。初始化段和未初始化段。初始化段和未初始化段。 4.4 4.4 通用
195、目标文件格式通用目标文件格式2024/9/192024/9/197373DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.4.14.4.14.4.14.4.1 C/C+ C/C+ C/C+ C/C+和汇编语言中段的分配和汇编语言中段的分配和汇编语言中段的分配和汇编语言中段的分配 在在在在C/C+C/C+C/C+C/C+程序中可以使用编译命令直接将代码或程序中
196、可以使用编译命令直接将代码或程序中可以使用编译命令直接将代码或程序中可以使用编译命令直接将代码或数据分配到所要分配的段中。数据分配到所要分配的段中。数据分配到所要分配的段中。数据分配到所要分配的段中。 4.4 4.4 通用目标文件格式通用目标文件格式 用用用用CODE_SECTIONCODE_SECTION命令可以分配代码到指定的命令可以分配代码到指定的命令可以分配代码到指定的命令可以分配代码到指定的段中,在段中,在段中,在段中,在C C语言中语法如下:语言中语法如下:语言中语法如下:语言中语法如下:#pragma CODE_SECTION #pragma CODE_SECTION ( sym
197、bol, “section name”symbol, “section name”) ; C+ C+中则采用下面的语句:中则采用下面的语句:中则采用下面的语句:中则采用下面的语句: #pragma CODE_SECTION #pragma CODE_SECTION (“ “section name”section name”) ; 2024/9/192024/9/197474DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处
198、理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.4.14.4.14.4.14.4.1 C/C+ C/C+ C/C+ C/C+和汇编语言中段的分配和汇编语言中段的分配和汇编语言中段的分配和汇编语言中段的分配 给出使用给出使用给出使用给出使用CODE_SECTIONCODE_SECTIONCODE_SECTIONCODE_SECTION命令的例子:命令的例子:命令的例子:命令的例子: #pragma CODE_SECTION #pragma CODE_SECTION(funcA, “codeA”funcA, “codeA”) int funcA int funcA(int ai
199、nt a) int i; int i; return return (i = ai = a); ; 编译后的结果如下:编译后的结果如下:编译后的结果如下:编译后的结果如下: .sect “codeA” .sect “codeA” .global _funcA .global _funcA ;* ;* ;* FUNCTION NAME: _funcA * ;* FUNCTION NAME: _funcA * ;* ;* _funcA: _funcA: return ; return ;返回返回返回返回2024/9/192024/9/197575DSPDSP原理及应用原理及应用原理及原理及应用原理
200、及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.4.14.4.14.4.14.4.1 C/C+ C/C+ C/C+ C/C+和汇编语言中段的分配和汇编语言中段的分配和汇编语言中段的分配和汇编语言中段的分配 在在在在C C C C语言中按下面给出的语法定义:语言中按下面给出的语法定义:语言中按下面给出的语法定义:语言中按下面给出的语法定义:#pragma DATA_SECTION #pragma DATA_S
201、ECTION #pragma DATA_SECTION #pragma DATA_SECTION ( symbol, “ section name”symbol, “ section name”symbol, “ section name”symbol, “ section name”) ; C+ C+ C+ C+中的语法是:中的语法是:中的语法是:中的语法是:#pragma DATA_SECTION #pragma DATA_SECTION #pragma DATA_SECTION #pragma DATA_SECTION (“ “ “ “ section name”section name
202、”section name”section name”) ; ; ; ; 分配数据的例子:分配数据的例子:分配数据的例子:分配数据的例子: #pragma DATA_SECTION#pragma DATA_SECTION#pragma DATA_SECTION#pragma DATA_SECTION(bufferB, “my_sect”bufferB, “my_sect”bufferB, “my_sect”bufferB, “my_sect”) char bufferA512; char bufferA512; char bufferA512; char bufferA512; char bu
203、fferB512; char bufferB512; char bufferB512; char bufferB512; 编译后的结果如下:编译后的结果如下:编译后的结果如下:编译后的结果如下: .global _bufferA .global _bufferA .global _bufferA .global _bufferA .bss _bufferA,512,0,0 .bss _bufferA,512,0,0 .bss _bufferA,512,0,0 .bss _bufferA,512,0,0 .global _bufferB .global _bufferB .global _buf
204、ferB .global _bufferB _bufferB: .usect “my_sect”,512,0,0 _bufferB: .usect “my_sect”,512,0,0 _bufferB: .usect “my_sect”,512,0,0 _bufferB: .usect “my_sect”,512,0,02024/9/192024/9/197676DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设
205、计处理器的软件设计处理器的软件设计处理器的软件设计 4.4.1 C/C+4.4.1 C/C+4.4.1 C/C+4.4.1 C/C+和汇编语言中段的分配和汇编语言中段的分配和汇编语言中段的分配和汇编语言中段的分配 下面给出汇编语言中为代码分配段的例子:下面给出汇编语言中为代码分配段的例子:下面给出汇编语言中为代码分配段的例子:下面给出汇编语言中为代码分配段的例子: .text .text .text .text MOV #10,AC0 MOV #10,AC0 MOV #10,AC0 MOV #10,AC0 MOV AC0,AC1 MOV AC0,AC1 MOV AC0,AC1 MOV AC0,
206、AC1 下面给出汇编语言中为数据分配段的例子:下面给出汇编语言中为数据分配段的例子:下面给出汇编语言中为数据分配段的例子:下面给出汇编语言中为数据分配段的例子: .data .data .data .data .word 9, 10 .word 9, 10 .word 9, 10 .word 9, 10 .word 11, 12 .word 11, 12 .word 11, 12 .word 11, 12 2024/9/192024/9/197777DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55
207、xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 在汇编文件中可以定义变量和为数组预留空间:在汇编文件中可以定义变量和为数组预留空间:在汇编文件中可以定义变量和为数组预留空间:在汇编文件中可以定义变量和为数组预留空间: .def _I_east_data .def _I_east_data.def _Q_east_data.def _Q_east_data.def _I_west_data.def _I_west_data.def _Q_west_data.def _Q_west_data.def _x.
208、def _x.sect input.sect input _I_east_data: _I_east_data:.space 20*16.space 20*16;保留;保留2020个字的空间个字的空间 _Q_east_data: _Q_east_data:.space 20*16.space 20*16;保留;保留2020个字的空间个字的空间 _I_west_data: _I_west_data:.space 20*16.space 20*16;保留;保留2020个字的空间个字的空间 _Q_west_data: _Q_west_data:.space 20*16.space 20*16;保留;
209、保留2020个字的空间个字的空间 _x: _x:.word 0.word 0 2024/9/192024/9/197878DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 TMS320C55xTMS320C55xTMS320C55xTMS320C55x处处处处理理理理器器器器采采采采用用用用改改改改进进进进的的的的哈哈哈哈佛佛佛佛结结结结构构构构,在在在在该该该
210、该结结结结构下存储器被分成几个独立的空间:构下存储器被分成几个独立的空间:构下存储器被分成几个独立的空间:构下存储器被分成几个独立的空间: 程序空间程序空间程序空间程序空间 数据空间数据空间数据空间数据空间 I/OI/OI/OI/O空间空间空间空间 C55xC55xC55xC55x编编编编译译译译器器器器为为为为这这这这些些些些空空空空间间间间内内内内的的的的代代代代码码码码块块块块和和和和数数数数据据据据块块块块分分分分配配配配内存。内存。内存。内存。4.4.2 4.4.2 4.4.2 4.4.2 寄存器模式设置寄存器模式设置寄存器模式设置寄存器模式设置 2024/9/192024/9/19
211、7979DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 在在在在小小小小存存存存储储储储器器器器模模模模式式式式下下下下,代代代代码码码码段段段段和和和和数数数数据据据据段段段段的的的的长长长长度度度度和和和和位位位位置都受到一定限制。置都受到一定限制。置都受到一定限制。置都受到一定限制。 如下列段都必须在长度为如下列段都必须在长度为如下列段都必须在长度为如下
212、列段都必须在长度为64K64K64K64K字的同一个段内:字的同一个段内:字的同一个段内:字的同一个段内: .bss.bss.bss.bss段和段和段和段和.data.data.data.data段(存放静态和全局变量)段(存放静态和全局变量)段(存放静态和全局变量)段(存放静态和全局变量) .stack .stack .stack .stack和和和和.sysstack.sysstack.sysstack.sysstack段(系统堆栈)段(系统堆栈)段(系统堆栈)段(系统堆栈) .system .system .system .system段(动态存储空间)段(动态存储空间)段(动态存储空间
213、)段(动态存储空间) .const .const .const .const段段段段 1 1 1 1小存储器模式小存储器模式小存储器模式小存储器模式 4.4.2 4.4.2 4.4.2 4.4.2 寄存器模式设置寄存器模式设置寄存器模式设置寄存器模式设置 2024/9/192024/9/198080DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 小小小小存存存
214、存储储储储器器器器模模模模式式式式下下下下,.text.text.text.text(代代代代码码码码段段段段)、.switch.switch.switch.switch(状状状状态态态态转转转转化化化化段段段段)以以以以及及及及.cinit/.pinit.cinit/.pinit.cinit/.pinit.cinit/.pinit(变变变变量量量量初初初初始始始始化化化化段段段段)的长度和位置都不受限制;的长度和位置都不受限制;的长度和位置都不受限制;的长度和位置都不受限制; 小存储器模式下,数据指针为小存储器模式下,数据指针为小存储器模式下,数据指针为小存储器模式下,数据指针为161616
215、16位。位。位。位。 在在在在采采采采用用用用数数数数据据据据指指指指针针针针寻寻寻寻址址址址时时时时,XARxXARx寄寄寄寄存存存存器器器器的的的的高高高高7 7位位位位指指指指向向向向.bss.bss段段段段所所所所在在在在的的的的数数数数据据据据页页页页,并并并并在在在在程程程程序序序序运运运运行行行行时时时时始始始始终终终终指指指指向向向向该该该该段。段。段。段。 1 1 1 1小存储器模式小存储器模式小存储器模式小存储器模式 2024/9/192024/9/198181DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4
216、 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 如如如如果果果果在在在在编编编编译译译译器器器器中中中中设设设设置置置置-ml-ml-ml-ml选选选选项项项项,则则则则编编编编译译译译器器器器将将将将按按按按照照照照大大大大存存存存储储储储器器器器模式编译程序。模式编译程序。模式编译程序。模式编译程序。 大大大大存存存存储储储储器器器器模模模模式式式式下下下下可可可可以以以以更更更更加加加加方方方方便便便便地地地地存存存存放放放放数数数数据据据据,而而而而不不不不必必必
217、必过过过过多多多多地地地地考虑数据页的限制。考虑数据页的限制。考虑数据页的限制。考虑数据页的限制。 在在在在该该该该模模模模式式式式下下下下,数数数数据据据据指指指指针针针针为为为为2323位位位位,而而而而堆堆堆堆栈栈栈栈和和和和系系系系统统统统堆堆堆堆栈栈栈栈必必必必须须须须放放放放在同一页中;在同一页中;在同一页中;在同一页中; 代码段可以跨越页边界以外;代码段可以跨越页边界以外; 除代码段外的其他所有的段只能放在一页存储器之中。除代码段外的其他所有的段只能放在一页存储器之中。 2 2 2 2大存储器模式大存储器模式大存储器模式大存储器模式 2024/9/192024/9/198282D
218、SPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 C55xC55xC55xC55x的的的的堆堆堆堆栈栈栈栈主主主主要要要要用用用用来来来来保保保保存存存存处处处处理理理理器器器器信信信信息息息息,向向向向函函函函数数数数传传传传递递递递参参参参数数数数以以以以及分配局部变量。及分配局部变量。及分配局部变量。及分配局部变量。 堆堆堆堆栈栈栈栈在在在在一一一一块块块块
219、地地地地址址址址按按按按由由由由高高高高到到到到低低低低排排排排列列列列的的的的连连连连续续续续存存存存储储储储器器器器之之之之中中中中,编编编编译译译译器通过堆栈指针(器通过堆栈指针(器通过堆栈指针(器通过堆栈指针(SPSPSPSP)操作堆栈。)操作堆栈。)操作堆栈。)操作堆栈。 C55xC55x还还还还存存存存在在在在辅辅辅辅助助助助堆堆堆堆栈栈栈栈,主主主主堆堆堆堆栈栈栈栈主主主主要要要要存存存存放放放放低低低低1616位位位位地地地地址址址址,而而而而辅辅辅辅助助助助堆堆堆堆栈栈栈栈则则则则存存存存放放放放C55xC55x返返返返回回回回的的的的高高高高8 8位位位位地地地地址址址址,
220、编编编编译译译译器器器器通通通通过过过过辅辅辅辅助助助助堆堆堆堆栈栈栈栈指针(指针(指针(指针(SSPSSP)操作辅助堆栈。)操作辅助堆栈。)操作辅助堆栈。)操作辅助堆栈。 堆堆堆堆 栈栈栈栈 的的的的 大大大大 小小小小 由由由由 链链链链 接接接接 器器器器 设设设设 置置置置 , _STACK_SIZE_STACK_SIZE和和和和_SYSSTACK_SIZE_SYSSTACK_SIZE两个全局符号存放的是堆栈的长度值。两个全局符号存放的是堆栈的长度值。两个全局符号存放的是堆栈的长度值。两个全局符号存放的是堆栈的长度值。 系统默认主堆栈和辅助堆栈的长度都是系统默认主堆栈和辅助堆栈的长度都
221、是系统默认主堆栈和辅助堆栈的长度都是系统默认主堆栈和辅助堆栈的长度都是10001000个字节。个字节。个字节。个字节。 3 3 3 3C/C+C/C+C/C+C/C+系统堆栈系统堆栈系统堆栈系统堆栈 2024/9/192024/9/198383DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 编译器为动态内存分配提供了如下函数:编译器为动态内存分配提供了如下函数
222、:编译器为动态内存分配提供了如下函数:编译器为动态内存分配提供了如下函数: malloc malloc malloc malloc calloc calloc calloc calloc realloc realloc realloc realloc 在在在在C C C C语语语语言言言言中中中中调调调调用用用用这这这这些些些些函函函函数数数数会会会会在在在在.sysmem.sysmem.sysmem.sysmem段段段段定定定定义义义义的的的的内内内内存存存存池池池池中中中中分分分分配配配配内内内内存存存存。_SYSMEM_SIZE_SYSMEM_SIZE_SYSMEM_SIZE_SYSME
223、M_SIZE中中中中存存存存放放放放的的的的内内内内存存存存池池池池的的的的大大大大小小小小(单单单单位位位位为为为为字字字字节节节节),系统默认大小为,系统默认大小为,系统默认大小为,系统默认大小为2000200020002000个字节。个字节。个字节。个字节。 动动动动态态态态内内内内存存存存分分分分配配配配只只只只能能能能通通通通过过过过指指指指针针针针访访访访问问问问,可可可可分分分分配配配配的的的的内内内内存存存存大大大大小小小小受受受受内内内内存存存存池池池池中中中中剩剩剩剩余余余余空空空空间间间间限限限限制制制制,动动动动态态态态内内内内存存存存的的的的优优优优点点点点是是是是系
224、系系系统统统统只只只只在在在在需需需需要要要要时时时时才才才才分分分分配,不用时就可以释放所申请的空间,被系统使用。配,不用时就可以释放所申请的空间,被系统使用。配,不用时就可以释放所申请的空间,被系统使用。配,不用时就可以释放所申请的空间,被系统使用。 4 4 4 4动态内存分配动态内存分配动态内存分配动态内存分配 2024/9/192024/9/198484DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用注注注注意意意意:如如如如果果果果所所所所申申申申请请请请的的的的空空空空间间间间需需需需要要要要经经经经常常常常访访访访问问问问,建建建建议议
225、议议申申申申请请请请静静静静态态态态内内内内存存存存,因因因因为为为为如如如如果果果果申申申申请请请请和和和和释释释释放放放放内内内内存存存存的的的的操操操操作作作作很很很很频频频频繁繁繁繁,将将将将过过过过多多多多占占占占用用用用系系系系统统统统资资资资源,降低程序的执行效率。源,降低程序的执行效率。源,降低程序的执行效率。源,降低程序的执行效率。 第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4 4 4 4动态内存分配动态内存分配动态内存分配动
226、态内存分配 接接接接下下下下来来来来给给给给出出出出申申申申请请请请动动动动态态态态内内内内存存存存的的的的例例例例子子子子,由由由由例例例例子子子子可可可可以以以以看看看看到到到到在在在在定定定定义义义义变变变变量量量量指指指指针针针针时时时时不不不不需需需需要要要要定定定定义义义义数数数数组组组组的的的的大大大大小小小小,而而而而只只只只在在在在申申申申请请请请内内内内存存存存时时时时才才才才需需需需给给给给出申请的内存长度。出申请的内存长度。出申请的内存长度。出申请的内存长度。 struct big *table;struct big *table;struct big *table;s
227、truct big *table; table = table = table = table =(struct big *struct big *struct big *struct big *)mallocmallocmallocmalloc(100*sizeof100*sizeof100*sizeof100*sizeof(struct bigstruct bigstruct bigstruct big); ; ; ; 2024/9/192024/9/198585DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章
228、章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 5 5 5 5结构的对齐结构的对齐结构的对齐结构的对齐 当当当当编编编编译译译译器器器器为为为为结结结结构构构构分分分分配配配配空空空空间间间间时时时时,将将将将为为为为结结结结构构构构的的的的所所所所有有有有成成成成员分配空间。员分配空间。员分配空间。员分配空间。 例例例例如如如如一一一一个个个个结结结结构构构构包包包包含含含含一一一一个个个个长长长长整整整整型型型型的的的的成成成成员员员员(32323232位位位位),则长整型会被分配
229、到长整型边界上。则长整型会被分配到长整型边界上。则长整型会被分配到长整型边界上。则长整型会被分配到长整型边界上。 为为为为了了了了保保保保证证证证分分分分配配配配,编编编编译译译译器器器器会会会会在在在在结结结结构构构构的的的的开开开开头头头头、中中中中间间间间或或或或结尾进行填充,以保证结构的长度为偶数。结尾进行填充,以保证结构的长度为偶数。结尾进行填充,以保证结构的长度为偶数。结尾进行填充,以保证结构的长度为偶数。 2024/9/192024/9/198686DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章
230、章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 链链链链接接接接器器器器对对对对汇汇汇汇编编编编器器器器编编编编译译译译好好好好的的的的代代代代码码码码和和和和数数数数据据据据进进进进行行行行链链链链接接接接时时时时,所所所所依依依依据据据据的是链接命令文件,即的是链接命令文件,即的是链接命令文件,即的是链接命令文件,即.cmd.cmd文件。文件。文件。文件。 在在在在链链链链接接接接命命命命令令令令文文文文件件件件中中中中定定定定义义义义了了了了段段段段名名名名,段段段段的的的的起起起起
231、始始始始地地地地址址址址,段段段段的的的的长长长长度度度度,初始化段的初始值等。初始化段的初始值等。初始化段的初始值等。初始化段的初始值等。 4.4.3 4.4.3 4.4.3 4.4.3 链接命令文件链接命令文件链接命令文件链接命令文件 下面给出一个下面给出一个下面给出一个下面给出一个.cmd.cmd文件的具体实例:文件的具体实例:文件的具体实例:文件的具体实例:/*/* lnk55x -o -m lnk.cmd* lnk55x -o -m lnk.cmd* cl55x -z -o -m lnk.cmd* cl55x -z -o -m lnk.cmd/*/*/ -c -c/*/*不区分大小写
232、不区分大小写不区分大小写不区分大小写 * */ / -m -ma1.mapa1.map/*/*生成生成生成生成.map.map文件文件文件文件* */ / 2024/9/192024/9/198787DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 -stack 0x1800 /* -stack 0x1800 /*主堆栈尺寸主堆栈尺寸主堆栈尺寸主堆栈尺寸* */
233、 / -sysstack 0x1800 /* -sysstack 0x1800 /*系统堆栈尺寸系统堆栈尺寸系统堆栈尺寸系统堆栈尺寸* */ / -heap 0x100 /* -heap 0x100 /*动态内存大小动态内存大小动态内存大小动态内存大小* */ / /* Set entry point to Reset vector*/ /* Set entry point to Reset vector*/ /* - Allows Reset ISR to force IVPD/IVPH to point to vector table.*/ /* - Allows Reset ISR to
234、 force IVPD/IVPH to point to vector table.*/ -e RESET_ISR -e RESET_ISR /* /*设置系统内存映射设置系统内存映射设置系统内存映射设置系统内存映射* */ / /* /* 载入及链接使用字节地址载入及链接使用字节地址载入及链接使用字节地址载入及链接使用字节地址* */ / MEMORY MEMORY PAGE 0: PAGE 0: MMR MMR (RWIXRWIX) : o=0000000h, l=00000C0h: o=0000000h, l=00000C0h DARAM0 DARAM0 (RWIXRWIX) : o=0
235、0000C0h, l=000af40h: o=00000C0h, l=000af40h DARAM1 DARAM1 (RWIXRWIX) : o=000b000h, l=0000800h: o=000b000h, l=0000800h DARAM2 DARAM2 (RWIXRWIX) : o=000b800h, l=0000800h: o=000b800h, l=0000800h DARAM3 DARAM3 (RWIXRWIX) : o=000c000h, l=0000800h: o=000c000h, l=0000800h DARAM4 DARAM4 (RWIXRWIX) : o=000c8
236、00h, l=0000800h : o=000c800h, l=0000800h SARAM0 SARAM0 (RWIXRWIX) : o=0010000h, l=0010000h: o=0010000h, l=0010000h SARAM1 SARAM1 (RWIXRWIX) : o=0020000h, l=0010000h: o=0020000h, l=0010000h SARAM2 SARAM2 (RWIXRWIX) : o=0030000h, l=0020000h: o=0030000h, l=0020000h CE0 CE0 (RWIXRWIX) : o=0050000h, l=01
237、00000h: o=0050000h, l=0100000h CE1 CE1 (RWIXRWIX) : o=0400000h, l=0400000h: o=0400000h, l=0400000h PDROM PDROM (RXRX) : o=0FF8000h, l=0008000h: o=0FF8000h, l=0008000h PAGE 1: PAGE 1: CE2 CE2 (RWIXRWIX) : o=0400000h, l=0200000h: o=0400000h, l=0200000h CE3 CE3 (RWIXRWIX) : o=0600000h, l=0100000h: o=06
238、00000h, l=0100000h PAGE 2: PAGE 2: IOPORT IOPORT (RWIRWI) : o=0000000h, l=0020000h: o=0000000h, l=0020000h 2024/9/192024/9/198888DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 /* /*为段分配内存地址为段分配内存地址为段分配内存地
239、址为段分配内存地址* */ / SECTIONS SECTIONS rts55x.lib rts55x.lib(.text.text) */ */ rts55.lib rts55.lib(.text.text) .text SARAM0 /* CODE*/ .text SARAM0 /* CODE*/ .switch SARAM0 /* SWITCH TABLE INFO */ .switch SARAM0 /* SWITCH TABLE INFO */ .const SARAM0 /* CONSTANT DATA */ .const SARAM0 /* CONSTANT DATA */ .c
240、init SARAM0 /* INITIALIZATION TABLES */ .cinit SARAM0 /* INITIALIZATION TABLES */ .pinit SARAM0 /* INITIALIZATION TABLES */ .pinit SARAM0 /* INITIALIZATION TABLES */ 2024/9/192024/9/198989DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理
241、器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 .data DARAM0 fill=0xBEEF /* INITIALIZED DATA */ .data DARAM0 fill=0xBEEF /* INITIALIZED DATA */ .bss DARAM0 fill=0xBEEF /* GLOBAL & STATIC VARS */ .bss DARAM0 fill=0xBEEF /* GLOBAL & STATIC VARS */ .sysmem DARAM0 fill=0xBEEF /* DYNAMIC MALLOC AREA */ .sysmem DARAM0 fil
242、l=0xBEEF /* DYNAMIC MALLOC AREA */ .stack DARAM0 fill=0xBEEF /* PRIMARY SYSTEM STACK */ .stack DARAM0 fill=0xBEEF /* PRIMARY SYSTEM STACK */ .sysstack DARAM0 fill=0xBEEF /* SECONDARY SYSTEM .sysstack DARAM0 fill=0xBEEF /* SECONDARY SYSTEM STACK */STACK */ .cio DARAM0 fill=0xBEEF .cio DARAM0 fill=0xB
243、EEF input DARAM1 fill=0xBEEF /* Input data */ input DARAM1 fill=0xBEEF /* Input data */ output DARAM2 fill=0xBEFF /* Output data */ output DARAM2 fill=0xBEFF /* Output data */ writdata DARAM3 fill=0xBEFF /* Write pen point */ writdata DARAM3 fill=0xBEFF /* Write pen point */ para DARAM4 fill=0xBEFF
244、/* Tranfer parameter */ para DARAM4 fill=0xBEFF /* Tranfer parameter */ intvecs DARAM5 fill=0xBEFF intvecs DARAM5 fill=0xBEFF paradata paradata DARAM6 fill=0x7 DARAM6 fill=0x7 time time DARAM7 fill=0 DARAM7 fill=0.ioport IOPORT PAGE 2.ioport IOPORT PAGE 2 2024/9/192024/9/199090DSPDSP原理及应用原理及应用原理及原理及
245、应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 C55xC55xC55xC55x处处处处理理理理器器器器的的的的数数数数字字字字信信信信号号号号处处处处理理理理库库库库和和和和图图图图像像像像、视视视视频频频频处处处处理理理理库库库库提提提提供供供供了了了了一一一一些些些些通通通通用用用用算算算算法法法法,如如如如FFTFFTFFTFFT、FIR/IIRFIR/IIRFIR/IIRFIR/IIR滤滤滤滤
246、波波波波器器器器等等等等,以以以以及及及及在在在在图图图图像像像像处处处处理理理理中中中中要要要要用用用用到到到到DCTDCTDCTDCT、卷卷卷卷积积积积、自自自自相相相相关关关关等等等等运算。运算。运算。运算。 4.5 C55x4.5 C55x处理器的数字信号处理库和图像、处理器的数字信号处理库和图像、视频处理库视频处理库2024/9/192024/9/199191DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的
247、软件设计处理器的软件设计处理器的软件设计处理器的软件设计 德德德德 州州州州 仪仪仪仪 器器器器 的的的的 TMS320C55x TMS320C55x TMS320C55x TMS320C55x DSPLIBDSPLIBDSPLIBDSPLIB是是是是 专专专专 门门门门 针针针针 对对对对TMS320C55xTMS320C55xTMS320C55xTMS320C55x系系系系列列列列处处处处理理理理器器器器开开开开发发发发的的的的数数数数字字字字信信信信号号号号处处处处理理理理函函函函数数数数库库库库,它它它它包包包包括括括括50505050个个个个经经经经过过过过汇汇汇汇编编编编级级级级优
248、优优优化化化化的的的的数数数数字字字字信信信信号号号号处处处处理理理理函函函函数数数数,这些函数可由这些函数可由这些函数可由这些函数可由C C C C调用。调用。调用。调用。 4.5 C55x4.5 C55x处理器的数字信号处理库和图像、处理器的数字信号处理库和图像、视频处理库视频处理库4.5.1 C55x4.5.1 C55x4.5.1 C55x4.5.1 C55x的数字信号处理库的数字信号处理库的数字信号处理库的数字信号处理库 2024/9/192024/9/199292DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4
249、 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.5.1 C55x4.5.1 C55x4.5.1 C55x4.5.1 C55x的数字信号处理库的数字信号处理库的数字信号处理库的数字信号处理库 数字信号处理函数库主要包含以下数字信号处理函数库主要包含以下数字信号处理函数库主要包含以下数字信号处理函数库主要包含以下8 8 8 8种类型:种类型:种类型:种类型: 快速傅里叶变换快速傅里叶变换快速傅里叶变换快速傅里叶变换 滤波与卷积滤波与卷积滤波与卷积滤波与卷积 自适应滤波自适应滤波自
250、适应滤波自适应滤波 相关相关相关相关 数学运算数学运算数学运算数学运算 三角函数三角函数三角函数三角函数 其他运算其他运算其他运算其他运算 矩阵矩阵矩阵矩阵2024/9/192024/9/199393DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 数字信号处理库可以从网站下载,下载的文件是数字信号处理库可以从网站下载,下载的文件是数字信号处理库可以从网站下载,
251、下载的文件是数字信号处理库可以从网站下载,下载的文件是一个自解压文件一个自解压文件一个自解压文件一个自解压文件55xdsplib.exe55xdsplib.exe55xdsplib.exe55xdsplib.exe,解压之后生成一个,解压之后生成一个,解压之后生成一个,解压之后生成一个dsplibdsplibdsplibdsplib目录,用户可以把这个目录及目录下的全部内目录,用户可以把这个目录及目录下的全部内目录,用户可以把这个目录及目录下的全部内目录,用户可以把这个目录及目录下的全部内容复制到容复制到容复制到容复制到tic5500cgtoolslibtic5500cgtoolslibtic
252、5500cgtoolslibtic5500cgtoolslib目录下。目录下。目录下。目录下。 数数数数字字字字信信信信号号号号处处处处理理理理库库库库由由由由头头头头文文文文件件件件dsplib.hdsplib.hdsplib.hdsplib.h,目目目目标标标标库库库库55xdsp.lib55xdsp.lib55xdsp.lib55xdsp.lib,源源源源文文文文件件件件库库库库55xdsp.src55xdsp.src55xdsp.src55xdsp.src和和和和在在在在55x_test55x_test55x_test55x_test子子子子目目目目录下的示例程序和链接命令文件等组成。
253、录下的示例程序和链接命令文件等组成。录下的示例程序和链接命令文件等组成。录下的示例程序和链接命令文件等组成。 4.5.1 C55x4.5.1 C55x4.5.1 C55x4.5.1 C55x的数字信号处理库的数字信号处理库的数字信号处理库的数字信号处理库 2024/9/192024/9/199494DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 函数中参数的传
254、递大多采用数组的形式,其中数函数中参数的传递大多采用数组的形式,其中数函数中参数的传递大多采用数组的形式,其中数函数中参数的传递大多采用数组的形式,其中数组成员都在内存中连续保存;组成员都在内存中连续保存;组成员都在内存中连续保存;组成员都在内存中连续保存; 4.5.1 C55x4.5.1 C55x4.5.1 C55x4.5.1 C55x的数字信号处理库的数字信号处理库的数字信号处理库的数字信号处理库 矩阵库函数中主要的数据类型是矩阵库函数中主要的数据类型是矩阵库函数中主要的数据类型是矩阵库函数中主要的数据类型是Q.15Q.15Q.15Q.15(16161616位字)位字)位字)位字),其他数
255、据类型还包括,其他数据类型还包括,其他数据类型还包括,其他数据类型还包括Q.31Q.31Q.31Q.31(32323232位双字),和位双字),和位双字),和位双字),和Q.3.12Q.3.12Q.3.12Q.3.12(3 3 3 3位整数,位整数,位整数,位整数,12121212位小数)。位小数)。位小数)。位小数)。 当存放的是复数时,则以实部虚部的格式存放;当存放的是复数时,则以实部虚部的格式存放;当存放的是复数时,则以实部虚部的格式存放;当存放的是复数时,则以实部虚部的格式存放; 为了节省存储器的空间,源操作数和目的操作数可为了节省存储器的空间,源操作数和目的操作数可为了节省存储器的空
256、间,源操作数和目的操作数可为了节省存储器的空间,源操作数和目的操作数可以使用相同的地址。以使用相同的地址。以使用相同的地址。以使用相同的地址。2024/9/192024/9/199595DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.5.1 C55x4.5.1 C55x4.5.1 C55x4.5.1 C55x的数字信号处理库的数字信号处理库的数字信号处理库
257、的数字信号处理库 在使用定点处理器进行处理时必须对数据的溢出问题加以在使用定点处理器进行处理时必须对数据的溢出问题加以在使用定点处理器进行处理时必须对数据的溢出问题加以在使用定点处理器进行处理时必须对数据的溢出问题加以注意,注意,注意,注意,数字信号处理库采用了如下数字信号处理库采用了如下数字信号处理库采用了如下数字信号处理库采用了如下4 4 4 4种方式解决溢出问题:种方式解决溢出问题:种方式解决溢出问题:种方式解决溢出问题: (1 1)利用缩放来阻止溢出:)利用缩放来阻止溢出:)利用缩放来阻止溢出:)利用缩放来阻止溢出:DSPLIBDSPLIB库通过缩小中间结果来防止溢出,例库通过缩小中间
258、结果来防止溢出,例库通过缩小中间结果来防止溢出,例库通过缩小中间结果来防止溢出,例如在如在如在如在FFTFFT函数中,函数中,函数中,函数中,FFTFFT的每个阶段都对输出数据进行了缩放,这样会对精的每个阶段都对输出数据进行了缩放,这样会对精的每个阶段都对输出数据进行了缩放,这样会对精的每个阶段都对输出数据进行了缩放,这样会对精度带来一些细微影响。度带来一些细微影响。度带来一些细微影响。度带来一些细微影响。(2 2)不采用缩放来防止溢出:对于以乘加为主的运算,如滤波、卷积、相)不采用缩放来防止溢出:对于以乘加为主的运算,如滤波、卷积、相)不采用缩放来防止溢出:对于以乘加为主的运算,如滤波、卷积
259、、相)不采用缩放来防止溢出:对于以乘加为主的运算,如滤波、卷积、相关等,可以通过仔细设计算法来防止溢出,例如可以通过设计滤波器参数关等,可以通过仔细设计算法来防止溢出,例如可以通过设计滤波器参数关等,可以通过仔细设计算法来防止溢出,例如可以通过设计滤波器参数关等,可以通过仔细设计算法来防止溢出,例如可以通过设计滤波器参数使得增益小于使得增益小于使得增益小于使得增益小于1 1来防止溢出。来防止溢出。来防止溢出。来防止溢出。(3 3)利用饱和模式来防止溢出:这种类型的函数可以通过设置)利用饱和模式来防止溢出:这种类型的函数可以通过设置)利用饱和模式来防止溢出:这种类型的函数可以通过设置)利用饱和模
260、式来防止溢出:这种类型的函数可以通过设置3232位饱和模位饱和模位饱和模位饱和模式(式(式(式(SATD=1SATD=1)来防止溢出。)来防止溢出。)来防止溢出。)来防止溢出。(4 4)不处理。)不处理。)不处理。)不处理。2024/9/192024/9/199696DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.5.1 C55x4.5.1 C55x4.5
261、.1 C55x4.5.1 C55x的数字信号处理库的数字信号处理库的数字信号处理库的数字信号处理库 如果在函数运行时发生了溢出,函数可以返回溢出标志,如果在函数运行时发生了溢出,函数可以返回溢出标志,如果在函数运行时发生了溢出,函数可以返回溢出标志,如果在函数运行时发生了溢出,函数可以返回溢出标志,但是由于但是由于但是由于但是由于C55xC55xC55xC55x的寄存器为的寄存器为的寄存器为的寄存器为40404040位,其中有位,其中有位,其中有位,其中有8 8 8 8位的保护位,因此在运位的保护位,因此在运位的保护位,因此在运位的保护位,因此在运算中可能发生了算中可能发生了算中可能发生了算中
262、可能发生了32323232位溢出但结果仍然正确,在这种情况下,溢位溢出但结果仍然正确,在这种情况下,溢位溢出但结果仍然正确,在这种情况下,溢位溢出但结果仍然正确,在这种情况下,溢出标志代表报警而不是一个错误出标志代表报警而不是一个错误出标志代表报警而不是一个错误出标志代表报警而不是一个错误。 下下下下面面面面给给给给出出出出一一一一个个个个应应应应用用用用DSPLIBDSPLIBDSPLIBDSPLIB的的的的程程程程序序序序实实实实例例例例来来来来了了了了解解解解如如如如何何何何使使使使用用用用数数数数字信号处理函数库:字信号处理函数库:字信号处理函数库:字信号处理函数库: #include
263、 #include #include #include #include #include #include #include #include #include #include #include #define NX 256 #define NX 256 #define NX 256 #define NX 256 2024/9/192024/9/199797DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计
264、处理器的软件设计处理器的软件设计处理器的软件设计 #define NH 64 #define NH 64 #define NH 64 #define NH 64 #define FNAME t8 #define FNAME t8 #define FNAME t8 #define FNAME t8 #define MAXERROR 10 #define MAXERROR 10 #define MAXERROR 10 #define MAXERROR 10 short i; short i; short i; short i; short eflag1= PASS; short eflag1= P
265、ASS; short eflag1= PASS; short eflag1= PASS; short eflag2= PASS; short eflag2= PASS; short eflag2= PASS; short eflag2= PASS; DATA *dbptr = &db0; DATA *dbptr = &db0; DATA *dbptr = &db0; DATA *dbptr = &db0; DATA xNX DATA xNX DATA xNX DATA xNX,rNX;rNX;rNX;rNX; void main void main void main void main()(
266、)()() / 1. Test for single-buffer / 1. Test for single-buffer / 1. Test for single-buffer / 1. Test for single-buffer / clear / clear / clear / clear for for for for(i=0; iNX; i+i=0; iNX; i+i=0; iNX; i+i=0; iNX; i+) ri = 0; / ri = 0; / ri = 0; / ri = 0; / 输出缓冲区清输出缓冲区清输出缓冲区清输出缓冲区清0 0 0 0 for for for
267、for(i=0; iNH+2; i+i=0; iNH+2; i+i=0; iNH+2; i+i=0; iNH+2; i+) dbi = 0;/ dbi = 0;/ dbi = 0;/ dbi = 0;/ 延迟缓冲区清延迟缓冲区清延迟缓冲区清延迟缓冲区清0 0 0 0 2024/9/192024/9/199898DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用 / compute/ compute/ compute/ compute fir fir fir fir(x, h, r, dbptr, NX, NHx, h, r, dbptr, NX, NH
268、x, h, r, dbptr, NX, NHx, h, r, dbptr, NX, NH); ; ; ; / 2. Tets for dual-buffer / 2. Tets for dual-buffer / 2. Tets for dual-buffer / 2. Tets for dual-buffer / clear / clear / clear / clear for for for for(i=0; iNX; i+i=0; iNX; i+i=0; iNX; i+i=0; iNX; i+) ri = 0; /ri = 0; /ri = 0; /ri = 0; /输出缓冲区清输出缓
269、冲区清输出缓冲区清输出缓冲区清0 0 0 0 for for for for (i=0; iNH+2; i+i=0; iNH+2; i+i=0; iNH+2; i+i=0; i=4NX=4NX=4NX=4) fir fir fir fir(x, h, r, dbptr, NX/4, NHx, h, r, dbptr, NX/4, NHx, h, r, dbptr, NX/4, NHx, h, r, dbptr, NX/4, NH); ; ; ; fir fir fir fir(&xNX/4, h, &rNX/4, dbptr, NX/4, NH&xNX/4, h, &rNX/4, dbptr,
270、 NX/4, NH&xNX/4, h, &rNX/4, dbptr, NX/4, NH&xNX/4, h, &rNX/4, dbptr, NX/4, NH); ; ; ; fir fir fir fir(&x2*NX/4, h, &r2*NX/4, dbptr, NX/4, NH&x2*NX/4, h, &r2*NX/4, dbptr, NX/4, NH&x2*NX/4, h, &r2*NX/4, dbptr, NX/4, NH&x2*NX/4, h, &r2*NX/4, dbptr, NX/4, NH); ; ; ; fir fir fir fir(&x3*NX/4, h, &r3*NX/4
271、, dbptr, NX/4, NH&x3*NX/4, h, &r3*NX/4, dbptr, NX/4, NH&x3*NX/4, h, &r3*NX/4, dbptr, NX/4, NH&x3*NX/4, h, &r3*NX/4, dbptr, NX/4, NH); ; ; ; return; return; return; return; 第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 2024/9/192024/9/199999DSPDSP原理及
272、应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.5.2 C55x4.5.2 C55x4.5.2 C55x4.5.2 C55x的图像、视频处理的图像、视频处理的图像、视频处理的图像、视频处理库库库库 TMS320C55x TMS320C55x TMS320C55x TMS320C55x的图像、视频处理库(的图像、视频处理库(的图像、视频处理库(的图像、视频处理库(IMGLIB
273、IMGLIBIMGLIBIMGLIB)包括)包括)包括)包括31313131个图像和视频处理函数,这些通用图像处理函数适个图像和视频处理函数,这些通用图像处理函数适个图像和视频处理函数,这些通用图像处理函数适个图像和视频处理函数,这些通用图像处理函数适应于压缩、视频处理、机器视觉和医学影像等方面的应于压缩、视频处理、机器视觉和医学影像等方面的应于压缩、视频处理、机器视觉和医学影像等方面的应于压缩、视频处理、机器视觉和医学影像等方面的应用。应用。应用。应用。 图像和视频处理库包括下面几种类型的函数:图像和视频处理库包括下面几种类型的函数:图像和视频处理库包括下面几种类型的函数:图像和视频处理库包
274、括下面几种类型的函数: 压缩和解压缩压缩和解压缩压缩和解压缩压缩和解压缩 图像分析图像分析图像分析图像分析 图像滤波和格式转换图像滤波和格式转换图像滤波和格式转换图像滤波和格式转换2024/9/192024/9/19100100DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 4.5.2 C55x4.5.2 C55x4.5.2 C55x4.5.2 C55x的图像
275、、视频处理库的图像、视频处理库的图像、视频处理库的图像、视频处理库 图像和视频处理库由头文件图像和视频处理库由头文件图像和视频处理库由头文件图像和视频处理库由头文件imglib.himglib.himglib.himglib.h、包含一个、包含一个、包含一个、包含一个图像例子的头文件图像例子的头文件图像例子的头文件图像例子的头文件image_sample.himage_sample.himage_sample.himage_sample.h、小波函数的头文、小波函数的头文、小波函数的头文、小波函数的头文件件件件wavelet.hwavelet.hwavelet.hwavelet.h、支持大存储
276、器模式的目标库、支持大存储器模式的目标库、支持大存储器模式的目标库、支持大存储器模式的目标库55ximagex.lib55ximagex.lib55ximagex.lib55ximagex.lib、支持小模式的目标库、支持小模式的目标库、支持小模式的目标库、支持小模式的目标库55ximage.lib55ximage.lib55ximage.lib55ximage.lib和和和和源文件库源文件库源文件库源文件库55ximage.src55ximage.src55ximage.src55ximage.src组成,组成,组成,组成, 例子程序和链接命令文件在例子程序和链接命令文件在例子程序和链接命令
277、文件在例子程序和链接命令文件在examplesexamplesexamplesexamples子目录下。子目录下。子目录下。子目录下。 2024/9/192024/9/19101101DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 下面给出下面给出下面给出下面给出IMGLIBIMGLIB中一个调用柱状图函数的例子中一个调用柱状图函数的例子中一个调用柱状图函数的
278、例子中一个调用柱状图函数的例子: : #include #include #include #include #include #include #include imagesample.h #include imagesample.h #define MAX_PIXEL_VALUE 256 #define MAX_PIXEL_VALUE 256 #define WIDTH 128 #define WIDTH 128 #define HEIGHT 128 #define HEIGHT 128 void main void main()()()() int i int i int size in
279、t size 双击安装图像和视频处理库双击安装图像和视频处理库双击安装图像和视频处理库双击安装图像和视频处理库C55xIMGLIB.exeC55xIMGLIB.exe文文文文件,选择件,选择件,选择件,选择CCSCCS安装的目录即可完成图像和视频处理安装的目录即可完成图像和视频处理安装的目录即可完成图像和视频处理安装的目录即可完成图像和视频处理库的安装。安装后的库位于库的安装。安装后的库位于库的安装。安装后的库位于库的安装。安装后的库位于tic5500imglibtic5500imglib子目录子目录子目录子目录下。下。下。下。 4.5.2 C55x4.5.2 C55x4.5.2 C55x4.
280、5.2 C55x的图像、视频处理库的图像、视频处理库的图像、视频处理库的图像、视频处理库2024/9/192024/9/19102102DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用第第第第第第4 4 4 4 4 4章章章章章章 C55xC55xC55xC55xC55xC55x处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计处理器的软件设计 从上面给出的例子可以看到,调用从上面给出的例子可以看到,调用从上面给出的例子可以看到,调用从上面给出的例子可以看到,调用IMGLIBIMGLIBIMGLIBIMGLIB库需要库需
281、要库需要库需要包含包含包含包含imagelib.himagelib.himagelib.himagelib.h,并在工程中加入,并在工程中加入,并在工程中加入,并在工程中加入55ximage.lib55ximage.lib55ximage.lib55ximage.lib或或或或55ximagex.lib55ximagex.lib55ximagex.lib55ximagex.lib库。库。库。库。 sizesize = WIDTH*HEIGHTsizesize = WIDTH*HEIGHT input = &goldhill00; input = &goldhill00; output = ou
282、tput =(int *int *)mallocmalloc(size_tsize_t)()()()( MAX_PIXEL_VALUE*sizeofMAX_PIXEL_VALUE*sizeof(intint); ; / / 初始化柱状图初始化柱状图初始化柱状图初始化柱状图 for for(i=0; iMAX_PIXEL_VALUE; i+i=0; iMAX_PIXEL_VALUE; i+) outputi = 0; outputi = 0; histogram histogram(input,output, sizeinput,output, size); ; 2024/9/192024/9/19103103DSPDSP原理及应用原理及应用原理及原理及应用原理及应用原理及应用应用原理及应用原理及应用