/*
 * timeSliceOffset.h
 *
 *  Created on: 2024年6月22日
 *      Author: psx
 */

#ifndef DRIVERS_TIMESLICEOFFSET_TIMESLICEOFFSET_H_
#define DRIVERS_TIMESLICEOFFSET_TIMESLICEOFFSET_H_

#include "debug.h"
#include "uart_dev.h"

/**时间片类*/
typedef struct _STR_TimeSliceOffset{
    volatile unsigned char runFlag;         /**< 可运行标志(1:可运行/0:不可运行) */
    volatile unsigned short count;          /**< 计数器 */
    unsigned short reloadVal;               /**< 重载值 */
    void (*taskFunc)(void);                 /**< 任务函数的函数指针 */
    struct _STR_TimeSliceOffset* pNext;  /**< 指向下一个对象 */
}STR_TimeSliceOffset;


/********************************************函数声明********************************************/


/* 注册 */
int TimeSliceOffset_Register(STR_TimeSliceOffset* pTSlice,    \
                            void (*taskFunc)(void),     \
                            unsigned short reloadVal,   \
                            unsigned short offset);

/* 取消注册 */
int TimeSliceOffset_Unregister(STR_TimeSliceOffset* pTSlice);

/* 启动时间片错位轮询(代替main的while循环) */
void TimeSliceOffset_Start(void);

/* 时间片生成(放到systick或定时器中断处理函数内) */
void TimeSliceOffset_Produce(void);


#endif /* DRIVERS_TIMESLICEOFFSET_TIMESLICEOFFSET_H_ */