Other Parts Discussed in Thread: SYSBIOS
Hi experts,
I am working on the sdk7.3. We have 2 dl apps, and their tiovx graphs as follows.
When only app1 is running, it can work normally. But once app2 is running, app1 will block in the preproc node regardless the startup sequence. App2 always works well. During the test, no abnormalities were found in the app logs or the dsp logs.
Then We added log to the ipc funcs appIpcRpmsgRxTaskMain and appIpcSendNotifyPort. When the above exception occurred, we found that c66-1 had already sent an IPC message to c66-2, but c66-2 did not receive this message, thus leading to the blockage of app1. Meanwhile, c62 was able to normally respond to IPC messages from msc and c71, so process 2 was able to run smoothly.
If we move the preproc node from c66-2 to c66-1, the problom can be solved. But we hope to address the issue directly rather than bypassing it, in order to prevent any potential interference with future tiovx development work.
Please provide some suggestions. Thank you.
//vision_apps/utils/ipc/src/app_ipc_sysbios.c static void appIpcRpmsgRxTaskMain(void *arg0, void *arg1) { ……………… while(!done) { ipc_rx_status = RPMessage_recv(obj->rpmsg_rx_handle, &obj->rpmsg_rx_msg_buf, &len, &reply_endpt, &src_cpu_id, SemaphoreP_WAIT_FOREVER ); …………………… appLogPrintf("@@@@@@@@@@@@@@@@@@@ipc_rx_status = %d, rpmsg_rx_handle = %p, obj = %p, payload = 0x%x, len = %u, src_cpu_id = %u, reply_endpt = %u, tiovx_rpmsg_port_id = %u\n", ipc_rx_status, obj->rpmsg_rx_handle, obj, *(uint32_t *)(obj->rpmsg_rx_msg_buf), len, src_cpu_id, reply_endpt, obj->prm.tiovx_rpmsg_port_id); if(ipc_rx_status == IPC_SOK) { appIpcRpmsgRxHandler(obj->rpmsg_rx_handle, obj, obj->rpmsg_rx_msg_buf, len, src_cpu_id, reply_endpt, obj->prm.tiovx_rpmsg_port_id); } } } int32_t appIpcSendNotifyPort(uint32_t dest_cpu_id, uint32_t payload, uint32_t port_id) { …………………… if( (dest_cpu_id<APP_IPC_CPU_MAX) && (obj->rpmsg_tx_handle[dest_cpu_id] != NULL)) { status = RPMessage_send( obj->rpmsg_rx_handle, ipc_cpu_id, port_id, /* dst end pt */ obj->prm.tiovx_rpmsg_port_id, /* src endpt */ &payload, sizeof(payload) ); appLogPrintf("#################status = %d, rpmsg_rx_handle = %p, ipc_cpu_id = %u, port_id = %u, tiovx_rpmsg_port_id = %u, payload = 0x%x\n", status, obj->rpmsg_rx_handle, ipc_cpu_id, port_id, obj->prm.tiovx_rpmsg_port_id, payload); ……………… } return status; }