Tool Libs
UMIT-TIROL Institute of Automation and Control Engineering library collection
 
Loading...
Searching...
No Matches
kern.h
Go to the documentation of this file.
1
5#pragma once
6#include "timed.h"
7#include "logger.h"
8#include <setjmp.h>
9#include <inttypes.h>
10
15extern class Kernel :
17 public Scheduler {
18 struct KLog: Logger {
19 KLog(const uint32_t &t, Sink<Buffer<uint8_t>> &snk): Logger(snk), time(t) {}
20 KLog(const uint32_t &t): Logger(), time(t) {}
21 const uint32_t &time;
22 virtual Buffer<uint8_t> pre() override {
23 Buffer<uint8_t> ret = 256;
24 ret.len = snprintf((char*)ret.buf, ret.size, "(@%" PRIu32 "ms): ", time);
25 return ret;
26 }
27 };
28public:
30 const uint32_t &time{time_};
31 KLog log{time};
34 new(&log) KLog{time, snk};
35 }
37 void tick(uint32_t dt_ms) {
38 auto ok = schedule(time, *this);
39 if (!ok) exit( 127 ); // too many items in scheduled queue. DYING.
40 time_ += dt_ms;
41 }
43 int run () {
44 setjmp(jbf);
45 while(go) {
47 idle();
48 }
49 return exit_code;
50 }
52 void exit(int code=0) {
53 go = false;
54 exit_code = code;
55 }
63 void idle();
64
69 void setTimeStep(uint16_t dt_us);
70private:
71 uint32_t time_{};
72 bool go{true};
73 int exit_code{};
74 jmp_buf jbf{};
75 friend void sighandler(int);
76} k;
simple kernel for running tool-libs based applications
Definition kern.h:17
void exit(int code=0)
stop kernel
Definition kern.h:52
int run()
kernel entry point
Definition kern.h:43
void initLog(Sink< Buffer< uint8_t > > &snk)
point logger to new sink
Definition kern.h:33
void tick(uint32_t dt_ms)
call every ms
Definition kern.h:37
void setTimeStep(uint16_t dt_us)
implement in simulation backend to be able to speed up time.
Definition hal.cpp:26
const uint32_t & time
const access to global uptime
Definition kern.h:30
void idle()
implement to not burn unnecessary cpu cycles
Definition hal.cpp:18
Copyright (c) 2023 IACE.
dynamically allocated, but fixed-size buffer template
Definition buffer.h:18
size_t size
total capacity of buffer
Definition buffer.h:23
size_t len
number of items stored in buffer
Definition buffer.h:21
simple printf-style logging infrastructure
Definition logger.h:21
registry of recurring calls
Definition timed.h:65
round robin, because we're not smart enough for anything else
Definition schedule.h:47
bool schedule(uint32_t time, Schedule::Registry &reg)
schedule all registered schedulables of registry if necessary
Definition schedule.h:52
void run()
run scheduled calls
Definition schedule.h:60
generic object sink, i.e.
Definition streams.h:15
Copyright (c) 2023 IACE.