135 lines
6.3 KiB
C
135 lines
6.3 KiB
C
#include "ycos.h"
|
||
#include <string.h>
|
||
|
||
|
||
/********************************************************************************
|
||
* @file ycos.c
|
||
* @author 晏诚科技 Mr.Wang
|
||
* @version V1.0.0
|
||
* @date 11-Dec-2018
|
||
* @brief 晏诚科技自主研发YCOS驱动代码
|
||
******************************************************************************
|
||
* @attention
|
||
*******************************************************************************/
|
||
|
||
YcOSTask_s sYcOSTask[YCOSTASK_MAX] ; //定义YcOSTasks类型的数组,用来保存所有的YCOS任务信息
|
||
|
||
/********************************************************************************************************************************************************
|
||
* 名 称:psYcOSTaskHandle YcOSTaskCreate( const char * const pcTaskName,
|
||
const YcOSTaskPrio_e eTaskPrio,
|
||
const uint32_t taskTickInterval,
|
||
const int taskID,
|
||
const YCOSTASKFP pCallback )
|
||
* 功 能:创建一个YcOS任务,但是不开启该任务轮询
|
||
* 入口参数:
|
||
* @param1 pcTaskName YcOS任务的命名
|
||
* @param2 eTaskPrio YcOS任务优先级
|
||
* @param3 taskTickInterval YcOS任务轮询间隔节拍数
|
||
* @param4 taskID YcOS任务ID 即数组sYcOSTask的元素sYcOSTask[taskID]
|
||
* @param5 pCallback YcOS任务轮询间隔到达时,要执行的代码函数指针
|
||
* 出口参数: &sYcOSTask[taskID]
|
||
********************************************************************************************************************************************************/
|
||
psYcOSTaskHandle YcOSTaskCreate( const char * const pcTaskName,
|
||
const YcOSTaskPrio_e eTaskPrio,
|
||
const uint32_t taskTickInterval,
|
||
const int taskID,
|
||
const YCOSTASKFP pCallback )
|
||
{
|
||
YcOSTask_s *psTask = &sYcOSTask[taskID] ;
|
||
psTask->taskName = pcTaskName ;
|
||
psTask->enTask = false ;
|
||
psTask->eTaskPrio = eTaskPrio ;
|
||
psTask->taskTickInterval = taskTickInterval ;
|
||
psTask->pFunc = pCallback ;
|
||
if( taskID >= YCOSTASK_MAX )
|
||
{
|
||
//LogOut("alarm ID >= ALARM_MAX") ;
|
||
return NULL ;
|
||
}
|
||
return psTask ;
|
||
}
|
||
|
||
/********************************************************************************************************************************************************
|
||
* 名 称:void CloseTimer(int timerNum )
|
||
* 功 能:删除psYcOSTaskHandle句柄任务
|
||
* 入口参数:
|
||
* @param1 psTask YcOS任务句柄psYcOSTaskHandle YcOSTaskCreate函数返回的定时器句柄
|
||
********************************************************************************************************************************************************/
|
||
void YcOSTaskDelete(psYcOSTaskHandle psTask)
|
||
{
|
||
psTask->taskName = " " ;
|
||
psTask->enTask = false ;
|
||
psTask->taskTickInterval = 0xFFFFFFFF ;
|
||
psTask->pFunc = NULL ;
|
||
}
|
||
|
||
/********************************************************************************************************************************************************
|
||
* 名 称:void YcOSTaskStart(psYcOSTaskHandle psTask)
|
||
* 功 能:开启psYcOSTaskHandle任务的轮询
|
||
* 入口参数:
|
||
* @param1 psTask YcOS任务句柄psYcOSTaskHandle YcOSTaskCreate函数返回的定时器句柄
|
||
********************************************************************************************************************************************************/
|
||
void YcOSTaskStart(psYcOSTaskHandle psTask)
|
||
{
|
||
psTask->enTask = true ;
|
||
}
|
||
|
||
/********************************************************************************************************************************************************
|
||
* 名 称:void CloseTimer(int timerNum )
|
||
* 功 能:关闭psYcOSTaskHandle任务的轮询
|
||
* 入口参数:
|
||
* @param1 psTask YcOS任务句柄psYcOSTaskHandle YcOSTaskCreate函数返回的定时器句柄
|
||
********************************************************************************************************************************************************/
|
||
void YcOSTaskStop(psYcOSTaskHandle psTask)
|
||
{
|
||
psTask->enTask = false ;
|
||
}
|
||
|
||
/********************************************************************************************************************************************************
|
||
* 名 称:void YcOSLowPrioSchedulerCallback(void)
|
||
* 功 能:YcOS低优先级任务的轮询调度器
|
||
* 说 明: 请将该调度器移植到应用层定时器中断中,应用层定时器中断建议100ms中断一次。
|
||
* 注 意:应用层改定时器中断抢占优先级必须为最低级别,且在该抢占优先级内没有其他中断
|
||
********************************************************************************************************************************************************/
|
||
void YcOSLowPrioSchedulerCallback(void)
|
||
{
|
||
volatile static uint32_t osLowPrioCounter = 0 ;
|
||
osLowPrioCounter++ ; //timeCount 计数器
|
||
if( osLowPrioCounter >= 0XFFFFFFF0) osLowPrioCounter=0; //防止timeCount越界
|
||
for( int i = 0; i<YCOSTASK_MAX; i++)
|
||
{
|
||
if( (sYcOSTask[i].enTask == true) && ( sYcOSTask[i].eTaskPrio == YCOSTASK_LOWPRIO ) ) //该任务调度已开启、且该任务为低优先级任务
|
||
{
|
||
if( osLowPrioCounter % sYcOSTask[i].taskTickInterval == 0 ) //该任务间隔节拍数到达
|
||
{
|
||
sYcOSTask[i].pFunc() ; //运行任务函数
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/********************************************************************************************************************************************************
|
||
* 名 称:void YcOSHighPrioSchedulerCallback(void)
|
||
* 功 能:YcOS高优先级任务的轮询调度器
|
||
* 注 意:应用层改定时器中断抢占优先级必须为次最低级别,且在该抢占优先级内没有其他中断
|
||
********************************************************************************************************************************************************/
|
||
void YcOSHighPrioSchedulerCallback(void)
|
||
{
|
||
volatile static uint32_t osHighPrioCounter = 0 ;
|
||
osHighPrioCounter++ ; //timeCount 计数器
|
||
if( osHighPrioCounter >= 0XFFFFFFF0) osHighPrioCounter=0; //防止timeCount越界
|
||
for( int i = 0; i<YCOSTASK_MAX; i++)
|
||
{
|
||
if( (sYcOSTask[i].enTask == true) && ( sYcOSTask[i].eTaskPrio == YCOSTASK_HIGHPRIO ) ) //该任务调度已开启、且该任务为高优先级任务
|
||
{
|
||
if( osHighPrioCounter % sYcOSTask[i].taskTickInterval == 0 ) //该任务间隔节拍数到达
|
||
{
|
||
sYcOSTask[i].pFunc() ; //运行任务函数
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|