操作系统中一般都有一个延时函数,例如 os_delay(int cunts).
在protothreads如何实现和操作系统中的延时函数类似的函数呢。
/***************************************************************************/
//定时到返回0,否则返回1
unsigned int delay_expired(DELAY_STRUCT *t)
{
if(t->start)
{
if(!(t->interval))
t->start = 0;
}
return t->start;
}
/*---------------------------------------------------------------------------*/
void delay_set(DELAY_STRUCT *t, int usecs)
{
t->start = 1;
t->interval = usecs;
}
/***************************************************************************/
在使用定时之前要用delay_set()来初始化。其中参数DELAY_STRUCT *t是定义线程用的结构体,
int usecs为需要延时的节拍数。在定时中断程序中加入对t->interval进行递减的函数,
之后调用protothreads宏PT_WAIT_WHILE(pt,delay_expired(&led_delay));来判断时间是否到?
判断的依据就是t->interval是否递减到0,时间到了就继续向下执行程序,否则阻塞(也就是函数返回了)
闪烁LED的线程如下:
static int thread_led(struct pt *pt)
{
PT_BEGIN(pt);
//-------------------------------------------------------------------------
delay_set(&led_delay,500);
PT_WAIT_WHILE(pt,delay_expired(&led_delay));
LPC_GPIO0->DATA |= 0x08;
delay_set(&led_delay,500);
PT_WAIT_WHILE(pt,delay_expired(&led_delay));
LPC_GPIO0->DATA &= ~0x08;
//-------------------------------------------------------------------------
PT_END(pt);
}
编译->debug,呵呵,LED灯闪起来了。不错!
全文完(原创)!
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
招聘兼职:WINCE 驱动开发
设计指南-空间限定的集成FET的DC - DC转换器
INA141低功率精密仪表放大器
压燃式双燃料发动机燃料转换控制器的设计
设计指南-选择用于DC-DC转换器输出的电容,电感
微机模糊控制在TIG逆变电源中的应用
一“盘”应万变:闪迪助力游戏玩家开启多场景副本探索时代
设计指南-热功率器件设计中的几点思考
[求助上海高科技公司急聘英才
由INA131构成的交流耦合仪表放大器
水表集抄系统的低功耗设计
罗克韦尔自动化推出PharmaSuite 12.00,加速实现安全、可扩展的部署
由INA131构成的差分电压-电流变换电路
由INA131构成的电阻电桥放大器
一种基于单片机和PSD的数制化电源
14 位精度 超强性能 迈来芯MLX90382 磁性编码器芯片
中芯市占率迅速拉近与三星距离 外媒评有望反超
森海塞尔成立80周年
未来数字化工厂:重塑制造业格局
由INA131构成的有冷端补偿的热电偶放大器
HBM4争霸战开打 美光领跑
请教Bootloader?
ST与高通合作的Wi-Fi/蓝牙模块交钥匙方案正式量产
摩尔斯微电子与成都惠利特携手合作,利用Wi-Fi HaLow革新物联网的连接
上海高科技高薪急聘电机专才!
上海高科技高薪急聘电机专才!
太阳能赛车峰值功率跟踪器的设计
前十大IC设计公司首季营收创新高
设计指南-如何使用一个集成降压稳压器
设计指南-怎样选择一个电源模块