delayed

时间:2018-05-08   来源:经典美文   点击:

【www.gbppp.com--经典美文】

delayed 第一篇_Delay

Delay 固定或可变采样周期的延迟输入信号

离散

支持的块操作

Delay模块支持:

 可变延时长度 指明从一个输入端口中的初始状态 复位状态的初始条件与外部复位信号 固态存储 使用循环缓冲区,而不是一个数组缓冲区的状态存储 Delay块的延迟输入u根据Delay length参数,您的对话框中指定,或延迟的长度,信号设备的d输入端口。初始块的输出取决于

Initial condition参数,您指定的对话框,或者一个信号为x0输入端口提供一个初始条件。是否将块输出复位到初始状态取决于您指定的对话框的External reset参数。

以下维要求适用于:

 Delay length和External reset必须是标量。

 Initial condition可以是标量或者非标量 对于基于帧的处理,信号的数据输入端口U的维度不能大于2。 块图标的外观

图标块输入的数量变化取决于。

该模块支持以下数据类型的输入信号:

输入信号 支持的数据类型

u •浮点

•内置整数

•固定点

•布尔

•枚举

 d •浮点

•定点整数

x0  •浮点

•内置整数

•固定点

•布尔

•枚举

当u是布尔型,x0必须是布尔值。当u使用一个枚举类型,x0必须使用相同的枚举类型。否则,x0可以使用浮点数,整数或定点数据类型,适合u的数据类型.例如,当u使用int32,x0可以使用int8,但不是double.

输出信号的数据类型与输入信号u是相同的。

当你指定Delay length和Initial condition在对话框上,你可以使用下面的这些参数的数据类型:

Delay块对话框中的Main窗格显示如下:

Delay length

指定是否要进入延时长度,直接在对话框(固定延迟)或从输入端口(可变延迟),继承的延迟。

 如果您在Source设置Dialog,在Value编辑栏输入的延迟长度。

 如果您在Source设置Input port,验证的上行信号供给延迟的长度为d输入端口。

您也可以指定延迟长度的Upper limit。

标量的延迟长度(从参数或输入端口)必须是一个实数,正整数。 Initial condition【delayed】

指定是否要在对话框直接输入的初始条件或从输入端口继承的初始条件。 

 如果您在Source设置Dialog,在Value编辑栏输入初始条件 如果您在Source设置Input port,验证的上行信号提供x0的输入端口的初始条件。 Simulink的Initial condition的数据类型转换成脱机的输入信号u使用舍入到最接近的操作和饱和度。

delayed 第二篇_【原】android 中定时器的几种用法总结

在android中,經常用到的定時器主要有以下幾種實現:

一、採用Handler與線程的sleep(long )方法

二、採用Handler的postDelayed(Runnable, long) 方法

三、採用Handler與timer及TimerTask結合的方法。

下面逐一介紹:

一、採用Handle與線程的sleep(long )方法

Handler主要用來處理接受到的消息。這只是最主要的方法,當然Handler裡還有其他的方法供實現,有興趣的可以去查API,這裡不過多解釋。

1.定義一個Handler類,用於處理接受到的Message.

Handler handler = new Handler() {

};

2.新建一個實現Runnable接口的線程類。如下:

public class MyThread implements Runnable{ } @Override public void run() { } // TODO Auto-generated method stub while (true) { } try { } Thread.sleep(10000);//線程暫停10秒,單位毫秒 Message message=new Message(); message.what=1; handler.sendMessage(message);//發送消息 // TODO Auto-generated catch block e.printStackTrace(); public void handleMessage(Message msg) { } //要做的事情 super.handleMessage(msg); } catch (InterruptedException e) {

3.在需要啟動線程的地方加入下面語句:

new Thread(new MyThread()).start();

4.啟動線程後,線程每10s發送一次消息。

二、採用Handler的postDelayed(Runnable, long) 方法

這個實現比較簡單一些:

1. Handler handler=new Handler();

Runnable runnable=new Runnable(){ }; @Override public void run() { } // TODO Auto-generated method stub //要做的事情 handler.postDelayed(this, 2000);

2.啟動計時器:

handler.postDelayed(runnable, 2000);//每兩秒執行一次runnable.

3.停止計時器:

handler.removeCallbacks(runnable);

三、採用Handler與timer及TimerTask結合的方法。

1.定義定時器、定時器任務及Handler句柄

private final Timer timer = new Timer(); private TimerTask task; Handler handler = new Handler() { }; @Override public void handleMessage(Message msg) { } // TODO Auto-generated method stub //要做的事情 super.handleMessage(msg);

2.初始化計時器任務。

task = new TimerTask() {

}; @Override public void run() { } // TODO Auto-generated method stub Message message = new Message(); message.what = 1; handler.sendMessage(message);

3.啟動定時器

timer.schedule(task, 2000, 2000);

簡要說一下上面三步提到的一些內容。

1.定時器任務(TimerTask)顧名思義,就是說當定時器到達指定的時間時要做的工作,這裡是想Handler發送一個消息,由Handler類進行處理。

2. java.util.Timer.schedule(TimerTask task, long delay):這個方法是說,dalay/1000秒後執行task.只執行一次。

java.util.Timer.schedule(TimerTask task, long delay, long period):這個方法是說,delay/1000秒後執行task,然後進過period/1000秒再次執行task,這個用於循環任務,執行無數次,當然,你可以用timer.cancel();取消計時器的執行。

一个网友说到了CountDownTimer这个类,从名字上面大家就可以看出来,记录下载时间。将后台线程的创建和Handler队列封装成为了一个方便的类调用。

查看了一下官方文档,这个类及其简单,只有四个方法,上面都涉及到了onTick,onFinsh、cancel和start。其中前面两个是抽象方法,所以要重写一下。

下面是官方给的一个小例子:

1 new CountdownTimer(30000, 1000) {

2 public void onTick(long millisUntilFinished) {

mTextField.setText("seconds remaining: " + millisUntilFinished 3 / 1000);

4 }

5 public void onFinish() {

6 mTextField.setText("done!");

7 }【delayed】

8 }.start(); 主要是重写onTick和onFinsh这两个方法,onFinish()中的代码是计时器结束的时候要做的事情;

onTick(Long m)中的代码是你倒计时开始时要做的事情,参数m是直到完成的时间,构造方法MyCount()中的两个参数中,前者是倒计的时间数,后者是倒计每秒中间 的间隔时间,都是以毫秒为单位。例如要倒计时30秒,每秒中间间隔时间是1秒,两个参数可以这样写MyCount(30000,1000)。 将后台线程的创建和Handler队列封装成为了一个方便的类调用。

【delayed】

/**

* Cancel the countdown.

*

* Do not call it from inside CountDownTimer threads

*/

public final void cancel() {

mHandler.removeMessages(MSG);

mCancelled = true;

}

当你想取消的时候使用mc.cancel()方法就行了,但是不能在CountDownTimer線程的內部調用此方法,要在線程外部使用,使用cancel方法取消後,如果再次調用start方法的話倒計時會重新開始。

希望對你有所幫助。請尊重原創,這裡是ljlkings的空間。

delayed 第三篇_delay函数的用法

WinAVR avr/delay函数的用法

在avr GCC的函数库中包有个非常有用的精确延时函数, #include <util/delay.h>

其中包括4个函数

_delay_loop_1( );

_delay_loop_2( );

_delay_us( );

_delay_ms( );

_delay_loop_1(uint8_t __count);

参数 __count 为8bit 长度,1-256,256表示为0。 每个循环花费3个CPU周期。

所以当晶振为1Mhz时,最长延时为768us(microseconds)

_delay_loop_2(uint16_t __count);

参数 __count 为 16bit 长度,1-65536,65536被认为是0。 每个循环花费4个CPU周期。

所以当晶振为1Mhz时,最长延时为262.1 ms (milliseconds) 1*4*65536=262144 us

_delay_us(double __us);

us的精确延时,参数为double,最长为768 us。

原头文件中定义了晶振频率为1Mhz。在makefile中默认为F_CPU=8000000

#ifndef F_CPU

/* prevent compiler error by supplying a default */ # warning "F_CPU not defined for <avr/delay.h>" # define F_CPU 1000000UL

#endif

原函数为:

static __inline__ void

_delay_us(double __us)

{

uint8_t __ticks;

double __tmp = ((F_CPU) / 3e6) * __us;

if (__tmp < 1.0)

__ticks = 1;

else if (__tmp > 255)

__ticks = 0; /* i.e. 256 */

else

__ticks = (uint8_t)__tmp;

_delay_loop_1(__ticks);

}【delayed】

_delay_ms(double __ms);

ms的精确延时,参数为double,最长为262.14 ms。

delayed 第四篇_辨析 delay,postpone,put off

辨析 delay, postpone, put off

1. 三者均可表示将某事推迟到原订时间之后的某一时间进行,其后可接名词或动名词(但一般不接不定式)。为了表明推迟到何时,可用介词 to, till, until 等。

They delayed [postponed, put off] leaving.

他们推迟动身。

He decided to delay/postpone/put off his holiday to/till/untill next month.

他决定把假期推迟到下个月。

2. 几点细微区别:

(1) delay 除表示推迟日期外,还可表示暂时阻挠或阻挡,因此有“耽搁”、“拖延”等意。如: The heavy rain delayed my journey.

大雨耽搁了我的行程。

(2) postpone 和 put off 主要用于延期,两者常可换用,只是后者较通俗和口语化;但是 put off 有时以人作宾语,表示借辞推脱或搪塞某人、推迟或取消与某人的约会、使某人不高兴或反感、打扰某人、让某人下车等,此时不宜用 postpone。如:

He tried to put me off with more promises.

他想用更多的诺言来敷衍我。

We’ve invited friends to dinner and it’s too late to put them off now.

我们已邀请朋友来吃饭,现在取消来不及了。

Don’t be put off by the title-it’s a really good book.

别介意这书名不好,它真是本好书。

Don’t put me off when I’m trying to concentrate.

我正要集中注意力呢,别打扰我。

注:delay 也可以人作宾语,但强调的是耽搁某人的时间。如:

I was delayed by the traffic.

因交通堵塞,我迟到了。

(3) delay 除用作动词外,还用作名词,其余两者不用作名词。如:

We must leave without delay.

我们必须马上离开。

That is the reason of my delay in answering your letter. 这就是我迟迟不给你复信的缘故。

注:名词 delay 后可接 in doing sth,但不接 of doing sth 或不定式。

delayed 第五篇_STM32的几种延时方法

STM32的几种延时方法(基于MDK固件库3.0,晶振8M) 单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时delay_us()和毫秒级delay_ms()。

1.普通延时法

这个比较简单,让单片机做一些无关紧要的工作来打发时间,经常用循环来实现,不过要做的比较精准还是要下一番功夫。下面的代码是在网上搜到的,经测试延时比较精准。

//粗延时函数,微秒

void delay_us(u16 time)

{

u16 i=0;

while(time--)

{

i=10; //自己定义

while(i--) ;

}

}

//毫秒级的延时

void delay_ms(u16 time)

{

u16 i=0;

while(time--)

{

i=12000; //自己定义

while(i--) ;

}

}

2.SysTick 定时器延时

CM3 内核的处理器,内部包含了一个SysTick定时器,SysTick是一个24 位的倒计数定时器,当计到0 时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息。SysTick在STM32 的参考手册里面介绍的很简单,其详细介绍,请参阅《Cortex-M3 权威指南》。

这里面也有两种方式实现:

a.中断方式

如下,定义延时时间time_delay,SysTick_Config()定义中断时间段,在中断中递减time_delay,从而实现延时。

volatile unsigned long time_delay; // 延时时间,注意定义为全局变量

//延时n_ms

void delay_ms(volatile unsigned long nms)

{

//SYSTICK分频--1ms的系统时钟中断

if (SysTick_Config(SystemFrequency/1000))

{

while (1);

}

time_delay=nms;//读取定时时间

while(time_delay);

SysTick->CTRL=0x00; //关闭计数器

SysTick->VAL =0X00; //清空计数器

}

//延时nus

void delay_us(volatile unsigned long nus)

{

//SYSTICK分频--1us的系统时钟中断

if (SysTick_Config(SystemFrequency/1000000))

{

while (1);

}

time_delay=nus;//读取定时时间

while(time_delay);

SysTick->CTRL=0x00; //关闭计数器

SysTick->VAL =0X00; //清空计数器

}

//在中断中将time_delay递减。实现延时

voidSysTick_Handler(void)

{

if(time_delay)

time_delay--;

}

b.非中断方式

主要仿照原子的《STM32不完全手册》。SYSTICK 的时钟固定为HCLK 时钟的1/8,在这里我们选用内部时钟源72M,所以SYSTICK的时钟为9M,即SYSTICK定时器以9M的频率递减。SysTick主要包含CTRL、LOAD、VAL、CALIB 等4 个寄存器,

【delayed】

程序如下,相当于查询法。

//仿原子延时,不进入systic中断

void delay_us(u32 nus)

{

u32 temp;

SysTick->LOAD = 9*nus;

SysTick->VAL=0X00;//清空计数器

SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源

do

{

temp=SysTick->CTRL;//读取当前倒计数值

}while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达

SysTick->CTRL=0x00; //关闭计数器

SysTick->VAL =0X00; //清空计数器

}

void delay_ms(u16 nms)

{

u32 temp;

SysTick->LOAD = 9000*nms;

SysTick->VAL=0X00;//清空计数器

SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源

do

{

temp=SysTick->CTRL;//读取当前倒计数值

}while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达

SysTick->CTRL=0x00; //关闭计数器

SysTick->VAL =0X00; //清空计数器

}

三种方式各有利弊,第一种方式容易理解,但不太精准。第二种方式采用库函数,编写简单,由于中断的存在,不利于在其他中断中调用此延时函数。第三种方式直接操作寄存器,看起来比较繁琐,其实也不难,同时克服了以上两种方式的缺点,个人感觉比较好用。

本文来源:http://www.gbppp.com/jd/443077/

推荐访问:postdelayed

热门文章