分享dsp多核ipc通信案例开发手册,本篇文章内容包含有shmipcbenchmark案例、qmssipcbenchmark案例、srioipcbenchmark案例。ti-ipc(inter-processor communication)组件提供与处理器硬件无关的api,可用于多核处理器核间通信、同一处理器进程间通信和设备间通信。ti-ipc支持messageq、notify和sharedregion等常用的ipc模块,支持shared memory、multicore navigator和srio三种传输方式。
本次测试板卡为tms320c6678开发板,它是一款基于ti keystone架构c6000系列tms320c6678八核c66x定点/浮点dsp,以及xilinx zynq-7000系列xc7z045/xc7z100 soc处理器设计的高端异构多核评估板,tms320c6678开发板每核心主频可高达1.25ghz,xc7z045/xc7z100集成ps端双核arm cortex-a9 pl端kintex-7架构28nm可编程逻辑资源,引出双路cameralink、双路sfp 光口、四路千兆网口、双路sata、双路pcie、四路usb、双路can、双路camera、hdmi in/out、lvds、lcd、rs485、rs232、micro sd、hpc fmc等接口。
基于rtos的多核ipc通信案例目录说明如下表,其中bin目录存放程序可执行文件,project目录存放案例工程源文件。
表 1
目录 | 文件/目录 | 说明 |
bin | xxx.out | 程序可执行文件 |
project | xxx.c | 程序源码文件 |
xxx.cfg | rtsc配置文件 | |
driver | 驱动文件存放目录 | |
system | 平台文件存放目录 | |
.ccsproject/.cproject/.project | ccs工程文件 |
本文档案例程序默认使用dsp端主频为1ghz的核心板,通过tl-xds200仿真器加载运行进行操作效果演示。请通过micro usb线将调试串口与pc机进行连接,打开串口调试终端securecrt并正确连接dsp端调试串口。
案例功能:c66xx_0核心向c66xx_1核心发送消息后,c66xx_1核心将收到的消息回传至c66xx_0核心。底层通过ipc的shared memory共享内存方式实现核间通信。
图 1
将程序可执行文件分别加载至c66xx_0~c66xx_1核心后,再依次运行c66xx_0和c66xx_1核心程序,dsp端串口调试终端将会分别打印c66xx_0核心向c66xx_1核心发送单个消息的往返延迟(由c66xx_0核心统计),以及c66xx_0核心以突发方式将所有消息发送至c66xx_1核心的数据吞吐量(由c66xx_1核心统计)。
图 2
图 3
初始化c66xx_0核心,并等待c66xx_1核心初始化完成与连接成功。
图 4
c66xx_0与c66xx_1核心分别创建messageq。
图 5
动态创建任务shmipcbenchmark。
图 6
注册heap_id,并分别打开另一核心的messageq。
图 7
测试c66xx_0核心至c66xx_1核心的消息传输往返延迟。
图 8
c66xx_0核心以突发方式将所有消息发送到c66xx_1核心,c66xx_1核心接收所有消息并统计数据吞吐量。
图 9
图 10
通过宏定义num_msgs_to_prealloc设置突发模式下的message发送数量,并同步修改program.global.shmsize的值大于(num_msgs_to_prealloc x 128)。
图 11
图 12 projectshmipcbenchmark.cfg
案例功能:c66xx_0核心向c66xx_1核心发送消息后,c66xx_1核心将收到的消息回传至c66xx_0核心。底层通过ipc的multicore navigator(qmss多核导航)方式实现核间通信。
图 13
将程序可执行文件分别加载至c66xx_0~c66xx_1核心后,再依次运行c66xx_0和c66xx_1核心程序,dsp端串口调试终端将会分别打印c66xx_0核心向c66xx_1核心发送单个消息的往返延迟,以及c66xx_0核心以突发方式将所有消息发送至c66xx_1核心的数据吞吐量。
图 14
图 15
动态创建任务qmssipcbenchmark。
图 16
初始化c66xx_0核心,并等待c66xx_1核心初始化完成与连接成功。
图 17 图 17
c66xx_0与c66xx_1核心分别创建messageq。
图 18
注册heap_id,并分别打开另一核心的messageq。
图 19
测试c66xx_0核心至c66xx_1核心的消息传输往返延迟。
图 20
图 21
c66xx_0核心以突发方式将所有消息发送到c66xx_1核心,c66xx_1核心接收所有消息并统计数据吞吐量。
图 22
图 23
图 24
通过宏定义num_msgs_to_prealloc设置突发模式下的message发送数量,并同步修改program.global.shmsize的值大于(num_msgs_to_prealloc x 128)。
图 25
图 26 projectqmssipcbenchmark.cfg
案例功能:c66xx_0核心向c66xx_1核心发送消息后,c66xx_1核心将收到的消息回传至c66xx_0核心。底层通过ipc的srio方式实现核间通信。
图 27
将程序可执行文件分别加载至c66xx_0~c66xx_1核心后,再依次运行c66xx_0和c66xx_1核心程序,dsp端串口调试终端将会分别打印c66xx_0核心向c66xx_1核心发送单个消息的往返延迟,以及c66xx_0核心以突发方式将所有消息发送至c66xx_1核心的数据吞吐量。
图 28
图 29
初始化c66xx_0核心,并等待c66xx_1核心初始化完成与连接成功。
图 30
c66xx_0与c66xx_1核心分别创建messageq。
图 31
动态创建任务srioipcbenchmark。
图 32
注册heap_id,并分别打开另一核心的messageq。
图 33
测试c66xx_0核心至c66xx_1核心的消息传输往返延迟。
图 34
图 35
c66xx_0核心以突发方式将所有消息发送到c66xx_1核心,c66xx_1核心接收所有消息并统计数据吞吐量。
图 36
图 37
图 38
图 39
通过宏定义num_msgs_to_prealloc设置突发模式下的message发送数量,并同步修改program.global.shmsize的值大于(num_msgs_to_prealloc x 128)。
图 40
图 41
ag凯发k8国际的版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。