ProtothreadS学习资料整理.pdf

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ProtothreadS学习资料整理

注意: (1)任务中使用的变量应为静态变量 (2)线程内不能使用纯while(1)--即含PT_WAIT_UNTIL()等宏的while(1)是可以的。 不能在switch(){case…}中调用任务Protothreads API带有case的语句(即只能单向嵌套)。 (3)线程内可以使用: for(){…} switch(){case…}-- case与case之间必须是一个完整的语句或者语句段 if(){…}else{…} 含宏的while(1){…} (4)ProtothreadS系统可以仍然还是个大while(1)循环。但也可设计为根据定时器产生的恒定间隔的中断来触发和管理任务 --时间触发方式的嵌入式系统,此时可更改pt结构体为(见《时间触发模式下的ProtothreadS设计应用》): struct pt{ lc_t lc; unsigned short count; // 每次中断都减1 unsigned short load; // 初始计数值 char ready; // 任务就绪标志 } (5)在ProtothreadS系统中延时: 1)如果ProtothreadS系统是基于时间触发,则延时可基于该触发--即基于系统时钟。 2)如果ProtothreadS系统中无系统时钟, (6)Protothreads虽然提供了在各自线程内的条件阻塞机制,但对于在该线程内调用的其它函数,则无法阻塞其运行。所以, 如果要在线程内调用占用时间较多的函数,为保证各个线程的实时性要求,需要将这类函数进一步划分为更小的函数,分步执 行。 (7)Protothread 的精华:当 Protothread 程序运行到 PT_WAIT_UNTIL 时,判断其运行条件是否满足,若不满足,则阻塞。 Protothread的阻塞其实质就是函数返回。 Protothread仅能在程序员指定位置阻塞。 (8 )能满足系统实时性要求的条件是:(当且仅当)TaskA 、TaskB、TaskC 三个任务的运行时间之和要小于系统实时响应的 时间要求。 (9 )由于事件驱动模型没有阻塞机制,因此需要由程序员构造一个有限状态机来实现顺序流控制。 ProtothreadS 函数说明 1: 函数 说明 PT_INIT(pt) 初始化任务变量,只在初始化函数中执行一次就行 PT_BEGIN(pt) 启动任务处理,放在函数开始处 PT_END(pt) 结束任务,放在函数的最后 等待某个条件(条件可以为时钟或其它变量,IO等)成立,否则直接退 PT_WAIT_UNTIL(pt, condition) 出本函数,下一次进入本函数就直接跳到这个地方判断 PT_WAIT_WHILE(pt, cond) 和上面一个一样,只是条件取反了 PT_WAIT_THREAD(pt, thread) 等待一个子任务执行完成 PT_SPAWN(pt, child, thread) 新建一个子任务,并等待其执行完退出 PT_RESTART(pt) 重新启动某个任务执行 PT_EXIT(pt) 任务后面的部分不执行,直接退出重新执行 PT_YIELD(pt) 锁死任务 PT_YIELD_UNTIL(pt, cond) 锁死任务并在等待条件成立,恢复执行 ProtothreadS函数说明2: 函数 说明 struct pt { lc_t lc;};

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档