在大多數的實時作業系統中,並沒有自帶的udelay函式,可是實際場景中又須要常常使用延時,這個時候我們就得自己來實現udelay延時函式了;
1、首先,我們須要乙個高頻率的硬體定時器作為必備條件,乙個silce必須是納秒級別的,否則實現udelay延時就不准。比方工作頻率為20m的定時器,乙個silce是50ns,能夠實現微秒級的延時。頻率低的定時器不能滿足要求,比方32k的,乙個silce就31us了。根本不可能實現udelay延時,或者太不精確。
2、在合適的地方,使能選用的高頻率定時器。僅僅要在使用之前讓定時器跑起來即可;
3、封裝udelay介面,建議在標頭檔案裡封裝成inline函式,假定我們選用20m的定時器,定時器通常都是遞減計數的,當然也有遞增計數的,本處以遞減為例:
#define get_delta(begin,end) (end>begin?(end - begin):(0xffffffff - end + begin)) /*防止定時器計數迴繞介面*/
static inline void udelay(unsigned int delay_us)
unsigned long long delta = 0;
unsigned int start = 0;
unsigned long flags = 0;
delta = (unsigned long long)delay_us*2000000/1000000;
local_irq_s**e(flags); /*為了防止在延時時,被其它中斷打斷。須要做一下遮蔽中斷操作*/
start = readl(timer_count_base_addr);
while(get_delta(readl(timer_count_base_addr),begin)local_irq_restore(flags); /*回覆中斷狀態*/
如此,我們便能夠在須要的地方使用自己的udelay延時函式了,使用時記得包括響應標頭檔案。
實時作業系統
所謂 實時作業系統 實際上是指作業系統工作時,其各種資源可以根據需要隨時進行動態分配。由於各種資源可以進行動態分配,因此其處理事務的能力較強 速度較快。無論什麼控制系統一旦弄上 實時 兩個字就是對響應時間有嚴格的要求。實時作業系統貴在實時,要求在規定的時間內完成某種操作。主要用在工業控制中,實時作業...
實時作業系統 RTOS 和非實時作業系統
對於實時作業系統 rtos 和非實時作業系統,你能分別列舉出來多少?實時作業系統 ucos vxworks rtlinux 非實時作業系統 linux windows osx 我也只能列舉出來這麼多了。重點不在這裡,重點在於他們之間的區別,詳見下圖 在上面的圖中右邊的任務優先順序高於左邊的任務,先看...
實時作業系統 C OS
第3章 c os 的中斷和時鐘 3.1 c os 的中斷過程 c os 的中斷過程 系統接收到中斷請求後,如果這時cpu處於中斷允許狀態 即中斷開放 系統會中止正在執行的當前任務,而按照中斷向量的指向轉而去執行中斷服務子程式 當中斷服務子程式的執行結束後,系統將會根據情況返回到被中止的任務繼續執行,...