Import FreeRTOS platform experiment codes for further development (#451)
This commit is contained in:
106
product-mini/platforms/freertos/simple/iwasm_main.c
Normal file
106
product-mini/platforms/freertos/simple/iwasm_main.c
Normal file
@ -0,0 +1,106 @@
|
||||
/*
|
||||
* Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
*/
|
||||
|
||||
#include "bh_platform.h"
|
||||
#include "wasm_export.h"
|
||||
#include "test_wasm.h"
|
||||
|
||||
#define CONFIG_GLOBAL_HEAP_BUF_SIZE 131072
|
||||
#define CONFIG_APP_STACK_SIZE 8192
|
||||
#define CONFIG_APP_HEAP_SIZE 8192
|
||||
|
||||
static int app_argc;
|
||||
static char **app_argv;
|
||||
|
||||
static void*
|
||||
app_instance_main(wasm_module_inst_t module_inst)
|
||||
{
|
||||
const char *exception;
|
||||
|
||||
wasm_application_execute_main(module_inst, app_argc, app_argv);
|
||||
if ((exception = wasm_runtime_get_exception(module_inst)))
|
||||
os_printf("%s\n", exception);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static char global_heap_buf[CONFIG_GLOBAL_HEAP_BUF_SIZE] = { 0 };
|
||||
|
||||
void iwasm_main(void)
|
||||
{
|
||||
uint8 *wasm_file_buf = NULL;
|
||||
uint32 wasm_file_size;
|
||||
wasm_module_t wasm_module = NULL;
|
||||
wasm_module_inst_t wasm_module_inst = NULL;
|
||||
RuntimeInitArgs init_args;
|
||||
char error_buf[128];
|
||||
#if WASM_ENABLE_LOG != 0
|
||||
int log_verbose_level = 2;
|
||||
#endif
|
||||
|
||||
os_printf("### iwasm main begin\n");
|
||||
|
||||
memset(&init_args, 0, sizeof(RuntimeInitArgs));
|
||||
|
||||
init_args.mem_alloc_type = Alloc_With_Pool;
|
||||
init_args.mem_alloc_option.pool.heap_buf = global_heap_buf;
|
||||
init_args.mem_alloc_option.pool.heap_size = sizeof(global_heap_buf);
|
||||
|
||||
/* initialize runtime environment */
|
||||
if (!wasm_runtime_full_init(&init_args)) {
|
||||
os_printf("Init runtime environment failed.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
os_printf("### wasm runtime initialized.\n");
|
||||
|
||||
#if WASM_ENABLE_LOG != 0
|
||||
bh_log_set_verbose_level(log_verbose_level);
|
||||
#endif
|
||||
|
||||
/* load WASM byte buffer from byte buffer of include file */
|
||||
wasm_file_buf = (uint8*)wasm_test_file;
|
||||
wasm_file_size = sizeof(wasm_test_file);
|
||||
|
||||
/* load WASM module */
|
||||
if (!(wasm_module = wasm_runtime_load(wasm_file_buf, wasm_file_size,
|
||||
error_buf, sizeof(error_buf)))) {
|
||||
os_printf("%s\n", error_buf);
|
||||
goto fail1;
|
||||
}
|
||||
|
||||
os_printf("### wasm runtime load module success.\n");
|
||||
|
||||
/* instantiate the module */
|
||||
if (!(wasm_module_inst = wasm_runtime_instantiate(wasm_module,
|
||||
CONFIG_APP_STACK_SIZE,
|
||||
CONFIG_APP_HEAP_SIZE,
|
||||
error_buf,
|
||||
sizeof(error_buf)))) {
|
||||
os_printf("%s\n", error_buf);
|
||||
goto fail2;
|
||||
}
|
||||
|
||||
os_printf("### wasm runtime instantiate module success.\n");
|
||||
|
||||
/* invoke the main function */
|
||||
app_instance_main(wasm_module_inst);
|
||||
|
||||
os_printf("### wasm runtime execute app's main function success.\n");
|
||||
|
||||
/* destroy the module instance */
|
||||
wasm_runtime_deinstantiate(wasm_module_inst);
|
||||
|
||||
os_printf("### wasm runtime deinstantiate module success.\n");
|
||||
|
||||
fail2:
|
||||
/* unload the module */
|
||||
wasm_runtime_unload(wasm_module);
|
||||
|
||||
os_printf("### wasm runtime unload module success.\n");
|
||||
fail1:
|
||||
/* destroy runtime environment */
|
||||
wasm_runtime_destroy();
|
||||
os_printf("### wasm runtime destroy success.\n");
|
||||
}
|
||||
39
product-mini/platforms/freertos/simple/main.c
Normal file
39
product-mini/platforms/freertos/simple/main.c
Normal file
@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
*/
|
||||
|
||||
#include "bh_platform.h"
|
||||
|
||||
extern void
|
||||
iwasm_main(void);
|
||||
|
||||
static void
|
||||
wamr_task(void *param)
|
||||
{
|
||||
os_printf("WAMR task started\n");
|
||||
|
||||
iwasm_main();
|
||||
|
||||
while (1) {
|
||||
task_sleep(1000);
|
||||
/*os_printf("Hello WAMR\n");*/
|
||||
}
|
||||
(void)param;
|
||||
}
|
||||
|
||||
static bool
|
||||
app_init(uint32_t id)
|
||||
{
|
||||
os_printf("WAMR init, id: %d\n", id);
|
||||
task_start("wamr_task", 8192, 4, wamr_task, NULL);
|
||||
return true;
|
||||
}
|
||||
|
||||
static void
|
||||
app_exit(uint32_t id)
|
||||
{
|
||||
os_printf("WAMR exit, id: %d\n", id);
|
||||
}
|
||||
|
||||
INTERNAL_APP_DEFINE("WAMR", APP_VERSION(0, 0, 0, 1), 0, app_init, app_exit);
|
||||
54
product-mini/platforms/freertos/simple/sources.mk
Normal file
54
product-mini/platforms/freertos/simple/sources.mk
Normal file
@ -0,0 +1,54 @@
|
||||
# TODO: set WAMR root dir
|
||||
WAMR_ROOT := ../../../../
|
||||
|
||||
override PROJECT_CFLAGS := $(PROJECT_CFLAGS) -Wno-unused-parameter -Wno-pedantic
|
||||
|
||||
override PROJECT_CFLAGS := $(PROJECT_CFLAGS) -I$(PROJECTS_SRC_ROOT)/include
|
||||
|
||||
override PROJECT_CFLAGS := $(PROJECT_CFLAGS) \
|
||||
-I$(WAMR_INC_ROOT)/core \
|
||||
-I$(WAMR_INC_ROOT)/core/iwasm/include \
|
||||
-I$(WAMR_INC_ROOT)/core/iwasm/common \
|
||||
-I$(WAMR_INC_ROOT)/core/shared/utils \
|
||||
-I$(WAMR_INC_ROOT)/core/shared/mem-alloc \
|
||||
-I$(WAMR_INC_ROOT)/core/shared/platform/include \
|
||||
-I$(WAMR_INC_ROOT)/core/shared/platform/freertos \
|
||||
-I$(WAMR_INC_ROOT)/core/iwasm/interpreter
|
||||
|
||||
override PROJECT_CFLAGS := $(PROJECT_CFLAGS) \
|
||||
-DBH_PLATFORM_FREERTOS \
|
||||
-DBH_MALLOC=wasm_runtime_malloc \
|
||||
-DBH_FREE=wasm_runtime_free \
|
||||
-DBUILD_TARGET_X86_32 \
|
||||
-DWASM_ENABLE_INTERP=1 \
|
||||
-DWASM_ENABLE_FAST_INTERP=0 \
|
||||
-DWASM_ENABLE_LIBC_BUILTIN=1
|
||||
|
||||
override PROJECT_CSRC := $(PROJECT_CSRC) \
|
||||
$(WAMR_SRC_ROOT)/core/shared/platform/freertos/freertos_platform.c \
|
||||
$(WAMR_SRC_ROOT)/core/shared/platform/freertos/freertos_thread.c \
|
||||
$(WAMR_SRC_ROOT)/core/shared/platform/freertos/freertos_time.c \
|
||||
$(WAMR_SRC_ROOT)/core/shared/platform/common/math/math.c \
|
||||
$(WAMR_SRC_ROOT)/core/shared/mem-alloc/mem_alloc.c \
|
||||
$(WAMR_SRC_ROOT)/core/shared/mem-alloc/ems/ems_kfc.c \
|
||||
$(WAMR_SRC_ROOT)/core/shared/mem-alloc/ems/ems_hmu.c \
|
||||
$(WAMR_SRC_ROOT)/core/shared/mem-alloc/ems/ems_alloc.c \
|
||||
$(WAMR_SRC_ROOT)/core/shared/utils/bh_assert.c \
|
||||
$(WAMR_SRC_ROOT)/core/shared/utils/bh_common.c \
|
||||
$(WAMR_SRC_ROOT)/core/shared/utils/bh_hashmap.c \
|
||||
$(WAMR_SRC_ROOT)/core/shared/utils/bh_list.c \
|
||||
$(WAMR_SRC_ROOT)/core/shared/utils/bh_log.c \
|
||||
$(WAMR_SRC_ROOT)/core/shared/utils/bh_vector.c \
|
||||
$(WAMR_SRC_ROOT)/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c \
|
||||
$(WAMR_SRC_ROOT)/core/iwasm/common/wasm_runtime_common.c \
|
||||
$(WAMR_SRC_ROOT)/core/iwasm/common/wasm_exec_env.c \
|
||||
$(WAMR_SRC_ROOT)/core/iwasm/common/wasm_native.c \
|
||||
$(WAMR_SRC_ROOT)/core/iwasm/common/wasm_memory.c \
|
||||
$(WAMR_SRC_ROOT)/core/iwasm/common/wasm_shared_memory.c \
|
||||
$(WAMR_SRC_ROOT)/core/iwasm/common/wasm_c_api.c \
|
||||
$(WAMR_SRC_ROOT)/core/iwasm/common/arch/invokeNative_ia32.s \
|
||||
$(WAMR_SRC_ROOT)/core/iwasm/interpreter/wasm_interp_classic.c \
|
||||
$(WAMR_SRC_ROOT)/core/iwasm/interpreter/wasm_loader.c \
|
||||
$(WAMR_SRC_ROOT)/core/iwasm/interpreter/wasm_runtime.c \
|
||||
$(WAMR_SRC_ROOT)/product-mini/platforms/freertos/simple/iwasm_main.c \
|
||||
$(WAMR_SRC_ROOT)/product-mini/platforms/freertos/simple/main.c
|
||||
46
product-mini/platforms/freertos/simple/test_wasm.h
Normal file
46
product-mini/platforms/freertos/simple/test_wasm.h
Normal file
@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
*/
|
||||
|
||||
/**
|
||||
* The byte array buffer is the file content of a test wasm binary file,
|
||||
* which is compiled by wasi-sdk toolchain from C source file of:
|
||||
* product-mini/app-samples/hello-world/main.c.
|
||||
*/
|
||||
unsigned char __aligned(4) wasm_test_file[] = {
|
||||
0x00, 0x61, 0x73, 0x6D, 0x01, 0x00, 0x00, 0x00, 0x01, 0x10, 0x03, 0x60,
|
||||
0x01, 0x7F, 0x01, 0x7F, 0x60, 0x02, 0x7F, 0x7F, 0x01, 0x7F, 0x60, 0x01,
|
||||
0x7F, 0x00, 0x02, 0x31, 0x04, 0x03, 0x65, 0x6E, 0x76, 0x04, 0x70, 0x75,
|
||||
0x74, 0x73, 0x00, 0x00, 0x03, 0x65, 0x6E, 0x76, 0x06, 0x6D, 0x61, 0x6C,
|
||||
0x6C, 0x6F, 0x63, 0x00, 0x00, 0x03, 0x65, 0x6E, 0x76, 0x06, 0x70, 0x72,
|
||||
0x69, 0x6E, 0x74, 0x66, 0x00, 0x01, 0x03, 0x65, 0x6E, 0x76, 0x04, 0x66,
|
||||
0x72, 0x65, 0x65, 0x00, 0x02, 0x03, 0x02, 0x01, 0x01, 0x04, 0x05, 0x01,
|
||||
0x70, 0x01, 0x01, 0x01, 0x05, 0x03, 0x01, 0x00, 0x01, 0x06, 0x13, 0x03,
|
||||
0x7F, 0x01, 0x41, 0xC0, 0x28, 0x0B, 0x7F, 0x00, 0x41, 0xBA, 0x08, 0x0B,
|
||||
0x7F, 0x00, 0x41, 0xC0, 0x28, 0x0B, 0x07, 0x2C, 0x04, 0x06, 0x6D, 0x65,
|
||||
0x6D, 0x6F, 0x72, 0x79, 0x02, 0x00, 0x0A, 0x5F, 0x5F, 0x64, 0x61, 0x74,
|
||||
0x61, 0x5F, 0x65, 0x6E, 0x64, 0x03, 0x01, 0x0B, 0x5F, 0x5F, 0x68, 0x65,
|
||||
0x61, 0x70, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x03, 0x02, 0x04, 0x6D, 0x61,
|
||||
0x69, 0x6E, 0x00, 0x04, 0x0A, 0xB2, 0x01, 0x01, 0xAF, 0x01, 0x01, 0x03,
|
||||
0x7F, 0x23, 0x80, 0x80, 0x80, 0x80, 0x00, 0x41, 0x20, 0x6B, 0x22, 0x02,
|
||||
0x24, 0x80, 0x80, 0x80, 0x80, 0x00, 0x41, 0x9B, 0x88, 0x80, 0x80, 0x00,
|
||||
0x10, 0x80, 0x80, 0x80, 0x80, 0x00, 0x1A, 0x02, 0x40, 0x02, 0x40, 0x41,
|
||||
0x80, 0x08, 0x10, 0x81, 0x80, 0x80, 0x80, 0x00, 0x22, 0x03, 0x0D, 0x00,
|
||||
0x41, 0xA8, 0x88, 0x80, 0x80, 0x00, 0x10, 0x80, 0x80, 0x80, 0x80, 0x00,
|
||||
0x1A, 0x41, 0x7F, 0x21, 0x04, 0x0C, 0x01, 0x0B, 0x20, 0x02, 0x20, 0x03,
|
||||
0x36, 0x02, 0x10, 0x41, 0x80, 0x88, 0x80, 0x80, 0x00, 0x20, 0x02, 0x41,
|
||||
0x10, 0x6A, 0x10, 0x82, 0x80, 0x80, 0x80, 0x00, 0x1A, 0x41, 0x00, 0x21,
|
||||
0x04, 0x20, 0x03, 0x41, 0x04, 0x6A, 0x41, 0x00, 0x2F, 0x00, 0x91, 0x88,
|
||||
0x80, 0x80, 0x00, 0x3B, 0x00, 0x00, 0x20, 0x03, 0x41, 0x00, 0x28, 0x00,
|
||||
0x8D, 0x88, 0x80, 0x80, 0x00, 0x36, 0x00, 0x00, 0x20, 0x02, 0x20, 0x03,
|
||||
0x36, 0x02, 0x00, 0x41, 0x93, 0x88, 0x80, 0x80, 0x00, 0x20, 0x02, 0x10,
|
||||
0x82, 0x80, 0x80, 0x80, 0x00, 0x1A, 0x20, 0x03, 0x10, 0x83, 0x80, 0x80,
|
||||
0x80, 0x00, 0x0B, 0x20, 0x02, 0x41, 0x20, 0x6A, 0x24, 0x80, 0x80, 0x80,
|
||||
0x80, 0x00, 0x20, 0x04, 0x0B, 0x0B, 0x41, 0x01, 0x00, 0x41, 0x80, 0x08,
|
||||
0x0B, 0x3A, 0x62, 0x75, 0x66, 0x20, 0x70, 0x74, 0x72, 0x3A, 0x20, 0x25,
|
||||
0x70, 0x0A, 0x00, 0x31, 0x32, 0x33, 0x34, 0x0A, 0x00, 0x62, 0x75, 0x66,
|
||||
0x3A, 0x20, 0x25, 0x73, 0x00, 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x77,
|
||||
0x6F, 0x72, 0x6C, 0x64, 0x21, 0x00, 0x6D, 0x61, 0x6C, 0x6C, 0x6F, 0x63,
|
||||
0x20, 0x62, 0x75, 0x66, 0x20, 0x66, 0x61, 0x69, 0x6C, 0x65, 0x64, 0x00
|
||||
};
|
||||
Reference in New Issue
Block a user