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
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮