# include <stdio.h>
typedef struct _TASK_COMPONENTS
{
unsigned char Run;
unsigned int Timer;
unsigned int ItvTim;
void ( * TaskHook) ( void ) ;
} TASK_COMPONENTS;
void Task1 ( void ) ;
void Task2 ( void ) ;
void Task3 ( void ) ;
static TASK_COMPONENTS TaskComps[ ] =
{
{ 0 , 10 , 10 , Task1} ,
{ 0 , 20 , 20 , Task2} ,
{ 0 , 40 , 40 , Task3}
} ;
# define TASKS_MAX ( sizeof ( TaskComps) / sizeof ( TaskComps[ 0 ] ) )
void TaskRemarks ( void )
{
unsigned char i;
for ( i = 0 ; i < TASKS_MAX; i++ )
{
if ( TaskComps[ i] . Timer)
{
TaskComps[ i] . Timer-- ;
if ( TaskComps[ i] . Timer == 0 )
{
TaskComps[ i] . Timer = TaskComps[ i] . ItvTime;
TaskComps[ i] . Run = 1 ;
}
}
}
}
void Task1 ( void )
{
printf ( "Task1 Running...\n" ) ;
}
void Task2 ( void )
{
printf ( "Task2 Running...\n" ) ;
}
void Task3 ( void )
{
printf ( "Task3 Running...\n" ) ;
}
void TaskProcess ( void )
{
unsigned char i;
for ( i = 0 ; i < TASKS_MAX; i++ )
{
if ( TaskComps[ i] . Run)
{
TaskComps[ i] . TaskHook ( ) ;
TaskComps[ i] . Run = 0 ;
}
}
}
void SysTick_Handler ( void )
{
TaskRemarks ( ) ;
}
# include "stm32f1xx_hal.h"
extern void TaskProcess ( void ) ;
int main ( void )
{
HAL_Init ( ) ;
SystemClock_Config ( ) ;
while ( 1 )
{
TaskProcess ( ) ;
}
}