Skip to content

Commit

Permalink
Update Design_Record.md
Browse files Browse the repository at this point in the history
  • Loading branch information
ianhom committed Sep 19, 2018
1 parent 6e988c2 commit 5613a28
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions Documents/Design_Record.md
Expand Up @@ -304,9 +304,9 @@ T_RELAY tRelay[MAX_RELAY_CHANNEL_NUM] = {0}; /* Create 5 relay objects */
```

## 关于MOE与RTOS的区别与共同点
- 虽然MOE支持多任务,但并不是一个传统的RTOS系统,最大的区别就是MOE不支持抢占式的任务调度。不支持抢占的一个明显缺点就是,如果一个任务始终不放弃执行权,那系统将被“卡死”。解决这个问题的方法就是在应用中,显性地使用状态机的方式对应用“切片”保证任务不会持久独占CPU,或使用既有框架(Protothread)的方式隐性地放弃执行权,让其他任务得以运行。虽然这两种方法相比于RTOS中通过时间片强制调度那样方便可靠,但在嵌入式软件中,把任务写成独占CPU的方式本身就不是值得推荐的事。如果有一个唯一最高优先级的任务,并在任务中做了一个while(1)操作,那一样将会“卡死”系统,这里同样需要开发人员花精力在编写应用的过程中关注CPU的共享问题。
- 虽然MOE支持多任务,但并不是一个传统的RTOS系统,最大的区别就是MOE不支持抢占式的任务调度。不支持抢占的一个明显缺点就是,如果一个任务始终不放弃执行权,那系统将被“卡死”。解决这个问题的方法就是在应用中,显性地使用状态机的方式对应用“切片”保证任务不会持久独占CPU,或使用既有框架(Protothread)的方式隐性地放弃执行权,让其他任务得以运行。虽然这两种方法没有RTOS中通过时间片强制调度那样方便可靠,但在嵌入式软件中,把任务写成独占CPU的方式本身就不是值得推荐的事。如果有一个唯一最高优先级的任务,并在任务中做了一个while(1)操作,那一样将会“卡死”系统,这里同样需要开发人员花精力在编写应用的过程中关注CPU的共享问题。
- 在RTOS中,任务一般有“运行态”、“就绪态”和“阻塞态”几个状态,在MOE中也有对应的表现形式,当MOE任务正在运行时,MOE任务处于“运行态”;当对应到某个MOE任务的事件处在事件队列时,该MOE任务处于“就绪态”;如果事件队列中没有事件指向某个MOE任务,那该MOE任务可以认为是“阻塞态”;此外RTOS中会有删除任务或叫“退出态”,这里删除任务不是把任务的代码从ROM中删除,而是删除任务的实例---释放为任务分配的资源。而对于MOE中的任务仅占两个字节的上下文信息,所以不需要释放。
- MOE中的任务件通讯机制有事件和消息,这点和RTOS类似。关于这点,事件和消息模块会设计成兼容目前的协作型内核和后续实现的抢占型内核。至于RTOS中的互斥量和信号量,因为协作型任务之间不涉及贡献资源的访问冲突,所以暂时使用不到。
- MOE中的任务件通讯机制有事件和消息,这点和RTOS类似。关于这点,事件和消息模块会设计成兼容目前的协作型内核和后续实现的抢占型内核。至于RTOS中的互斥量和信号量,因为协作型任务之间不涉及共享资源的访问冲突,所以暂时使用不到。


## 关于模块化
Expand Down

0 comments on commit 5613a28

Please sign in to comment.