rt-thread中的系统任务

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Longyu_wlz/article/details/83117531

rt-thread中的系统任务

实时操作系统中在用户进程创建前系统任务已经创建运行,其中以idle任务最为常见,其它的如统计任务、软件定时器任务等等都是系统任务的实例。

最早我学习ucos-II时,我了解到该系统中存在着两个系统任务,分别是空闲任务和统计任务。当系统中无用户任务运行时,空闲任务就会被选中执行,空任务一般没有具体的工作,只是让cpu保持在运行状态,对空闲计数变量加1。ucos-III仍然有空闲任务与系统任务,除此之外还多了时钟节拍任务、软件定时器任务、中断服务管理任务,扩展了系统的功能。

较ucos而言,rt-thread中除空闲任务、定时器任务(可配置)之外,还多了一个main任务。rt-thread的执行入口函数并不是常见的main,在rt-thread中main函数仅仅作为main任务执行主体中的子函数进行调用。

main任务中完成了组件初始化工作,其它相对低级的初始化工作由 rtthread_startup函数完成。

我在这里想着重讲讲rt-thread的空闲任务,它与ucos中的空闲任务不同,它完成了任务资源回收的工作。不得不说这一点对系统的性能有很大的提升,这就是追求卓越的性能的一种方式。任务的退出变得更加简洁,对任务占有资源的延迟回收有助于提高cpu使用率。

对于静态创建的任务而言,强制删除任务与任务的自然终止都仅仅通过从系统的就续表中解除链接的方式完成,不需要释放内存。对于动态创建的任务而言,强制删除任务与任务的自然终止也要完成同样的功能,不过rt-thread将任务占有的动态数据结构延迟释放。仅仅在任务退出时将任务插入到回收链表中,在下一次系统空闲时由空闲任务的执行函数遍历回收链表来释放动态数据结构。

用户可以实现属于单个任务的回收函数,该回收函数是tcb中的cleanup函数指针。当该函数部不为空时,就会在idle任务中进行执行。这是一个扩展,增强了任务资源回收的灵活性。

猜你喜欢

转载自blog.csdn.net/Longyu_wlz/article/details/83117531