#include "ycos.h" #include /******************************************************************************** * @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= 0XFFFFFFF0) osHighPrioCounter=0; //防止timeCount越界 for( int i = 0; i