在protothreads中实现延时函数
来源:互联网 发布:linux mplayer 缩小 编辑:程序博客网 时间:2024/06/05 11:44
在protothreads中实现延时函数 2010-07-10 21:47:14
分类: 嵌入式
操作系统中一般都有一个延时函数,例如 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;
}
{
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;
}
/***************************************************************************/
{
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;
{
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);
}
PT_WAIT_WHILE(pt,delay_expired(&led_delay));
LPC_GPIO0->DATA &= ~0x08;
//-------------------------------------------------------------------------
PT_END(pt);
}
编译->debug,呵呵,LED灯闪起来了。不错!
0 0
- 在protothreads中实现延时函数
- 在protothreads中实现延时函数
- PHP中实现延时跳转函数
- 在VB中如何实现延时?
- 单片机延时函数实现
- Android中延时函数
- C++中延时函数
- js中延时函数
- 提醒自己:编程时一定要注意在延时函数中延时变量i的类型!
- 实时操作系统中实现自己的udelay延时函数
- 在VB中实现延时(等待)的几种方法
- 在VB中实现延时(等待)的几种方法
- 单片机延时函数的实现
- linux中内核延时函数
- 怎样在有限状态机中延时
- 如何在程序中延时
- 在程序中延时一段时间
- 利用 ProtoThreads实现Arduino多线程处理
- 字符串和16进制相互转化
- 浙大PAT 2-10. 海盗分赃 (解题思路)
- 数据结构-列表实现
- qt 环境配置的一些错误解决
- 架构腐化之谜
- 在protothreads中实现延时函数
- 常用hash算法
- Inter-process communication
- 欧几里德与扩展欧几里德算法
- volatile、内存屏障、Acquire&Release语义 三者的差别和关系(一) —— 之volatile
- 判断稳定凸包,求凸包代码(poj1228)
- C homework
- Glog剖析之DLOG
- 积分