From b874b41562b8c096bfb2123252961a407a8ff639 Mon Sep 17 00:00:00 2001 From: iabdalkader <i.abdalkader@gmail.com> Date: Mon, 15 Jan 2024 14:19:59 +0200 Subject: [PATCH 1/2] libraries/openamp_arduino: Optimize Open-AMP RPMSG buffer configuration. Reduce buffer size to 512 and increase available buffers to 64. The increased number of buffers minimizes the chances of blocking while waiting for a free buffer. Signed-off-by: iabdalkader <i.abdalkader@gmail.com> --- libraries/openamp_arduino/src/openamp_conf.h | 2 +- variants/GENERIC_STM32H747_M4/conf/mbed_app.json | 2 +- variants/GENERIC_STM32H747_M4/defines.txt | 2 +- variants/GIGA/conf/mbed_app.json | 2 +- variants/GIGA/defines.txt | 2 +- variants/NICLA_VISION/conf/mbed_app.json | 2 +- variants/NICLA_VISION/defines.txt | 2 +- variants/OPTA/conf/mbed_app.json | 2 +- variants/OPTA/defines.txt | 2 +- variants/PORTENTA_H7_M7/conf/mbed_app.json | 2 +- variants/PORTENTA_H7_M7/defines.txt | 2 +- variants/PORTENTA_X8/conf/mbed_app.json | 2 +- variants/PORTENTA_X8/defines.txt | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/libraries/openamp_arduino/src/openamp_conf.h b/libraries/openamp_arduino/src/openamp_conf.h index c39a41fe2..922b45239 100644 --- a/libraries/openamp_arduino/src/openamp_conf.h +++ b/libraries/openamp_arduino/src/openamp_conf.h @@ -158,7 +158,7 @@ extern int __OPENAMP_region_end__[]; #define VRING_BUFF_ADDRESS (SHM_START_ADDRESS + 0x2000) #define VRING_BUFF_SIZE (SHM_SIZE - 0x2000) #define VRING_ALIGNMENT 32 -#define VRING_NUM_BUFFS 16 /* number of rpmsg buffers */ +#define VRING_NUM_BUFFS 64 /* number of rpmsg buffers */ /* Fixed parameter */ #define NUM_RESOURCE_ENTRIES 2 diff --git a/variants/GENERIC_STM32H747_M4/conf/mbed_app.json b/variants/GENERIC_STM32H747_M4/conf/mbed_app.json index 0f4e6b6a8..f93a5464a 100644 --- a/variants/GENERIC_STM32H747_M4/conf/mbed_app.json +++ b/variants/GENERIC_STM32H747_M4/conf/mbed_app.json @@ -22,7 +22,7 @@ "VIRTIO_DEVICE_ONLY", "NO_ATOMIC_64_SUPPORT", "METAL_MAX_DEVICE_REGIONS=2", - "RPMSG_BUFFER_SIZE=2048" + "RPMSG_BUFFER_SIZE=512" ] } } diff --git a/variants/GENERIC_STM32H747_M4/defines.txt b/variants/GENERIC_STM32H747_M4/defines.txt index 0b8e7d85a..f654c7e01 100644 --- a/variants/GENERIC_STM32H747_M4/defines.txt +++ b/variants/GENERIC_STM32H747_M4/defines.txt @@ -52,7 +52,7 @@ -DMETAL_MAX_DEVICE_REGIONS=2 -DNO_ATOMIC_64_SUPPORT -DNO_VTOR_RELOCATE --DRPMSG_BUFFER_SIZE=2048 +-DRPMSG_BUFFER_SIZE=512 -DSTM32H747xx -DTARGET_CORDIO -DTARGET_CORTEX diff --git a/variants/GIGA/conf/mbed_app.json b/variants/GIGA/conf/mbed_app.json index 18b610287..0fb7e9221 100644 --- a/variants/GIGA/conf/mbed_app.json +++ b/variants/GIGA/conf/mbed_app.json @@ -16,7 +16,7 @@ "VIRTIO_DRIVER_ONLY", "NO_ATOMIC_64_SUPPORT", "METAL_MAX_DEVICE_REGIONS=2", - "RPMSG_BUFFER_SIZE=2048" + "RPMSG_BUFFER_SIZE=512" ] } } diff --git a/variants/GIGA/defines.txt b/variants/GIGA/defines.txt index 1cb7a6441..cf66dca5c 100644 --- a/variants/GIGA/defines.txt +++ b/variants/GIGA/defines.txt @@ -53,7 +53,7 @@ -DMETAL_MAX_DEVICE_REGIONS=2 -DNO_ATOMIC_64_SUPPORT -DQSPI_NO_SAMPLE_SHIFT --DRPMSG_BUFFER_SIZE=2048 +-DRPMSG_BUFFER_SIZE=512 -DSTM32H747xx -DTARGET_CORDIO -DTARGET_CORTEX diff --git a/variants/NICLA_VISION/conf/mbed_app.json b/variants/NICLA_VISION/conf/mbed_app.json index 553ab954e..6d743d296 100644 --- a/variants/NICLA_VISION/conf/mbed_app.json +++ b/variants/NICLA_VISION/conf/mbed_app.json @@ -17,7 +17,7 @@ "VIRTIO_DRIVER_ONLY", "NO_ATOMIC_64_SUPPORT", "METAL_MAX_DEVICE_REGIONS=2", - "RPMSG_BUFFER_SIZE=100" + "RPMSG_BUFFER_SIZE=512" ] } } diff --git a/variants/NICLA_VISION/defines.txt b/variants/NICLA_VISION/defines.txt index eaea43f31..d09451cb5 100644 --- a/variants/NICLA_VISION/defines.txt +++ b/variants/NICLA_VISION/defines.txt @@ -54,7 +54,7 @@ -DMETAL_MAX_DEVICE_REGIONS=2 -DNO_ATOMIC_64_SUPPORT -DQSPI_NO_SAMPLE_SHIFT --DRPMSG_BUFFER_SIZE=2048 +-DRPMSG_BUFFER_SIZE=512 -DSTM32H747xx -DT1oI2C -DT1oI2C_UM11225 diff --git a/variants/OPTA/conf/mbed_app.json b/variants/OPTA/conf/mbed_app.json index 18b610287..0fb7e9221 100644 --- a/variants/OPTA/conf/mbed_app.json +++ b/variants/OPTA/conf/mbed_app.json @@ -16,7 +16,7 @@ "VIRTIO_DRIVER_ONLY", "NO_ATOMIC_64_SUPPORT", "METAL_MAX_DEVICE_REGIONS=2", - "RPMSG_BUFFER_SIZE=2048" + "RPMSG_BUFFER_SIZE=512" ] } } diff --git a/variants/OPTA/defines.txt b/variants/OPTA/defines.txt index fb131c3fe..55893ba4b 100644 --- a/variants/OPTA/defines.txt +++ b/variants/OPTA/defines.txt @@ -53,7 +53,7 @@ -DMETAL_MAX_DEVICE_REGIONS=2 -DNO_ATOMIC_64_SUPPORT -DQSPI_NO_SAMPLE_SHIFT --DRPMSG_BUFFER_SIZE=2048 +-DRPMSG_BUFFER_SIZE=512 -DSTM32H747xx -DTARGET_CORDIO -DTARGET_CORTEX diff --git a/variants/PORTENTA_H7_M7/conf/mbed_app.json b/variants/PORTENTA_H7_M7/conf/mbed_app.json index 4bae63635..2ab0fddc5 100644 --- a/variants/PORTENTA_H7_M7/conf/mbed_app.json +++ b/variants/PORTENTA_H7_M7/conf/mbed_app.json @@ -22,7 +22,7 @@ "VIRTIO_DRIVER_ONLY", "NO_ATOMIC_64_SUPPORT", "METAL_MAX_DEVICE_REGIONS=2", - "RPMSG_BUFFER_SIZE=2048", + "RPMSG_BUFFER_SIZE=512", "LSE_STARTUP_TIMEOUT=200" ] } diff --git a/variants/PORTENTA_H7_M7/defines.txt b/variants/PORTENTA_H7_M7/defines.txt index 2f2a91609..03c4a4bb6 100644 --- a/variants/PORTENTA_H7_M7/defines.txt +++ b/variants/PORTENTA_H7_M7/defines.txt @@ -55,7 +55,7 @@ -DMETAL_MAX_DEVICE_REGIONS=2 -DNO_ATOMIC_64_SUPPORT -DQSPI_NO_SAMPLE_SHIFT --DRPMSG_BUFFER_SIZE=2048 +-DRPMSG_BUFFER_SIZE=512 -DSTM32H747xx -DTARGET_CORDIO -DTARGET_CORTEX diff --git a/variants/PORTENTA_X8/conf/mbed_app.json b/variants/PORTENTA_X8/conf/mbed_app.json index cf1ab3cff..ca2ce1071 100644 --- a/variants/PORTENTA_X8/conf/mbed_app.json +++ b/variants/PORTENTA_X8/conf/mbed_app.json @@ -16,7 +16,7 @@ "VIRTIO_DEVICE_ONLY", "NO_ATOMIC_64_SUPPORT", "METAL_MAX_DEVICE_REGIONS=2", - "RPMSG_BUFFER_SIZE=2048" + "RPMSG_BUFFER_SIZE=512" ] } } diff --git a/variants/PORTENTA_X8/defines.txt b/variants/PORTENTA_X8/defines.txt index 049ba9c17..054194015 100644 --- a/variants/PORTENTA_X8/defines.txt +++ b/variants/PORTENTA_X8/defines.txt @@ -44,7 +44,7 @@ -DMETAL_MAX_DEVICE_REGIONS=2 -DNO_ATOMIC_64_SUPPORT -DNO_VTOR_RELOCATE --DRPMSG_BUFFER_SIZE=2048 +-DRPMSG_BUFFER_SIZE=512 -DSTM32H747xx -DTARGET_CORTEX -DTARGET_CORTEX_M From 7c1cb26ca6bbcc14bcf7c5318efa08107899a482 Mon Sep 17 00:00:00 2001 From: iabdalkader <i.abdalkader@gmail.com> Date: Mon, 15 Jan 2024 15:05:12 +0200 Subject: [PATCH 2/2] libraries/RPC: Update examples. Signed-off-by: iabdalkader <i.abdalkader@gmail.com> --- .../examples/Basic_AddSub/Basic_AddSub.ino | 30 +++++++++++++++++-- .../examples/MD5_Checksum/MD5_Checksum.ino | 4 ++- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/libraries/RPC/examples/Basic_AddSub/Basic_AddSub.ino b/libraries/RPC/examples/Basic_AddSub/Basic_AddSub.ino index e2dc9d514..2df49f0c0 100644 --- a/libraries/RPC/examples/Basic_AddSub/Basic_AddSub.ino +++ b/libraries/RPC/examples/Basic_AddSub/Basic_AddSub.ino @@ -4,22 +4,46 @@ int add(int a, int b) { return a + b; } -void setup() { +int sub(int a, int b) { + return a - b; +} + +void setup() { + Serial.begin(115200); + while (!Serial) { + + } + RPC.begin(); RPC.bind("add", add); + RPC.bind("sub", sub); + if (HAL_GetCurrentCPUID() == CM7_CPUID) { + // Introduce a brief delay to allow the M4 sufficient time + // to bind remote functions before invoking them. + delay(100); + } pinMode(LEDG, OUTPUT); } void loop() { static size_t loop_count = 0; + // Blink every 512 iterations - if ((loop_count++ % 512) == 0) { + if (HAL_GetCurrentCPUID() == CM4_CPUID && (loop_count++ % 512) == 0) { digitalWrite(LEDG, LOW); delay(10); digitalWrite(LEDG, HIGH); delay(10); } + int res = RPC.call("add", 1, 2).as<int>(); - RPC.call("sub", res, 1).as<int>(); + if (HAL_GetCurrentCPUID() == CM7_CPUID) { + Serial.println("add(1, 2) = " + String(res)); + } + + res = RPC.call("sub", res, 1).as<int>(); + if (HAL_GetCurrentCPUID() == CM7_CPUID) { + Serial.println("sub(3, 1) = " + String(res)); + } delay(250); } diff --git a/libraries/RPC/examples/MD5_Checksum/MD5_Checksum.ino b/libraries/RPC/examples/MD5_Checksum/MD5_Checksum.ino index 7784548e4..ea6ffc502 100644 --- a/libraries/RPC/examples/MD5_Checksum/MD5_Checksum.ino +++ b/libraries/RPC/examples/MD5_Checksum/MD5_Checksum.ino @@ -7,7 +7,7 @@ size_t hash_out_count = 0; #ifdef CORE_CM4 size_t data_buf_size = 0; #else -size_t data_buf_size = 512; +size_t data_buf_size = 256; #endif typedef std::vector<byte> vec_t; @@ -59,6 +59,8 @@ void setup() { #ifdef CORE_CM4 RPC.bind("set_buffer_size", set_buffer_size); #else + // Introduce a brief delay to allow the M4 sufficient time + // to bind remote functions before invoking them. delay(100); auto ret = RPC.call("set_buffer_size", data_buf_size).as<size_t>(); #endif