時鐘 ARM Linux系統的時鐘機制簡單理解

2021-10-16 08:53:29 字數 2135 閱讀 8852

linux下有兩類時鐘:

標準計時器,時鐘滴答計時(jiffies)的幾個基本引數:

計時器timer晶體振盪器在1秒內產生的時鐘脈衝個數就是時鐘週期的頻率, 要注意把這個timer的時鐘週期頻率與時鐘中斷的頻率區別開來, linux用巨集clock_tick_rate來表示計時器的輸入時鐘脈衝的頻率(比如我的為#define clock_tick_rate 1193180),該巨集定義在arm/mach-***/include/mach/timex.h標頭檔案中。

我們知道當計數器減到0值時,它就在irq0上產生一次時鐘中斷,也即一次時鐘中斷, 計數器的初始值決定了要過多少時鐘週期才產生一次時鐘中斷,因此也就決定了一次時鐘滴答的時間間隔長度.

1秒時間內timer所產生的時鐘中斷次數。確定了時鐘中斷的頻率值後也就可以確定timer的計數器初值。linux核心用巨集hz來表示時鐘中斷的頻率,而且在不同的平台上hz有不同的定義值。對於sparc、mips、arm和i386等平台hz的值都是100。該巨集在arm平台上的定義如下(/arch/arm/include/asm/param.h)

計數器的初始值由巨集latch定義在檔案:include/linux/jiffies.h

#define latch ((clock_tick_rate + hz/2) / hz) /* for divider */

jiffies通俗理解:

什麼是系統節拍? system tick

系統節拍是核心/系統能有效運用的最小時間單位。如果乙個cpu主頻264m, 那麼系統硬體能區分的最小時間片斷就是1/(264m),這個最小的時間段叫timebase; 這個時間太小,基本上只能讓timebase計數器+1, 其他任何事情都幹不了。

核心/系統有一些事情是要定期去做:

定期重新整理看門狗

給periodic task傳送喚醒事件

檢查soft alram 等

設計系統/核心必須決定這些rountine事情的頻率;做得太勤,太多cpu的運算能力花在這些事情上,影響系統的performance. 做得太慢,就會影響系統對事件反應能力,影響實時功能。這個頻率就是系統節拍,system tick. 系統選定乙個timer作為 system timer。在264mhzcpu的實時系統裡,我選1ms作為system tcik頻率。system timer每1ms中斷一次,在system timer的中斷處理程式裡,我處理前面列出的那些rountine事情,並把jiffies++; 這就是說,我的jiffies是每1ms增加一次。

標準計時器api:

void

init_timer

(struct timer_list *timer )

;void

setup_timer

(struct timer_list *timer,

void

(*function)

(unsigned

long),

unsigned

long data )

;int

mod_timer

(struct timer_list *timer,

unsigned

long expires )

;void

del_timer

(struct timer_list *timer )

;int

timer_pending

(const

struct timer_list *timer )

;

更好用的可以看看 posix timer

參考:arm linux系統的時鐘機制

jiffies初始值問題

關於linux中定時器timer的巨集定義latch的解釋

ARM Linux時鐘初始化

arm linux時鐘初始化是從machine start中的map io函式開始的,map io函式中會呼叫s3c24xx init clocks 12000000 來進行,我們來看一下初始化過程 static struct cpu table cpu void init s3c24xx init...

實時(RTC)時鐘,系統時鐘和CPU時鐘

最近在學stm32的時候看到rtc時鐘和系統時鐘,不知道區別在 於是上網查了一下。實時時鐘 rtc時鐘,用於提供年 月 日 時 分 秒和星期等的實時時間資訊,由後備電池供電,當你晚上關閉系統和早上開啟系統時,rtc仍然會保持正確的時間和日期。系統時鐘 是乙個儲存於系統記憶體中的邏輯時鐘。用於系統的計...

微控制器的時鐘,系統時鐘

我們先來理解幾個比較重要的概念 時間週期 指令週期 機器週期,以及系統時鐘的工作原理。時鐘週期 時鐘週期也叫振盪週期或晶振週期,即晶振的單位時間發出的脈衝數,一般有外部的振晶產生,比如12mhz 12 10的6次方,即每秒發出12000000個脈衝訊號,那麼發出乙個脈衝的時間就是時鐘週期,也就是1 ...