66 lines
2.8 KiB
Plaintext
66 lines
2.8 KiB
Plaintext
|
|
AqHome Node Operating System (AqOS4Avr)
|
|
=======================================
|
|
|
|
This is a very simple operating system for AVR nodes using ATtiny and ATmega MCUs.
|
|
|
|
It doesn't use administration objects in RAM, it just defines some routine calls which
|
|
have to be added into the system to add new drivers and modules.
|
|
|
|
Without any modules/drivers included the base system uses:
|
|
- <500 words of FLASH (<1KB)
|
|
- 6 bytes of SDRAM
|
|
|
|
With full AqHome network stack (including address assignment protocol):
|
|
- about 1700 words of FLASH
|
|
- <300 bytes SDRAM (including network buffers)
|
|
|
|
|
|
The following system routine types are defined:
|
|
|
|
Function I Description I required I add to file
|
|
-----------+-------------------------------------------------+----------+----------------------------------
|
|
INIT I init module/app I yes I modules_init.asm or apps_init.asm
|
|
RUN I called from the main loop I no I modules_run.asm or apps_run.asm
|
|
MSGRECVD I called when new messages arrive I no I modules_msg.asm or apps_msg.asm
|
|
EVERY100MS I called every 100 millisecs (system timer tick) I no I modules_100ms.asm or apps_100ms.asm
|
|
|
|
|
|
If the CLOCK module is enable the following routines are also available:
|
|
|
|
Function I Description I required I add to file
|
|
----------+------------------------------------------------+-----------+----------------------------------
|
|
EVERY1S I called every second I no I modules_1s.asm or apps_1s.asm
|
|
EVERY1M I called every minute I no I modules_1m.asm or apps_1m.asm
|
|
EVERY1H I called every hour I no I modules_1h.asm or apps_1h.asm
|
|
EVERY1D I called every day I no I modules_1d.asm or apps_1d.asm
|
|
|
|
|
|
Not all modules implement all those functions. Some modules only need to be called
|
|
once every main loop, others need to be called periodically every once in a while.
|
|
|
|
If a module implements a function a call to that routine must be inserted into the appropriate
|
|
file in "avr/devices/all/".
|
|
|
|
In order to make it easier for devices to optionally include modules/apps those calls need to be
|
|
between preprocessor directives like in:
|
|
|
|
----------------------------------X8
|
|
#ifdef MODULES_DS18B20
|
|
bigcall Ds18b20_OnEverySecond
|
|
#endif
|
|
----------------------------------X8
|
|
|
|
|
|
This way it is very easy to use a module (like that DS18B20 module) by using the
|
|
following line in your main code:
|
|
|
|
----------------------------------X8
|
|
#define MODULES_DS18B20
|
|
----------------------------------X8
|
|
|
|
This enables all the function calls for this module. Nothing else needs to be changed in your main
|
|
code file in order to enable that module.
|
|
|
|
|