『壹』 求linux毫秒級定時器的實現
1 nanosleep函數可以提供最高解析度,一般是納秒級
2 select、poll函數的定時是毫秒級,pselect是納秒級
以上三個函數都可以實現你的要求
『貳』 linux timer wheel 支持毫秒級嗎
1. 在原子上下文,延遲應該少於100微秒。
使用udelay
2. 在非原子上下文延遲的使用
0-100us: 使用udelay
100us以上: 使用usleep_range
20ms以上且不要求精確: 使用msleep
msleep不精確,完全可以用usleep_range代替。
『叄』 linux下,記錄響應時間的腳本,精確到毫秒ms
執行前、執行後獲取兩次時間戳相減吧。
不過 Linux 貌似伺服器版、普通桌面版的時鍾精確度不是很高。
『肆』 linux rdtsc 怎麼計算時間 clock
一、計來算演算法的CPU運行源時間(一)一般有這么幾個函數可以使用: 中的std的clock() 可以精確到1ms 中的win下常用的GetTickCount可以精確到18-20ms當然這些都不是C或是C++標准支持的。(二)我們先來看看clock()的用法:#include #include int ma...
『伍』 linux命令行下怎麼定時執行一個命令
如果只是執行一次,用at命令就可以了。如果是定期執行,可以使用crontab。
ps:根據回linux發行版不答同,這兩個命令第一次使用時可能要做些准備工作,比如可能在/var/spool/cron下沒有某些文件或沒許可權,要touch一下或chmod一下。
『陸』 Linux下實現秒級定時任務的兩種方案(crontab 每秒運行)
第一種抄方案,當然是寫一個後台運行的腳本一直循環,然後每次循環sleep一段時間。
while
true
;do
command
sleep
XX
//間隔秒數
done
第二種方案,使用crontab。
以下方法將每20秒執行一次
crontab
-e
*
*
*
*
*
/bin/date
*
*
*
*
*
sleep
20;
/bin/date
*
*
*
*
*
sleep
40;
/bin/date
說明:需要將/bin/date更換成你的命令即可
這種做法去處理隔幾十秒的定時任務還好,要是每1秒運行一次就得添加60條記錄。。。如果每秒運行還是用方案一吧。
作者
shootyou
『柒』 #define (t)ms delay(t) 我要用20ms來表示delay(20)(無需分號),編譯器不給我過,該怎麼辦(delay()已定義)
最近要寫個測試程序交叉編譯放到板子上,用到延時函數,可是編譯不過
#include <linux/delay.h>
提示錯誤如下:error: No such file or directory.
明明文件是存在的,怎麼就不能調用了,而且內核很多文件調用得很歡。這是為什麼呢?
因為內核程序跟應用程序是有區別的,有些特殊的內核頭文件編譯器不允許被應用程序調用。故編譯應用程序使用內核的頭文件,報錯是難免的!!!!!!!!!!!!
這個時候該怎麼呢?
#include <unistd.h>頭文件出現了!功能與#include <linux/delay.h>一致,但是可以在應用層隨便調用。 以下是其詳細介紹:
應用層:
#include <unistd.h>
1、unsigned int sleep(unsigned int seconds); 秒級
2、int usleep(useconds_t usec); 微秒級:1/10^-6
#define _POSIX_C_SOURCE 199309
#include <time.h>
3、int nanosleep(const struct timespec *req, struct timespec *rem);
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
// The value of the nanoseconds field must be in the range 0 to 999999999.
內核層:
include <linux/delay.h>
1、void ndelay(unsigned long nsecs); 納秒級:1/10^-10
2、void udelay(unsigned long usecs); 微秒級: 1/10^-6
3、void mdelay(unsigned long msecs); 毫秒級:1/10^-3
udelay用軟體循環指定的微妙數,mdelay調用前者達到延遲毫秒級。udelay 函數只能用於獲取較短的時間延遲,因為loops_per_second值的精度只有8位,所以,當計算更長的延遲時會積累出相當大的誤差。盡管最大能允 許的延遲將近1秒(因為更長的延遲就要溢出),推薦的 udelay 函數的參數的最大值是取1000微秒(1毫秒)。延遲大於 11 毫秒時可以使用函數 mdelay。mdelay 在 Linux 2.0 中並不存在,頭文件 sysdep.h 彌補了這一缺陷。
要特別注意的是 udelay 是個忙等待函數(所以 mdelay 也是),在延遲的時間段內無法運行其他的任務,因此要十分小心,尤其是 mdelay,除非別無他法,要盡量避免使用。
首先, 我會說不保證你在使用者模式 (user-mode) 中執行的行程 (process) 能夠精確地控制時序因為 Linux 是個多工的作業環境. 你在執行中的行程 (process) 隨時會因為各種原因被暫停大約 10 毫秒到數秒 (在系統負荷非常高的時候). 然而, 對於大多數使用 I/O 埠的應用而言, 這個延遲時間實際上算不了什麽. 要縮短延遲時間, 你得使用函式 nice 將你在執行中的行程 (process ) 設定成高優先權(請參考nice(2)使用說明文件) 或使用即時排程法 (real-time scheling) (請看下面).
如果你想獲得比在一般使用者模式 (user-mode) 中執行的行程 (process) 還要精確的時序, 有一些方法可以讓你在使用者模式 (user-mode) 中做到 `即時' 排程的支援. Linux 2.x 版本的核心中有軟體方式的即時排程支援; 詳細的說明請參考 sched_setscheler(2)
『捌』 linux開機啟動延時20秒
依賴。Linux實和帆現服務延遲啟動,在開喚旦雹機啟動服務的時候,服務之間有依賴關系,必須在某個服務完全啟動後才能啟動其他遲祥的服務。
『玖』 在某個實際項目中,需要單片機精確定時20ms,請問如何進行初始化設置( fosc =12
系統晶振為型睜12MHz時卜野歲,定時器的計數脈沖周期即為 1uS;
void Timer0_init() {
TMOD |=0x01; //方式1,T0 16位定時
TH0 = (65536-20000)/256; //計數脊讓器裝初值20000,即 20000uS 中斷一次
TL0 = (65536-20000)%256;
EA=1; ET0=1;
TR0=1;
}
『拾』 Linux怎麼設置定時程序每天早8至20點每10秒執行一次
了解一下linux的定時任務crod,寫個sh腳本,用定時任務去管理。