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
{