|
楼主 |
发表于 2010-5-14 09:30:58
|
显示全部楼层
Design module main task<font color=brown>
In this chapter we will describe some key principles which should be aware
in the design of the module main task function.
First, all code in a module main task function should be written in none-block
fashion. Or we should say, the function should be written as a finite state
machine. There are thousands ways to write a FSM, and a recommended
style could be seen in file “service\communication\protocol_engine.c”.
Please refer to the function COM_protocol_parser_task() and related states
macros defined in the same file.
Second, if a task function returns a false value, it means this task completes
its own work and don’t care whether the system enter some sleep model or
not. Meanwhile, to return a false value dose not guarantees that this task will
not be called even it wants itself to be in a blocked model. In fact, if a task
want to enter some blocked / paused / dead / states, it should keep its words:
return false all the time unless it changes its mind. For example, if a task
wants itself to be called only once every 100ms, it should return false after
its first called when a 100ms coming. See figure E-1:
Third, if a task tries to return a false value to release its control, it should
register/request a maximum allowed sleep level by call a function named
es_request_sleep() which could be found in the head file
“hal/bsp/es_sleep/es_sleep.h”. This function require a nonnegative integer
value as its input parameter, which zero means no sleep is allowed, and
0xFFmeans the task don’t care.
In the schedule’s point of view, if all tasks return a false value, system enters
an idle mode and a idle task should be called. According to current design,
idle task will check the minimum sleep level requested by tasks and some
services routines, uses it to enter related MCU sleep mode. If a task
requests a no sleep model irresponsible, there is no way to enter any sleep
model, and the system power consumption will be maintained at a higher
level. So, for most of the time, we should use 0xFF as often as possible.
<font color=red>最新更新
点击此处下载 ourdev_553981.rar(文件大小:23K) (原文件名:Template.rar) |
|