计算机图像导入DM642目标板的方法尝试
2014-12-18更新
VLIB中的读取本地BMP文件来进行处理的例子,更简单。
2014-11-05更新
DM6437支持读取BMP文件进行处理,实现代码也简单。不过要做视频处理还是得用视频口采集模拟视频。
利用DSP做数字信号处理,完成了算法的编程后,还必须利用一些现有的测试数据去测试程序,看处理后的结果是否正确,符合预期。基于DM642的数字图像处理同样需要标准的测试图像来做算法的验证。这样才能更科学地评价运行在DSP上的程序的性能。然而,基于DSP的图像编程环境与VC和MATLAB不同,不支持将计算机硬盘上的BMP,JPG格式的图像文件直接导入目标板处理。因此,将计算机硬盘中存储的标准测试图像导入DSP目标板,需要相对复杂一些的办法。
1 文件输入输出(File I/O)
文件作为信号流可以输入DSP目标板。一个数据文件可以加载到目标板的任何有效地址。但是这个数据文件必须为CCS识别的.dat格式文件。因此,我们需要将现有的测试图片文件格式做相应的转换。
CCS支持的.dat文件的头信息遵循以下语法:
定数
数据格式
起始地址
页类型
数据块大小
定数固定为“1651”,数据格式可以选择“1”(十六进制整型)、“2”(十进制整型)、“3”(十进制长整型)、“4”(十进制浮点型)。起始地址为存储的地址,页类型和标示为程序或者数据。
比如一个.dat文件
1651 1 800 110
0x0000
0x0000
0x0000
0x0000
0x0000
0x0000
0x0000
0x0000
0x0000
0x0000
当使用CCS数据文件格式来做文件的输入/输出时,任何输入到FileI/O 对话框中的信息(地址和长度信息)都将自动地改写CCS数据文件的头信息。只要文件头包括了值1651 1 0 0 0。将BMP格式或者JPG格式的图片文件转换为CCS支持的.DAT文件后,即可通过CCS菜单上的load data功能实现图像的导入。
当DSP目标板不运行程序时,我们可以直接静态导入图片并显示。
步骤如下:
在CCS2.2环境下:
(1) 选择File→Data→Load命令,弹出Load Data对话框。
(2) 在Loading File into Memory对话框中,指定希望加载数据的地址和数据块的长度。
图像导入完毕后,可以利用菜单里的View菜单查看已经导入的图像。
图1 View-Image设置对话框
设置好如图1所示对话框中的选项后,点击OK。一般经过约半分钟的等待后,图像可以完整的显示出来。
图2 ccs显示的图片
2 当DSP目标板运行程序时也可以导入一定尺寸大小的.dat图片文件。因为CCS允许从PC文件中向实际的或仿真的DSP目标板发送或接收数据。这种文件的I/O特性用到了探针点的概念,从而在程序中设定的探针点提取或注入样本,或读取存储器内容(类似于断点的设置)。当程序执行到探针点处,所连接的目标(可以是一个文件、图形)就被更新,程序继续执行。
在CCS2.2环境下:
步骤如下:
(1) 把光标移至希望设置探针点的位置,设置探针点。这个探针点会告诉CCS调试器,用户希望何时从该文件输入/输出数据。也就是说,一旦代码执行到该点处,CCS调试器就会更新连接在该探针点上的文件。上述工作一结束,代码继续执行。
(2) 选择File→File I/O命令。File I/O对话框出现,提示指定文件的信息。选择File Input表或者File Output表。
(3) 在文件输入表或者文件输出表中单击Add File按钮,弹出对话框。
(4) 在File I/O对话框中插入一个文件。在Address和Length字段输入适当的值。单击OK按钮。
但是这种运用探针点输入文件的方法只能导入规定格式的文件后缀名为.dat的文件,否则目标板无法识别。文件I/O不支持实时数据传输。而且文件大小也有苛刻的限制。通过格式转换为.dat的图像大小不能超过80×80。而尺寸小于80×80的图像已经不能作为良好的测试图像了。综上所述,这种方法具有较大的局限性。
2通过以太网传输
当DSP目标板与计算机通过以太网互联时,我们可以通过以太网将计算机上的测试图片发送至DSP目标板。与第一种方法相比,这种方法优点在于利用了以太网口,速度快。第一种方法则受限于仿真器的性能,导入数据的速度较慢。
这种方法缺点在于编程相对复杂。由于需要用到网络传输任务,所以必须采用DSP/BIOS下的多任务框架编程(RF5框架)。无论采用何种网络协议,都必须要编写好PC机端和DSP端网络收发程序。
一般收发图像文件的过程如下:
DSP目标板和PC机网络端程序启动(启动顺序和编写的程序有关)。DSP目标板向PC机发送已连接,等待数据接收的信号。PC机端手动选择好要发送的图片文件,点击发送。DSP目标板接收数据并作相应处理。
3其它方法
我尝试过的方法还有直接在程序源文件中建立一个大数组,用图像数据直接初始化这个数组。然后让程序直接处理这个数组来实现图像处理。但是CCS编译器编译失败,提示源文件大小超限。因为即使图像尺寸只有100×100,那么变成数组也有10000个元素。目前我的工作都是在CCS2.2版本下的。据网上所查资料,CCS高版本有load/store memory进行数据存取,或者直接在代码中直接#include实现文件输入。目前尚未证实以上方法。