瑣碎**1——延時函式
arm:
delay:c/c++: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
//函式呼叫返回
void delay(unsigned intt)qt:}
void canthread::sleep(unsigned intstm32中斷型:msec)
volatile uint32_t time_delay; //使用時注意傳參的範圍(uint32_t)。延時時間,注意定義為全域性變數
//延時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
)
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毫秒 每乙個平台不太一樣,最好自己定義一套跨平台的巨...