DSP

CCS+C6678LE开发记录16:多核协作(OpenMP)示例代码浅析

2019-07-13 12:33发布

本文是上一篇的后续。 核心代码如下(部分省略): //------------------------------------------------------------------------------ void main(void) { //......................................... while(1) { msg_s.id = MSG_GET_READY; Mailbox_pend(mbox_srcimg, &msg_s, BIOS_WAIT_FOREVER); ImageProc(msg_s.img_hdr.data,msg_s.img_hdr.width,msg_s.img_hdr.height); msg_s.id = MSG_IMGPROC_FINISHED; Mailbox_post(mbox_result, &msg_s, BIOS_WAIT_FOREVER); } //......................................... } static void NetworkOpen() { DaemonNew(SOCK_DGRAM,0,PORT,Daemon_proc,...); } int Daemon_proc(SOCKET s, UINT32 unused) { //.................................... // Receive image data msg_s.id = MSG_SRCIMG_RECEIVED; Mailbox_post(mbox_srcimg, &msg_s, BIOS_WAIT_FOREVER); //.................................... // Send back the result data msg_s.id = MSG_SENDBACK_FINISHED; Mailbox_pend(mbox_result, &msg_s, BIOS_WAIT_FOREVER); return 0; }
函数中创建task,完成Network初始化,启动任务循环
Mailbox_pend(mbox_srcimg, &msg_s, BIOS_WAIT_FOREVER);
这一语句,希望从邮箱中取得一条消息,翻译成语境含义就是 无限等待等待srcimg(从PC端发送过来的数据)的到达
数据到达之后执行ImageProc()任务完成图像处理

msg_s.id = MSG_IMGPROC_FINISHED;
Mailbox_post(mbox_result, &msg_s, BIOS_WAIT_FOREVER);
这一语句将处理完毕的消息放到邮箱中
而Daemon_proc函数只负责数据传输。 // Receive image data
msg_s.id = MSG_SRCIMG_RECEIVED;
Mailbox_post(mbox_srcimg, &msg_s, BIOS_WAIT_FOREVER);
每一轮循环都是先接收来自PC端发送的数据 接收完毕之后将消息放到邮箱,等待下一轮的“消费者”收取
稍后,“消费者”收取消息后得到数据然后处理 // Send back the resultdata
msg_s.id = MSG_SENDBACK_FINISHED;
Mailbox_pend(mbox_result, &msg_s, BIOS_WAIT_FOREVER);
处理完毕的数据(结果)将会发回至PC端,发送完成之后将此消息放到邮箱 告知系统可以开始下一轮循环
本文原创,博文地址 http://blog.csdn.net/fengyhack/article/details/44309977