69 #include <avr/interrupt.h>
74 #if (F_CPU == 8000000)
75 #pragma message("krnl detected 8 MHz")
78 #if (KRNL_VRS != 20240525)
79 #error "KRNL VERSION NOT UPDATED in krnl.c "
99 JDN SIGER NOGO IN SIMPLIFY VRS
137 #pragma warn "krnl timer on timer 2 - check PWM "
138 #define KRNLTMRVECTOR TIMER2_OVF_vect
140 #define TCCRxA TCCR2A
141 #define TCCRxB TCCR2B
144 #define TIMSKx TIMSK2
146 #define CNT_1MSEC 240
147 #define CNT_10MSEC 99
149 #define PRESCALE ((1 << CS22) | (1 << CS21) | (1 << CS20))
158 #define KRNLTMRVECTOR TIMER3_OVF_vect
160 #define TCCRxA TCCR3A
161 #define TCCRxB TCCR3B
164 #define TIMSKx TIMSK3
166 #define PRESCALE ((1 << CS02) | (1 << CS01) | (1 << CS00))
167 #define COUNTMAX 0xffff
168 #define CNT_1MSEC 65520
169 #define CNT_10MSEC 65381
186 #pragma err "KRNL: no valid tmr selected"
293 while (10 < eatTime) {
365 #ifdef STOP_IN_BACKSTOPPER
397 pT->
cnt1 = (int)(pStk);
404 for (
i = 0;
i < stkSize;
i++) {
408 s = pStk + stkSize - 1;
422 #if defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__)
434 #if defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega2561__)
438 #if defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2561__)
443 for (
i = 0;
i < 30;
i++)
467 extern int __heap_start, *__brkval;
470 x = ((int)&v - (__brkval == 0 ? (
int)&__heap_start : (int)__brkval));
523 pstk = (
char *)(t->
cnt1);
596 if ((maxvalue < init_val)
615 sem->
cnt1 = init_val;
617 sem->
maxv = maxvalue;
640 if (0 <= sem->
cnt1) {
657 k_sem_signal(sem->
nr, sem->
cnt1);
660 if (sem->
cnt1 <= 0) {
731 retval =
ki_wait(sem, timeout);
739 retval =
ki_wait(sem, timeout);
803 retval =
ki_wait(sem, timeout);
861 if (0 <= sem->
cnt1) {
908 if (pMsg->
sem == NULL) {
913 pMsg->
r = pMsg->
w = -1;
983 *(pDst++) = *(pSrc++);
1006 char r, *pSrc, *pDst;
1017 if (pB->
nr_el <= pB->
r) {
1024 *(pDst++) = *(pSrc++);
1039 char r, *pSrc, *pDst;
1051 if (pB->
nr_el <= pB->
r) {
1058 *(pDst++) = *(pSrc++);
1078 void k_rwInit(
struct k_rwlock_t *lock) {
1079 lock->nrReaders = 0;
1085 int k_rwRdEnter(
struct k_rwlock_t *lock,
int timeout) {
1087 k_wait(lock->fifoSem, 0);
1091 if (lock->nrReaders == 1)
1092 k_wait(lock->rdwrSem, 0);
1097 int k_rwWrEnter(
struct k_rwlock_t *lock,
int timeout) {
1098 k_wait(lock->fifoSem, 0);
1099 k_wait(lock->rdwrSem, 0);
1103 int k_rwRdLeave(
struct k_rwlock_t *lock) {
1106 if (lock->nrReaders == 0) {
1112 int k_rwWrLeave(
struct k_rwlock_t *lock) {
1152 int k_init(
int nrTask,
int nrSem,
int nrMsg) {
1158 k_sem = nrSem + nrMsg + 1;
1241 #if defined(__AVR_ATmega32U4__)
1268 TIMSKx = (1 << TOIEx);
1274 TIMSKx |= (1 << TOIEx);
1416 void __attribute__((weak)) k_sem_signal(
unsigned char nr,
int semVal) {}
1418 void __attribute__((weak)) k_sem_wait(
unsigned char nr,
int semVal) {}
void k_sem_clip(unsigned char nr, int nrClip)
unsigned long k_millis(void)
int k_signal(struct k_t *sem)
unsigned long ki_millis(void)
JDN SIGER NOGO IN SIMPLIFY VRS struct k_t * pAQ
void k_eat_msec(unsigned int eatTime)
void delayMicroseconds(unsigned int t)
int ki_semval(struct k_t *sem)
JDN SIGER NOGO IN SIMPLIFY VRS struct k_t * pmain_el
JDN SIGER NOGO IN SIMPLIFY VRS struct k_t * pRun
int k_msg_count(struct k_msg_t *m)
int k_mut_ceil_set(struct k_t *sem, char prio)
char k_receive(struct k_msg_t *pB, void *el, int timeout, int *lost_msg)
struct k_t * k_crt_mut(char ceiling_prio, int init_val, int maxvalue)
int ki_signal(struct k_t *sem)
int k_wait2(struct k_t *sem, int timeout, int *nrClip)
volatile unsigned char tcntValue
JDN SIGER NOGO IN SIMPLIFY VRS struct k_t * pSleepSem
char ki_receive(struct k_msg_t *pB, void *el, int *lost_msg)
struct k_t * k_crt_sem(int init_val, int maxvalue)
int k_semval(struct k_t *sem)
int k_set_prio(char prio)
ISR(KRNLTMRVECTOR, ISR_NAKED)
struct k_t * deQ(struct k_t *el)
char ki_send(struct k_msg_t *pB, void *el)
int k_wait(struct k_t *sem, int timeout)
int k_clear_msg_Q(struct k_msg_t *pB)
int ki_unused_stak(struct k_t *t)
int k_mut_ceil_leave(struct k_t *sem)
struct k_msg_t * k_crt_send_Q(int nr_el, int el_size, void *pBuf)
void k_set_coop_multitask(unsigned char onn)
void k_round_robbin(void)
JDN SIGER NOGO IN SIMPLIFY VRS struct k_t AQ
int k_set_sem_timer(struct k_t *sem, int val)
int k_unused_stak(struct k_t *t)
char k_send(struct k_msg_t *pB, void *el)
void __attribute__((naked, noinline))
struct k_t * k_crt_task(void(*pTask)(void), char prio, char *pStk, int stkSize)
void enQ(struct k_t *Q, struct k_t *el)
JDN SIGER NOGO IN SIMPLIFY VRS struct k_t * task_pool
int k_sem_signals_lost(struct k_t *sem)
int k_mut_ceil_enter(struct k_t *sem, int timeout)
int k_mut_ceil(struct k_t *sem, int timeout, void(*fct)(void))
struct k_msg_t * send_pool
int k_init(int nrTask, int nrSem, int nrMsg)
void prio_enQ(struct k_t *Q, struct k_t *el)
int ki_wait(struct k_t *sem, int timeout)
int ki_msg_count(struct k_msg_t *m)
int ki_clear_msg_Q(struct k_msg_t *pB)
int k_clear_sem(struct k_t *sem)
unsigned long k_millis_counter
JDN SIGER NOGO IN SIMPLIFY VRS struct k_t * sem_pool
volatile char k_wdt_enabled
void ki_task_shift(void) __attribute__((naked))
#define CEILINGFAILNOTCEIL