Repository: incubator-mynewt-core Updated Branches: refs/heads/def_task [created] 0c9fe5e2b
os; spin up OS before calling. main() gets called in context of main task. Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/0c9fe5e2 Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/0c9fe5e2 Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/0c9fe5e2 Branch: refs/heads/def_task Commit: 0c9fe5e2b3c6d3f6ca34e570e34eac6e55a40c66 Parents: 449ef81 Author: Marko Kiiskila <[email protected]> Authored: Fri Jan 20 12:16:20 2017 -0800 Committer: Marko Kiiskila <[email protected]> Committed: Fri Jan 20 12:16:20 2017 -0800 ---------------------------------------------------------------------- apps/bleprph/src/main.c | 47 +- apps/bleprph/syscfg.yml | 4 + apps/oled_test/pkg.yml | 47 ++ apps/oled_test/src/main.c | 467 +++++++++++++++++++ apps/slinky/src/main.c | 44 +- apps/slinky/syscfg.yml | 3 + hw/mcu/native/src/hal_system.c | 16 +- kernel/os/include/os/os.h | 2 + kernel/os/include/os/os_eventq.h | 1 - kernel/os/src/os.c | 24 + kernel/os/src/os_eventq.c | 23 +- kernel/os/syscfg.yml | 6 + kernel/os/test/src/eventq_test.c | 1 - kernel/os/test/src/mempool_test.c | 1 + kernel/os/test/src/mutex_test.c | 3 +- kernel/os/test/src/os_test.c | 5 +- kernel/os/test/src/sem_test.c | 73 +-- .../test/src/testcases/event_test_poll_0timo.c | 2 +- .../src/testcases/event_test_poll_single_sr.c | 3 +- .../os/test/src/testcases/event_test_poll_sr.c | 1 + .../src/testcases/event_test_poll_timeout_sr.c | 5 +- kernel/os/test/src/testcases/event_test_src.c | 3 +- kernel/os/test/src/testcases/os_callout_test.c | 7 +- .../test/src/testcases/os_callout_test_speak.c | 7 +- .../test/src/testcases/os_callout_test_stop.c | 9 +- libc/baselibc/src/start.c | 9 + .../mn_socket/test/src/testcases/socket_tests.c | 1 + test/testutil/src/testutil.c | 1 + 28 files changed, 660 insertions(+), 155 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/apps/bleprph/src/main.c ---------------------------------------------------------------------- diff --git a/apps/bleprph/src/main.c b/apps/bleprph/src/main.c index 65911a5..e75264d 100755 --- a/apps/bleprph/src/main.c +++ b/apps/bleprph/src/main.c @@ -42,14 +42,6 @@ /** Log data. */ struct log bleprph_log; -/** bleprph task settings. */ -#define BLEPRPH_TASK_PRIO 1 -#define BLEPRPH_STACK_SIZE (OS_STACK_ALIGN(428)) - -struct os_eventq bleprph_evq; -struct os_task bleprph_task; -bssnz_t os_stack_t *bleprph_stack; - static int bleprph_gap_event(struct ble_gap_event *event, void *arg); /** @@ -248,17 +240,6 @@ bleprph_on_sync(void) } /** - * Event loop for the main bleprph task. - */ -static void -bleprph_task_handler(void *unused) -{ - while (1) { - os_eventq_run(&bleprph_evq); - } -} - -/** * main * * The main function for the project. This function initializes the os, calls @@ -282,19 +263,6 @@ main(void) log_register("bleprph", &bleprph_log, &log_console_handler, NULL, LOG_SYSLEVEL); - /* Initialize eventq */ - os_eventq_init(&bleprph_evq); - - bleprph_stack = malloc(sizeof bleprph_stack * BLEPRPH_STACK_SIZE); - assert(bleprph_stack != NULL); - - /* Create the bleprph task. All application logic and NimBLE host - * operations are performed in this task. - */ - os_task_init(&bleprph_task, "bleprph", bleprph_task_handler, - NULL, BLEPRPH_TASK_PRIO, OS_WAIT_FOREVER, - bleprph_stack, BLEPRPH_STACK_SIZE); - /* Initialize the NimBLE host configuration. */ log_register("ble_hs", &ble_hs_log, &log_console_handler, NULL, LOG_SYSLEVEL); @@ -309,9 +277,6 @@ main(void) rc = ble_svc_gap_device_name_set("nimble-bleprph"); assert(rc == 0); - /* Set the default eventq for packages that lack a dedicated task. */ - os_eventq_dflt_set(&bleprph_evq); - conf_load(); /* If this app is acting as the loader in a split image setup, jump into @@ -327,11 +292,11 @@ main(void) } #endif - /* Start the OS */ - os_start(); - - /* os start should never return. If it does, this should be an error */ - assert(0); - + /* + * As the last thing, process events from default event queue. + */ + while (1) { + os_eventq_run(os_eventq_dflt_get()); + } return 0; } http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/apps/bleprph/syscfg.yml ---------------------------------------------------------------------- diff --git a/apps/bleprph/syscfg.yml b/apps/bleprph/syscfg.yml index 6db8c1e..f40e959 100644 --- a/apps/bleprph/syscfg.yml +++ b/apps/bleprph/syscfg.yml @@ -42,3 +42,7 @@ syscfg.vals: # Enable Config. CONFIG_NEWTMGR: 1 + + # OS main/default task + OS_MAIN_TASK_PRIO: 1 + OS_MAIN_STACK_SIZE: 428 http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/apps/oled_test/pkg.yml ---------------------------------------------------------------------- diff --git a/apps/oled_test/pkg.yml b/apps/oled_test/pkg.yml new file mode 100644 index 0000000..89c9cd0 --- /dev/null +++ b/apps/oled_test/pkg.yml @@ -0,0 +1,47 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +pkg.name: apps/oled_test +pkg.type: app +pkg.description: Example application which exercises OLED_display. +pkg.author: "Apache Mynewt <[email protected]>" +pkg.homepage: "http://mynewt.apache.org/" +pkg.keywords: + +pkg.deps: + - drivers/mpu_3050 + - fs/nffs + - libs/console/full + - libs/flash_test + - libs/imgmgr + - libs/newtmgr + - libs/os + - libs/shell + - libs/util + - sys/config + - sys/id + +pkg.cflags: + - "-DSTATS_NAME_ENABLE=1" + +pkg.cflags.NFFS: + - "-DNFFS_PRESENT" + +pkg.cflags.FCB: + - "-DFCB_PRESENT" http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/apps/oled_test/src/main.c ---------------------------------------------------------------------- diff --git a/apps/oled_test/src/main.c b/apps/oled_test/src/main.c new file mode 100755 index 0000000..f8494b9 --- /dev/null +++ b/apps/oled_test/src/main.c @@ -0,0 +1,467 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +#include <os/os.h> +#include <bsp/bsp.h> +#include <hal/hal_gpio.h> +#include <hal/hal_flash.h> +#include <console/console.h> +#include <shell/shell.h> +#include <config/config.h> +#include <hal/flash_map.h> +#include <hal/hal_system.h> +#ifdef NFFS_PRESENT +#include <fs/fs.h> +#include <nffs/nffs.h> +#include <config/config_file.h> +#elif FCB_PRESENT +#include <fcb/fcb.h> +#include <config/config_fcb.h> +#else +#error "Need NFFS or FCB for config storage" +#endif +#include <newtmgr/newtmgr.h> +#include <bootutil/image.h> +#include <bootutil/bootutil_misc.h> +#include <imgmgr/imgmgr.h> +#include <assert.h> +#include <string.h> +#include <json/json.h> +#include <flash_test/flash_test.h> +#include <reboot/log_reboot.h> +#include <os/os_time.h> +#include <id/id.h> + +#include <mpu_3050/mpu_3050.h> + +#ifdef ARCH_sim +#include <mcu/mcu_sim.h> +#endif + +/* Init all tasks */ +volatile int tasks_initialized; +int init_tasks(void); + +/* Task 1 */ +#define TASK1_PRIO (8) +#define TASK1_STACK_SIZE OS_STACK_ALIGN(192) +struct os_task task1; +os_stack_t stack1[TASK1_STACK_SIZE]; +static volatile int g_task1_loops; + +/* Task 2 */ +#define TASK2_PRIO (9) +#define TASK2_STACK_SIZE OS_STACK_ALIGN(128) +struct os_task task2; +os_stack_t stack2[TASK2_STACK_SIZE]; + +#define SHELL_TASK_PRIO (3) +#define SHELL_MAX_INPUT_LEN (256) +#define SHELL_TASK_STACK_SIZE (OS_STACK_ALIGN(384)) +os_stack_t shell_stack[SHELL_TASK_STACK_SIZE]; + +#define NEWTMGR_TASK_PRIO (4) +#define NEWTMGR_TASK_STACK_SIZE (OS_STACK_ALIGN(896)) +os_stack_t newtmgr_stack[NEWTMGR_TASK_STACK_SIZE]; + +static volatile int g_task2_loops; + +/* Global test semaphore */ +struct os_sem g_test_sem; + +/* For LED toggling */ +int g_led_pin; + +#ifdef NFFS_PRESENT +/* configuration file */ +#define MY_CONFIG_DIR "/cfg" +#define MY_CONFIG_FILE "/cfg/run" +#define MY_CONFIG_MAX_LINES 32 + +static struct conf_file my_conf = { + .cf_name = MY_CONFIG_FILE, + .cf_maxlines = MY_CONFIG_MAX_LINES +}; +#elif FCB_PRESENT +struct flash_area conf_fcb_area[NFFS_AREA_MAX + 1]; + +static struct conf_fcb my_conf = { + .cf_fcb.f_magic = 0xc09f6e5e, + .cf_fcb.f_sectors = conf_fcb_area +}; +#endif + +#define DEFAULT_MBUF_MPOOL_BUF_LEN (256) +#define DEFAULT_MBUF_MPOOL_NBUFS (10) + +uint8_t default_mbuf_mpool_data[DEFAULT_MBUF_MPOOL_BUF_LEN * + DEFAULT_MBUF_MPOOL_NBUFS]; + +struct os_mbuf_pool default_mbuf_pool; +struct os_mempool default_mbuf_mpool; + +static char *test_conf_get(int argc, char **argv, char *val, int max_len); +static int test_conf_set(int argc, char **argv, char *val); +static int test_conf_commit(void); +static int test_conf_export(void (*export_func)(char *name, char *val), + enum conf_export_tgt tgt); + +static struct conf_handler test_conf_handler = { + .ch_name = "test", + .ch_get = test_conf_get, + .ch_set = test_conf_set, + .ch_commit = test_conf_commit, + .ch_export = test_conf_export +}; + +static uint8_t test8; +static uint8_t test8_shadow; +static char test_str[32]; + +static char * +test_conf_get(int argc, char **argv, char *buf, int max_len) +{ + if (argc == 1) { + if (!strcmp(argv[0], "8")) { + return conf_str_from_value(CONF_INT8, &test8, buf, max_len); + } else if (!strcmp(argv[0], "str")) { + return test_str; + } + } + return NULL; +} + +static int +test_conf_set(int argc, char **argv, char *val) +{ + if (argc == 1) { + if (!strcmp(argv[0], "8")) { + return CONF_VALUE_SET(val, CONF_INT8, test8_shadow); + } else if (!strcmp(argv[0], "str")) { + return CONF_VALUE_SET(val, CONF_STRING, test_str); + } + } + return OS_ENOENT; +} + +static int +test_conf_commit(void) +{ + test8 = test8_shadow; + + return 0; +} + +static int +test_conf_export(void (*func)(char *name, char *val), enum conf_export_tgt tgt) +{ + char buf[4]; + + conf_str_from_value(CONF_INT8, &test8, buf, sizeof(buf)); + func("test/8", buf); + func("test/str", test_str); + return 0; +} + +void +task1_handler(void *arg) +{ + struct os_task *t; + + /* Set the led pin for the E407 devboard */ + g_led_pin = LED_BLINK_PIN; + hal_gpio_init_out(g_led_pin, 1); + + while (1) { + t = os_sched_get_current_task(); + assert(t->t_func == task1_handler); + + ++g_task1_loops; + + /* Wait one second */ + os_time_delay(1000); + + /* Toggle the LED */ + hal_gpio_toggle(g_led_pin); + + /* Release semaphore to task 2 */ + os_sem_release(&g_test_sem); + } +} + +#if 0 +#define SSD1306_DEV ARDUINO_ZERO_I2C + +static int +ssd1306_cli(int argc, char **argv) +{ + int rc; + + if (argc < 1) { + console_printf("too few args\n"); + return 0; + } + if (!strcmp(argv[1], "init")) { + rc = ssd1306_init(SSD1306_DEV); + console_printf("ssd1306_init() = %d\n", rc); + if (rc) { + return 0; + } + rc = ssd1306_enable(); + console_printf("ssd1306_enable() = %d\n", rc); + } else if (!strcmp(argv[1], "cls")) { + rc = ssd1306_fill(0); + console_printf("ssd1306_fill(0) = %d\n", rc); + } else if (!strcmp(argv[1], "fill")) { + rc = ssd1306_fill(255); + console_printf("ssd1306_fill(255) = %d\n", rc); + } + return 0; +} + +struct shell_cmd ssd1306_cli_cmd = { + .sc_cmd = "oled", + .sc_cmd_func = ssd1306_cli +}; +#endif + +#include <hal/hal_i2c.h> +#define GYRO_DEV 5 + +static int +mpu3050_cli(int argc, char **argv) +{ + int rc; + static struct mpu3050 gyro; + uint16_t x, y, z; + uint8_t reg, val; + + if (argc < 2) { + console_printf("too few args\n"); + return 0; + } + if (!strcmp(argv[1], "init")) { + rc = mpu3050_init(&gyro, GYRO_DEV, MPU3050_I2C_ADDR); + console_printf("mpu3050_init() = %d\n", rc); + if (rc) { + return 0; + } + } else if (!strcmp(argv[1], "raw")) { + rc = mpu3050_read_xyz(&gyro, &x, &y, &z); + console_printf("mpu3050_read_raw() = %d\n", rc); + if (rc == 0) { + console_printf("x=%d y=%d x=%d\n", x, y, z); + } + } else if (!strcmp(argv[1], "reg")) { + if (argc < 3) { + return 0; + } + + reg = strtoul(argv[2], 0, 0); + rc = mpu3050_read_reg(&gyro, reg, &val); + console_printf("mpu3050_read_reg(%d) = %d\n", reg, rc); + if (rc == 0) { + console_printf("val=%x\n", val); + } + } else if (!strcmp(argv[1], "probe")) { + uint32_t now, then; + if (argc < 3) { + console_printf("more args needed\n"); + return 0; + } + + val = strtoul(argv[2], 0, 0); + then = os_time_get(); + rc = hal_i2c_master_probe(0, 0x40, val); + now = os_time_get(); + console_printf("probe=%d %ld->%ld\n", rc, then, now); + } else { + console_printf("unknown cmd %s\n", argv[1]); + } + return 0; +} + +struct shell_cmd mpu3050_cli_cmd = { + .sc_cmd = "gyro", + .sc_cmd_func = mpu3050_cli +}; + +/** + * init_tasks + * + * Called by main.c after os_init(). This function performs initializations + * that are required before tasks are running. + * + * @return int 0 success; error otherwise. + */ +int +init_tasks(void) +{ + /* Initialize global test semaphore */ + os_sem_init(&g_test_sem, 0); + + os_task_init(&task1, "task1", task1_handler, NULL, + TASK1_PRIO, OS_WAIT_FOREVER, stack1, TASK1_STACK_SIZE); + + tasks_initialized = 1; + return 0; +} + +#ifdef NFFS_PRESENT +static void +setup_for_nffs(void) +{ + /* NFFS_AREA_MAX is defined in the BSP-specified bsp.h header file. */ + struct nffs_area_desc descs[NFFS_AREA_MAX + 1]; + int cnt; + int rc; + + /* Initialize nffs's internal state. */ + rc = nffs_init(); + assert(rc == 0); + + /* Convert the set of flash blocks we intend to use for nffs into an array + * of nffs area descriptors. + */ + cnt = NFFS_AREA_MAX; + rc = flash_area_to_nffs_desc(FLASH_AREA_NFFS, &cnt, descs); + assert(rc == 0); + + /* Attempt to restore an existing nffs file system from flash. */ + if (nffs_detect(descs) == FS_ECORRUPT) { + /* No valid nffs instance detected; format a new one. */ + rc = nffs_format(descs); + assert(rc == 0); + } + + fs_mkdir(MY_CONFIG_DIR); + rc = conf_file_src(&my_conf); + assert(rc == 0); + rc = conf_file_dst(&my_conf); + assert(rc == 0); +} + +#elif FCB_PRESENT + +static void +setup_for_fcb(void) +{ + int cnt; + int rc; + + rc = flash_area_to_sectors(FLASH_AREA_NFFS, &cnt, NULL); + assert(rc == 0); + assert(cnt <= sizeof(conf_fcb_area) / sizeof(conf_fcb_area[0])); + flash_area_to_sectors(FLASH_AREA_NFFS, &cnt, conf_fcb_area); + + my_conf.cf_fcb.f_sector_cnt = cnt; + + rc = conf_fcb_src(&my_conf); + if (rc) { + for (cnt = 0; cnt < my_conf.cf_fcb.f_sector_cnt; cnt++) { + flash_area_erase(&conf_fcb_area[cnt], 0, + conf_fcb_area[cnt].fa_size); + } + rc = conf_fcb_src(&my_conf); + } + assert(rc == 0); + rc = conf_fcb_dst(&my_conf); + assert(rc == 0); +} + +#endif + +/** + * main + * + * The main function for the project. This function initializes the os, calls + * init_tasks to initialize tasks (and possibly other objects), then starts the + * OS. We should not return from os start. + * + * @return int NOTE: this function should never return! + */ +int +main(int argc, char **argv) +{ + int rc; + struct image_version ver; + +#ifdef ARCH_sim + mcu_sim_parse_args(argc, argv); +#endif + + conf_init(); + rc = conf_register(&test_conf_handler); + assert(rc == 0); + + os_init(); + + rc = os_mempool_init(&default_mbuf_mpool, DEFAULT_MBUF_MPOOL_NBUFS, + DEFAULT_MBUF_MPOOL_BUF_LEN, default_mbuf_mpool_data, + "default_mbuf_data"); + assert(rc == 0); + + rc = os_mbuf_pool_init(&default_mbuf_pool, &default_mbuf_mpool, + DEFAULT_MBUF_MPOOL_BUF_LEN, DEFAULT_MBUF_MPOOL_NBUFS); + assert(rc == 0); + + rc = os_msys_register(&default_mbuf_pool); + assert(rc == 0); + + rc = hal_flash_init(); + assert(rc == 0); + +#ifdef NFFS_PRESENT + setup_for_nffs(); +#elif FCB_PRESENT + setup_for_fcb(); +#endif + + id_init(); + + shell_task_init(SHELL_TASK_PRIO, shell_stack, SHELL_TASK_STACK_SIZE, + SHELL_MAX_INPUT_LEN); + + nmgr_task_init(NEWTMGR_TASK_PRIO, newtmgr_stack, NEWTMGR_TASK_STACK_SIZE); + imgmgr_module_init(); + + if (imgr_my_version(&ver) == 0) { + console_printf("\nSlinky %u.%u.%u.%u\n", + ver.iv_major, ver.iv_minor, ver.iv_revision, + (unsigned int)ver.iv_build_num); + } else { + console_printf("\nSlinky\n"); + } + +#if 0 + shell_cmd_register(&ssd1306_cli_cmd); +#endif + shell_cmd_register(&mpu3050_cli_cmd); + + conf_load(); + + rc = init_tasks(); + + os_start(); + + /* os start should never return. If it does, this should be an error */ + assert(0); + + return rc; +} + http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/apps/slinky/src/main.c ---------------------------------------------------------------------- diff --git a/apps/slinky/src/main.c b/apps/slinky/src/main.c index 9007fdd..956ce38 100755 --- a/apps/slinky/src/main.c +++ b/apps/slinky/src/main.c @@ -61,11 +61,6 @@ static volatile int g_task1_loops; #define TASK2_STACK_SIZE OS_STACK_ALIGN(64) static struct os_task task2; -/* Task 3 */ -#define TASK3_PRIO (10) -#define TASK3_STACK_SIZE OS_STACK_ALIGN(512) -static struct os_task task3; - static struct log my_log; static volatile int g_task2_loops; @@ -106,8 +101,6 @@ static char test_str[32]; static uint32_t cbmem_buf[MAX_CBMEM_BUF]; static struct cbmem cbmem; -static struct os_eventq slinky_evq; - static char * test_conf_get(int argc, char **argv, char *buf, int max_len) { @@ -212,18 +205,6 @@ task2_handler(void *arg) } /** - * This task serves as a container for the shell and newtmgr packages. These - * packages enqueue timer events when they need this task to do work. - */ -static void -task3_handler(void *arg) -{ - while (1) { - os_eventq_run(&slinky_evq); - } -} - -/** * init_tasks * * Called by main.c after sysinit(). This function performs initializations @@ -250,19 +231,6 @@ init_tasks(void) os_task_init(&task2, "task2", task2_handler, NULL, TASK2_PRIO, OS_WAIT_FOREVER, pstack, TASK2_STACK_SIZE); - - pstack = malloc(sizeof(os_stack_t)*TASK3_STACK_SIZE); - assert(pstack); - - os_task_init(&task3, "task3", task3_handler, NULL, - TASK3_PRIO, OS_WAIT_FOREVER, pstack, TASK3_STACK_SIZE); - - /* Initialize eventq and designate it as the default. Packages that need - * to schedule work items will piggyback on this eventq. Example packages - * which do this are sys/shell and mgmt/newtmgr. - */ - os_eventq_init(&slinky_evq); - os_eventq_dflt_set(&slinky_evq); } /** @@ -318,10 +286,10 @@ main(int argc, char **argv) } #endif - os_start(); - - /* os start should never return. If it does, this should be an error */ - assert(0); - - return rc; + /* + * As the last thing, process events from default event queue. + */ + while (1) { + os_eventq_run(os_eventq_dflt_get()); + } } http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/apps/slinky/syscfg.yml ---------------------------------------------------------------------- diff --git a/apps/slinky/syscfg.yml b/apps/slinky/syscfg.yml index 7438a81..1beee37 100644 --- a/apps/slinky/syscfg.yml +++ b/apps/slinky/syscfg.yml @@ -40,3 +40,6 @@ syscfg.vals: STATS_NEWTMGR: 1 LOG_NEWTMGR: 1 CONFIG_NEWTMGR: 1 + + OS_MAIN_TASK_PRIO: 10 + OS_MAIN_STACKS_SIZE: 512 http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/hw/mcu/native/src/hal_system.c ---------------------------------------------------------------------- diff --git a/hw/mcu/native/src/hal_system.c b/hw/mcu/native/src/hal_system.c index 5931c81..59927c9 100644 --- a/hw/mcu/native/src/hal_system.c +++ b/hw/mcu/native/src/hal_system.c @@ -26,6 +26,10 @@ #include "hal/hal_system.h" #include "mcu/mcu_sim.h" +#if MYNEWT_VAL(OS_SCHEDULING) +#include <os/os.h> +#endif + void hal_system_reset(void) { @@ -59,8 +63,14 @@ void mcu_sim_parse_args(int argc, char **argv) { int ch; - char *progname = argv[0]; + char *progname; +#if MYNEWT_VAL(OS_SCHEDULING) + if (g_os_started) { + return; + } +#endif + progname = argv[0]; while ((ch = getopt(argc, argv, "hf:u:")) != -1) { switch (ch) { case 'f': @@ -77,4 +87,8 @@ mcu_sim_parse_args(int argc, char **argv) break; } } +#if MYNEWT_VAL(OS_SCHEDULING) + os_init(); + os_start(); +#endif } http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/kernel/os/include/os/os.h ---------------------------------------------------------------------- diff --git a/kernel/os/include/os/os.h b/kernel/os/include/os/os.h index 0939dac..17f42a8 100644 --- a/kernel/os/include/os/os.h +++ b/kernel/os/include/os/os.h @@ -83,6 +83,8 @@ enum os_error { typedef enum os_error os_error_t; #define OS_IDLE_PRIO (0xff) +#define OS_MAIN_TASK_PRIO MYNEWT_VAL(OS_MAIN_TASK_PRIO) +#define OS_MAIN_STACK_SIZE MYNEWT_VAL(OS_MAIN_STACK_SIZE) void os_init(void); void os_start(void); http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/kernel/os/include/os/os_eventq.h ---------------------------------------------------------------------- diff --git a/kernel/os/include/os/os_eventq.h b/kernel/os/include/os/os_eventq.h index cfe0d34..092e724 100644 --- a/kernel/os/include/os/os_eventq.h +++ b/kernel/os/include/os/os_eventq.h @@ -53,7 +53,6 @@ struct os_event *os_eventq_get(struct os_eventq *); void os_eventq_run(struct os_eventq *evq); struct os_event *os_eventq_poll(struct os_eventq **, int, os_time_t); void os_eventq_remove(struct os_eventq *, struct os_event *); -void os_eventq_dflt_set(struct os_eventq *evq); struct os_eventq *os_eventq_dflt_get(void); void os_eventq_designate(struct os_eventq **dst, struct os_eventq *val, struct os_event *start_ev); http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/kernel/os/src/os.c ---------------------------------------------------------------------- diff --git a/kernel/os/src/os.c b/kernel/os/src/os.c index 6dfe128..374f5f1 100644 --- a/kernel/os/src/os.c +++ b/kernel/os/src/os.c @@ -42,6 +42,10 @@ struct os_task g_idle_task; os_stack_t g_idle_task_stack[OS_STACK_ALIGN(OS_IDLE_STACK_SIZE)]; uint32_t g_os_idle_ctr; + +static struct os_task os_main_task; +static os_stack_t os_main_stack[OS_STACK_ALIGN(OS_MAIN_STACK_SIZE)]; + /* Default zero. Set by the architecture specific code when os is started. */ int g_os_started; @@ -123,6 +127,21 @@ os_started(void) return (g_os_started); } +static void +os_main(void *arg) +{ + extern int main(int argc, char **argv); + + os_eventq_init(os_eventq_dflt_get()); +#if !MYNEWT_VAL(SELFTEST) + main(0, NULL); +#else + while (1) { + os_eventq_run(os_eventq_dflt_get()); + } +#endif + assert(0); +} void os_init_idle_task(void) @@ -138,6 +157,11 @@ os_init_idle_task(void) rc = os_sanity_init(); assert(rc == 0); + rc = os_task_init(&os_main_task, "main", os_main, NULL, + OS_MAIN_TASK_PRIO, OS_WAIT_FOREVER, os_main_stack, + OS_STACK_ALIGN(OS_MAIN_STACK_SIZE)); + assert(rc == 0); + assert(MYNEWT_VAL(WATCHDOG_INTERVAL) - 200 > MYNEWT_VAL(SANITY_INTERVAL)); rc = hal_watchdog_init(MYNEWT_VAL(WATCHDOG_INTERVAL)); http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/kernel/os/src/os_eventq.c ---------------------------------------------------------------------- diff --git a/kernel/os/src/os_eventq.c b/kernel/os/src/os_eventq.c index d443dfd..d5be9ae 100644 --- a/kernel/os/src/os_eventq.c +++ b/kernel/os/src/os_eventq.c @@ -29,7 +29,7 @@ * @{ */ -static struct os_eventq *os_eventq_main; +static struct os_eventq os_eventq_main; /** * Initialize the event queue @@ -279,29 +279,14 @@ os_eventq_remove(struct os_eventq *evq, struct os_event *ev) } /** - * Assigns the default event queue. Packages which require an event queue, and - * which haven't been explicitly told which one to use, will use this one - * automatically. + * Retrieves the default event queue processed by OS main task. * - * @param evq The event queue to designate as the default. - */ -void -os_eventq_dflt_set(struct os_eventq *evq) -{ - os_eventq_main = evq; -} - -/** - * Retrieves the default event queue, if any. The default event queue is - * designated via a call to os_eventq_dflt_set(). - * - * @return The default event queue, no NULL if there isn't - * any. + * @return The default event queue. */ struct os_eventq * os_eventq_dflt_get(void) { - return os_eventq_main; + return &os_eventq_main; } void http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/kernel/os/syscfg.yml ---------------------------------------------------------------------- diff --git a/kernel/os/syscfg.yml b/kernel/os/syscfg.yml index e175bce..e329059 100644 --- a/kernel/os/syscfg.yml +++ b/kernel/os/syscfg.yml @@ -19,6 +19,12 @@ # Package: kernel/os syscfg.defs: + OS_MAIN_TASK_PRIO: + description: 'Priority of initialization and main task' + value: 0xfe + OS_MAIN_STACK_SIZE: + description: 'Stack size of initialization and main task' + value: 1024 OS_CLI: description: 'TBD' value: 0 http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/kernel/os/test/src/eventq_test.c ---------------------------------------------------------------------- diff --git a/kernel/os/test/src/eventq_test.c b/kernel/os/test/src/eventq_test.c index 01e8f3f..a48546d 100644 --- a/kernel/os/test/src/eventq_test.c +++ b/kernel/os/test/src/eventq_test.c @@ -197,7 +197,6 @@ eventq_task_poll_timeout_send(void *arg) /* This task sleeps until the receive task completes the test. */ os_time_delay(1000000); - } /* Receiving multiple event queues with a time failure */ http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/kernel/os/test/src/mempool_test.c ---------------------------------------------------------------------- diff --git a/kernel/os/test/src/mempool_test.c b/kernel/os/test/src/mempool_test.c index 7d86c2c..5be2aca 100644 --- a/kernel/os/test/src/mempool_test.c +++ b/kernel/os/test/src/mempool_test.c @@ -60,6 +60,7 @@ mempool_test_get_pool_size(int num_blocks, int block_size) void os_mempool_ts_pretest(void* arg) { + os_init(); sysinit(); } http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/kernel/os/test/src/mutex_test.c ---------------------------------------------------------------------- diff --git a/kernel/os/test/src/mutex_test.c b/kernel/os/test/src/mutex_test.c index 6f8ee69..ae05a27 100644 --- a/kernel/os/test/src/mutex_test.c +++ b/kernel/os/test/src/mutex_test.c @@ -296,7 +296,7 @@ mutex_task3_handler(void *arg) } } -void +void mutex_task4_handler(void *arg) { os_error_t err; @@ -335,6 +335,7 @@ os_mutex_tc_pretest(void* arg) /* * Only call if running in "native" simulated environment */ + os_init(); sysinit(); #endif return; http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/kernel/os/test/src/os_test.c ---------------------------------------------------------------------- diff --git a/kernel/os/test/src/os_test.c b/kernel/os/test/src/os_test.c index 2e5bf9d..33b0868 100644 --- a/kernel/os/test/src/os_test.c +++ b/kernel/os/test/src/os_test.c @@ -73,6 +73,7 @@ os_test_restart(void) void os_selftest_pretest_cb(void* arg) { + os_init(); sysinit(); } @@ -92,10 +93,10 @@ os_test_all(void) tu_suite_set_init_cb(os_mempool_test_init, NULL); os_mempool_test_suite(); - +#if 1 tu_suite_set_init_cb(os_mutex_test_init, NULL); os_mutex_test_suite(); - +#endif tu_suite_set_init_cb(os_sem_test_init, NULL); os_sem_test_suite(); http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/kernel/os/test/src/sem_test.c ---------------------------------------------------------------------- diff --git a/kernel/os/test/src/sem_test.c b/kernel/os/test/src/sem_test.c index 98348b4..42e7bfe 100644 --- a/kernel/os/test/src/sem_test.c +++ b/kernel/os/test/src/sem_test.c @@ -6,7 +6,7 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, @@ -44,23 +44,23 @@ os_stack_t *stack4; struct os_sem g_sem1; #endif /* MYNEWT_VAL(SELFTEST) */ -/* +/* * TEST NUMBERS: * 10: In this test we have the highest priority task getting the semaphore * then sleeping. Two lower priority tasks then wake up and attempt to get * the semaphore. They are blocked until the higher priority task releases * the semaphore, at which point the lower priority tasks should wake up in * order, get the semaphore, then release it and go back to sleep. - * + * */ char sem_test_buf[128]; /** * sem test disp sem - * - * Display semaphore contents - * - * @param sem + * + * Display semaphore contents + * + * @param sem */ const char * sem_test_sem_to_s(const struct os_sem *sem) @@ -71,7 +71,7 @@ sem_test_sem_to_s(const struct os_sem *sem) return sem_test_buf; } -void +void sem_test_sleep_task_handler(void *arg) { struct os_task *t; @@ -104,13 +104,13 @@ sem_test_pend_release_loop(int delay, int timeout, int itvl) } /** - * sem test basic - * + * sem test basic + * * Basic semaphore tests - * - * @return int + * + * @return int */ -void +void sem_test_basic_handler(void *arg) { struct os_task *t; @@ -178,7 +178,7 @@ sem_test_basic_handler(void *arg) #endif } -void +void sem_test_1_task1_handler(void *arg) { os_error_t err; @@ -208,69 +208,69 @@ sem_test_1_task1_handler(void *arg) #endif } -void -sem_test_1_task2_handler(void *arg) +void +sem_test_1_task2_handler(void *arg) { sem_test_pend_release_loop(0, OS_TICKS_PER_SEC / 10, OS_TICKS_PER_SEC / 10); } -void -sem_test_1_task3_handler(void *arg) +void +sem_test_1_task3_handler(void *arg) { sem_test_pend_release_loop(0, OS_TIMEOUT_NEVER, OS_TICKS_PER_SEC * 2); } -void -sem_test_2_task2_handler(void *arg) +void +sem_test_2_task2_handler(void *arg) { sem_test_pend_release_loop(0, 2000, 2000); } -void -sem_test_2_task3_handler(void *arg) +void +sem_test_2_task3_handler(void *arg) { sem_test_pend_release_loop(0, OS_TIMEOUT_NEVER, 2000); } -void -sem_test_2_task4_handler(void *arg) +void +sem_test_2_task4_handler(void *arg) { sem_test_pend_release_loop(0, 2000, 2000); } -void -sem_test_3_task2_handler(void *arg) +void +sem_test_3_task2_handler(void *arg) { sem_test_pend_release_loop(100, 2000, 2000); } -void -sem_test_3_task3_handler(void *arg) +void +sem_test_3_task3_handler(void *arg) { sem_test_pend_release_loop(150, 2000, 2000); } -void -sem_test_3_task4_handler(void *arg) +void +sem_test_3_task4_handler(void *arg) { sem_test_pend_release_loop(0, 2000, 2000); } -void -sem_test_4_task2_handler(void *arg) +void +sem_test_4_task2_handler(void *arg) { sem_test_pend_release_loop(60, 2000, 2000); } -void -sem_test_4_task3_handler(void *arg) +void +sem_test_4_task3_handler(void *arg) { sem_test_pend_release_loop(60, 2000, 2000); } -void -sem_test_4_task4_handler(void *arg) +void +sem_test_4_task4_handler(void *arg) { sem_test_pend_release_loop(0, 2000, 2000); } @@ -279,6 +279,7 @@ void os_sem_tc_pretest(void* arg) { #if MYNEWT_VAL(SELFTEST) + os_init(); sysinit(); #endif return; http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/kernel/os/test/src/testcases/event_test_poll_0timo.c ---------------------------------------------------------------------- diff --git a/kernel/os/test/src/testcases/event_test_poll_0timo.c b/kernel/os/test/src/testcases/event_test_poll_0timo.c index 5e86395..b53418e 100644 --- a/kernel/os/test/src/testcases/event_test_poll_0timo.c +++ b/kernel/os/test/src/testcases/event_test_poll_0timo.c @@ -6,7 +6,7 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/kernel/os/test/src/testcases/event_test_poll_single_sr.c ---------------------------------------------------------------------- diff --git a/kernel/os/test/src/testcases/event_test_poll_single_sr.c b/kernel/os/test/src/testcases/event_test_poll_single_sr.c index 122980e..72e1a5f 100644 --- a/kernel/os/test/src/testcases/event_test_poll_single_sr.c +++ b/kernel/os/test/src/testcases/event_test_poll_single_sr.c @@ -26,10 +26,11 @@ TEST_CASE(event_test_poll_single_sr) #if MYNEWT_VAL(SELFTEST) /* Initializing the OS */ + os_init(); sysinit(); #endif /* Initialize the task */ - os_task_init(&eventq_task_poll_single_s, "eventq_task_poll_single_s", + os_task_init(&eventq_task_poll_single_s, "eventq_task_poll_single_s", eventq_task_poll_single_send, NULL, SEND_TASK_POLL_SINGLE_PRIO, OS_WAIT_FOREVER, eventq_task_stack_poll_single_s, POLL_STACK_SIZE); http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/kernel/os/test/src/testcases/event_test_poll_sr.c ---------------------------------------------------------------------- diff --git a/kernel/os/test/src/testcases/event_test_poll_sr.c b/kernel/os/test/src/testcases/event_test_poll_sr.c index 1d003d5..e981839 100644 --- a/kernel/os/test/src/testcases/event_test_poll_sr.c +++ b/kernel/os/test/src/testcases/event_test_poll_sr.c @@ -25,6 +25,7 @@ TEST_CASE(event_test_poll_sr) #if MYNEWT_VAL(SELFTEST) /* Initializing the OS */ + os_init(); sysinit(); #endif /* Initialize the task */ http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/kernel/os/test/src/testcases/event_test_poll_timeout_sr.c ---------------------------------------------------------------------- diff --git a/kernel/os/test/src/testcases/event_test_poll_timeout_sr.c b/kernel/os/test/src/testcases/event_test_poll_timeout_sr.c index 3972fa4..d7bccee 100644 --- a/kernel/os/test/src/testcases/event_test_poll_timeout_sr.c +++ b/kernel/os/test/src/testcases/event_test_poll_timeout_sr.c @@ -6,7 +6,7 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, @@ -25,10 +25,11 @@ TEST_CASE(event_test_poll_timeout_sr) #if MYNEWT_VAL(SELFTEST) /* Initializing the OS */ + os_init(); sysinit(); #endif /* Initialize the task */ - os_task_init(&eventq_task_poll_timeout_s, "eventq_task_poll_timeout_s", + os_task_init(&eventq_task_poll_timeout_s, "eventq_task_poll_timeout_s", eventq_task_poll_timeout_send, NULL, SEND_TASK_POLL_TIMEOUT_PRIO, OS_WAIT_FOREVER, eventq_task_stack_poll_timeout_s, POLL_STACK_SIZE); http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/kernel/os/test/src/testcases/event_test_src.c ---------------------------------------------------------------------- diff --git a/kernel/os/test/src/testcases/event_test_src.c b/kernel/os/test/src/testcases/event_test_src.c index 9d3e35b..f1adbea 100644 --- a/kernel/os/test/src/testcases/event_test_src.c +++ b/kernel/os/test/src/testcases/event_test_src.c @@ -6,7 +6,7 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, @@ -24,6 +24,7 @@ TEST_CASE(event_test_sr) #if MYNEWT_VAL(SELFTEST) /* Initializing the OS */ + os_init(); sysinit(); #endif /* Initialize the task */ http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/kernel/os/test/src/testcases/os_callout_test.c ---------------------------------------------------------------------- diff --git a/kernel/os/test/src/testcases/os_callout_test.c b/kernel/os/test/src/testcases/os_callout_test.c index fdc2926..a03570a 100644 --- a/kernel/os/test/src/testcases/os_callout_test.c +++ b/kernel/os/test/src/testcases/os_callout_test.c @@ -6,7 +6,7 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, @@ -24,9 +24,10 @@ TEST_CASE(callout_test) #if MYNEWT_VAL(SELFTEST) /* Initializing the OS */ + os_init(); sysinit(); #endif - + /* Initialize the sending task */ os_task_init(&callout_task_struct_send, "callout_task_send", callout_task_send, NULL, SEND_CALLOUT_TASK_PRIO, OS_WAIT_FOREVER, @@ -38,7 +39,7 @@ TEST_CASE(callout_test) callout_task_stack_receive, CALLOUT_STACK_SIZE); os_eventq_init(&callout_evq); - + /* Initialize the callout function */ os_callout_init(&callout_test_c, &callout_evq, my_callout, NULL); http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/kernel/os/test/src/testcases/os_callout_test_speak.c ---------------------------------------------------------------------- diff --git a/kernel/os/test/src/testcases/os_callout_test_speak.c b/kernel/os/test/src/testcases/os_callout_test_speak.c index 2d08085..de8664f 100644 --- a/kernel/os/test/src/testcases/os_callout_test_speak.c +++ b/kernel/os/test/src/testcases/os_callout_test_speak.c @@ -24,9 +24,10 @@ TEST_CASE(callout_test_speak) #if MYNEWT_VAL(SELFTEST) /* Initializing the OS */ + os_init(); sysinit(); #endif - + /* Initialize the sending task */ os_task_init(&callout_task_struct_speak, "callout_task_speak", callout_task_stop_speak, NULL, SPEAK_CALLOUT_TASK_PRIO, @@ -38,10 +39,10 @@ TEST_CASE(callout_test_speak) OS_WAIT_FOREVER, callout_task_stack_listen, CALLOUT_STACK_SIZE); os_eventq_init(&callout_evq); - + /* Initialize the callout function */ os_callout_init(&callout_speak, &callout_evq, - my_callout_speak_func, NULL); + my_callout_speak_func, NULL); #if MYNEWT_VAL(SELFTEST) /* Does not return until OS_restart is called */ http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/kernel/os/test/src/testcases/os_callout_test_stop.c ---------------------------------------------------------------------- diff --git a/kernel/os/test/src/testcases/os_callout_test_stop.c b/kernel/os/test/src/testcases/os_callout_test_stop.c index 15733c1..6b1a8e7 100644 --- a/kernel/os/test/src/testcases/os_callout_test_stop.c +++ b/kernel/os/test/src/testcases/os_callout_test_stop.c @@ -6,7 +6,7 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, @@ -25,6 +25,7 @@ TEST_CASE(callout_test_stop) #if MYNEWT_VAL(SELFTEST) /* Initializing the OS */ + os_init(); sysinit(); #endif @@ -39,12 +40,12 @@ TEST_CASE(callout_test_stop) RECEIVE_STOP_CALLOUT_TASK_PRIO, OS_WAIT_FOREVER, callout_task_stack_stop_receive, CALLOUT_STACK_SIZE); - for(k = 0; k< MULTI_SIZE; k++){ + for(k = 0; k < MULTI_SIZE; k++){ os_eventq_init(&callout_stop_evq[k]); } - + /* Initialize the callout function */ - for(k = 0; k<MULTI_SIZE; k++){ + for (k = 0; k < MULTI_SIZE; k++){ os_callout_init(&callout_stop_test[k], &callout_stop_evq[k], my_callout_stop_func, NULL); } http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/libc/baselibc/src/start.c ---------------------------------------------------------------------- diff --git a/libc/baselibc/src/start.c b/libc/baselibc/src/start.c index 9848c76..febf5b2 100644 --- a/libc/baselibc/src/start.c +++ b/libc/baselibc/src/start.c @@ -18,17 +18,26 @@ */ #include <stdlib.h> +#include <sysinit/sysinit.h> + extern int main(int argc, char **argv); +extern void os_init(void); +extern void os_start(void); /* * Rudimentary startup function. */ void _start(void) { +#if !MYNEWT_VAL(OS_SCHEDULING) int rc; rc = main(0, NULL); exit(rc); +#else + os_init(); + os_start(); +#endif } void http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/net/ip/mn_socket/test/src/testcases/socket_tests.c ---------------------------------------------------------------------- diff --git a/net/ip/mn_socket/test/src/testcases/socket_tests.c b/net/ip/mn_socket/test/src/testcases/socket_tests.c index 3a81cc8..8bfc2b8 100644 --- a/net/ip/mn_socket/test/src/testcases/socket_tests.c +++ b/net/ip/mn_socket/test/src/testcases/socket_tests.c @@ -20,6 +20,7 @@ TEST_CASE(socket_tests) { + os_init(); sysinit(); os_sem_init(&test_sem, 0); http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c9fe5e2/test/testutil/src/testutil.c ---------------------------------------------------------------------- diff --git a/test/testutil/src/testutil.c b/test/testutil/src/testutil.c index 6abb62b..9a1c0fe 100644 --- a/test/testutil/src/testutil.c +++ b/test/testutil/src/testutil.c @@ -41,6 +41,7 @@ int tu_init(void) { #if MYNEWT_VAL(SELFTEST) + os_init(); sysinit(); #endif
