30#include "os/os_sys_time.h"
31#if OS_FEATURE_WATCHDOG_ENABLED == 1
32#include "os_watchdog.h"
35#if OS_USE_SCHEDULER_100us == 1
37#ifndef OS_TIMER_NUMBER_OF_TIMERS
38#warning OS_TIMER_NUMBER_OF_TIMERS needs to be defined in main/project_setting.h
41#warning OS_USE_SYSTIME needs to be defined in main/project_setting.h
43#include "os/os_scheduler.h"
59void TMR1_CallBack(
void);
83#if OS_TIMER_NUMBER_OF_TIMERS > 0
84 void OS_Timer_Tick(
void);
87static volatile uint16_t scheduler_interrupt_leader_100us = 0;
88static volatile uint16_t scheduler_interrupt_follower_100us = 0;
89static volatile uint8_t scheduler_interrupt_realtime_counter_1ms = 0;
91#if OS_USE_MCC_TIMER1 == 0
92static inline void OS_Scheduler_Init_Timer1_100us(
void)
100 T1CONbits.TMWDIS = 0;
103 T1CONbits.TECS = 0b11;
129void OS_Scheduler_Init(
void)
131 #if OS_USE_MCC_TIMER1 == 0
132 OS_Scheduler_Init_Timer1_100us();
134#if OS_USE_SYSTIME == 1
135 OS_SysTime_ResetTime();
137 scheduler_interrupt_leader_100us = 0U;
138 scheduler_interrupt_follower_100us = 0U;
151#if defined (OS_USE_MCC_TIMER1) && (OS_USE_MCC_TIMER1 == true)
154void TMR1_CallBack(
void)
156void __attribute__((__interrupt__,no_auto_psv)) _T1Interrupt(
void)
159 scheduler_interrupt_leader_100us++;
161#if OS_TIMER_NUMBER_OF_TIMERS > 0
164 Tasks_Realtime_100us();
165 scheduler_interrupt_realtime_counter_1ms += 1U;
166 if (scheduler_interrupt_realtime_counter_1ms >= 10U)
168#if OS_USE_SYSTIME == 1
169 OS_SysTime_IncrementTime_1ms();
172 scheduler_interrupt_realtime_counter_1ms = 0U;
188void OS_Scheduler_RunOnce(
void)
190 volatile static uint16_t scheduler_1ms_timer = 0U;
191 volatile static uint16_t scheduler_10ms_timer = 0U;
192 volatile static uint16_t scheduler_100ms_timer = 0U;
193 volatile static uint16_t scheduler_1s_timer = 0U;
197 if (scheduler_interrupt_follower_100us != scheduler_interrupt_leader_100us)
199 scheduler_interrupt_follower_100us += 1U;
201 scheduler_1ms_timer += 1U;
202 if (scheduler_1ms_timer >= 10U)
204 scheduler_1ms_timer = 0U;
206 scheduler_10ms_timer += 1U;
207 if (scheduler_10ms_timer >= 10U)
209 scheduler_10ms_timer = 0U;
211 scheduler_100ms_timer += 1U;
212 if (scheduler_100ms_timer >= 10U)
214 scheduler_100ms_timer = 0U;
216 scheduler_1s_timer += 1U;
217 if (scheduler_1s_timer >= 10U)
219 scheduler_1s_timer = 0U;
220 #if OS_FEATURE_WATCHDOG_ENABLED == 1
221 OS_Watchdog_KeepAlivePing();
243void OS_Scheduler_RunForever(
void)
246 scheduler_interrupt_leader_100us = 0U;
247 scheduler_interrupt_follower_100us = 0U;
254 OS_Scheduler_RunOnce();
void __attribute__((weak))
This is the generated driver header file for the TMR1 driver.
void Tasks_10ms(void)
Tasks_10ms gets called every 10ms, put your things in it that need to be called regularly.
void Tasks_1ms(void)
Tasks_1ms gets called every millisecond, put your things in it that need to be called regularly.
void Tasks_Realtime_1ms(void)
Tasks_Realtime_1ms gets called directly from the timer interrupt every millisecond.
void Tasks_100ms(void)
Tasks_100ms gets called every 100 ms, put your things in it that need to be called regularly.
void Tasks_Background(void)
Tasks_Background gets called all the time when no other of the above tasks are being called.
void Tasks_1s(void)
Tasks_1s gets called every second, put your things in it that need to be called regularly.
void TMR1_TimeoutCallbackRegister(void(*handler)(void))
This function can be used to override default callback and to define custom callback for TMR1 Timeout...