diff --git a/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/README.md b/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/README.md index 03cc39036..43dcefaaf 100644 --- a/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/README.md +++ b/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/README.md @@ -201,3 +201,24 @@ saveenv + +## 四、核间通信测试 +> XiUOS 将收到的数据打印后返回到Linux + +### 1、烧录A55端的Linux和M33端的XiUOS +
+ +### 2、在M33端创建监听任务 +```c +CreateRPMsgTask // 该命令会创建一个通信节点,在探测到Linux的第一条信息时该通信节点被激活 +``` +
+ +### 3、在Linux端启动核间通信测试例程 +```c +rpmsg_sample_client 0 +``` +
+ +### 3、测试结果 +
\ No newline at end of file diff --git a/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/img/rpmsg_begin.png b/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/img/rpmsg_begin.png new file mode 100644 index 000000000..60d3c51aa Binary files /dev/null and b/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/img/rpmsg_begin.png differ diff --git a/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/img/rpmsg_create.png b/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/img/rpmsg_create.png new file mode 100644 index 000000000..a98877863 Binary files /dev/null and b/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/img/rpmsg_create.png differ diff --git a/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/img/rpmsg_test_begin.png b/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/img/rpmsg_test_begin.png new file mode 100644 index 000000000..83a6dfdd0 Binary files /dev/null and b/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/img/rpmsg_test_begin.png differ diff --git a/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/img/rpmsg_test_result.png b/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/img/rpmsg_test_result.png new file mode 100644 index 000000000..95aacb38d Binary files /dev/null and b/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/img/rpmsg_test_result.png differ diff --git a/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/rzv_gen/platform_info.c b/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/rzv_gen/platform_info.c index b0ca368e7..637123dee 100644 --- a/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/rzv_gen/platform_info.c +++ b/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/rzv_gen/platform_info.c @@ -297,7 +297,7 @@ void platform_release_rpmsg_vdev (void * platform, struct rpmsg_device * rpdev) struct rpmsg_virtio_device * rpmsg_vdev; struct remoteproc_priv * prproc = rproc->priv; - KMutexDelete(ipi.ipi_mutx_id[prproc->notify_id]); + // KMutexDelete(ipi.ipi_mutx_id[prproc->notify_id]); ipi.ipi_mutx_id[prproc->notify_id] = -1; KTaskDelete(ipi_tsk_id[prproc->notify_id]); @@ -363,11 +363,12 @@ static void* IpiTask (void * exinf) while (1) { - // extern long ShowTask(void); - // ShowTask(); - - KMutexObtain(ipi.ipi_mutx_id[prproc->notify_id], WAITING_FOREVER); - // KPrintf("IpiTask: after KSemaphoreObtain\n"); + if (ipi.ipi_mutx_id[prproc->notify_id] != 1) + { + __WFI(); + continue; + } + // KMutexObtain(ipi.ipi_mutx_id[prproc->notify_id], WAITING_FOREVER); /* Ignore a incoming interrupt if the virtio layer of a target remoteproc is not yet initialized */ if (metal_list_is_empty(&rproc->vdevs)) @@ -381,8 +382,8 @@ static void* IpiTask (void * exinf) KPrintf("remoteproc_get_notification() failed with %d", ret); break; } - - DelayKTask(10); + ipi.ipi_mutx_id[prproc->notify_id] = 0; + // DelayKTask(10); } } @@ -391,14 +392,14 @@ static void start_ipi_task (void * platform) struct remoteproc * rproc = platform; struct remoteproc_priv * prproc = rproc->priv; - int32 mutx_id = KMutexCreate(); - - if (mutx_id < 0) - { - KPrintf("start_ipi_task: create sem fail!\n"); - return ; - } - ipi.ipi_mutx_id[prproc->notify_id] = mutx_id; + // int32 mutx_id = KMutexCreate(); + // if (mutx_id < 0) + // { + // KPrintf("start_ipi_task: create sem fail!\n"); + // return ; + // } + // ipi.ipi_mutx_id[prproc->notify_id] = mutx_id; + ipi.ipi_mutx_id[prproc->notify_id] = 0; // KPrintf("start_ipi_task: prproc->notify_id = %d, ipi.ipi_mutx_id[prproc->notify_id] = %d \n",prproc->notify_id,ipi.ipi_mutx_id[prproc->notify_id]); diff --git a/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/rzv_gen/platform_info.h b/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/rzv_gen/platform_info.h index 285772102..c2e06ee38 100644 --- a/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/rzv_gen/platform_info.h +++ b/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/rzv_gen/platform_info.h @@ -67,7 +67,7 @@ struct ipi_info int registered; unsigned int mbx_chn[CFG_RPMSG_SVCNO]; unsigned int chn_mask; /**< IPI channel mask */ - int32 ipi_mutx_id[CFG_RPMSG_SVCNO]; + volatile int32 ipi_mutx_id[CFG_RPMSG_SVCNO]; }; struct shm_info diff --git a/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/rzv_gen/rzv2_rproc.c b/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/rzv_gen/rzv2_rproc.c index 4dd67c69a..70b830a20 100644 --- a/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/rzv_gen/rzv2_rproc.c +++ b/Ubiquitous/XiZi_IIoT/board/rzv2l-m33/rzv_gen/rzv2_rproc.c @@ -109,9 +109,13 @@ static int rzv2_mhu_callback (mhu_callback_args_t * p_args) return METAL_IRQ_NOT_HANDLED; /* Invalid message arrived */ } - if (ipi.ipi_mutx_id[val] >= 0) + // if (ipi.ipi_mutx_id[val] >= 0) + // { + // KMutexAbandon(ipi.ipi_mutx_id[val]); + // } + if (ipi.ipi_mutx_id[val] != -1) { - KMutexAbandon(ipi.ipi_mutx_id[val]); + ipi.ipi_mutx_id[val] = 1; } else {