summary of uSmartX

28 views
Skip to first unread message

ares qi

unread,
Jun 17, 2006, 5:43:29 AM6/17/06
to are...@yahoogroups.com, are...@googlegroups.com
uSmartX总结
 
今天,大体看了一下uSmartX的源代码,先总结如下
 
usmartx的调度属于非抢占式。代码量不算太大。它实现的特点是有一个主调度器,它不停的选择合适的任务执行。各个任务不能yield到其它的任务,它要迅速执行并返回,再由调度器选择合适的下一个任务并执行。这也挺新颖的,适合做创新点。
 
那么,任务之间如何协调呢? uSmartX使用了event。它总共定义了几种事件,
 
typedef enum { 
 SYS_OK,    /*!< System call or scheduler returned successefuly */
 SYS_ERROR,   /*!< System call or scheduler returned with error (resource not avaible) */
 SYS_IDLE,   /*!< Scheduler returned in idle state, meaning there was no ready task to run */
 SYS_MBX,   /*!< Mailbox was posted or freed */
 SYS_SEM,   /*!< Semaphore was posted */
 SYS_RESUMED,  /*!< Task was explicitely resumed */
 
 SYS_TOUT,   /*!< Task sleep timeout expired */
 SYS_MBX_TOUT,  /*!< Task timeout expired when pending on a mailbox */
 SYS_SEM_TOUT,  /*!< Task timeout expired when pending on a semaphore */
 SYS_NONE   /*!< Task didn't recived any system events */
   
} STATUS;
 
因此任务要始终维持这个事件状态的变量,并根据不同的event做不同的工作。
 
但我觉得,对于每一个任务,这样编程似乎挺麻烦的,在任务内部必须根据不同的event做不同的工作。如果没有主调度器,每个任务可以在必要时挂起自己,条件满足再继续执行,这似乎比维护这些event要直观并省去了不少麻烦。
 
总之,觉得uSmarX的方法挺新颖,也有一定的研究价值,但和自己平时对rtos的理解有一些出入,思路不太一致,决定不在实际中使用。
Reply all
Reply to author
Forward
0 new messages