DSP

DSP- 6678--------- 多核DSP图像处理(4)从核程序

2019-07-13 10:07发布

一、cfg文件 /* Create the stack Thread Task for our application. */ var tskSlaveThread = Task.create("&slave_main"); tskSlaveThread.stackSize = 0x2000; tskSlaveThread.priority = 0x5; tskSlaveThread.instance.name = "slave_main"; 创建slave_main进程。 二、main函数 main函数很简单,只是打开IPC以及BIOS 三、slave_main进程 3.1 创建heapBuf /* Open the heap created by the other processor. Loop until opened. */ do { status = HeapBufMP_open(IMAGE_PROCESSING_HEAP_NAME, &heapHandle); //"image_processing_heap" if (status < 0) { Task_sleep(1); } //printf("HeapBufMP_open failed " ); } while (status < 0); 3.2 创建messageQ( slave )     /* Register this heap with MessageQ */ MessageQ_registerHeap((IHeap_Handle)heapHandle, IMAGE_PROCESSING_HEAPID); /* Create the local message queue */ //从核创建MessageQ 根据MessageQ名字 主核在MessageQ_open打开 MessageQ名字在mc_process_init中设置 h_receive_queue = MessageQ_create(receive_queue_name, NULL); if (h_receive_queue == NULL) { printf("MessageQ_create failed " ); goto close_n_exit; } 3.3 接收messageQ( slave ) if (MessageQ_get(h_receive_queue, (MessageQ_Msg *)&p_msg, MessageQ_FOREVER) < 0) //接收MessageQ信息 通过p_msg结构体传输来 该结构体包含着 MessageQ头 核ID 图像处理参数 { printf("%s: This should not happen since timeout is forever ", receive_queue_name); goto close_n_exit; } reply_queue_id = MessageQ_getReplyQueue(p_msg); //获得回复队列的ID号 reply_queue_id 然后通过MessageQ_put发送出去 if (reply_queue_id == MessageQ_INVALIDMESSAGEQ) { printf("receive_queue_name: Ignoring the message as reply queue is not set. ", receive_queue_name); continue; } 3.4 sobel图像处理 process_rgb(&(p_msg->info)); p_msg->info是该核需要处理的图像的指针,处理之后的结果也在这里 3.5 发送messageQ( master)         /*============== 向主核发送MessageQ信息===========*/ if (MessageQ_put(reply_queue_id, (MessageQ_Msg)p_msg) < 0) { printf("%s: MessageQ_put had a failure error ", receive_queue_name); } if (MultiProc_self() != 0) { Cache_inv(p_msg->info.scratch_buf[0], p_msg->info.scratch_buf_len[0], Cache_Type_ALL, FALSE); if (p_msg->info.scratch_buf[1]) { Cache_inv(p_msg->info.scratch_buf[1], p_msg->info.scratch_buf_len[1], Cache_Type_ALL, FALSE); } Cache_inv(p_msg, sizeof(process_message_t), Cache_Type_ALL, FALSE); } 至此,大功告成 程序下载连接: https://download.csdn.net/download/yunge812/10517028   ======================================================================= 最近新开的公众号,文章正在一篇篇的更新, 公众号名称:玩转电子世界 各位朋友有什么问题了可以直接在上面提问,我会一一进行解答的。 跟着阳光非宅男,一步步走进电子的世界。 关注之后回复  资料下载   关键词可以获得免费海量视频学习资料下载~~! 已共享的学习视频资料,共享资料正在不断更新中。。。 =======================================================================