赞
踩
#include <stdio.h> /* 任务结构 */ typedef struct _TASK_COMPONENTS { unsigned char Run; /* 程序运行标记:0-不运行,1运行 */ 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])) /*********************************************************************** * FunctionName : TaskRemarks() * Description : 任务标志处理 * EntryParameter : None * ReturnValue : None ***********************************************************************/ void TaskRemarks(void) { unsigned char i; for (i = 0; i < TASKS_MAX; i++) /* 逐个任务时间处理 */ { if (TaskComps[i].Timer) /* 时间不为0 */ { 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"); } /*********************************************************************** * FunctionName : TaskProcess() * Description : 任务处理 * EntryParameter : None * ReturnValue : None ***********************************************************************/ void TaskProcess(void) { unsigned char i; for (i = 0; i < TASKS_MAX; i++) /* 逐个任务时间处理 */ { if (TaskComps[i].Run) /* 程序运行标记为运行 */ { TaskComps[i].TaskHook(); /* 运行任务 */ TaskComps[i].Run = 0; /* 标志清0 */ } } }
void SysTick_Handler(void)
{
TaskRemarks();
}
#include "stm32f1xx_hal.h" extern void TaskProcess(void); int main(void) { HAL_Init(); SystemClock_Config(); while (1) { /* USER CODE END WHILE */ TaskProcess(); /* USER CODE BEGIN 3 */ } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。