LPCXpresso55S69_MRuby/src/main.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);
}