m41t81驅動中對時間的處理

2021-05-01 21:20:45 字數 952 閱讀 5464

我的環境:

board:s3c2410

system:linux2.6.20.6

時鐘晶元:m41t81

這兩天一直在對m41t81的驅動進行除錯,我在應用程式中設的時間在讀取後老是不對,還好最終搞定了。

首先看一下對時鐘進行設定的資料結構

struct rtc_time ;

我在應用程式中,對這個結構中的某些成員進行賦值

struct rtc_time rt = ;

這個賦值的執行結果總是不對,後來對驅動裡的**進行分析,發現linux系統的時間都是從2023年開始算的,比如我想把年設為1999,那麼上術結構中 tm_year = 99。 想把年設為2009, tm_year = 109。就是把要設的年減去1900。

上面是關於tm_year的賦值問題,下面總結一下驅動中對所設定時間的處理步驟:

1)、把使用者設定的時間轉換為自2023年1月1日0時0分0秒以來的秒數。

2)、把轉換過來的秒數再轉換為bin碼形式的時間,依然是存在struct rtc_time結構中。

3)、將bin碼轉換為bcd碼,再經過一些處理存入時鐘晶元

取時間就是上述過程的逆過程。這裡要注意,驅動中把時間轉換為秒數呼叫

unsigned long

mktime(const unsigned int year0, const unsigned int mon0,

const unsigned int day, const unsigned int hour,

const unsigned int min, const unsigned int sec)

中傳遞year0和mon0引數前,就先把年數加1900、把月數加1,然後再傳遞給mktime函式。比如我給tm_year、tm_mon設定的值分別為109、8,在呼叫mktime之前就先把它們分別加上1900、1,變為2009、9傳遞給mktime的year0、mon0成員。

csp s測試41 T2 影子

1 並查集 可以並查集 考慮對點權的限制。嘗試逐點列舉點權,向點權大於等於自己的節點擴充套件,計算最大路徑。優化 瓶頸在於還是有很多重複的。上述的每個節點擴充套件後形成的連通塊點集成為乙個集合,從大點權到小點權只要集合拓展。維護集合 考慮並查集 點權排序,維護集合內最長鏈即可。nlog includ...

M3 T2消消樂大師

要求消除n m矩陣中一行或者一列相同的,可以轉換為乙個更小的問題 如何消除乙個陣列中超過三個相同的數字。void solve int a,int size 消除陣列a size 中超過3次相同的數字 l 用來記錄當前段的開頭,r用來記錄當前遍歷的數字。進入下一段 數字開始不同 的時候,先判斷一下當前...

M3 T4咕咕東學英語

delicious的定義 當且僅當它的每乙個字元都屬於乙個大於1的回文子串中。正向求出子字串符合delicious的不好求,我們思考一下,逆向的求出不符合delicious的子字串區間。如ab aab aaab aa b或者ba bba bbba bb a這樣的是不符合delicious的,其他的都...