|
|
@@ -1,85 +0,0 @@
|
|
|
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
-// 头文件区
|
|
|
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
-#include <stdio.h>
|
|
|
-#include "scheduler.h"
|
|
|
-#include "stm32f30x.h"
|
|
|
-
|
|
|
-static Task_Block_t task_block[TASK_NUM]; // 任务块 根据需求设定任务数量
|
|
|
-Task_Ctrl_t Task_Ctrl; // 任务控制块
|
|
|
-
|
|
|
-void SysTick_Handler(void)
|
|
|
-{
|
|
|
- ISR_CallBlack(&Task_Ctrl); // 每次系统时钟中断,时钟周期加1
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * @author
|
|
|
- * @brief 任务添加函数
|
|
|
- * @param 任务执行时间间隔
|
|
|
- * @param 任务ID 同时表示任务优先级
|
|
|
- * @param 任务主体函数
|
|
|
- * @retval NULL
|
|
|
- */
|
|
|
-void TaskAdd(uint8_t task_id, Task_Handler_t task, uint32_t on_time)
|
|
|
-{
|
|
|
- if(task_id >= TASK_NUM){
|
|
|
- return;
|
|
|
- }
|
|
|
- task_block[task_id].On_Time = on_time;
|
|
|
- task_block[task_id].RunTime = 0;
|
|
|
- task_block[task_id].Task_Handler = task;
|
|
|
- task_block[task_id].TaskState = 0;
|
|
|
-}
|
|
|
-
|
|
|
-/*更新任务状态*/
|
|
|
-void UpdateTask(p_Task_Block_t Task_Block)
|
|
|
-{
|
|
|
- Task_Block->RunTime = 0;
|
|
|
- Task_Block->TaskState = 1;
|
|
|
-}
|
|
|
-
|
|
|
-/*任务初始化函数*/
|
|
|
-void TaskInit(void)
|
|
|
-{
|
|
|
- Task_Ctrl.Update_State = UpdateTask;
|
|
|
- Task_Ctrl.Task = task_block;
|
|
|
-
|
|
|
- SysTick_Config(SystemCoreClock / 1000);
|
|
|
-}
|
|
|
-
|
|
|
-/*放在1ms中断中*/
|
|
|
-void ISR_CallBlack(p_Task_Ctrl_t Task_Ctrl)
|
|
|
-{
|
|
|
- if (Task_Ctrl->Task != NULL)
|
|
|
- {
|
|
|
- for (uint8_t i = 0; i < TASK_NUM; i++)
|
|
|
- {
|
|
|
- Task_Ctrl->Task[i].RunTime++;
|
|
|
- if (Task_Ctrl->Task[i].RunTime > Task_Ctrl->Task[i].On_Time)
|
|
|
- {
|
|
|
- if(Task_Ctrl->Update_State) {
|
|
|
- Task_Ctrl->Update_State(&Task_Ctrl->Task[i]);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void TaskStart()
|
|
|
-{
|
|
|
- static uint8_t i = 0;
|
|
|
- while (1)
|
|
|
- {
|
|
|
- for (i = 0; i < TASK_NUM; i++)
|
|
|
- {
|
|
|
- if (Task_Ctrl.Task[i].TaskState)
|
|
|
- {
|
|
|
- Task_Ctrl.Task[i].TaskState = 0;
|
|
|
- if(Task_Ctrl.Task[i].Task_Handler) {
|
|
|
- Task_Ctrl.Task[i].Task_Handler();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|