diff --git a/demos/STM32/RT-STM32L4R9-DISCOVERY-RAM_SB_HOST_DYNAMIC/debug/RT-STM32L4R9-DISCOVERY-RAM_SB_HOST_DYNAMIC (build-ch.elf)(OpenOCD, Flash and Run).launch b/demos/STM32/RT-STM32L4R9-DISCOVERY-RAM_SB_HOST_DYNAMIC/debug/RT-STM32L4R9-DISCOVERY-RAM_SB_HOST_DYNAMIC (build-ch.elf)(OpenOCD, Flash and Run).launch
index b52fefe1d..19031b0c9 100644
--- a/demos/STM32/RT-STM32L4R9-DISCOVERY-RAM_SB_HOST_DYNAMIC/debug/RT-STM32L4R9-DISCOVERY-RAM_SB_HOST_DYNAMIC (build-ch.elf)(OpenOCD, Flash and Run).launch
+++ b/demos/STM32/RT-STM32L4R9-DISCOVERY-RAM_SB_HOST_DYNAMIC/debug/RT-STM32L4R9-DISCOVERY-RAM_SB_HOST_DYNAMIC (build-ch.elf)(OpenOCD, Flash and Run).launch
@@ -6,7 +6,7 @@
-
+
diff --git a/demos/STM32/RT-STM32L4R9-DISCOVERY-RAM_SB_HOST_DYNAMIC/main.c b/demos/STM32/RT-STM32L4R9-DISCOVERY-RAM_SB_HOST_DYNAMIC/main.c
index 9b6e0ffa6..4c4e53ac9 100644
--- a/demos/STM32/RT-STM32L4R9-DISCOVERY-RAM_SB_HOST_DYNAMIC/main.c
+++ b/demos/STM32/RT-STM32L4R9-DISCOVERY-RAM_SB_HOST_DYNAMIC/main.c
@@ -97,8 +97,6 @@ sb_class_t sbx1;
static THD_WORKING_AREA(waUnprivileged1, 1024);
-static thread_t *sb1tp;
-
/*===========================================================================*/
/* Main and generic code. */
/*===========================================================================*/
@@ -125,8 +123,10 @@ static void SBHandler(eventid_t id) {
(void)id;
- if (chThdTerminatedX(sb1tp)) {
- chprintf((BaseSequentialStream *)&SD2, "SB1 terminated\r\n");
+ if (!sbIsThreadRunningX(&sbx1)) {
+ msg_t msg = sbWaitThread(&sbx1);
+
+ chprintf((BaseSequentialStream *)&SD2, "SB1 terminated (%d)\r\n", msg);
}
}
@@ -253,6 +253,7 @@ int main(void) {
vfsClose(np);
#endif
+#if 0
/* Starting sandboxed thread 1.*/
sb1tp = sbStartThread(&sbx1, "sbx1",
waUnprivileged1, sizeof (waUnprivileged1),
@@ -261,7 +262,6 @@ int main(void) {
chSysHalt("sbx1 failed");
}
-#if 0
/* Starting sandboxed thread 2.*/
sb2tp = sbStartThread(&sbx2, "sbx2",
waUnprivileged2, sizeof (waUnprivileged2),
@@ -286,12 +286,21 @@ int main(void) {
/* Checking for user button, launching sandbox if pressed.*/
if (palReadLine(LINE_BUTTON)) {
if (!sbIsThreadRunningX(&sbx1)) {
+
+ /* Loading sandbox code.*/
ret = sbElfLoadFile((vfs_driver_c *)&sb1_root_overlay_driver,
"/bin/app.elf",
&sbx1.config->regions[0].area);
if (CH_RET_IS_ERROR(ret)) {
chSysHalt("ELF");
}
+
+ /* Starting sandboxed thread 1.*/
+ if (sbStartThread(&sbx1, "sbx1",
+ waUnprivileged1, sizeof (waUnprivileged1),
+ NORMALPRIO - 1) == NULL) {
+ chSysHalt("sbx1 failed");
+ }
}
#if 0
static uint8_t loadbuf[1024];