具体源码我放在github上了
操作其实也跟MultiTimer一样,但是timeslice使用了双向链表,可以学习一下。
参考链接:
单片机面向对象思维的架构:时间轮片法-优快云博客
【嵌入式开源库】timeslice的使用,完全解耦的时间片轮询框架构-优快云博客
Linux内核中双向链表的经典实现 - 如果天空不死 - 博客园 (cnblogs.com)
list.c
#include "list.h"
void list_init(ListObj* list)
{
list->next = list->prev = list;
}
void list_insert_after(ListObj* list, ListObj* node)
{
list->next->prev = node;
node->next = list->next;
list->next = node;
node->prev = list;
}
void list_insert_before(ListObj* list, ListObj* node)
{
list->prev->next = node;
node->prev = list->prev;
list->prev = node;
node->next = list;
}
void list_remove(ListObj* node)
{
node->next->prev = node->prev;
node->prev->next = node->next;
node->next = node->prev = node;
}
int list_isempty(const ListObj* list)
{
return list->next == list;
}
unsigned int list_len(const ListObj* list)
{
unsigned int len = 0;
const ListObj* p = list;
while (p->next != list)
{
p = p->next;
len++;
}
return len;
}
list.h