因筆者工作在嵌入式平台上(非x386),下面給出的結論僅在arm平台上測試過。
1. 在原子上下文,延遲應該少於100微秒。
使用udelay
2. 在非原子上下文延遲的使用
0-100us: 使用udelay
100us以上: 使用usleep_range
20ms以上且不要求精確: 使用msleep
msleep不精確,完全可以用usleep_range代替。
下面是在freescale i.mx6q (arm cortex a9, 1.0ghz, qual-core)平台上的測試結果,
使用的核心版本是: 3.7.0-rc1+
10us delaycompare: udelay:10:usleep_range:31
100us delaycompare: udelay:99:usleep_range:119
1ms delaycompare: mdelay:998: msleep10429: usleep_range:1017
5ms delaycompare: mdelay:5004: msleep18480: usleep_range:5017
10ms delaycompare: mdelay:9991: msleep19431: usleep_range:10020
20ms delaycompare: mdelay:19987: msleep24205: usleep_range:20019
25ms delaycompare: mdelay:24995: msleep39140: usleep_range:25021
10us delaycompare: udelay:10:usleep_range:31
100us delaycompare: udelay:100:usleep_range:119
1ms delaycompare: mdelay:998: msleep10404: usleep_range:1017
5ms delaycompare: mdelay:5003: msleep18486: usleep_range:5017
10ms delaycompare: mdelay:9993: msleep19455: usleep_range:10027
20ms delaycompare: mdelay:19990: msleep24168: usleep_range:20021
25ms delaycompare: mdelay:25004: msleep39137: usleep_range:25020
10us delaycompare: udelay:10:usleep_range:31
100us delaycompare: udelay:100:usleep_range:119
1ms delaycompare: mdelay:998: msleep10340: usleep_range:1017
5ms delaycompare: mdelay:5005: msleep18480: usleep_range:5016
10ms delaycompare: mdelay:9990: msleep19427: usleep_range:10014
20ms delaycompare: mdelay:19999: msleep24205: usleep_range:20013
25ms delaycompare: mdelay:24996: msleep39144: usleep_range:25024
10us delaycompare: udelay:10:usleep_range:33
100us delaycompare: udelay:100:usleep_range:116
1ms delaycompare: mdelay:998: msleep10387: usleep_range:1014
5ms delaycompare: mdelay:5007: msleep18484: usleep_range:5013
10ms delaycompare: mdelay:9997: msleep19454: usleep_range:10024
20ms delaycompare: mdelay:19990: msleep24179: usleep_range:20020
25ms delaycompare: mdelay:24997: msleep39140: usleep_range:25018
10us delaycompare: udelay:10:usleep_range:35
100us delaycompare: udelay:100:usleep_range:119
1ms delaycompare: mdelay:998: msleep10330: usleep_range:1017
5ms delaycompare: mdelay:5005: msleep18482: usleep_range:5016
10ms delaycompare: mdelay:9991: msleep19433: usleep_range:10021
20ms delaycompare: mdelay:19989: msleep24203: usleep_range:20020
25ms delaycompare: mdelay:24993: msleep39145: usleep_range:25022
10us delaycompare: udelay:10:usleep_range:31
100us delaycompare: udelay:100:usleep_range:120
1ms delaycompare: mdelay:998: msleep10383: usleep_range:1017
5ms delaycompare: mdelay:5004: msleep18486: usleep_range:5017
10ms delaycompare: mdelay:9994: msleep19451: usleep_range:10023
20ms delaycompare: mdelay:19991: msleep24171: usleep_range:20022
25ms delaycompare: mdelay:24998: msleep39141: usleep_range:25020
JS中的延時與Timer函式
延時 settimeout code,millisec 用於設定在指定的毫秒數後呼叫函式 設定延時 var timeoutid settimeout function 5000 cleartimeout timeoutid 用於取消由 settimeout 函式設定的延時 週期呼叫 timer se...
Linux下的packet socket使用總結
上節講到的raw socket雖然已經能處理ip層的資料了,但是在實際的應用中可能需要獲取更加底層的報文資訊。這就需要用到另一種更加強大的socket建立方式 packet socket,建立之後直接可以操作包括以太層在內的報文資料。packet socket的建立方式如下 socket af pa...
linux下的EDA primetime使用
primetime是進行靜態時序分析 sta 的工具,根據設計者給出的時序約束來對電路進行分析觀察設計是否滿足時序要求。pt能夠提供以下檢查 建立時間和保持時間檢查 時鐘脈衝寬度的檢查 時鐘門的檢查 未約束的時鐘端點 組合反饋迴路等。需要注意的是pt的輸入檔案是門級網表,一般先要通過dc將rtl級電...