C6678多核DSP开发——image_processing例程

C6678多核DSP开发——image_processing例程

前言:这篇学习笔记记录了在DSP上实现简单图像处理算法的image_processing例程。该例程在CCS安装时安装在目录下,主要实现了对图像的分割、灰度处理以及边缘检测。学会了调用和修改DSP例程以及图像处理基本程序框架。

1)打开CCS,import工程,目录为MCSDK\demos\image_processing,导入CCS中。注意目录下有好几个工程,我们选择serial版本的,只在一个核上实现bmp图像读取和简单处理。其他版本以后慢慢研究。


2)首先要检查include文件链接是否正确,所有文件是否都读取成功,读取失败会灰色显示。这里需要特别说明一下,图像处理工程用到了C6678的image.lib,所以必须要添加进来。添加include链接的方法为:选中工程,右键properties-build-C6000 compiler-include options,点加号就可以添加目录了。


3)images文件夹里放需要处理的图片,以及存放处理完成以后的结果图片。inc是用户自定义的.h文件,用来定义变量和函数。src文件夹里是用户写的函数,包括main函数。后面附各函数的简要说明。

4)添加目标文件,如helloworld一样,添加一个目标文件ccxml。

5)修改cmd文件,由于例程自带的cmd文件是用DDR3的,要针对自己的板卡做相应修改,我的板卡只有板上内存可以用,于是修改cmd文件。cmd文件修改见hello world。

6)关于内存使用特别说明:例程自带图片为618K,测试2M以下内存处理图片时会报错,显示无法为图片处理过程中的某些环节数据创建内存。修改section左右字段都在SHRAM(4M)后,问题依然存在,后研究发现分配内存是在heap内分配的(malloc函数在heap上分配连续的内存),故必须用-heap关键字分配出2M以上内存以供使用,故本例中用了3M。


7)程序读取和处理BMP图片格式有严格要求,必须为8bit或者24bit。我用美图秀秀处理之后的图片格式为32bit,无法处理。最后发现PS和画图制作的图片均为标准24bit的,可以应用,但由于本例仿真时是通过JTAG读写图像数据的,速度极慢,所以原则上图像大小不要太大,500K以下为好。


8)debug时选择一个核即可,我选了C6678_6第7个核,没有为什么,我愿意而已。处理结果如下图所示:


9)部分代码分析:

main函数里主要完成打开图片文件(fopen),读取图像数据(fread),调用图像处理函数(mc_process_bmp(edge_detection,&raw_image, &out_raw_image, 8, &processing_time);),将处理完的图像出具写入新文件(fwrite)。处理完的数据存放在raw_image.data中。

mc_process_bmp  图像处理

bmp_read_header  读取图像header程序,用以得到图像数据帧头

mc_fill_slice_info  将图像分割为8片处理

process_rgb_image  处理rgb图像算法

convert_rgb_to_Y   rgb转YUV函数

write_gray_bmpfile  得到一个灰度图像数据

10)get的其他调试技巧

读取程序运行时间有两种办法:

a.直接在CCS里看:ccs-run-clock-show,可以在正下方显示当前clock数,enable之后开始计数,disable之后停止,可以看到一共有多少个clock,在知道DSP工作时钟的前提下可以得到运行的时间:time = clockNUM/f(频率)。

b.编程实现:应用DSP的定时器,向工程里添加tsc_h.asm文件,在程序里定义和调用相关函数即可实现计时。

void     TSC_enable();

unsigned long long TSC_read();

double           processingTime;

unsigned long long timer0, timer1;

TSC_enable();

timer0 =TSC_read();

timer1= TSC_read();

processingTime     += (double)(timer1 - timer0)/1000000.0;

printf("Processingtime: size: %f ms\n", processingTime);

  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: dma_performance_demo是一个用于演示DMA性能的示例程序,用于测试DMA传输的速度和效率。 首先,你需要将该示例程序下载到你的开发板或芯片上。然后,根据你使用的开发环境,打开项目文件。 在示例程序中,你可以看到有几个主要的函数和变量。首先是初始化函数,它用于配置DMA控制器和其他必要的寄存器。你需要根据你的硬件平台和需求进行相应的配置。 然后是主要的演示函数,它会执行一系列的DMA传输操作。在这个函数中,你可以看到通过DMA传输数据的过程,包括设置源地址和目的地址,设置传输长度等。 在执行DMA传输之前,你可以选择先填充源数据,以模拟实际的应用场景。然后,通过调用DMA传输函数,开始进行DMA传输。 在传输完成后,你可以通过比较源数据和目的数据来验证传输的正确性。通过计算传输时间和传输速度,你可以评估DMA传输的性能。 最后,记得在程序结束时释放DMA资源,并根据需要进行清理工作。 总结来说,使用dma_performance_demo例程,你需要进行硬件的配置和初始化,设置传输的源地址和目的地址,进行数据的填充和传输,验证传输的正确性,并评估DMA传输的性能。这个例程对于测试和优化DMA传输效率非常有帮助。 ### 回答2: dma_performance_demo例程是一个用于测试DMA性能的示例程序。下面是如何使用它的步骤: 1. 首先,您需要在您的开发环境中打开dma_performance_demo例程的源代码文件。您可以在SDK中找到这个例程的文件夹。 2. 打开源代码文件后,您会看到示例程序的主要函数和一些设置。 3. 在主函数中,您可以通过修改一些参数来配置DMA的工作方式。例如,您可以更改源地址和目标地址,以及要传输的数据大小。 4. 配置好参数后,您可以执行示例程序,以便开始测试DMA的性能。 5. 示例程序将开始执行DMA传输,并计算DMA传输所需的时间。 6. 一旦DMA传输完成,示例程序会将传输所需的时间以及传输速度打印出来。 7. 您可以根据打印出来的结果来评估DMA的性能。 请注意,使用dma_performance_demo例程测试DMA性能时,您应该根据您的具体硬件和应用场景进行适当的参数配置。此外,示例程序还可能提供其他有用的函数或方法来进行更详细的性能测试和评估。 这就是如何使用dma_performance_demo例程来测试DMA性能的基本步骤。希望这个回答对您有帮助。 ### 回答3: dma_performance_demo是一个用于测试DMA性能的示例程序。它提供了一种简单的方法来测试DMA传输的速度和效率。 使用dma_performance_demo可以按照以下步骤进行操作: 1. 确保你的开发板中包含DMA控制器和相应的外设模块,这些模块可以进行DMA传输。参考开发板的用户手册以了解是否支持DMA功能。 2. 下载和编译dma_performance_demo源代码,并将生成的可执行文件烧录到你的开发板中。 3. 运行dma_performance_demo程序。在程序启动后,它将提示你选择DMA传输的方向(从外设到存储器,或者从存储器到外设)。根据你的需求选择相应的选项。 4. 程序执行后,它将开始进行DMA传输,并在完成后显示传输所花费的时间和传输速度。 5. 你可以根据实际的需求,调整示例程序中的参数,比如传输数据的长度、存储器和外设的地址等,来测试不同情况下的DMA性能。 注意事项: - 在使用dma_performance_demo时,确保你已经正确配置了DMA控制器和外设,以确保DMA传输的正常运行。 - 根据你的开发板和外设的特性,可能需要进行额外的设置和配置。参考相关文档和资料,确保你的系统正确地支持DMA传输。 - DMA传输的性能受到多个因素的影响,包括硬件设计、数据长度、传输方向等。因此,在测试和评估DMA性能时,你可能需要进行多次测试,并对结果进行平均和比较。 总之,dma_performance_demo是一个用于测试DMA性能的示例程序,通过按照上述步骤使用它,你可以评估DMA传输的速度和效率,并对系统进行相应的优化和改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bjtuwayne

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值