3024|0

19

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

CCS+C6678LE开发记录16:多核协作(OpenMP)示例代码浅析 [复制链接]

本文是上一篇的后续。

核心代码如下(部分省略):

  1. //------------------------------------------------------------------------------  
  2. void main(void)  
  3. {  
  4.     //.........................................  
  5.     while(1)  
  6.     {  
  7.         msg_s.id = MSG_GET_READY;  
  8.         Mailbox_pend(mbox_srcimg, &msg_s, BIOS_WAIT_FOREVER);  
  9.          
  10.         ImageProc(msg_s.img_hdr.data,msg_s.img_hdr.width,msg_s.img_hdr.height);  
  11.          
  12.         msg_s.id = MSG_IMGPROC_FINISHED;  
  13.         Mailbox_post(mbox_result, &msg_s, BIOS_WAIT_FOREVER);  
  14.     }  
  15.     //.........................................  
  16. }  
  17.   
  18. static void NetworkOpen()  
  19. {  
  20.     DaemonNew(SOCK_DGRAM,0,PORT,Daemon_proc,...);  
  21. }  
  22.   
  23. int Daemon_proc(SOCKET s, UINT32 unused)  
  24. {  
  25.     //....................................  
  26.     // Receive image data  
  27.     msg_s.id = MSG_SRCIMG_RECEIVED;  
  28.     Mailbox_post(mbox_srcimg, &msg_s, BIOS_WAIT_FOREVER);  
  29.   
  30.     //....................................  
  31.     // Send back the result data  
  32.     msg_s.id = MSG_SENDBACK_FINISHED;  
  33.     Mailbox_pend(mbox_result, &msg_s, BIOS_WAIT_FOREVER);  
  34.   
  35.     return 0;  
  36. }  
复制代码

函数中创建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端,发送完成之后将此消息放到邮箱

告知系统可以开始下一轮循环


点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表