TMS320C6678开发笔记---image_processing例程

14节  image_processing例程

14.1节  代码与资料

  • 代码位置:C:\ti\mcsdk_2_01_02_06\demos\image_processing
  • 主要参考例程:image_processing_evmc6678l_master和image_processing_evmc6678l_slave
  • 参考资料:

C:\ti\mcsdk_2_01_02_06\demos\image_processing\docs\image_processing_demonstration_release_notes.html

https://processors.wiki.ti.com/index.php/MCSDK_Image_Processing_Demonstration_Guide

 

XDC使用方法参考文档:CCS help文档 很详细

http://rtsc.eclipseprojects.io/docs-tip/XDCtools_User%27s_Guide

通过XDC包含的软件包版本号,在ti安装目录下查找安装包位置,最终确定调用函数的c文件

Building an OpenMP Application

http://downloads.ti.com/mctools/esd/docs/openmp-dsp/building_openmp_app.html#using-ccs

 

14.2节  工程介绍

主要是以此例程学习共享内存方式IPC核间通讯机制。例程包括master和slave两个工程,  其中master烧写到core0,slave烧写到core1—7中。

 

14.3节  工程编译

14.3.1 编译通过组件版本

  • master工程编译通过组件版本:
/*
 * CCSv7 IDE
 * 7.4
 * 编译通过组件:
 * 依赖组件版本为
 * - XDCTools 3.23.4.60 *
 * - IMGLIB C66X 3.1.1.0 *
 * - IPC 1.24.3.32
 * - MCSDK 2.1.2.6 *
 * - MCSDK PDK TMS320C6678 1.1.2.6 *
 * - NDK 2.21.2.43 *
 * - SYS/BIOS 6.33.6.50 *
 * - UIA 1.0.3.25
 */
  • salve工程编译通过组件版本:
/*
 * CCSv7 IDE
 * 7.4
 * 编译通过组件:
 * 依赖组件版本为
 * - XDCTools 3.23.4.60 *
 * - IMGLIB C66X 3.1.1.0 *
 * - IPC 1.24.3.32
 * - MCSDK 2.1.2.6 *
 * - MCSDK PDK TMS320C6678 1.1.2.6 *
 * - SYS/BIOS 6.33.6.50 *
 * - UIA 1.0.3.25
 */

14.3.2 cfg文件修改

增加BIOS代码由工程自动生成:

14.3.3 编译中遇到的问题与解决

        image工程编译了好久才编译通过,其主要原因是因为各种包的版本问题,master与slave我编译通过的版本如上文所述(个组件其他版本也会编译通过,我并没有去验证),现总结一下以上版本确定的由来:

  • 最初编译出现的最多问题如下,后来分析是ti.sdo.utils组件与XDCtool冲突,ti.sdo.utils在ipc组件中,于是从ipc组件入手,先参看了ipc组件的版本,TI提供的3.0以上的IPC版本增加了linux的支持,此处没有使用到,所以选择了IPC 1.25.03.15版本,根据IPC版本,随之XDCtool与BIOS版本相继大致确定。

  • 接着出现一下内容,感觉是UIA组件问题,于是更换了UIA组件较低的版本为1.0.3.25,UIA组件依赖关系如下

  • 后来发现IPC 1.24.3.32也可以编译通过
  • 最后更换组件版本后,请rebuild整个工程

14.4节  代码修改

  • 电脑ip地址设置为192.168.2.101,开发板地址为:192.168.2.100
  • 代码在创龙开发板上跑,网络需要修改才可以跑通:

① 修改SGMII时钟

C:\ti\pdk_C6678_1_1_2_6\packages\ti\platform\evmc6678l\platform_lib\src\evmc6678_phy.c

② 将DHCP去掉,使用静态IP方式

  • 代码在公司板卡上跑,网络修改代码主要是网络桥片5396和Emac0的支持,下文网络例程中有详细介绍。

14.5节  工程分析

例程包括master和slave两个工程,  其中master烧写到core0,slave烧写到core1—7中。

14.5.1 程序循环处理逻辑

 

程序处理逻辑如下:

  • 主核(core0):

1、主核工程通过cfg配置文件,创建master_main和slave_main两个task。(cfg配置文件学习可以参考创龙出版的BIOS视频与BIOS中文手册)

2、master_main中初始化NDK网络,创建web服务,初始化MessageQ相关部件等

3、web服务接收到的网页发送来的图片信息后,主核打开从核创建的8个MessageQ,填充MessageQ结构体信息(将图片数据分成8份,发给8个从核),然后将MessageQ发送到从核(core1---7)。

4、主核等待从核处理完图片数据的MessageQ,当收到从核发来的MessageQ后将8个处理完的图片数据组合,然后在通过NDK发到网页上。

  • 从核(core1---7):

1、主核工程通过cfg配置文件,创建slave_main一个task。

2、slave_main处理逻辑简单:启动后一直等待主核发送的MessageQ,收到后,处理部分图片数据,处理完成后,发送MessageQ通知主核。完成。

14.5.2 程序MessageQ相关分析

  • 参考:16.4.2 MessageQ原理与代码

 

14.6节  工程实验结果

  • 串口打印信息:

  • 网页界面(在浏览器直接输入板卡IP地址即可192.168.2.100)

14.7节  image_processing其他例程

14.7.1 image_processing_openmp_evmc6678l

  • 编译通过组件:
/*
 * CCSv7 IDE
 * 7.4
 * 编译通过组件:
 * 依赖组件版本为
 * - XDCTools 3.23.4.60 *
 * - IMGLIB C66X 3.1.1.0 *
 * - IPC 1.24.3.32
 * - NDK 2.21.2.43 *
 * - SYS/BIOS 6.33.6.50 *
 * - MCSDK 2.1.2.6 *
 * - MCSDK PDK TMS320C6678 1.1.2.6 *
 * - OpenMP BIOS runtime lib 1.1.3.02
 * - UIA 1.0.3.25
 */

image_processing_openmp_evmc6678l例程分析:

  • 该例程使用了openMP模式实现多核处理,对openMP方式并没有做过多深入研究,简单记录一下感想:感觉openMP多核机制是由编译器特定指令实现的,软件并不用关心多核通讯。
  • 程序处理逻辑:

1、程序启动后,创建网络task,main函数等待master_mbox_receive信号量。

2、在网络task中开启HTTP服务,(PC机通过网页登录到开发板,然后在网页上选择图片路径,点击preocess按钮,)开发板解析到图片数据后,发送master_mbox_receive信号量,然后等待master_mbox_send。

3、main程序收到master_mbox_receive信号后,对图像数据进行处理,(处理代码通过特定编译指令,实现了8核处理)处理完后发送master_mbox_send。

4、http进程收到master_mbox_send后,将处理后的数据发送到网页上。

 

  • 程序进程间的通讯使用了BIOS系统内部的邮箱机制
  • 多核处理代码如下:

14.7.2 image_processing_serial_simc6678

  • 该工程最简单:与简单单片机编程思想一致,采用标准文件读写的形式实现bmp文件的输入与输出,处理流程为:读取bmp文件---处理bmp数据---输出bmp文件---完成。
  • 通过该工程可以学习bmp图片数据处理算法。
  • 代码不再详细分析。

14.8节  创龙tl-image-processing例程

  • 创龙image例程也是对TI的image例程进行了整理,但核心思想还是TI的image思想,代码不再详细分析。

 

 

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值