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

一、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\n" );
    } 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\n" );
		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\n", 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.\n", 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\n", 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




猜你喜欢

转载自blog.csdn.net/yunge812/article/details/80901855
dsp