常用延時(睡眠)函式

2022-09-12 03:09:13 字數 1654 閱讀 1686

瑣碎**1——延時函式

arm:

delay:

ldr r3, =100000

ldr r4, =0x0

delay_loop:

sub r3, r3, #1//

r3 = r3 -1

cmp r3, r4 //

cmp會影響z標誌位,如果r4等於r3則z=1,下一句中eq就會成立

bne delay_loop

mov pc, lr

//函式呼叫返回

c/c++:

void delay(unsigned intt) 

}

qt:

void canthread::sleep(unsigned int

msec)

stm32中斷型:

volatile uint32_t time_delay; //

延時時間,注意定義為全域性變數

//延時n_ms

void delay_ms(volatile

uint32_t nms)

time_delay=nms;//

讀取定時時間

while

(time_delay);

systick->ctrl=0x00; //

關閉計數器

systick->val =0x00; //

清空計數器}//

延時nus

void delay_us(volatile unsigned long

nus)

time_delay=nus;//

讀取定時時間

while

(time_delay);

systick->ctrl=0x00; //

關閉計數器

systick->val =0x00; //

清空計數器}

//在中斷中將time_delay遞減。實現延時

void systick_handler(void

)

使用時注意傳參的範圍(uint32_t)。

stm32非中斷(使用cortex system timer)

等待時間到達

systick->ctrl=0x00; //

關閉計數器

systick->val =0x00; //

清空計數器

}void

delay_ms(uint16_t nms)

while((temp&0x01)&&(!(temp&(1

<<16))));//

等待時間到達

systick->ctrl=0x00; //

關閉計數器

systick->val =0x00; //

清空計數器

}注意:延時有最大事件限制,具體使用根據實際系統

自實現睡眠函式

1.這段 注意的地方 alarm 函式不是阻塞函式,定時之後,程式會繼續往下執行 pause 阻塞函式,函式被呼叫呼叫後,主動造成程式掛起。2.這個地方很容易想歪 當時的問題是這樣 加入該程式在 執行完38 後失去cpu資源,那麼當它再次獲得cpu資源時且訊號已經發出,程式會不會喚醒,答案是不會。因...

實現睡眠函式mysleep

1.普通版本的 mysleep 函式 有 bug 存在 執行結果如下 我們可以發現當我們的 執行以後,螢幕上輸出很多的 using mysleep sleep 而且在最後一行每隔三秒列印一次,且一直列印直到我們強制停止。審視 mysleep 程式,設想這樣的時序 註冊 sigalrm 訊號的處理函式...

Linux延時函式

每乙個平台不太一樣,最好自己定義一套跨平台的巨集進行控制。dos sleep 1 停留1秒 delay 100 停留100毫秒 windows sleep 100 停留100毫秒 linux sleep 1 停留1秒 usleep 1000 停留1毫秒 每乙個平台不太一樣,最好自己定義一套跨平台的巨...