CCS+C6678LE开发记录16:多核协作(OpenMP)示例代码浅析
[复制链接]
本文是上一篇的后续。 核心代码如下(部分省略): - //------------------------------------------------------------------------------
- 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端,发送完成之后将此消息放到邮箱 告知系统可以开始下一轮循环
|