+1 sounds good to me. I dont think the amount of changes to the app are all that many and folks should be able to deal with them pretty easily.
> On Jan 20, 2017, at 1:35 PM, Sterling Hughes > <[email protected]> wrote: > > Hey, > > Changed the subject to call this out to more people. :-) > > Response above, because I generally think this is on the right track. In my > view, we should bite the bullet prior to 1.0, and move to this approach. I > think it greatly simplifies startup, and the concept of the default event > queue now ties into their being a default task. > > That said, I’m open to concerns from others — it is a fairly major change to > system startup, and it would be last minute. With Fabio’s last changes to > the hal_flash* APIs, I think we’re mostly good for 1.0 otherwise, and should > roll beta2 soon after this. > > Sterling > > On 20 Jan 2017, at 13:26, marko kiiskila wrote: > >> Hi, >> >> this is continuation of effort Chris started to improve sysinit. >> >> What I’ve started on this branch is an attempt to (hopefully) make things >> better. >> >> I added a concept of “main task”, which would be created by the system >> automatically, and it’s job would be to handle events from the os default >> event queue. >> Currently, you have to create this queue, and assign processing of it >> to a task inside your app. >> >> Another thing I’m doing here is move the call to main() to happen >> within this task’s context. At the moment this happens before OS >> has been initialized, or started. >> So now you can count on OS being up when doing package initialization. >> At the moment quite a few packages queue a 'start event’ to take place >> right after OS has started. This would not be needed anymore, as >> you can do everything during the init routine itself. >> >> Also, the default event queue gets assigned, and initialized before any of >> the packages have had their respective init routines called. Previously, >> this often happened after sysinit() had been called, and packages did >> not know where to queue that start event. >> >> I checked this in to a branch, and wanted to hear yay/nay before proceeding >> with this further. As this is a bit of an architectural change. >> Also, I want to hear if this should make it’s way in before 1.0. >> >> More specifically, take a look at how applications would have to change their >> main(); instead of calling os_start() in the end, they would start processing >> events from default queue. And they’d have specify the priority, and stack >> size of the main task. >> >> Another change I was going to make would involve changes in the way >> packages register routines to be called from sysinit(). >> Currently, there’s only one init() per-package. >> I was going to make it possible for a package to register multiple routines >> for this. That way you can break the initialization to multiple parts in >> cases >> where packages have interdependencies between each other. >> Also, the app should be able to interject pieces of code that gets executed >> in the middle of sysinit(). >> To make this easier, I was going to make the current initialization level >> numbering a bit wider. So the existing level “1” would become “100”, >> and “2” -> “200”. >> >> So, feedback about this approach, and then whether this is 1.0 or 1.1 >> kind of thing. >> >> Thanks, >> M >> >>> Begin forwarded message: >>> >>> From: [email protected] >>> Subject: incubator-mynewt-core git commit: os; spin up OS before calling. >>> main() gets called in context of main task. >>> Date: January 20, 2017 at 12:18:03 PM PST >>> To: [email protected] >>> Reply-To: [email protected] >>> >>> 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 >>> >>> >>>
