Also, one other thing to look at with the new sysinit changes. I think we probably need to revise the ordering on device initialization.

Right now device init has the following:

/*
 * Initialization order, defines when a device should be initialized
 * by the Mynewt kernel.
 *
 */
#define OS_DEV_INIT_PRIMARY   (1)
#define OS_DEV_INIT_SECONDARY (2)
#define OS_DEV_INIT_KERNEL    (3)

#define OS_DEV_INIT_F_CRITICAL (1 << 0)


#define OS_DEV_INIT_PRIO_DEFAULT (0xff)

And these stages are called:

In os_init():  PRIMARY, SECONDARY
In os_start(): KERNEL

I think it makes sense to more clearly map these stages to the new sparsely designed sysinit stages, and add device init hooks throughout the system startup.

Given the new sparse IDs, I’m thinking that we could do it per-ID range, i.e. os_dev_initializeall(100), os_dev_initializeall(200), etc. Within that range, devices could be initialized by priority.

Thoughts?

Sterling

On 23 Jan 2017, at 19:12, Jacob Rosenthal wrote:

Looks like this breaks splitty as app, bleprph as loader
Error: Syscfg ambiguities detected:
    Setting: OS_MAIN_TASK_PRIO, Packages: [apps/bleprph, apps/splitty]
Setting history (newest -> oldest):
OS_MAIN_TASK_PRIO: [apps/splitty:10, apps/bleprph:1, kernel/os:0xfe]

Setting OS_MAIN_TASK_PRIO in splitty to 1 made this go away..but Dont know if theres other complications related to that though.Then it gets stuck
after confirming image and resetting while entering the app image at
gcc_startup_nrf51.s Default_Handler

On Mon, Jan 23, 2017 at 4:48 PM, marko kiiskila <[email protected]> wrote:

I pushed this change to develop.

You’ll need to update the newt tool as part of this change; as sysinit
calls should not include call to os_init() anymore.

After this change you can specify multiple calls to be made to your package
from sysinit().
Tell newt to do this by having this kind of block in your pkg.yml.

pkg.init:
    ble_hs_init: 200
    ble_hs_init2: 500

I.e. in pkg.init block specify function name followed by call order.

And app main() should minimally look like:

int
main(int argc, char **argv)
{
#ifdef ARCH_sim
    mcu_sim_parse_args(argc, argv);
#endif

    sysinit();

    while (1) {
        os_eventq_run(os_eventq_dflt_get());
    }
    assert(0);

    return rc;
}

So there’s a call to mcu_sim_parse_args() (in case app can execute in
simulator),
call to sysinit(), which calls all the package init routines, followed by
this main task
calling os_eventq_run() for default task.

I might also want to lock the scheduler for the duration of call to
sysinit();
but we don’t have that facility yet. This might be a good time to add it?

On Jan 21, 2017, at 9:00 AM, will sanfilippo <[email protected]> wrote:

+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






Reply via email to