improve wren vm config

This commit is contained in:
Babz 2021-09-10 00:48:53 +02:00
parent 5f83bcb300
commit e9c9a38e63
1 changed files with 24 additions and 29 deletions

View File

@ -5,6 +5,7 @@
#include <gint/drivers/r61524.h>
#include <gint/gint.h>
#include <gint/keyboard.h>
#include <gint/kmalloc.h>
#include <gint/mpu/power.h>
#include <gint/timer.h>
@ -14,31 +15,14 @@
#include "term.h"
#include "ui.h"
static char *LOREM_IPSUM =
"Lorem ipsum dolor sit amet, consectetur adipiscing elit.\nNam vitae purus dolor.\nPraesent in ex tempus, auctor velit at, "
"vulputate sapien.\nAenean semper, dui vitae iaculis mattis, odio libero aliquet elit, nec tempor nisl turpis vel arcu.\n"
"Vestibulum eleifend maximus enim at sollicitudin.\nNulla eu commodo justo.\nUt vitae pellentesque erat.\nDuis magna nisl, "
"eleifend ac massa at, blandit sollicitudin ipsum.\nIntegint_world_swrdum et malesuada fames ac ante ipsum primis in "
"faucibus.\n"
"Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.\nUt at libero in turpis porttitor "
"viverra.\nUt eu pellentesque purus.\nVestibulum aliquet facilisis ante, eget volutpat metus.\nCras semper lacus ac mauris "
"imperdiet, vel egestas est luctus.\nAliquam elit enim, dignissim nec enim vel, consequat ullamcorper libero.\nPellentesque "
"at "
"iaculis lctus.\nPraesent sed velit at tellus hendrerit mattis eu nec velit.\nPhasellus eu quam nec nisi mattis elementum "
"quis "
"nec enim.\nNulla efficitur turpis id tempus ultricies.\nPellentesque semper lacinia mi vitae feugiat.\nVestibulum leo nisi, "
"pretium quis felis non, mattis varius risus.\n"
"Suspendisse porttitor purus lacinia ante euismod, ut eleifend massa fermentum.\nProin pretium elementum massa, at efficitur "
"risus iaculis sed.\n";
static volatile int key_poll_timeout;
static int callback_keypoll(void) {
key_poll_timeout = 0;
return TIMER_STOP;
}
void writeFn(WrenVM *vm, const char *text) { term_print(text); }
void errorFn(WrenVM *vm, WrenErrorType errorType, const char *module, const int line, const char *msg) {
static void wn_write(WrenVM *vm, const char *text) { term_print(text); }
static void wn_error(WrenVM *vm, WrenErrorType errorType, const char *module, const int line, const char *msg) {
switch (errorType) {
case WREN_ERROR_COMPILE: {
term_printf("[%s line %d] [Error] %s\n", module, line, msg);
@ -52,6 +36,21 @@ void errorFn(WrenVM *vm, WrenErrorType errorType, const char *module, const int
}
}
static void *wn_reallocate(void *memory, size_t newSize, void *_) {
if (memory == NULL && newSize == 0)
return NULL;
if (memory == NULL)
return kmalloc(newSize, "_uram");
if (newSize == 0) {
kfree(memory);
return NULL;
}
return krealloc(memory, newSize);
}
int main(int isappli, int optnum) {
int tick_ctr = 0;
int shift_state = 0;
@ -59,18 +58,14 @@ int main(int isappli, int optnum) {
int off_state = 0;
uint16_t backlight_save;
term_print(LOREM_IPSUM);
term_eprint("----------------------------------------------------------------\n");
term_printf("isappli=%d optnum=%d\n", isappli, optnum);
term_eprint("----------------------------------------------------------------\n");
WrenConfiguration config;
wrenInitConfiguration(&config);
config.writeFn = &writeFn;
config.errorFn = &errorFn;
config.reallocateFn = &wn_reallocate;
config.initialHeapSize = 1024 * 4; // 4kiB
config.minHeapSize = 1024; // 1kiB
config.heapGrowthPercent = 20;
config.writeFn = &wn_write;
config.errorFn = &wn_error;
WrenVM *vm = wrenNewVM(&config);
WrenInterpretResult result = wrenInterpret(vm, "my_module",
"System.print(\"I am running in a VM!\")\n"