本帖最后由 smset 于 2012-5-27 10:45 编辑
protothread 是经典的状态机,只要看函数开头的switch(pt-﹥lc) 进行散转,就一清二楚了。
因此说protothread是协程,实际很不准确, 准确地说法是: protothread 就是状态机!
protothread使用行号代替人为设置的状态,如果使用1个Byte记忆状态,那么一个任务函数内代码行数不能超过255行,所以用了1个word来记忆.因此占用了两个字节.一个任务函数内代码行数不超过65535行(这完全够了).
这就是一个protothread任务消耗2个字节的原因: 就是状态变量的消耗. 只要使用状态机机制,谁能省掉这个呢?
protothread具备状态机的所有特性, 只要能使用状态机的地方,就可以使用protothread. 即可以单独使用,也可以结合其他多任务系统机制使用,也可以和时间调度触发联合使用
而protothread主要好处是: protothread任务函数的代码语法,无需人工设计各个状态, 非常类似于多线程环境下的任务代码,大大降低了代码的复杂度.
附带说下:
很多地方有说到protothread的,总提到protothread是协程,好像有很多问题,
但protothread根本不是协程,而是典型的状态机!
状态机的实时性本身不是问题,问题在于如何使用状态机这种机制
因此,protothread的实时性本身也根本不是问题,问题在于如何使用protothread
|