freertos的**寫得真的像是一坨坨的****,我一點看的慾望都沒有。相比之下,ucosiii的**寫得就好看多了,我看著看著就看回了ucosiii,今天我重點看了移植部分與滴答定時器有關的內容,下面我就來表達一下我是如何理解這個部分內容的,本篇文章主要分為如下兩個部分
systick 是一 個 24 位的倒計數定時器,當計到 0 時,將從 reload 暫存器中自動重裝載定時初值。下圖展示了與systick相關的暫存器
這是乙個移植的過程,下面是cm3的中斷服務函式在啟動檔案的中斷向量表裡,同時也是ucosiii的心跳函式,我們將二者繫結
void systick_handler (
void
)
其實systick_handler在本來的ucosiii中叫做os_cpu_systickhandler,按照原始碼注釋中的建議,我應該通過修改啟動檔案把這個函式名放到中斷向量表裡,但是我還是傾向於修改系統檔案,而不是晶元檔案,畢竟我是要將系統移植到晶元上,而不是將晶元移植到系統上,所以我沒有改動啟動檔案,而是改動了系統檔案,把os_cpu_systickhandler換成了啟動檔案中的systick_handler。當systick異常發生的時候,這個函式就會被執行,心臟準備好了,下面我們要去配置這個心臟並且讓它跳動起來
void os_cpu_systickinit (cpu_int32u cnts)
這是乙個與名字與ucosiii繫結,內容與cpu相關的函式,主要作用就是配置systick,它的形參是cnts,這是systick的重裝載值,是需要我們計算的,所以我自己又寫了乙個函式用來計算這個重裝載值,如下所示
cpu_int32u systickcntcacul (
void
)
oscfg_tickrate_hz是我們期望的作業系統心跳頻率,也就是一秒鐘systick要發生多少次異常,我們設為n次,那麼跳一次的時間就是1/n秒,設systick頻率為rate,也就是一秒鐘有rate次計數,那麼1/n秒就有rate/n次計數。這裡rate是72000000,是我配置的。
下面我們讓心臟跳起來,但是我到底在**啟動呢?我覺得系統心率和系統是緊緊地綁在一起的,所以我把它放在了osinit()裡面。
注:我有個顧慮就是把心跳啟動函式放在osinit()裡面是否合適,目前看來沒什麼問題,如果有哪位小夥伴看出什麼問題希望指出來,謝謝!!!
UCOSIII中的時基系統
吾日三省吾身 為人謀而不忠乎?與朋友交而不信乎?傳不習乎?ucosiii中有乙個模組可以向我們提供系統執行時的各種統計資訊,這極大地方便我們實現系統的白盒管理,但是我覺得只會把那幾個統計引數打出來看根本不叫白盒管理,我們應當清楚地知道每乙個引數值是怎麼被統計出來的。今天我就cpu執行速率這個統計引數...
關於UCOSIII的時鐘節拍定時精度
二 獲取當前時鐘節拍計數值的函式為ostimeget 函式原型為 os tick ostimeget os err p err 三 了解ucosiii的兩個重要延時函式 void ostimedly os tick dly,os opt opt,os err p err void ostimedly...
UCOSIII 機智雲協議的移植筆記
以上工作漫天的教程 1 移植是,先知道自己用的mcu是否支援fpu浮點運算,如果支援,在.s檔案裡面,需要新增一段話 reset handler proc export reset handler weak import systeminit import main 從這開始 ldr r0,syst...