Update documentation

Add documentation about how base addresses are used by the driver
unit tests.

Update message handler application to use TENSOR_ARENA_SIZE the
same way as the FreeRTOS application.

Add documenation about Corstone-310.

Change-Id: I08a315b95ca757ce3449cb7af104b8f1ac7f8865
diff --git a/applications/message_handler/CMakeLists.txt b/applications/message_handler/CMakeLists.txt
index 3f87e64..040b27d 100644
--- a/applications/message_handler/CMakeLists.txt
+++ b/applications/message_handler/CMakeLists.txt
@@ -21,7 +21,7 @@
     return()
 endif()
 
-set(MESSAGE_HANDLER_ARENA_SIZE 2000000 CACHE STRING "Size of message handler tensor arena")
+set(MESSAGE_HANDLER_ARENA_SIZE 2000000 CACHE STRING "Total size of all message handler tensor arenas")
 set(MESSAGE_HANDLER_MODEL_0 FALSE CACHE STRING "Path to built in model 0")
 set(MESSAGE_HANDLER_MODEL_1 FALSE CACHE STRING "Path to built in model 1")
 set(MESSAGE_HANDLER_MODEL_2 FALSE CACHE STRING "Path to built in model 2")
@@ -42,8 +42,17 @@
 target_include_directories(message_handler PRIVATE
     ${LINUX_DRIVER_STACK_PATH}/kernel)
 
+# Split total tensor arena equally for each NPU
+if (TARGET ethosu_core_driver AND ETHOSU_TARGET_NPU_COUNT GREATER 0)
+    set(NUM_ARENAS ${ETHOSU_TARGET_NPU_COUNT})
+else()
+    set(NUM_ARENAS 1)
+endif()
+
+math(EXPR TENSOR_ARENA_SIZE "${MESSAGE_HANDLER_ARENA_SIZE} / ${NUM_ARENAS}")
+
 target_compile_definitions(message_handler PRIVATE
-    TENSOR_ARENA_SIZE=${MESSAGE_HANDLER_ARENA_SIZE}
+    TENSOR_ARENA_SIZE=${TENSOR_ARENA_SIZE}
     $<$<BOOL:${MESSAGE_HANDLER_MODEL_0}>:MODEL_0=${MESSAGE_HANDLER_MODEL_0}>
     $<$<BOOL:${MESSAGE_HANDLER_MODEL_1}>:MODEL_1=${MESSAGE_HANDLER_MODEL_1}>
     $<$<BOOL:${MESSAGE_HANDLER_MODEL_2}>:MODEL_2=${MESSAGE_HANDLER_MODEL_2}>
diff --git a/applications/message_handler/main.cpp b/applications/message_handler/main.cpp
index b527840..8db9e0b 100644
--- a/applications/message_handler/main.cpp
+++ b/applications/message_handler/main.cpp
@@ -52,14 +52,14 @@
  ****************************************************************************/
 
 // Nr. of tasks to process inferences with, reserves driver & runs inference (Normally 1 per NPU, but not a must)
-#if defined(ETHOSU_NPU_COUNT)
+#if defined(ETHOSU) && defined(ETHOSU_NPU_COUNT) && ETHOSU_NPU_COUNT > 0
 constexpr size_t NUM_PARALLEL_TASKS = ETHOSU_NPU_COUNT;
 #else
 constexpr size_t NUM_PARALLEL_TASKS = 1;
 #endif
 
 // TensorArena static initialisation
-constexpr size_t arenaSize = TENSOR_ARENA_SIZE / NUM_PARALLEL_TASKS;
+constexpr size_t arenaSize = TENSOR_ARENA_SIZE;
 
 __attribute__((section(".bss.tensor_arena"), aligned(16))) uint8_t tensorArena[NUM_PARALLEL_TASKS][arenaSize];