ARM Cortex-A8/A9开发板 | ARM11开发板ARM11开发套件 | ARM9开发板ARM9开发套件 | 飞思卡尔I.MX28I.MX6开发板 |
tiny210/mini210开发板 | mini6410开发板/套餐 | Tiny6410开发板无线套件 | mini2440开发板/套餐 | micro2440开发板带核心板 | 友善开发板配件 模块 | QQ2440 V3 SBC-2410X |
FL2440 OK2440-IV V4 | OK2440-III OK2440V3 | TE2440-II TE2440V2 | OK6410 S3C6410 ARM11 | FL6410/OK6410B ARM11 | TE6410 S3C6410 ARM11 | TE-9263 AT91SAM9263 | 开发板配件 模块和其他 |
Xilinx开发板/fpga开发套件 | altera开发板/fpga开发套件 | 基于FMC FPGA/DSP子卡 |
BeagleBoard原厂开发板 | PandaBoard原厂开发板 |
TI DM3730 DevKit8500D | TI系列 omap3530开发板 | ATMEL系列 开发板 | Samsung系列 开发板 | 开发板配件-仿真器 模块 | NXP LPC3250 mini3250 |
Tiny210 三星S5PV210 | Mini210/Mini210s开发板 | Tiny4412开发板Cortex-A9 | Tiny6410开发板 ARM11 | mini2440开发板 ARM9 | micro2440开发板 ARM9 | mini6410开发板 ARM11 | 友善ARM开发板配件 模块 |
keil ARM仿真器/开发工具 | STM32开发板 Cortex-M3 | NXP LPC开发板Cortex-M3 | ATMEL系列 ARM开发板 | Luminary EKK8962开发板 | Freescale i.MX31开发板 | 三星s3c2440 s3c6410开发板 |
FL2440 OK2440-IV V4 | OK6410 S3C6410 ARM11 | FL6410/OK6410B ARM11 | OK210/-A Cortex-A8 | TE2440-II TE2440V2 | TE6410 S3C6410 ARM11 | TE-9263 AT91SAM9263 | ARM开发板配件 模块等 |
Real6410开发板/套餐 | Real210开发板/Real2410 | WIFI GPS GPRS模块摄像头 |
Xilinx开发板/开发套件KIT | Altera开发板/开发套件KIT | 配套模块 |
NXP LPC开发板 ARM7 | Cortex-M3 STM32开发板 | 最小系统模块类(初学者勿选) | 开发工具 仿真器 调试器 | TFT液晶屏LCD 液晶模块 |
DM642开发板/DM642实验箱 | DM6446开发板/DSP实验箱 | DSP仿真器 液晶屏 摄像头等 |
DM3730/AM3715/AM3359 | OMAP3530AM1808AM3517 | 飞思卡尔Cortex-A9开发板 | ATMEL系列ARM开发板 | NXP LPC3250 LPC1788 | Samsung系列ARM开发板 | STM32系列F207/F407 | ARM开发板配件-仿真器 模块 |
Realv210 S5PV210开发板 | Real6410开发板 ARM11 | WIFI GPS GPRS模块摄像头 |
NXP LPC开发板 ARM7 | Cortex-M3 STM32开发板 | ARM小系统模块(初学勿选) | 开发工具 ARM仿真器 调试器 | TFT液晶屏LCD 液晶模块 |
keil ARM仿真器/开发工具 | STM32开发板 Cortex-M3 | NXP LPC开发板Cortex-M3 | ATMEL系列 ARM开发板 | Luminary EKK8962开发板 | Freescale i.MX31开发板 | 三星s3c2440 s3c6410开发板 |
Exynos4412开发板A9四核 | UT-S5PV210 S5PC100 | UT-S3C6410开发板 ARM11 | idea 6410开发板 ARM11 | UT-S3C2450开发板 ARM9 | UT-S3C2416开发板 ARM9 | UT-S3C6410核心板 工控 |
Xilinx开发板 FPGA开发套件 | altera开发板 FPGA开发套件 | FMC模块 配件 下载线 |
DM642开发板/DM642实验箱 | DM6446开发板/DSP实验箱 | DSP仿真器 液晶屏 摄像头等 |
s3c2410 ARM9 FS2410 | s3c2440开发板 ARM9 | s3c44B0开发板 ARM7 | s3c6410 2450 2443/13 | PXA270 PXA320 PXA255 | Atmel 9200 9261 9G20 | Philips NXP开发板YL-LPC | FS-EP9315开发板ARM9 | LCD液晶屏TFT真彩/触摸屏 | ARM仿真器/仿真调试工具 | ARM开发板配套ARM核心板 |
三星s3c2410 s3c44B0 | 三星s3c6410 s3c2443 | Intel PXA270 PXA320 | UP-CUP OMAP5910平台 | FPGA Xilinx altera平台 | 配件-仿真器 模块 液晶屏LCD | 龙芯开发板UP-DRAGON-I | 物联网教学科研设备 | EDA/FPGA/SOPC教学科研 |
utu2440-F-V4.5 含核心板 | utu2440-S-V4.1 单板结构 | YC2440-F-V5.1开发板 豪华型 | YC-ePC-A系列人机界面 | Mars-EDA套件CPLD FPGA | 触摸屏LCD 摄像头 WI-FI模块 |
ARM开发板/开发平台 | FPGA开发板/开发平台 | 编程器/烧写器下载器烧录 | ZLG 仿真器ARM FPGA DSP | ZLG周立功逻辑分析仪 |
DSP初学者开发套件(DSK) | DSP仿真器/仿真系统 | DSP开发板/DSP试验箱 | DaVinci系列多媒体平台 | Xilinx FPGA大学计划产品 | SEED教学实验系统 | FPGA/DSP FPGA开发板 | TI原厂开发板套件/CCS软件 |
ARM开发板 | XSCALE开发板 | ARM仿真器 | SOPC开发板 | DSP开发板 | 达芬奇系列DSP开发平台 | DSP仿真器 | DSP实验箱 | DSP专业研究平台 | ARM实验箱系列 |
广嵌实验室项目产品 | GEC2440/GEC6410开发板 |
泰克Tektronix示波器 | 普源RIGOL示波器 | USB虚拟示波器 |
UT-S5PC100 UT-S5PV210 | UT-S3C6410开发板 ARM11 | idea 6410开发板 ARM11 | UT-S3C2450开发板 ARM9 | UT-S3C2416开发板 ARM9 | UT-S3C6410核心板 工控 | 开发板模块wifi gps等 |
EMA OMAP3530开发板 | EMA OMAP 3530核心板 |
三星s3c2410 s3c44B0 | 三星s3c6410 s3c2443 | Intel PXA270 PXA320 | UP-CUP OMAP5910平台 | FPGA Xilinx Altera平台 | 配件-仿真器 模块 液晶屏LCD | 龙芯系列 UP-DRAGON-I |
utu2440-F-V4.5 含核心板 | utu2440-S-V4.1 单板结构 | YC2440-F-V5.1开发板 豪华型 | 触摸屏LCD 摄像头 WI-FI模块 | Mars-EDA套件CPLD FPGA | ePC系列工控一体机ARM9 A8 |
ARM开发板/开发平台 | FPGA开发板/开发平台 | 编程器/烧写器下载器烧录 | ZLG 仿真器ARM FPGA DSP | ZLG周立功逻辑分析仪 |
DSP初学者开发套件(DSK) | DSP仿真器 | DSP开发板 | DSP实验箱 | Xilinx FPGA大学计划产品 |
ARM开发板 | XSCALE开发板 | ARM仿真器 | SOPC开发板 | DSP开发板 | 达芬奇系列DSP开发平台 | DSP仿真器 | DSP实验箱 | DSP专业研究平台 | ARM实验箱系列 |
ARM开发板S3C6410等 | Cortex-A8/ARM11仿真器 | ADSP Blackfin开发板 | FPGA Spartan-3E开发板 |
GEC2410开发套件ARM9 | GEC2440开发套件ARM9 |
泰克 示波器 |
DSP[1](DigitalSignalProcessor)自从诞生以来,由于其在数字信号处理惩罚方面专用的结会商硬件逻辑,比如,处理惩罚器利用差别于平凡处理惩罚器的哈佛布局,独特的桶型移位器等,使其在某些特定的范畴的应用得到了飞速的生长。
1 引 言
DSP在某些成果上与平凡的嵌入式处理惩罚器相似,因而通常以传统嵌入式处理惩罚器编程的要领来编程,即,利用C语言和汇编语言殽杂编程,直接访问硬件外设,并且由于性能的缘故起因,总是很少利用标准操纵体系的支持。如许,像传统的微处理惩罚器一样,险些没有零售的DSP中间件可用。然而,DSP又差别于通用的嵌入式处理惩罚器,他是用来运行巨大的信号处理惩罚算法的。这些成熟的算法通常是多年的博士研究的结果。
由于DSP算法缺乏同一的标准,算法从一个体系移植到别的一个体系时,或一种算法要应用于多个体系中时,通常要做很大的窜改。算法的承继性和重用性都很差,因此基于DSP的产品上市时间每每以年,而不因此月来谋略。对一个产品开辟商来说,不大概仅从一个算法开辟商那边购买全部所需的DSP算法;另一方面差别算法开辟商的算法产品由于实现魄力魄力差别,相互不兼容。因此,通常出现如许的环境,体系集成商不得不选择能提供他们所需的大部分算法的算法开辟商,并与他们会商来开辟所需的其他算法。
为变化这种状态,TI公司推出了一套编写和利用DSP算法的标准,让体系集成商可以快速集成和利用已有的商用DSP算法软件,可以大大淘汰基于DSP产品的上市时间。
2 DSP算法标准的相干背景和见解
2.1 通用算法的特性
由于DSP应用非常遍及,支持数字信号处理惩罚器的平台或操纵体系又很多,这些巨大的平台对付算法标准就提出了很高的请求。一个算法要真正实现“即插即用”或应用于多种操纵体系,他必须具备几个根本的特性。
(1)算法对付应用步伐透明,雷同的算法可以用于任意应用步伐。
(2)算法既能用于静态体系,又能用于动态体系。
(3)算法必须能用二进制情势分发,即能以目标文件发行。
(4)算法既能用于单任务,也能用于多任务,即
(5)算法的利用不必要重新编译,但可以重新连接和配置。
(6)算法是C语言可调用的。
(7)算法独立于任意特别的I/O配置。
算法要具有上述特性,在编码上就必须依照肯定的范例,在处理惩罚器资源的利用上,也必须作一些限定,这些范例和限定便是算法标准。有关算法标准的细致规定,可参阅文献[1]。
2.2 算法标准的分级
在算法标准出来之前,DSP算法开辟商已开辟了大量的算法,有些算法在肯定程度上依照了标准;有些算法由于应用范畴的差别,移植(指雷同DSP,差别软件平台)时的限定差别,这就提出了算法标准的等级题目。通常算法标准分为4级,每一级标准对算法编写的请求和限定差别,级数越高,限定越严格,此中第4级是详细到种种特别行业的。比如,语音编码器有语音编码器的行业标准和特性;电机控制算法有电机控制方面的特别请求等等,云云过细的规定不大概上升为通用的标准,以是通用的算法只要依照前三级即可。下面是各等级分别包括的范畴:
第1级 包括实用于种种DSP布局,而不管应用范畴的种种算法的编程准则。险些全部近来开辟的软件模块都已经依照了这些准则,以是该级别只是将他们范例化。
第2级 包括可使全部算法调和运行于单一体系的编程规矩和准则。比方,约定用于数据内存算法和外部标示的同肯定名等。别的,还规定了算法怎样封装的范例。
第3级 包括详细DSP系列的算法编程准则。如C54XX,C6X等。如今关于处理惩罚器资源的利用还没有同一的准则。由于差别的DSP布局差别,因而总有偏离准则的环境,标准请求算法提供商必须明白地在相干键文件和文档中标注这种毛病。
2.3 基于DSP算法标准的通用软件结会商相干见解
算法标准如安在实际中应用,TI公司给出了一个通用的软件编程思路。将一个基于DSP的软件分成了多少模块,每一个模块都有严格的定义,使得模块之间有明白的边界。图1是一个基于主机-目标机的软件布局图(图中主机端没有画出)。从中可以明白地看到通用的DSP步伐分为4个部分:FrameWork,ALG,Core run time Support,CMDand Status。
FRAMEWORK为应用步伐框架,是一些支持 DSP运行的平台或操纵体系,比方pSos,vxworks,UC-OS-II等;ALG为独立于处理惩罚器的DSP算法;Core run time support为运行支持内核,比方rts54.lib等;ALG为独立于处理惩罚器的DSP算法; Core run time support为运行支持内核,比方rts54.lib等;CMD为主机发给目标机的下令,Status为目标机返回给主机的状态信息。主机和目标机模式只在开辟状态或某些控制场合利用,大部分的DSP软件都是独立于主机运行的。以是我们只讨论独立于主机的事变模式,下面分别细致讨论上述几方面的作用和相互干系。
(1)应用框架(FrameWork)
应用框架通常是一个与配置相对独立的I/O子体系,即他提供一个通用的I/O接口,并规定算法和应用步伐怎样利用这个接口。全部大概的外设都以接口情势存在,算法通过框架提供的接口访问外设。典范的应用框架便是操纵体系。比方,Windows操纵体系,应用步伐不克不及直接访问串口、并口等外设,只能通过Windows操纵体系提供的API(应用步伐接口)与外设相互作用。任意外设只要提供接口(驱动步伐)就可以接入操纵体系。
在DSP和微处理惩罚器范畴,最闻名的应用框架便是Wind River公司的pSos和VxWorks操纵体系。有些应用框架由于应用范畴的差别大概应用方案比较大略,仅仅提供一些根本的I/O成果,难以称为操纵体系。比方,CCS(Code Compose Stdio)中嵌入的DSP/BIOS(根本输入输出体系)及时内核。框架的根本成果便是提供数据出入的接口。
别的,框架还定义了内部应用模块的等级,也便是操纵体系中任务的优先级。通过优先级,框架可以实现对模块的控制,比如停止模块或规复模块的运行,或决定哪个模块先运行,这便是操纵体系中所谓的任务调理。
应用框架认真I/O接口和任务的调理,实质上便是基于硬件平台之上的软件平台。
(2)算法(ALG)
算法是一种纯粹的数据更改器,只是大略地吸取 94和处理惩罚输入的数据。算法获取数据通常有两种要领,这两种要领均离不开应用框架的支持。一种是停止输入方法,算法通过应用框架的停止办事函数得到数据;一种是查问方法,应用框架提供一个周期性的函数,通过该函数周期性地在某个端口得到数据。在全部环境下,算法在体系中被计划成独立于I/O配置的。即,算法不克不及直接访问外设寄存器的地点,也便是在算法中不克不及出现外设的物理地点,只能通过指针参数或模块接口指针将地点传到函数中。
这一实现通常要寄托一个I/O接口模块。通过这种要领,可以减小对框架的依赖,进步算法的通用性。一个算法可以有多种实现,实现要领的差别意味着性能的差别,良好的算法实当代码短小,实行服从高。而这两者通常不可兼得,实行服从的进步,通常以增长代码长度为价格,这意味着必要更多的存储空间。反之,算法实当代码小,实行性能通常会低落。同时,差别的算法实当代价也不雷同。这给了算法集成商或开辟商更多的选择余地。
固然,性能和算法的这种折衷,必须以依照算法标准为条件,不然,算法不可相互“更换”,算法的多个实现也就失去了意义。
(3)运行支持内核
为了使算法餍足可重入、与I/O外设独立以及可调试性的最小需求,算法必要一系列总是稳固存在的内查究事。比如C语言运行支持内核。该内核提供根本的打印函数printf()、内存办理函数memcpy()、字符串函数、时间函数等标准C语言的根本运行环境。该内核的相干的函数颠末封装,形成一个支持库rtsxx.lib。xx代表处理惩罚器的范例。
由于大部分的算法仍旧是用汇编语言天生的,内核提供的很多办事也必须得当汇编语言,并能用其访问。这也是标准C语言和汇编语言可以或许殽杂编程的底子。TIDSP运行支持内核还包括一个DSP/BIOS的子集,提供根本输入输出成果,该成果比标准C的根本输入输出函数实行速率快。别的,还附带一些对控制和状态寄存器微小操纵的子集,比方,设置溢出模式等。
算法、应用框架、运行支持内核各自的代码相对独立,相互作用,共同协作构成一个有效的应用软件。他们之间有各自的边界,在标准中有各自定义的成果范畴。算法只有相对独立于应用框架和运行支持内核,才华支持“即插即用”,才华在无需大量修改源代码的环境下,用一种算法更换另一种算法。
3 通用算法标准
TIDSP算法标准包括很多规矩和准则。一种算法为了实现与依照标准的其他算法相兼容,必须依照算法标准规矩,同时为了便于步伐的可读性和维护,也猛烈请求依照算法编写准则。算法标准共有34条规矩和多少条准则,细致环境请参阅文献[1],笔者偏重讨论算法标准中有关多任务的规定。
规矩1 全部的算法必须依照由于利用C编程语言而带来的运行时约定。
该规矩并不请求算法必须用C语言实现,实际上算法可以完全用汇编语言实现。但是,算法必须能在C语言中调用,同时,也必须依照C语言的运行时约定部分紧张的算法都不是仅用一个函数实现的,同其他巨大的软件一样,算法软件也是由很多内部函数构成。这些内部函数不必全部依照C语言的RTC,只需最顶层的接口函数依照C语言的RTC即可。同时,也要包管接口函数不会通过调用内部函数变化C语言的RTC。
规矩2 全部的算法在一个占先的环境下(包括时间片占先)具有可重入性。
该规矩比较抽象,必要先相识几个见解才容易明白。
“重入性”是一个步伐的属性,他允很多个线程同时利用步伐的雷同拷贝。简而言之,代码不具有影象性,雷同的输入参数不论在什么环境下得到的函数结果都雷同。
“占先[2]”是指应用框架或操纵体系具有依据模块或任务的优先级决定模块是否能被停止,并举行相应调理的本领,或指代码是否能被停止的特性。
由于应用框架的多样性,代码的可重入性变的非常巨大。硬件平台有单通道、多通道之分,应用步伐有多线程、多进程、多任务之分,应用框架有占先(又叫抢先)式环境和非占先式(通常指时间片轮讯)之分。在非占先环境中,算法函数可以自由地利用全局变量,不消担心由于函数在运行中被停止,从而导致的全局变量数据的紊乱。在占先的环境下,要是在算法函数内部利用了全局变量,并且函数修改了该全局变量的值,则该函数不具有重入性。由于算法自身并不克不及知道所应用的环境的“占先性”,以是算法必须包管在全部的环境下,算法具有可重入性。实际中,算法是否具有可重入性的查抄比较困难,因而,这必要算法开辟职员依照3条准则:
一是算法只能修改堆栈中的大概实例东西的数05据;
二是算法视全局数据和静态数据为只读数据;三是算法不克不及调用可自我修改的代码。
在多线程和多任务下,还可通过克制停止的要领,克制任务的占先,来包管餍足函数的可重入性。
规矩3 算法数据的引用必须是完全可重新定位的。也便是算法中不克不及有“硬编码”出现。
由于DSP应用步伐在末了天生可运行代码时,必须举行连接,在连接中对DSP代码举行存储空间分派,以是一个算法要是要顺利接入另一个体系,算法必须可以或许重新定位。这就请求算法中不克不及有“硬编码”存在。
所谓硬编码,便是一个具有详细的物理地点的代码。算法中一旦有了硬编码,导致代码只能牢固位于某一块或访问某一块内存,将使该算法不克不及重新定位,失去了可移植性。算法中对数据内存的访问,可以通过连接下令文件,定义一个标记,指向某一内存地区,当应用步伐必要将算法重新定位时,只在下令文件中修改标记指向的内存地点即可。
以上先容的是多任务算法编程中相对紧张的规定,限于篇幅,其他规定请参阅文献[1]。
4 算法标准在实际中的应用
笔者的硬件开辟平台是基于2片TMS320VC5402 DSP的自研发板,软件开辟平台是TI公司的CCS2.0,全部的算法利用ANSIC语言编写,框架应用步伐利用C语言和汇编语言的殽杂编程,算法先通过软仿真调试,再举行硬仿真在线及时调试,终极的算法将成为通用的算法,可移植到其他的数字信号处理惩罚器上。基于上述头脑,软件从算法标准的角度做了如下团体计划:
(1)软件算法和框架应用步伐相对独立。即,框架应用步伐是一个相对独立的模块,从AD转换器数据的征求、停止的调用都属于框架应用步伐的事变;算法仅对征求到的数据处理惩罚。算法是一个相对独立的模块。
(2)每一个算法都有一个头文件(.h)和一个实现文件(.C),整个算法模块有一个算法接口模块。算法头文件支端庄复包括成果,即头文件中用预处理惩罚指令做了防多重进入处理惩罚(#ifndef...#define...#endif)。
(3)全部对片内存储器的访问都定义了相应的寄存器指针或布局指针,并通过参数传入应用步伐,算法和步伐函数中不出现详细的寄存器地点,有效防备代码中有“硬编码”。
(4)全局变量要是是只读属性,即,只读取而不变化全局变量的值,则可以在函数中直接利用,不然,只能通过指针传入函数,函数体中克制直接修改全局变量的值,包管了函数的可重入性。
(5)串口和DMA的操纵有本身相应的接口文件,算法通过调用接口函数举行外设操纵。串口和DMA等外设的操纵由框架应用步伐控制。
依照DSP算法标准,对动态体系会有一些性能降落,但对静态体系没有明显的影响,笔者的体系采取的是静态要领,因而在实际体系中,性能变化不太明显。
5 结 语
TIDSP算法标准的出现,无论对算法提供商还是对算法集成商来说,在技能上都是一个进步。对如今繁杂的算法编写和市场应用是一个很好的范例,为DSP算法的开辟和利用提供了一个较为行之有效的标准。信托随着DSP的算法标准的渐渐推广,市场上DSP算法组件会越来越多,DSP的应用会越来越遍及。
参考文献
[1] TMS320 DSPAlgorithmStandard Rules andGuidelines.Texas Instruments Incorporated,2001.源码公然的及时嵌入式操纵体系[M].北京:中国电力出版社,1999.
博航网 www.broadon.net 版权所有
京ICP备10051899号-2 京公网安备110108006479号