新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于Blackfin561的JPEG2000 压缩算法实现及优化

基于Blackfin561的JPEG2000 压缩算法实现及优化

作者:时间:2009-12-11来源:网络收藏

提供有各种各样的微控制器型外设,包括UARTS、SPI、PPI控制器、支持PWM的定时器、看门狗定时器、实时时钟和一个无缝同步和异步存储器控制器。因而为设计师提供了巨大的设计灵活性,并最大限度地降低了终端系统成本。
(5)分层的存储器架构
支持改进的哈佛结构,该结构是具有分级的存储器结构的组合。BF56l器件的地址总线宽度为32位,可以访问4G字节的地址空间。Blackfin处理器的存储器架构在器件中可提供Level l(L1)和Level 2(L2)存储模块,并可以通过EBIU外接L3处理器(SDRAM、Flash等)。

本文引用地址:http://www.eepw.com.cn/article/152240.htm


3 系统设计
本系统主要数字图像的采集和处理。它有效利用了的专用视频接口PPI和其它丰富的接口资源,具有设计简单、便于软件编程的特点。图2所示其系统工作流程及连接框图。

由图2可见,本系统首先由CCD摄像头来采集图像,输入的模拟信号经ADV7183视频编码芯片转换成ITU一656格式的数字视频流,该视频流通过BF561的PPI传输到SDRAM。然后由DSP从SDRAM读入图像,并执行编码操作,最后将视频流输入到输出模块进行传输。输出模块由USB控制芯片ISPl362组成,可以系统和PC机的互连。FLASH用来存放加载文件LDR。


4
如果用户导入的Blackfin处理器的C代码能够兼容ANSI C语言,那么,就能直接在Blackfin上进行构建并执行这个“现成的”代码程序。但是结合嵌入式应用环境,时还需注意以下几点:
首先要注意不同的平台对数据类型的长度定义可能是不一样的。在程序中可以对数据类型使用typedef宏进行定义,如“typedef intINT32;”这样便于移植时更改。
其次,因为嵌入式系统中的存储空间有限,而且是分级的,且不同级别的处理器大小和运算速度均不同。因此,在定义变量时需要考虑其存放地址。通过section(“存储器段名”)语句可以将变量和代码放入指定地址。其中“存储器段名”可在ldf件中设置。
第三为了程序调用方便,PC平台下的C程序会经常使用大量的动态内存分配(如calloc、realloc、new等)。考虑到嵌入式系统的特点,即需要不停的循环处理,因此,应该用静态数组代替动态内存分配。这样不仅可以避免动态内存分配造成的内存碎片问题,同时存储结构也更加清楚明了。
此外,由于源程序中有许多文件操作,而嵌入式系统并不直接支持文件操作,所以应予以剔除,用读写数组的方式来替代。
最后应注意Visual DSP++兼容的C语言库函数。由于它不能识别malloc.h>等库文件名称,而calloc、malloc等动态内存分配函数均包含在stdlib.h>中。所以,若要使用malloc,只需在程序中包入stdlib.h>即可。注意以上几点,C语言源程序就可以在VisualDSP++下运行,从而实现其功能了。


5 程序
由于移植后的只是简单的实现了图像编码功能,而远不能保证其实时性,因而需要对其进行主要涉及浮点转定点运算、代码优化和存储器优化。
5.1 浮点运算转定点运算
Blackfin处理器是一款定点处理器。该处理器本身并不支持float、double等浮点数据类型,而只能通过仿真实现,所以,用Blackfln直接进行浮点运算是很费时的。因而应将小波变换及其它涉及浮点运算的模块全部定点化。
可以将浮点系数乘以一个尺度因子,使其变换成整数。然后在运算过程中再除以尺度因子,这样就避免了浮点操作。同时,Blackfin处理器是针对小数形式进行优化设计的,它提供了大量的运算指令,可以快速的执行定点和小数运算。若用汇编编写,则可以充分发挥处理器的性能,优化幅度更大。下面给出小波变换定点化的一段程序:



评论


相关推荐

技术专区

关闭