LPCXpresso55S69_MRuby/src/main.c

65 lines
1.3 KiB
C

/* Board */
#include "board.h"
#include "clock_config.h"
#include "peripherals.h"
#include "pin_mux.h"
/* mRuby */
#include "mruby.h"
#include "mruby/compile.h"
/* FreeRTOS */
#include "FreeRTOS.h"
#include "task.h"
/* App */
#include "app_syscalls.h"
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", 1536, NULL, 2, NULL) != pdPASS) {
goto dead_loop;
}
vTaskStartScheduler();
dead_loop:
for (;;) {
__WFI();
}
}
static void app_mrb_runtime_task(void *parameters) {
mrb_state *mrb = mrb_open();
mrbc_context *cxt = mrbc_context_new(mrb);
mrb_show_version(mrb);
mrb_show_copyright(mrb);
char mrb_code[] = "name = 'LPCXpresso55S69'\nputs \"Greetings #{name}, from MRuby #{RUBY_VERSION}.\"";
struct mrb_parser_state *parser_state = mrb_parse_string(mrb, mrb_code, cxt);
mrb_load_exec(mrb, parser_state, cxt);
for (;;) {
/* Wait for REPL commands */
vTaskDelay(pdMS_TO_TICKS(500));
}
mrbc_cleanup_local_variables(mrb, cxt);
mrbc_context_free(mrb, cxt);
mrb_close(mrb);
vTaskDelete(NULL);
}