介绍一种在大循环就可实现的简单多任务编程方法

原来在用RTOS时感觉特别方便的就是任务函数中可以调用系统提供的延时,等待等函数,切换到其它任务上执行,这样写程序又简单而且又能充分利用硬件资源,但这样做在切换任务时浪费了很多的系统时间及占用很多RAM,而且对于8位或16位小内存的单片机也不太适合。最近几天在看开源网络协议UIP1.0,居然在DHCP应用实例中看到了一种以很简单的方法实现类似多任务功能的编程方法,只需占用只个字节的RAM资源,而且非常的容易使用。     要实现这种这种编程方法,只需下载到UIP1.0的源代码,找到其中的三个文件分别是pt.h,lc.h,lc-switch.h,在自己项目中把pt.h包含进去就行。   在DHCP中有完整的应用函数static PT_THREAD(handle_dhcp(void)),这个函数年看起来有点怪,但其实将其宏展开就是static char handle_dhcp(void),返回char类型静态函数,其实就是向外部返回任务执行状态。pt.h中提供很多功能的宏定义:

PT_INIT(pt)   初始化任务变量,只在初始化函数中执行一次就行 PT_BEGIN(pt)   启动任务处理,放在函数开始处 PT_END(pt)   结束任务,放在函数的最后 PT_WAIT_UNTIL(pt, condition) 等待某个条件(条件可以为时钟或其它变量,IO等)成立,否则直接退出本函数,下一次进入本     函数就直接跳到这个地方判断 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) 锁死任务并在等待条件成立,恢复执行

在pt中一共定义四种线程状态,在任务函数退出到上一级函数时返回其状态 PT_WAITING  等待 PT_EXITED  退出 PT_ENDED  结束 PT_YIELDED  锁死

 

UploadFiles/2008-4/251630485877.rar

附件是我用这种方法写的一个小程序,验证是否正确,感觉还不错,迟些有机会试一下用PT写个项目程序。

不过PT只是实现小部分RTOS功能,但我觉得对于8位或16位的单片机处理大循环类的程序已经足够。本人理解能力能限,也不知道自己理解的对不对,欢迎指教!!还有PT_THREAD(name_args)这个宏不太看得懂怎样用,请会的朋友指点一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值