/**
|
* @file os_task.c
|
* @author Ethan Tao (tzj0429@163.com)
|
* @brief
|
* @version 0.1
|
* @date 2021-12-09
|
*
|
* @copyright Copyright (c) 2021 Äþ²¨ÕýÀÊÆû³µÁ㲿¼þÓÐÏÞ¹«Ë¾
|
*
|
*/
|
#include "os_task.h"
|
// extern int OS_TickFlag = 0;
|
static OS_TASK_MSG *g_p_task = NULL; //ÈÎÎñ¶ÓÁÐ
|
static int g_task_cnt = 0; //×ÜÈÎÎñÊýÁ¿
|
static int g_task_pos = 0; //µ±Ç°ÈÎÎñ¸öÊý
|
volatile int OS_TickFlag = 0;
|
/*!
|
* @brief ³õʼ»¯ÈÎÎñ¶ÓÁÐ
|
* @param [in] p_task ÈÎÎñ¶ÓÁб£´æµÄÊý¾Ý
|
* @param [in] cnt ÉèÖÃ×î¶à±£´æcnt¸öÈÎÎñ
|
* @return int ·µ»Ø³õʼ»¯ÊÇ·ñ³É¹¦
|
* @retval 0 ³É¹¦
|
* @note null
|
*/
|
int InitOSTaskQueue(OS_TASK_MSG *p_task, int cnt)
|
{
|
int i = 0;
|
g_p_task = p_task;
|
g_task_cnt = cnt;
|
for (i = 0; i < g_task_cnt; i++)
|
{
|
g_p_task[i].func = NULL;
|
}
|
|
return 0;
|
}
|
|
/*!
|
* @brief ´´½¨Ò»¸öÈÎÎñ
|
* @param [in] func Ö´ÐÐÈÎÎñµÄº¯ÊýÖ¸Õë
|
* @param [in] tick Ö´Ðе±Ç°ÈÎÎñÐèÒª¶àÉÙ¸öÖÜÆÚ
|
* @param [in] work_tick ÔÚÒ»¸öÖÜÆÚÄÚ¾ßÌåÄĸöʱ¼äƬȥִÐÐ
|
* @param [in] par ´«ÈëÈÎÎñÐèÒªµÄ²ÎÊý
|
* @return int ·µ»Ø³õʼ»¯ÊÇ·ñ³É¹¦
|
* @retval 0 ³É¹¦
|
* @retval -1 ʧ°Ü
|
* @note null
|
*/
|
int OSTaskCreate(TASK_FUNC func, int tick, int work_tick, void *par)
|
{
|
if (g_task_pos < g_task_cnt)
|
{
|
g_p_task[g_task_pos].func = func;
|
g_p_task[g_task_pos].cycle_tick = tick;
|
g_p_task[g_task_pos].work_tick = work_tick;
|
g_p_task[g_task_pos].par = par;
|
g_task_pos++;
|
return 0;
|
}
|
else
|
{
|
return -1;
|
}
|
}
|
|
/*!
|
* @brief µ÷¶ÈËùÓÐÈÎÎñ
|
* @param [in] tick Ö´Ðе±Ç°ÈÎÎñÐèÒª¶àÉÙ¸öÖÜÆÚ
|
* @note null
|
*/
|
void OSSchedule(GETTICK_t GetTick)
|
{
|
int i = 0;
|
|
if (NULL == GetTick)
|
{
|
return;
|
}
|
while (1)
|
{
|
GetTick();
|
for (i = 0; i < g_task_pos; i++)
|
{
|
g_p_task[i].cur_tick++; //µ±Ç°ÈÎÎñCPU·ÖƬ
|
if ((g_p_task[i].cur_tick == g_p_task[i].work_tick) && (g_p_task[i].func != NULL))
|
{
|
g_p_task[i].func(g_p_task[i].par);
|
}
|
if (g_p_task[i].cur_tick >= g_p_task[i].cycle_tick)
|
{
|
g_p_task[i].cur_tick = 0;
|
}
|
}
|
}
|
}
|
|
void OS_GetTick(void)
|
{
|
while (1 != OS_TickFlag)
|
;
|
OS_TickFlag = 0;
|
}
|