数字图像处理(二)
HX-5509开发板
算法编程 数字图像处理算法的编程要点 一般情况下,图像处理的算法在上机测试之前,应有一个明确的流程图,通常应先在matlab等仿真软件中测试跑通。 但并非不可以直接使用DSP进行实验,这取决于算法的复杂度,算法设计的正确性,以及对硬件的编程控制能力等等。 图像处理算法的设计应该符合一条从简单到复杂的基本原则。 首先,设计简单的算法来验证输入,输出数据的正确性; 其次,尽量采用c语言保证接口的通用型和可移植性,编写过程中不断调试,直到完成整个算法。
IMGLIB库 C5500提供了IMGLIB库,即图像/视屏信号处理算法库 该库函数是用汇编语言所编写,所以编译效率高,执行速度快;另外,这些库函数几乎包含了目前已经成熟的图像处理的部分算法,用户直接调用可以减少不必要的劳动,可以加快开发软件的设计速度。 该库主要分为三个部分,分别完成图像压缩,图像分析,图像滤波和格式转化等功能。 免费
图像处理算法的实现 在DSP处理器上实现图像处理算法的主要困难之一是图像处理需要的数据空间太大。 例如一幅150k左右的图像。在整个算法运行过程中,还需要存储一些临时的图像和数据。这样整个系统需要的存储空间是非常惊人的。 相比PC的资源来说,嵌入式系统中能够提供的资源是非常有限的,所以必须进行算法的简化。 在算法中主要难度又集中在图像的滤波增强部分(算法主要是大量的乘法和加法,这些地方使用恰当的汇编,可以减少10%~30%开销)。 在PC上执行算法不用考虑存储空间的分配问题,空间足够并且空间的分配是由操作系统来完成的。而在DSP中存储空间不够+手动分配。对于malloc等C内存分配函数分配的空间一般是在全局堆,而算法中比较大的局部数组变量,应该手动分配空间,这样可以保证空间分配的灵活性。
算法调度模块 堆栈段与数据段保持相连,这样可以扩大堆栈的实际容量,即使溢出,也不会使真正的溢出。 算法调度模块:在片内开辟一块执行算法代码的执行区,大小为SWAP_SIZE。算法代码放在片外,执行的时候由一个调度模块把一部分算法代码搬运到片内运行,执行完毕后再下一部分到片内运行,直到算法调用结束。 片外 片内
手动分配段#pragma 可以使用编程命令直接将代码或者数据分配到所要分配的段中:#pragma CODE_SECTION(symbol,"section name") #pragma DATA_SECTION(symbol,"section name") 例子: #pragma DATA_SECTION(bufferB,"my_sect") char bufferA[512]; char bufferB[512]; 编译结果: .globe _bufferA .bss _bufferA,512,0,0 .globe _bufferB _bufferB: .usect "my_sect",512,0,0 片外
手动分配段 对CCS内存模式的了解是我们写.cmd文件为程序合理分配空间的基础. 在程序的调试中,如果遇到了内存冲突的问题,CCS提供了可以在编译选项中选择生成一个.map的内存分配情况表,这样可以方便的查看哪部分的内存被分配满或者产生了冲突.
预定义 使用ccs的集成可视化配置来设置 在c代码中使用宏定义 #ifndef CHIP_5509 #define CHIP_5509 #endif