[STM32F0] 分享自己写的链表+时间片任务架构程序<希望跟大家多交流...

[复制链接]
2488|13
 楼主| yklstudent 发表于 2017-5-12 14:58 | 显示全部楼层 |阅读模式
AN, ST, TI, ck, ic
一言不合直接上代码,代码如下所示:

void sTaskListInit(void)
{
    p_head = NULL;
}

bool sTaskListAdd(INT16U handle, INT32U period, INT32U tick, TaskFunc_Type func, void *para)
{
    ListTask_Type *pvTaskHandle = (ListTask_Type *)malloc(sizeof(ListTask_Type));
    if(pvTaskHandle == NULL)
    {
        return false;
    }
    else
    {
        memset(pvTaskHandle, 0x00, sizeof(ListTask_Type));
    }
   
    ListTask_Type *pvTaskPoint = p_head;
    pvTaskHandle->handle = handle;
    pvTaskHandle->period = period;
    pvTaskHandle->tick   = tick;
    pvTaskHandle->func   = func;
    pvTaskHandle->para   = para;
    pvTaskHandle->p_next = NULL;
    pvTaskHandle->n_next = NULL;
    if(pvTaskPoint == NULL)
    {
        p_head = pvTaskHandle;
    }
    else
    {
        while (pvTaskPoint->p_next)
        {
            pvTaskPoint = pvTaskPoint->p_next;
        }
        pvTaskPoint->p_next = pvTaskHandle;     //链表最后加入了新节点
    }
   
    return true;
}

void sTaskExecute(ListTask_Type *pvTaskHandle, INT32U tick)
{
    switch(pvTaskHandle->line)
    {
        case 0:
        {
            while(1)
            {
                do
                {
                    pvTaskHandle->tick = tick;
                    pvTaskHandle->line = 1;
                    case 1:
                    {
                        if(tick - pvTaskHandle->tick > pvTaskHandle->period)
                        {
                            pvTaskHandle->func(pvTaskHandle->para);
                            pvTaskHandle->line = 0;
                            break;
                        }
                        return;
                    }
                }while(0);
            }
        }
        default:
            pvTaskHandle->line = 0;
            break;
    }
}

void sTaskSchedule(void)
{
    ListTask_Type *pvTaskHandle;
   
    for(;;)
    {
        pvTaskHandle = p_head;
   
        do
        {
            sTaskExecute(pvTaskHandle, ultick);
            pvTaskHandle = pvTaskHandle->p_next;
        }while(pvTaskHandle);
    }
}
gyh974 发表于 2017-5-12 17:24 | 显示全部楼层
feelhyq 发表于 2017-5-12 19:04 | 显示全部楼层
为什么要自己造轮子呢? 用成熟的东西不好吗?自己造的轮子还要经过长时间的测试验证
 楼主| yklstudent 发表于 2017-5-12 19:51 | 显示全部楼层
feelhyq 发表于 2017-5-12 19:04
为什么要自己造轮子呢? 用成熟的东西不好吗?自己造的轮子还要经过长时间的测试验证 ...

请问有什么成熟的程序架构可以免费使用????
feelhyq 发表于 2017-5-12 22:54 | 显示全部楼层
yklstudent 发表于 2017-5-12 19:51
请问有什么成熟的程序架构可以免费使用????

如果需要链表可以直接去linux里面找,如果需要时间片任务架构 可以去UCOS和RT_thread里面找
shizaigaole 发表于 2017-5-13 07:20 来自手机 | 显示全部楼层
没必要这样写,封装成这样有什么意义?
shizaigaole 发表于 2017-5-13 07:21 来自手机 | 显示全部楼层
怎么任务切割是关键吧
 楼主| yklstudent 发表于 2017-5-13 07:55 | 显示全部楼层
shizaigaole 发表于 2017-5-13 07:21
怎么任务切割是关键吧

就是一个裸机下 的时间片处理程序,别想太多
 楼主| yklstudent 发表于 2017-5-13 07:56 | 显示全部楼层
feelhyq 发表于 2017-5-12 22:54
如果需要链表可以直接去linux里面找,如果需要时间片任务架构 可以去UCOS和RT_thread里面找 ...

你平时都用ucos,rtthread????
mmuuss586 发表于 2017-5-13 08:29 | 显示全部楼层
谢谢分享
icecut 发表于 2017-5-13 09:45 | 显示全部楼层
木有抢断,基本不能用
ctsdswk 发表于 2017-5-13 10:44 | 显示全部楼层
替代裸奔的应用应该够了,不过貌似容易被阻塞。
msblast 发表于 2017-5-13 11:00 | 显示全部楼层
有点眼熟,pt-thread供参考
feelhyq 发表于 2017-5-14 22:59 | 显示全部楼层
yklstudent 发表于 2017-5-13 07:56
你平时都用ucos,rtthread????

linux和RT_thread,我们自己的芯片跑的是RT_thread
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

3256

帖子

22

粉丝
快速回复 在线客服 返回列表 返回顶部