My Project - RET HER  versionsnr
krnl.c File Reference
#include "krnl.h"
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdlib.h>
Include dependency graph for krnl.c:

Go to the source code of this file.

Macros

#define KRNLTMRVECTOR   TIMER0_OVF_vect
 
#define MICROSECONDS_PER_TIMER0_OVERFLOW   (1024)
 
#define MILLIS_INC   (MICROSECONDS_PER_TIMER0_OVERFLOW / 1000)
 
#define FRACT_INC   ((MICROSECONDS_PER_TIMER0_OVERFLOW % 1000) >> 3)
 
#define FRACT_MAX   (1000 >> 3)
 

Functions

void enQ (struct k_t *Q, struct k_t *el)
 
struct k_tdeQ (struct k_t *el)
 
void prio_enQ (struct k_t *Q, struct k_t *el)
 
 ISR (KRNLTMRVECTOR, ISR_NAKED)
 
void __attribute__ ((naked, noinline))
 
void jumper ()
 
struct k_tk_crt_task (void(*pTask)(void), char prio, int stkSize)
 
int freeRam (void)
 
int k_sleep (int time)
 
void k_eat_ticks (int ticks)
 
int k_unused_stak (struct k_t *t)
 
int k_set_prio (char prio)
 
int k_mut_ceil_set (struct k_t *sem, char prio)
 
struct k_tk_crt_sem (char init_val, int maxvalue)
 
int k_set_sem_timer (struct k_t *sem, int val)
 
int ki_signal (struct k_t *sem)
 
int k_signal (struct k_t *sem)
 
int ki_wait (struct k_t *sem, int timeout)
 
int k_wait (struct k_t *sem, int timeout)
 
int k_mut_ceil_enter (struct k_t *sem, int timeout)
 
int k_mut_ceil_leave (struct k_t *sem)
 
int k_sem_signals_lost (struct k_t *sem)
 
int ki_semval (struct k_t *sem)
 
int k_semval (struct k_t *sem)
 
int ki_msg_count (struct k_msg_t *m)
 
int k_msg_count (struct k_msg_t *m)
 
struct k_msg_tk_crt_send_Q (int nr_el, int el_size, void *pBuf)
 
char ki_send (struct k_msg_t *pB, void *el)
 
char k_send (struct k_msg_t *pB, void *el)
 
char ki_receive (struct k_msg_t *pB, void *el, int *lost_msg)
 
char k_receive (struct k_msg_t *pB, void *el, int timeout, int *lost_msg)
 
void k_round_robbin (void)
 
void k_release (void)
 
int k_init (int nrTask, int nrSem, int nrMsg)
 
int k_start (int tick)
 
int k_stop (unsigned int exitVal)
 
unsigned long ki_millis (void)
 
unsigned long k_millis (void)
 
int k_tmrInfo (void)
 
void __attribute__ ((weak))
 

Variables

int k_config
 
int * sem_pool
 
int AQ
 
int * pmain_el
 
int * pAQ
 
int * pRun
 
int * pSleepSem
 
struct k_msg_tsend_pool
 
int k_task
 
int k_sem
 
int k_msg
 
char nr_task = 0
 
char nr_sem = 0
 
char nr_send = 0
 
volatile char k_running = 0
 
volatile char k_err_cnt = 0
 
volatile unsigned int tcntValue
 
volatile int fakecnt
 
volatile int fakecnt_preset
 
static volatile char stopp = 0
 
unsigned long k_millis_counter = 0
 
unsigned int k_tick_size
 
int tmr_indx
 
volatile unsigned long timer0_overflow_count
 
volatile unsigned long timer0_millis
 
unsigned char timer0_fract
 

Macro Definition Documentation

◆ FRACT_INC

#define FRACT_INC   ((MICROSECONDS_PER_TIMER0_OVERFLOW % 1000) >> 3)

Definition at line 395 of file krnl.c.

◆ FRACT_MAX

#define FRACT_MAX   (1000 >> 3)

Definition at line 396 of file krnl.c.

◆ KRNLTMRVECTOR

#define KRNLTMRVECTOR   TIMER0_OVF_vect

Definition at line 182 of file krnl.c.

◆ MICROSECONDS_PER_TIMER0_OVERFLOW

#define MICROSECONDS_PER_TIMER0_OVERFLOW   (1024)

Definition at line 387 of file krnl.c.

◆ MILLIS_INC

#define MILLIS_INC   (MICROSECONDS_PER_TIMER0_OVERFLOW / 1000)

Definition at line 390 of file krnl.c.

Function Documentation

◆ __attribute__() [1/2]

void __attribute__ ( (naked, noinline)  )

HERE

Definition at line 547 of file krnl.c.

References K_CHG_STAK.

◆ __attribute__() [2/2]

void __attribute__ ( (weak)  )

a function for overloading on usersite which is called when a semaphore is overflooding no reset occur - it's only reading out semaphore idendity Signal operations has not taken place ! 1: means first semahore allocated by user, 2 the next etc Interrupt is disabled when called and must not be enabled during.. so no print etc

Parameters
[in]nrid of semaphore 1,2,3,...
[in]nrClipnumber of times clip has occured (may be reset by call k_wait_lost)

called in a signal call val is sem val AFTER signal has taken place

called when wait called. val is sem value after countdown has taken place NB is the wait call willl not wait and there is no token at the semaphore val will be -1111

a function for overloading on usersite which is called when a msgQ is overflooding no reset occur - it's only readind out smsgQ idendity 1: means first msgQ allocated by user etc Interrupt is disabled when called and must not be enabled during.. so no print etc

Parameters
nr: id of send Q 0,1,2,...
nrClipnumber of times clip has occured (may be reset by call k_receive and lost parm not eq NULL)

Breakout function called from scheduler

Definition at line 1484 of file krnl.c.

◆ deQ()

struct k_t* deQ ( struct k_t el)

Definition at line 345 of file krnl.c.

References k_t::next, and k_t::pred.

Referenced by ISR(), k_mut_ceil_enter(), k_mut_ceil_leave(), k_round_robbin(), k_set_prio(), ki_signal(), and ki_wait().

Here is the caller graph for this function:

◆ enQ()

void enQ ( struct k_t Q,
struct k_t el 
)

Definition at line 336 of file krnl.c.

References k_t::next, and k_t::pred.

Referenced by ki_wait().

Here is the caller graph for this function:

◆ freeRam()

int freeRam ( void  )

returns amount of free memory in your system

Definition at line 655 of file krnl.c.

◆ ISR()

◆ jumper()

void jumper ( )

Definition at line 556 of file krnl.c.

References k_set_prio(), pRun, and ZOMBI_PRIO.

Referenced by k_crt_task().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ k_crt_sem()

struct k_t* k_crt_sem ( char  init_val,
int  maxvalue 
)

creates a standard Dijkstra semaphore. It can be initialized to values in range [0..maxvalue]

Parameters
[in]init_valstartvalue of semaphore 0,1,2,... maxvalue
[in]maxvaluewhich is maxvalue semaphore can reach
Returns
handle to semaphore or NULL pointer
Remarks
only to be called before start of KRNL

Definition at line 773 of file krnl.c.

References k_t::ceiling_prio, k_t::clip, k_t::cnt1, k_t::cnt2, k_err_cnt, k_running, k_sem, k_t::maxv, k_t::next, k_t::nr, nr_sem, k_t::pred, k_t::prio, QHD_PRIO, k_t::saved_prio, SEM_MAX_VALUE, and sem_pool.

Referenced by k_crt_send_Q(), and k_init().

Here is the caller graph for this function:

◆ k_crt_send_Q()

struct k_msg_t* k_crt_send_Q ( int  nr_el,
int  el_size,
void *  pBuf 
)

◆ k_crt_task()

struct k_t* k_crt_task ( void(*)(void)  pTask,
char  prio,
int  stkSize 
)

creates a task and put it in the active Q

Parameters
[in]pTaskpointer to function for code ( void task(void) ...)
[in]prioPriority 1: highest (QHEAD_PRIO-1): lowest
[in]stkSizesize of data area(in bytes) to be used for stak
Returns
: pointer to task handle or NULL if no success
Remarks
only to be called before start of KRNL but after k_init
#include <krnl.h>
struct k_t *pTaskData;
void taskCode()
{
while (1) {
... task body code - endless repeat
}
}
void setup()
{
k_init(1,0,0);
pTaskData = k_crt_task(taskCode,10,200);
...
k_start(1);
... you will not come here after k_start
}

Definition at line 566 of file krnl.c.

References k_t::cnt1, k_t::cnt2, k_t::cnt3, DMY_PRIO, hi8, jumper(), k_err_cnt, k_running, k_task, lo8, k_t::maxv, k_t::nr, nr_task, pAQ, k_t::prio, prio_enQ(), k_t::pt, k_t::sp_hi, k_t::sp_lo, STAK_HASH, and task_pool.

Referenced by setup().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ k_eat_ticks()

void k_eat_ticks ( int  ticks)

eat time in quant og krnl ticks starting from now but not from next tick

Definition at line 688 of file krnl.c.

References k_tick_size.

◆ k_init()

int k_init ( int  nrTask,
int  nrSem,
int  nrMsg 
)

Initialise KRNL. First function to be called. You have to give max number of tasks, semaphores and message queues you will use

Parameters
[in]nrTask...
[in]nrSem...
[in]nrMsg...

void setup() { allocate resources for creation of 3 tasks 2 semaphores 1 mailboxes k_init(3,2,1); ...
}

Definition at line 1262 of file krnl.c.

References AQ, DMY_PRIO, k_crt_sem(), k_err_cnt, k_msg, k_running, k_sem, k_task, nr_send, nr_task, pAQ, pmain_el, prio_enQ(), pSleepSem, QHD_PRIO, sem_pool, send_pool, and task_pool.

Referenced by setup().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ k_millis()

unsigned long k_millis ( void  )

Returns nr of milliseconds since krnl was started by k_start

Returns
: unsigned long is returned
Remarks
only to be called after start of KRNL
Interrupt is disabled when reading krnl time and is enabled afterwards

Definition at line 1444 of file krnl.c.

References k_millis_counter.

◆ k_msg_count()

int k_msg_count ( struct k_msg_t m)

returns nr of pending messages

Parameters
[in]msgbufferhandle
Returns
1: ok not suspended, 0: ok you have been suspended
-1 no wait maybe bq no timeout was allowed
Remarks
only to be called after start of KRNL

Definition at line 1034 of file krnl.c.

References ki_msg_count().

Here is the call graph for this function:

◆ k_mut_ceil_enter()

int k_mut_ceil_enter ( struct k_t sem,
int  timeout 
)

Enter mutex (eq to k_wait...) use k_mut_enter / k_mut_leave instead of wait and signal

Parameters
[in]semaka mutex
[in]timeouttimeout value
Returns
0: if you have been waiting, 1 if you just went through, -1 for timeout, -3 if your priority was higher than ceiling priority

Definition at line 940 of file krnl.c.

References k_t::ceiling_prio, CEILINGFAIL, deQ(), ki_task_shift(), ki_wait(), pAQ, prio_enQ(), pRun, and k_t::saved_prio.

Here is the call graph for this function:

◆ k_mut_ceil_leave()

int k_mut_ceil_leave ( struct k_t sem)

Leave mutex (eq to k_signal...) use k_mut_enter/ k_mut_leave instead of wait and signal

Parameters
[in]semused as mutex
Returns
0: ok otherwise bad bad

Definition at line 976 of file krnl.c.

References k_t::ceiling_prio, deQ(), k_signal(), ki_signal(), ki_task_shift(), pAQ, prio_enQ(), pRun, and k_t::saved_prio.

Here is the call graph for this function:

◆ k_mut_ceil_set()

int k_mut_ceil_set ( struct k_t sem,
char  prio 
)

adds ceiling priority to semaphore use k_mut_ceil_enter k_mut_ceil_leave instead of wait and signal Can only be called before k_start

Parameters
[in]semreference to sem used for mutex - no check
[in]prioCeiling pirority
Returns
0: ok , otherwise bad bad
Remarks
only to be called before start of KRNL

Definition at line 754 of file krnl.c.

References k_t::ceiling_prio, DMY_PRIO, k_running, and k_t::prio.

◆ k_receive()

char k_receive ( struct k_msg_t pB,
void *  el,
int  timeout,
int *  lost_msg 
)

Receive data (one element of el_size)in the ringbuffer if there are data DONE BY COPY !

Parameters
[in]pBRef to message buffer
[out]elReference to where data shall be copied to at your site
[in]timeoutMax time you want to wait on data, -1: never, 0: forever, positive: nr of KRNL timer quants
[out]lost_msgnr of lost messages since last receive. will clip at 10000. If lost_msg ptr is NULL then overrun counter is not reset to 0.
Returns
1: ok no suspension, 0: operation did succed, -1: no data in ringbuffer
Remarks
only to be called after start of KRNL

Definition at line 1183 of file krnl.c.

References k_msg_t::cnt, k_msg_t::el_size, ki_wait(), k_msg_t::lost_msg, k_msg_t::nr_el, k_msg_t::pBuf, k_msg_t::r, and k_msg_t::sem.

Here is the call graph for this function:

◆ k_release()

void k_release ( void  )

release switch running to task in front of Active Q

Definition at line 1238 of file krnl.c.

References ki_task_shift().

Here is the call graph for this function:

◆ k_round_robbin()

void k_round_robbin ( void  )

round robbin

Returns
: current state: 1 preempt sch. 0 non preempt

Definition at line 1226 of file krnl.c.

References deQ(), ki_task_shift(), pAQ, prio_enQ(), and pRun.

Here is the call graph for this function:

◆ k_sem_signals_lost()

int k_sem_signals_lost ( struct k_t sem)

Returns how many signals has been lost on semaphore due to saturation

Parameters
[in]semsemaphore handle
Returns
nr of signals lost
Remarks
only to be called after start of KRNL

Definition at line 1000 of file krnl.c.

References k_t::clip.

◆ k_semval()

int k_semval ( struct k_t sem)

returns value of semaphore

Parameters
[in]semsemaphore handle
Returns
1: ok not suspended, 0: ok you have been suspended
-1 no wait maybe bq no timeout was allowed
Remarks
only to be called after start of KRNL

Definition at line 1020 of file krnl.c.

References ki_semval().

Here is the call graph for this function:

◆ k_send()

char k_send ( struct k_msg_t pB,
void *  el 
)

Put data (one element of el_size)in the ringbuffer if there are room for it. DONE BY COPY !

Parameters
[in]pBRef to message buffer
[in]elReference to data to be put in buffer. Size if already given in k_crt_send
Returns
0: operation did succed, -1: no room in ringbuffer
Remarks
only to be called after start of KRNL
k_send does not block if no space in buffer. Instead -1 is returned

Definition at line 1130 of file krnl.c.

References ki_send(), and ki_task_shift().

Here is the call graph for this function:

◆ k_set_prio()

int k_set_prio ( char  prio)

change priority of calling task)

Parameters
[in]prionew prio, Priority 1: highest (QHEAD_PRIO-1): lowest
Returns
: 0: ok, -1: KRNL not running, -2: illegal value
Remarks
only to be called after start of KRNL

Definition at line 726 of file krnl.c.

References deQ(), DMY_PRIO, k_running, ki_task_shift(), pAQ, k_t::prio, prio_enQ(), and pRun.

Referenced by jumper().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ k_set_sem_timer()

int k_set_sem_timer ( struct k_t sem,
int  val 
)

attach a timer to the semaphore so KRNL will signal the semaphore with regular intervals. Can be used for cyclic real time run of a task.

Parameters
[in]semsemaphore handle
[in]valinterval in quant of KRNL ticks (0: disable cyclic timer, 1,2,3... cyclic quant)
Returns
-1: negative val, 0. ok
Remarks
only to be called after start of KRNL

Definition at line 815 of file krnl.c.

References k_t::cnt2, k_t::cnt3, and val.

◆ k_signal()

int k_signal ( struct k_t sem)

Signal a semaphore. Task shift will task place if a task is started by the signal and has higher priority than you.

Parameters
[in]semsemaphore handle
Returns
0: ok , -1: max value of semaphore reached
Remarks
The ki_ indicates that interrups is NOT enabled when leaving ki_signal
only to be called after start of KRNL

Definition at line 868 of file krnl.c.

References ki_signal(), and ki_task_shift().

Referenced by k_mut_ceil_leave().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ k_sleep()

int k_sleep ( int  time)

Set task asleep for a number of ticks.

Parameters
[in]timenr of ticks to sleep < 0
Returns
: 0 is ok(has been suspended), 1(is not suspended), -1 is wait time is less than 0
Remarks
only to be called after start of KRNL

Definition at line 678 of file krnl.c.

References k_wait(), and pSleepSem.

Referenced by t1().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ k_start()

int k_start ( int  tm)

start KRNL with tm tick speed (1= 1 msec, 5 = 5 msec)

Parameters
[in]tmTick length in milli seconds(1..10,20,30..10000
Returns
-1-333 nr of k_Crt calls that went wrong. krnl did not start -111 tick must be 1 bq we are using timer0 and shall maintain millis (std setup) -555 negative tick parm value -666 bad tick quant (legal is 1-10,20,30-10000
Remarks
only to be called after init of KRNL
KRNL WILL NOT START IF YOU HAVE TRIED TO CREATE MORE TASKS/SEMS/MSG QS THAN YOU HAVE ALLOCATED SPACE FOR IN k_init !!!
int errcode = k_start(1);
// if we are coming here its bq 1) KRNL is stopped you errcode will by parameter from k_stop call. Dont use a neg value !
// ir errcode is negatvie KRNL has not being due to errors during init calls like k_crt_sem
// chek if you have allocated enough buffers for tasks, semaphore and mailboxes in k_init call

Definition at line 1304 of file krnl.c.

References fakecnt, fakecnt_preset, k_err_cnt, k_running, k_tick_size, ki_task_shift(), pmain_el, pRun, stopp, and tcntValue.

Referenced by setup().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ k_stop()

int k_stop ( unsigned int  exitVal)

stop KRNL

Parameters
[in]exitValWill be returned in k_start to creator (old main)
Remarks
only to be called after k_start
you will only return from k_stop if krnl is not running
ONLY use positive numbers for exitVal because errors during initialization (code between k_init and k_start) then k_start returns negative numbers

Definition at line 1408 of file krnl.c.

References AQ, k_running, ki_task_shift(), pmain_el, and stopp.

Here is the call graph for this function:

◆ k_tmrInfo()

int k_tmrInfo ( void  )

returns which timer is used

Returns
0,1,2,3,4,5 ...

Definition at line 1454 of file krnl.c.

◆ k_unused_stak()

int k_unused_stak ( struct k_t t)

Returns amount of unused stak

Parameters
[in]tPtr to taskdescriptor. If NULL it is yourself
Returns
: amount of unused stak(in bytes)
Remarks
: a watermark philosophy is used

Definition at line 699 of file krnl.c.

References k_t::cnt1, pRun, and STAK_HASH.

◆ k_wait()

int k_wait ( struct k_t sem,
int  timeout 
)

Wait on a semaphore. Task shift will task place if you are blocked.

Parameters
[in]semsemaphore handle
[in]timeout"<0" you will be started after timeout ticks, "=0" wait forever "-1" you will not wait
Returns
1: ok there was a signal hanging - so no suspension
0: ok- you have been suspended
-1: timeout has occured, -2 no wait bq timeout was -1 and semaphore was negative
Remarks
only to be called after start of KRNL

Definition at line 931 of file krnl.c.

References ki_wait().

Referenced by k_sleep().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ki_millis()

unsigned long ki_millis ( void  )

Returns nr of milliseconds since krnl was started by k_start

Returns
: unsigned long is returned
Remarks
only to be called after start of KRNL and only when interrupt is disabled
To be called within an ISR so interrupts is no disabled

Definition at line 1435 of file krnl.c.

References k_millis_counter.

◆ ki_msg_count()

int ki_msg_count ( struct k_msg_t m)

returns nr of pending messages

Parameters
[in]msgbufferhandle
Returns
1: ok not suspended, 0: ok you have been suspended
-1 no wait maybe bq no timeout was allowed
Remarks
only to be called after start of KRNL

Definition at line 1028 of file krnl.c.

References k_msg_t::cnt.

Referenced by k_msg_count().

Here is the caller graph for this function:

◆ ki_receive()

char ki_receive ( struct k_msg_t pB,
void *  el,
int *  lost_msg 
)

Receive data (one element of el_size)in the ringbuffer if there are data DONE BY COPY ! No blocking if no data Interrupt will not be enabled after ki_receive

Parameters
[in]pBRef to message buffer
[out]elReference to where data shall be copied to at your site
[out]lost_msgnr of lost messages since last receive. will clip at 10000. If lost_msg ptr is NULL then overrun counter is not reset to 0
Returns
1: data was rdy no suspension, 0: ok you have been suspended , -1: no data in ringbuffer
Remarks
can be used from ISR
only to be called after start of KRNL

Definition at line 1146 of file krnl.c.

References k_msg_t::cnt, k_msg_t::el_size, ki_wait(), k_msg_t::lost_msg, k_msg_t::nr_el, k_msg_t::pBuf, k_msg_t::r, and k_msg_t::sem.

Here is the call graph for this function:

◆ ki_semval()

int ki_semval ( struct k_t sem)

returns value of semaphore

Parameters
[in]semsemaphore handle
Returns
1: ok not suspended, 0: ok you have been suspended
-1 no wait maybe bq no timeout was allowed
Remarks
only to be called after start of KRNL
do not enable interrupt upon leaving

Definition at line 1013 of file krnl.c.

References k_t::cnt1.

Referenced by k_semval().

Here is the caller graph for this function:

◆ ki_send()

char ki_send ( struct k_msg_t pB,
void *  el 
)

Put data (one element of el_size)in the ringbuffer if there are room for it. Intended for ISR use DONE BY COPY !

Parameters
[in]pBRef to message buffer
[in]elReference to data to be put in buffer. Size if already given in k_crt_send
Returns
0: operation did succed, -1: no room in ringbuffer
Remarks
Interrupt will not enabled upon leaving, so ki_send is intended to be used from an ISR
only to be called before start of KRNL

Definition at line 1088 of file krnl.c.

References k_msg_t::cnt, k_msg_t::el_size, ki_signal(), k_msg_t::lost_msg, k_msg_t::nr, k_msg_t::nr_el, k_msg_t::pBuf, k_msg_t::sem, SEM_MAX_VALUE, and k_msg_t::w.

Referenced by k_send().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ki_signal()

int ki_signal ( struct k_t sem)

Signal a semaphore. Can be called from an ISR when interrupt is disabled. No task shift will occur - only queue manipulation.

Parameters
[in]semsemaphore handle
Returns
0: ok , -1: max value of semaphore reached
Remarks
only to be called after start of KRNL

Definition at line 831 of file krnl.c.

References k_t::clip, k_t::cnt1, k_t::cnt2, deQ(), k_t::maxv, k_t::next, k_t::nr, pAQ, prio_enQ(), and SEM_MAX_VALUE.

Referenced by ISR(), k_mut_ceil_leave(), k_signal(), and ki_send().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ki_wait()

int ki_wait ( struct k_t sem,
int  timeout 
)

Like k_wait with the exception interrupt is NOT enabled when leaving

Parameters
[in]semsemaphore handle
[in]timeout"<0" you will be started after timeout ticks, "=0" wait forever "-1" you will not wait
Returns
0: ok , -1: could do wait bw blocking would have taken place
Remarks
The ki_ indicates that interrups is NOT enabled when leaving ki_wait
only to be called after start of KRNL
normally not to be used by users !!! BEWARE

Definition at line 887 of file krnl.c.

References k_t::cnt1, deQ(), enQ(), ki_task_shift(), k_t::nr, and pRun.

Referenced by k_mut_ceil_enter(), k_receive(), k_wait(), and ki_receive().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ prio_enQ()

void prio_enQ ( struct k_t Q,
struct k_t el 
)

Definition at line 353 of file krnl.c.

References k_t::next, k_t::pred, and k_t::prio.

Referenced by ISR(), k_crt_task(), k_init(), k_mut_ceil_enter(), k_mut_ceil_leave(), k_round_robbin(), k_set_prio(), and ki_signal().

Here is the caller graph for this function:

Variable Documentation

◆ AQ

int AQ

Definition at line 286 of file krnl.c.

Referenced by k_init(), and k_stop().

◆ fakecnt

volatile int fakecnt

Definition at line 301 of file krnl.c.

Referenced by ISR(), and k_start().

◆ fakecnt_preset

volatile int fakecnt_preset

Definition at line 302 of file krnl.c.

Referenced by k_start().

◆ k_config

int k_config
Initial value:
= KRNLTMR | (DYNMEM << 4) | (KRNLBUG << 5) | (BACKSTOPPER << 6)
struct k_t *

Definition at line 279 of file krnl.c.

◆ k_err_cnt

volatile char k_err_cnt = 0

Definition at line 298 of file krnl.c.

Referenced by k_crt_sem(), k_crt_send_Q(), k_crt_task(), k_init(), and k_start().

◆ k_millis_counter

unsigned long k_millis_counter = 0

Definition at line 306 of file krnl.c.

Referenced by ISR(), k_millis(), and ki_millis().

◆ k_msg

int k_msg

Definition at line 295 of file krnl.c.

Referenced by k_crt_send_Q(), and k_init().

◆ k_running

volatile char k_running = 0

◆ k_sem

int k_sem

Definition at line 295 of file krnl.c.

Referenced by k_crt_sem(), k_crt_send_Q(), and k_init().

◆ k_task

int k_task

Definition at line 295 of file krnl.c.

Referenced by k_crt_task(), and k_init().

◆ k_tick_size

unsigned int k_tick_size

Definition at line 307 of file krnl.c.

Referenced by ISR(), k_eat_ticks(), and k_start().

◆ nr_sem

char nr_sem = 0

Definition at line 296 of file krnl.c.

Referenced by ISR(), k_crt_sem(), and k_crt_send_Q().

◆ nr_send

char nr_send = 0

Definition at line 296 of file krnl.c.

Referenced by k_crt_send_Q(), and k_init().

◆ nr_task

char nr_task = 0

Definition at line 296 of file krnl.c.

Referenced by ISR(), k_crt_task(), and k_init().

◆ pAQ

int * pAQ

◆ pmain_el

int * pmain_el

Definition at line 287 of file krnl.c.

Referenced by k_init(), k_start(), and k_stop().

◆ pRun

◆ pSleepSem

int * pSleepSem

Definition at line 291 of file krnl.c.

Referenced by k_init(), and k_sleep().

◆ sem_pool

int * sem_pool

Definition at line 285 of file krnl.c.

Referenced by ISR(), k_crt_sem(), and k_init().

◆ send_pool

struct k_msg_t* send_pool

Definition at line 293 of file krnl.c.

Referenced by k_crt_send_Q(), and k_init().

◆ stopp

volatile char stopp = 0
static

Definition at line 304 of file krnl.c.

Referenced by k_start(), and k_stop().

◆ tcntValue

volatile unsigned int tcntValue

Definition at line 300 of file krnl.c.

Referenced by ISR(), and k_start().

◆ timer0_fract

unsigned char timer0_fract

Referenced by ISR().

◆ timer0_millis

volatile unsigned long timer0_millis

Referenced by ISR().

◆ timer0_overflow_count

volatile unsigned long timer0_overflow_count

Referenced by ISR().

◆ tmr_indx

int tmr_indx

Definition at line 309 of file krnl.c.

Referenced by ISR().

task_pool
struct k_t * task_pool
BACKSTOPPER
#define BACKSTOPPER
Definition: krnl.h:254
setup
void setup()
Definition: k01myfirsttask.ino:31
k_init
int k_init(int nrTask, int nrSem, int nrMsg)
Definition: krnl.c:1262
k_t
Definition: krnl.h:335
k_crt_task
struct k_t * k_crt_task(void(*pTask)(void), char prio, int stkSize)
Definition: krnl.c:566
krnl.h
KRNLBUG
#define KRNLBUG
Definition: krnl.h:222
k_start
int k_start(int tick)
Definition: krnl.c:1304