#include #include #include #include #include /** * @defgroup hwo_core_runtime Betriebsstunden * @brief Speicherung der Betriebsstunden. * * @{ */ volatile struct rt_ram rt_ram; /*! \brief Signal Thread. * */ void runtime_signal(void) { #if !defined(RUNTIME_USES_THREADING) timer_start( rt_ram.timer, 1L ); #else thread_wake( rt_ram.rtThread ); #endif }; /*! \brief Runtime-Thread. * * Ermittelt Betriebsstunden des Geräts */ void runtime_cycle(void) { rt_ram.secs_current = systick_secs(); rt_ram.secs_gone = rt_ram.secs_current - rt_ram.secs_last; rt_ram.eeprom.secs_powered += rt_ram.secs_gone; if (rt_ram.flags.is_running) rt_ram.eeprom.secs_running += rt_ram.secs_gone; if ((rt_ram.eeprom.next_service != -1L) && (rt_ram.eeprom.next_service <= rt_ram.eeprom.secs_running)) rt_ram.flags.service_pending = 1; else rt_ram.flags.service_pending = 0; eeprom_save( rt_ram.bank, (avrEEPROM*)&rt_ram.eeprom.eeprom ); rt_ram.secs_last = rt_ram.secs_current; }; #if defined(RUNTIME_USES_THREADING) void runtime_thread(void* arg){ while (1){ wait_ms( 10000l ); runtime_cycle(); }; }; #endif /*! \brief Startet Runtime-Thread. * */ void runtime_start(int16_t bank) { if (!eeprom_load( bank, (avrEEPROM*)&rt_ram.eeprom.eeprom ) || (rt_ram.eeprom.serial.code == -1)) rt_ram.flags.eeprom_corrupt = 1; else rt_ram.flags.eeprom_corrupt = 0; rt_ram.eeprom.count_poweron++; rt_ram.flags.is_running = 0; eeprom_save( bank, (avrEEPROM*)&rt_ram.eeprom ); rt_ram.secs_last = systick_secs(); rt_ram.bank = bank; #if !defined(RUNTIME_USES_THREADING) rt_ram.timer = timer_create_ex( TIMERID_SYS_RUNTIME, 10000000L, runtime_cycle, TF_REPEAT); timer_start( rt_ram.timer, 0 ); #else thread_alloc( runtime_thread, NULL, 256 ); #endif }; /** @} */