阅读:2019回复:15
C语言请教:这个函数怎么写?
#define Workstatus F0//bit型工作状态标志
volatile uchar Time3s=0;//全局变量 void Delay3s(void) { Time3s=60; if(Time3s==0) return; } void ISR_T0(void) { .; .; .; .; if(Time3s!=0) { Time3s--; } } 也就是说,我要在Delay3s()中给全局变量Time3s赋初值,当Time3s=0时函数退出。 在ISR_T0(void)中每中断一次,Time3s减一。Delay3s()该怎么写? [编辑 - 2/24/05 by lzl] |
|
|
沙发#
发布于:2005-02-24 20:50
c中
void Delay3s(void) { Time3s=60; if(Time3s==0) return; } 修改为 void Delay3s(void) { Time3s=60; while(Time3s) ; return; } |
|
|
板凳#
发布于:2005-02-24 20:53
这样在60次调用ISR_T0后函数Delay3s就退出了
|
|
|
地板#
发布于:2005-02-25 08:24
c中 |
|
|
地下室#
发布于:2005-02-25 08:53
[quote]c中[/quote] 你测试过???? |
|
|
5楼#
发布于:2005-02-25 16:11
如果开了看门狗,那就要在循环的时候加上喂狗信号~~
|
|
6楼#
发布于:2005-02-25 16:56
[quote][quote]c中[/quote] 你测试过???? [/quote] 编译器可能会优化while(Time3s) ;语句 至少得加个volatile |
|
7楼#
发布于:2005-02-25 20:44
[quote][quote][quote]c中[/quote] 你测试过???? [/quote] 编译器可能会优化while(Time3s) ;语句 至少得加个volatile [/quote] 那个地方加volatile? |
|
|
8楼#
发布于:2005-02-25 21:11
声明Time3s的地方
volatile int Time3s = 0; |
|
9楼#
发布于:2005-02-25 23:33
我加了
|
|
|
10楼#
发布于:2005-02-27 09:10
我认为不合理,因为用while语句,那么系统将死等在while处。
如果设立一个标志delay_flag,如果还在延时,delay_flag=true;退出延时,delay_flag=false; c中 void ISR_T0(void) { .; .; .; .; if(Time3s!=0) { Time3s--; } else { delay_flag=false; } } void Delay3s(void) { Time3s=60; delay_flag=true; return; } main() { deDelay3s() if (!delay_flag) { 处理目标代码 } } |
|
11楼#
发布于:2005-02-27 09:12
详细处理,还要斟酌。
|
|
12楼#
发布于:2005-02-27 12:54
有道理,谢谢
|
|
|
13楼#
发布于:2005-02-28 15:37
要不要EnterCriticalSession呢?
呵呵:) |
|
|
14楼#
发布于:2005-03-01 08:55
我认为不合理,因为用while语句,那么系统将死等在while处。 这样延时并不精确,而且使用起来也不方便啊,目标代码的变化很多~~,当然这样可以使程序在等待同时处理别的事情,有点多线程的意味,不过对于单线程的程序只需做一点等待再做下一步的话好像没必要做成这样~~ :P |
|
15楼#
发布于:2005-03-05 16:38
可以呃
|
|