Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/chrismoos/avr-os
Multitasking OS for Arduino and AVR platforms
https://github.com/chrismoos/avr-os
Last synced: about 2 months ago
JSON representation
Multitasking OS for Arduino and AVR platforms
- Host: GitHub
- URL: https://github.com/chrismoos/avr-os
- Owner: chrismoos
- License: apache-2.0
- Created: 2012-12-06T00:33:34.000Z (about 12 years ago)
- Default Branch: master
- Last Pushed: 2017-02-01T06:23:31.000Z (almost 8 years ago)
- Last Synced: 2024-08-03T18:15:34.451Z (5 months ago)
- Language: C
- Size: 1.2 MB
- Stars: 129
- Watchers: 15
- Forks: 27
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-avr - avr-os - A multitasking OS for Arduino and AVR platforms. (Miscellaneous)
README
# avr-os
[![Build Status](https://travis-ci.org/chrismoos/avr-os.png?branch=master)](https://travis-ci.org/chrismoos/avr-os)
avr-os is a library that provides a very basic rutime that enables your program to multitask.
The library uses pre-emptive multitasking to switch tasks and each task has its own stack that is restored when a task is resumed. An AVR timer is used to provide ticks and this interrupt is used to switch tasks.
## Adding library to Arduino
git clone git://github.com/chrismoos/avr-os.git ~/Documents/Arduino/libraries/avros
## Building
You can create a static library for avr-os by issuing the following command:
make DEVICE=arduino_uno
## Supported devices
* arduino_uno
* arduino_mega
* arduino_mega2560## Arduino/AVR specific
### Choosing a timer
The following timers are supported by *avr-os* to use for multitasking:
* TIMER0 (8-bit)
* TIMER1 (16-bit)
* TIMER2 (8-bit)When building use the **CONFIG_AVR_TIMER** flag. For example, to specify TIMER2 to be used:
make CONFIG_AVR_TIMER=2 DEVICE=arduino_uno
*Note*: TIMER1 is the default timer if not specified.
## License
Copyright 2012 Chris Moos
Licensed 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 athttp://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.## Sample sketch
This sketch has two tasks that update the LCD.
![example](https://raw.github.com/chrismoos/avr-os/master/example.png)
```cpp
#include
#include#include
extern "C" {
#include
}LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
spinlock_t testLock;
void kernel_task(void *arg) {
while(1) {
spinlock_acquire(&testLock);
lcd.setCursor(0, 0);
lcd.print("kernel: " + String((long)os_get_uptime()));
spinlock_release(&testLock);
os_sleep(1000);
}
}void user_task(void *arg) {
int x = 0;
while(1) {
spinlock_acquire(&testLock);
lcd.setCursor(0, 1);
lcd.print("user_task: " + String(x++));
spinlock_release(&testLock);
os_sleep(5000);
}
}void setup() {
os_init();
lcd.begin(16, 2);
lcd.print("Starting up...");
}void loop() {
spinlock_init(&testLock);os_schedule_task(kernel_task, NULL, 0);
os_schedule_task(user_task, NULL, 0);
lcd.clear();
os_loop();
}
```