73 lines
1.4 KiB
C
73 lines
1.4 KiB
C
#include <stdio.h>
|
|
|
|
/* Board */
|
|
#include "board.h"
|
|
#include "clock_config.h"
|
|
#include "peripherals.h"
|
|
#include "pin_mux.h"
|
|
|
|
/* FreeRTOS */
|
|
#include "FreeRTOS.h"
|
|
#include "task.h"
|
|
|
|
/* App */
|
|
#include "app_syscalls.h"
|
|
#include "app_mrb_repl.h"
|
|
|
|
#ifndef APP_LOG_SUCCESSFUL_ALLOC
|
|
#define APP_LOG_SUCCESSFUL_ALLOC false
|
|
#endif
|
|
|
|
static void app_mrb_runtime_task(void *parameters);
|
|
|
|
int main(void) {
|
|
BOARD_InitBootPins();
|
|
BOARD_InitBootClocks();
|
|
BOARD_InitBootPeripherals();
|
|
|
|
if (app_syscalls_init() != 0) {
|
|
goto dead_loop;
|
|
}
|
|
|
|
if (xTaskCreate(app_mrb_runtime_task, "MRB_RT", 3072, NULL, 2, NULL) != pdPASS) {
|
|
goto dead_loop;
|
|
}
|
|
|
|
vTaskStartScheduler();
|
|
|
|
dead_loop:
|
|
for (;;) {
|
|
__WFI();
|
|
}
|
|
}
|
|
|
|
static void app_mrb_runtime_task(void *parameters) {
|
|
bool exit_repl = false;
|
|
|
|
for (;;) {
|
|
if(app_mrb_repl_init() != 0){
|
|
printf("Failed to initialize mruby REPL engine.\n");
|
|
goto task_fail;
|
|
}
|
|
|
|
while(!exit_repl) {
|
|
if(app_mrb_repl_exec(&exit_repl) != 0) {
|
|
printf("REPL execution failed.\n");
|
|
|
|
goto deinit_fail;
|
|
}
|
|
}
|
|
|
|
if(app_mrb_repl_deinit() != 0) {
|
|
printf("Failed to deinitialize murby REPL engine.\n");
|
|
goto task_fail;
|
|
}
|
|
}
|
|
|
|
deinit_fail:
|
|
app_mrb_repl_deinit();
|
|
|
|
task_fail:
|
|
vTaskDelete(NULL);
|
|
}
|