From 121e40dede96a6d915eb40cf27acdf6f5e06f08b Mon Sep 17 00:00:00 2001 From: Martin Date: Mon, 16 Mar 2026 21:16:44 +0100 Subject: [PATCH] NodeOperatingSystem aktualisiert --- NodeOperatingSystem.md | 226 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 226 insertions(+) diff --git a/NodeOperatingSystem.md b/NodeOperatingSystem.md index 595a544..a3f6956 100644 --- a/NodeOperatingSystem.md +++ b/NodeOperatingSystem.md @@ -66,4 +66,230 @@ Die Hauptanwendung eines Device/Node sollte die folgenden Labels enthalten, die | onEveryDay| wird einmal pro Tag aufgerufen +# Beispiel +Im folgenden die Quelldatei der Hauptanwendung des Devices N29 + + +> ``` +> ; *************************************************************************** +> ; copyright : (C) 2026 by Martin Preuss +> ; email : martin@libchipcard.de +> ; +> ; *************************************************************************** +> ; * This file is part of the project "AqHome". * +> ; * Please see toplevel file COPYING of that project for license details. * +> ; *************************************************************************** +> +> +> +> +> ; *************************************************************************** +> ; Source file for temperature sensor node on AtTiny 84 +> ; +> ; This is for the full system (i.e. not the boot loader). +> ; +> ; All definitions and changes should go into this file. +> ; +> ; +> ; *************************************************************************** +> +> +> .equ clock=1000000 ; Define the clock frequency +> ;.equ clock=8000000 ; Define the clock frequency +> +> +> +> .nolist +> .include "include/tn84def.inc" ; Define device ATtiny84 +> .list +> +> .include "../defs.asm" +> .include "./data.asm" +> +> .include "version.asm" +> .include "devices/all/defs.asm" +> .include "common/calls.asm" +> .include "common/utils_io.asm" +> .include "common/utils_wait.asm" +> +> +> +> ; *************************************************************************** +> ; defines +> +> ; --------------------------------------------------------------------------- +> ; generic +> +> .equ NET_BUFFERS_NUM = 6 +> .equ NET_MSGNUMINBUF_SIZE = 8 ; max buffer nums in ringbuffer (global incoming) +> .equ NET_IFACE_OUTMSGBUF_SIZE = 8 ; max buffer nums in ringbuffer (per interface outbound) +> +> +> +> +> ; --------------------------------------------------------------------------- +> ; firmware settings including list of modules used +> +> ; #define MODULES_TIMER +> #define MODULES_CLOCK +> #define MODULES_LED_SIMPLE +> ;#define MODULES_LED_ACTIVITY +> #define MODULES_NETWORK +> ;#define MODULES_UART_BITBANG +> #define MODULES_COM2W +> #define MODULES_TWI_MASTER +> ;#define MODULES_LCD +> ;#define LCD_MINIMAL_FONT +> #define MODULES_SI7021 +> #define MODULES_SGP30 +> ;#define MODULES_SGP40 +> ;#define MODULES_STATS +> ;#define MODULES_OWI_MASTER +> ;#define MODULES_DS18B20 +> #define MODULES_MOTION +> ;#define MODULES_CCS811 +> #define MODULES_BRIGHTNESS +> +> #define APPS_NETWORK +> #define APPS_MOTION +> #define APPS_REPORTSENSORS +> #define APPS_STATS +> +> +> +> ; --------------------------------------------------------------------------- +> ; defines for values +> +> .equ VALUE_ID_SI7021_TEMP = 0x01 +> .equ VALUE_ID_SI7021_HUM = 0x02 +> +> ;.equ VALUE_ID_ADC = 0x03 +> ;.equ VALUE_ID_DS18B20_TEMP = 0x06 +> .equ VALUE_ID_MOTION = 0x07 +> +> ;.equ VALUE_ID_SGP40_TVOC = 0x08 +> +> .equ VALUE_ID_SGP30_TVOC = 0x09 +> .equ VALUE_ID_SGP30_CO2 = 0x0a +> +> .equ VALUE_ID_BRIGHTNESS = 0x0b +> +> .equ VALUE_ID_LEDSIMPLE_TIMING = 0x88 +> +> +> +> +> +> ; *************************************************************************** +> ; code segment +> +> .cseg +> .org 000000 +> +> +> +> ; --------------------------------------------------------------------------- +> ; Reset and interrupt vectors (will be removed as soon as we can flash data over COM) +> +> ; rjmp main ; Reset vector +> rjmp BOOTLOADER_ADDR ; Reset vector ; use this for flashed system +> reti ; EXT_INT0 +> rjmp com2wPcintIsr ; PCI0 +> reti ; PCI1 +> reti ; WATCHDOG +> reti ; ICP1 +> reti ; OC1A +> reti ; OC1B +> reti ; OVF1 +> rjmp baseTimerIrqOC0A ; OC0A +> reti ; OC0B +> reti ; OVF0 +> reti ; ACI +> reti ; ADCC +> reti ; ERDY +> reti ; USI_STR +> reti ; USI_OVF +> +> +> devInfoBlock: ; 12 bytes +> devInfoManufacturer: .db 'A', 'Q', 'U', 'A' +> devInfoId: .db DEVICEINFO_ID, 0 +> devInfoVersion: .db DEVICEINFO_VERSION, DEVICEINFO_REVISION ; version, revision +> firmwareVersion: .db FIRMWARE_VARIANT_TEMP_WINDOW, FIRMWARE_VERSION_MAJOR +> .db FIRMWARE_VERSION_MINOR, FIRMWARE_VERSION_PATCHLEVEL +> +> +> +> ; --------------------------------------------------------------------------- +> ; @routine firmwareStart @global +> +> firmwareStart: +> rjmp main +> ; @end +> +> +> +> ; --------------------------------------------------------------------------- +> ; @routine onSystemStart +> +> onSystemStart: +> ret +> ; @end +> +> +> +> ; --------------------------------------------------------------------------- +> ; @routine onMessageReceived +> ; +> ; Called on every message received +> +> onMessageReceived: +> clc +> ret +> ; @end +> +> +> +> ; --------------------------------------------------------------------------- +> ; @routine onEvery100ms +> ; +> ; Called every 100ms. Add your routine calls here. No arguments, no results. +> +> onEvery100ms: +> onEverySecond: +> onEveryMinute: +> onEveryHour: +> onEveryDay: +> ret +> ; @end +> +> +> +> ; --------------------------------------------------------------------------- +> ; @routine onEveryLoop +> ; +> ; Called on every loop (i.e. after awakening from sleep). +> ; +> onEveryLoop: +> ret +> ; @end +> +> +> +> +> +> ; *************************************************************************** +> ; includes +> +> .include "devices/all/hw_tn84.asm" +> .include "devices/all/includes.asm" +> +> +> +> ; --------------------------------------------------------------------------- +> ; defines for network interface +> +> .equ netInterfaceData = com2w_iface +> +> ``` \ No newline at end of file