diff options
author | Joakim Bech <joakim.bech@linaro.org> | 2016-09-02 10:43:03 +0200 |
---|---|---|
committer | Joakim Bech <joakim.bech@linaro.org> | 2016-09-02 10:43:03 +0200 |
commit | c2a11924941368f44ec31268e18ad87eb7be1fff (patch) | |
tree | 5be51dc2cf7b23add9e9d02037af7608fb598cf4 |
Initial commit
Signed-off-by: Joakim Bech <joakim.bech@linaro.org>
-rw-r--r-- | pkg.yml | 30 | ||||
-rwxr-xr-x | src/main.c | 112 |
2 files changed, 142 insertions, 0 deletions
@@ -0,0 +1,30 @@ +# +# 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/blinky +pkg.type: app +pkg.description: Basic example application which blinks an LED. +pkg.author: "Apache Mynewt <dev@mynewt.incubator.apache.org>" +pkg.homepage: "http://mynewt.apache.org/" +pkg.keywords: + +pkg.deps: + - "@apache-mynewt-core/libs/os" + - "@apache-mynewt-core/hw/hal" + - "@apache-mynewt-core/libs/console/full" diff --git a/src/main.c b/src/main.c new file mode 100755 index 0000000..816aa96 --- /dev/null +++ b/src/main.c @@ -0,0 +1,112 @@ +/** + * 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 <assert.h> +#include <string.h> +#ifdef ARCH_sim +#include <mcu/mcu_sim.h> +#endif + +/* Init all tasks */ +volatile int tasks_initialized; +int init_tasks(void); + +/* Task 1 */ +#define BLINKY_TASK_PRIO (1) +#define BLINKY_STACK_SIZE OS_STACK_ALIGN(256) + +struct os_task blinky_task; +os_stack_t blinky_stack[BLINKY_STACK_SIZE]; +static volatile int g_task1_loops; + +/* For LED toggling */ +int g_led_pin; + +void +blinky_task_handler(void *arg) +{ + struct os_task *t; + + 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 == blinky_task_handler); + + ++g_task1_loops; + + /* Wait one second */ + os_time_delay(1000); + + /* Toggle the LED */ + hal_gpio_toggle(g_led_pin); + } +} + +/** + * 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) +{ + os_task_init(&blinky_task, "blinky", blinky_task_handler, NULL, + BLINKY_TASK_PRIO, OS_WAIT_FOREVER, blinky_stack, BLINKY_STACK_SIZE); + + tasks_initialized = 1; + + return 0; +} + +/** + * 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; + +#ifdef ARCH_sim + mcu_sim_parse_args(argc, argv); +#endif + + os_init(); + + rc = init_tasks(); + os_start(); + + /* os start should never return. If it does, this should be an error */ + assert(0); + + return rc; +} + |