summary of freertos

16 views
Skip to first unread message

ares qi

unread,
Jun 22, 2006, 11:19:02 PM6/22/06
to are...@yahoogroups.com, are...@googlegroups.com

summary about freertos
chap1 look at freertos
总体上,我觉得freertos做的非常好。他的思想和ucosii非常相似,但他大量使用了链表来组织任务和管理他们之间的关系(ucosii使用映像组织的),给人感觉逻辑非常清晰,有条理。编码风格也不错,很容易看懂,又有好的文档,真是ucosii的当之无愧的绝对替代者。开源的发布方式当然更好了,吸引了很多人为他编写移植程序,现在freertos的port已经非常多了,8,16,32无所不包,在sourceforge上他的激活程度在操作系统方向上已经相当靠前了。当然,他也有缺点,就是基本上只是一个内核,搭配的clib,tcp/ip,fs,gui基本上没有,有的也只是在移植的应用上,没有作为一个固定的组成部分。

chap2 freertos list
list是freertos的基础部分之一。所有任务的tcb全靠list链接在一起。
list-->listitem1-->listitem2-->listend  (list示意图)
freertos使用的list非常有意思,有list和listitem的概念。而listitem是tcb中的一项,用的时候把listitem挂在list中,就算把某个tcb放在list中了,达到组织tcb的目的。

目前,freertos中有以下几种list
ReadyTasksList  所有可以运行的任务,当前运行的任务也在其中
DelayedTaskList  正在延迟的任务,或等待队列机会的任务
TasksWaitingTermination  被删除的任务,在被彻底删除之前放在这里
SuspendedTaskList  被挂起的任务
PendingReadyList  在调度器挂起的过程中,所有就绪的任务先放在这里,后来由resumeall统一处理
xTasksWaitingToSend  队列中的,等待发送机会的任务
xTasksWaitingToReceive  队列中的,等待接收机会的任务

当然,各个list需要的listitem不完全一样,前四个需要xGenericListItem,后三个需要xEventListItem。每个tcb都包含这两种listitem. 其中xGenericListItem代表了任务的一个比较大的状态,xEventListItem代表了队列事件的一些状态。(但PendingReadyList管理xEventListItem,我觉得PendingReadyList管理xGenericListItem也可行,而且思路更清晰)


chap3  freertos queue
freertos的queue实现了队列的功能,每个queue的基本结构包含xTasksWaitingToSend和xTasksWaitingToReceive,来管理tcb的状态。另外freertos的Semaphore也是通过对queue的macros实现的。目前,semaphore仅仅是Binary semaphore,但很容易扩展到counting semaphore.

chap4  freertos task
task实现了一个基于抢占式或协作式的调度机制,任务的创建,删除,挂起,恢复,改变优先级等功能挺全的。而且,他的代码逻辑比较清晰,想要略微改变功能应该很容易。

Reply all
Reply to author
Forward
0 new messages