mFrame
載入中...
搜尋中...
無符合項目
mcxa153::core::CoreMonotonicClock 類別 參考文件

MCXA153 單調時鐘控制器 更多...

#include <CoreMonotonicClock.h>

類別mcxa153::core::CoreMonotonicClock的繼承圖:
ufm::lang::Object hal::InterruptEvent hal::Base ufm::lang::Clock ufm::lang::Interface

公開方法(Public Methods)

 CoreMonotonicClock (void)
 建構單調時鐘物件
 
virtual ~CoreMonotonicClock (void) override
 解構單調時鐘物件
 
virtual void interruptEvent (void) override
 硬體定時器中斷事件處理方法
 
virtual bool deinit (void) override
 單調時鐘硬體反初始化
 
virtual bool init (void) override
 單調時鐘硬體初始化
 
virtual bool isInit (void) override
 檢查單調時鐘初始化狀態
 
virtual uint64 microseconds (void) const override
 取得系統啟動至今的微秒數
 
virtual uint32 seconds (void) const override
 取得系統啟動至今的秒數
 
virtual void reset (void) override
 重設單調時鐘計數器
 
- 公開方法(Public Methods) 繼承自 ufm::lang::Object
void * operator new (size_t n)
 使用運算子 new 分配記憶體
 
void * operator new (size_t n, void *p)
 在指定記憶體上調用運算子 new
 
virtual ufm::lang::ObjectgetObject (void) override
 取得對應的 Object 物件
 
void delay (int milliseconds) const
 延遲指定的毫秒數進行執行緒等待
 
bool equals (Object *object) const
 判斷與另一物件是否為相同參照(指標型態比較)
 
bool equals (Object &object) const
 判斷與另一物件是否為相同參照(參照型態比較)
 
void wait (void) const
 使當前線程等待直到被通知
 
bool wait (int timeout) const
 等待通知或超時
 
bool yield (void) const
 讓執行緒讓渡控制權給同優先權的下一個執行緒
 
int lock (void) const
 核心鎖定,鎖定期間禁止線程切換
 
int unlock (void) const
 核心解鎖
 
ufm::sys::ThreadcurrentThread (void) const
 取得當前執行緒指標
 
virtual int hashcode (void) const
 返回對象的哈希碼值。支持這種方法是為了散列表,如HashMap提供的那樣。
 
- 公開方法(Public Methods) 繼承自 ufm::lang::Interface
virtual ~Interface (void)=default
 虛擬析構函式
 

詳細描述

MCXA153 單調時鐘控制器

CoreMonotonicClock 提供MCXA153微控制器的高精度單調時鐘功能。 此類別實作了系統時間測量和計時服務,特色包括:

主要功能:

  • 高精度時間測量(微秒級)
  • 單調遞增時鐘保證
  • 系統運行時間統計
  • 中斷驅動的計數更新
  • 長期穩定的時基參考

技術特色:

  • 64位元計數器避免溢位
  • 硬體定時器支援
  • 中斷自動更新機制
  • 微秒和秒級精度支援
  • 系統重設功能

單調性保證:

  • 時間只會遞增,不會後退
  • 不受系統時鐘調整影響
  • 提供穩定的時間差測量
  • 適合效能分析和計時

應用場景:

  • 系統運行時間監控
  • 事件時間戳記錄
  • 效能測量和分析
  • 超時檢測機制
  • 週期性任務調度
  • 系統診斷和偵錯

精度特性:

  • 微秒級時間解析度
  • 基於硬體定時器實作
  • 溫度補償時基(依硬體支援)
  • 長期穩定性佳

計數範圍:

  • 64位元微秒計數器
  • 理論最大運行時間:約584,000年
  • 實際應用充分滿足需求

中斷處理:

  • 自動處理定時器溢位
  • 確保計數連續性
  • 最小化中斷開銷
單調時鐘不等同於實際時間,僅保證遞增特性
警告
系統重設或斷電會重設計數器
參閱
hal::Base, ufm::lang::Clock, hal::InterruptEvent

建構子與解構子說明文件

◆ CoreMonotonicClock()

mcxa153::core::CoreMonotonicClock::CoreMonotonicClock ( void )

建構單調時鐘物件

初始化單調時鐘控制器,準備時間測量功能。 建構時會:

  • 初始化週期計數器為0
  • 準備硬體定時器存取介面
  • 設定預設配置參數
建構後需調用init()方法啟動硬體定時器
參閱
init(), vCycles

◆ ~CoreMonotonicClock()

virtual mcxa153::core::CoreMonotonicClock::~CoreMonotonicClock ( void )
overridevirtual

解構單調時鐘物件

停止單調時鐘功能並釋放相關資源。 解構時會自動調用deinit()確保硬體正確停用。

解構會停止時間計數功能
警告
確保沒有其他模組依賴此時鐘服務

函式成員說明文件

◆ deinit()

virtual bool mcxa153::core::CoreMonotonicClock::deinit ( void )
overridevirtual

單調時鐘硬體反初始化

停用硬體定時器並釋放相關系統資源。 反初始化會停止時間計數功能。

反初始化步驟:

  • 停用定時器中斷
  • 關閉定時器時鐘
  • 重設定時器暫存器
  • 清除中斷狀態
  • 保留當前計數值
傳回值
true 反初始化成功,硬體已停用
false 反初始化失敗,可能原因:
  • 硬體未初始化
  • 定時器異常
  • 系統資源衝突
反初始化後時間計數會停止,但已累積的時間保持不變
警告
反初始化會影響所有依賴此時鐘的功能
參閱
init(), isInit()

實作 hal::Base.

◆ init()

virtual bool mcxa153::core::CoreMonotonicClock::init ( void )
overridevirtual

單調時鐘硬體初始化

配置並啟動硬體定時器,開始時間計數功能。 初始化會設定適當的時基和中斷機制。

初始化步驟:

  1. 啟用定時器時鐘源
  2. 配置定時器預分頻器
  3. 設定溢位中斷
  4. 啟動定時器計數
  5. 註冊中斷處理程序
  6. 啟用定時器中斷

時基配置:

  • 選擇穩定的時鐘源
  • 設定適當的分頻比
  • 確保足夠的精度
  • 最佳化中斷頻率
傳回值
true 初始化成功,時鐘開始運行
false 初始化失敗,可能原因:
  • 硬體已經初始化
  • 定時器資源被佔用
  • 時鐘源異常
  • 中斷配置失敗
成功初始化後單調時鐘立即開始計數
警告
重複初始化可能導致計數異常
參閱
deinit(), isInit(), interruptEvent()

實作 hal::Base.

◆ interruptEvent()

virtual void mcxa153::core::CoreMonotonicClock::interruptEvent ( void )
overridevirtual

硬體定時器中斷事件處理方法

當硬體定時器溢位時會自動調用此方法更新週期計數器。 此方法是單調時鐘精確計時的核心機制。

處理流程:

  1. 檢測定時器溢位狀態
  2. 計算溢位週期數
  3. 累加到vCycles計數器
  4. 清除中斷標誌
  5. 準備下一次中斷

精度維護:

  • 確保每次溢位都被正確記錄
  • 避免計數丟失或重複
  • 維護時間連續性
  • 最小化中斷延遲影響

中斷特性:

  • 高優先順序確保即時響應
  • 簡潔實作減少中斷時間
  • 原子操作保證資料一致性

錯誤處理:

  • 檢測異常的中斷頻率
  • 處理硬體故障情況
  • 記錄中斷統計資訊
此方法在中斷內容中執行,必須保持高效率
警告
處理時間過長會影響系統即時性
參閱
vCycles, init(), microseconds()

實作 hal::InterruptEvent.

◆ isInit()

virtual bool mcxa153::core::CoreMonotonicClock::isInit ( void )
overridevirtual

檢查單調時鐘初始化狀態

查詢硬體定時器是否已正確初始化並處於運行狀態。 用於驗證時鐘功能是否可用。

檢查項目:

  • 定時器是否啟用
  • 中斷是否正確配置
  • 時鐘源是否穩定
  • 計數器是否正常運行
傳回值
true 時鐘已初始化且正常運行
false 時鐘未初始化或異常
可用於診斷時鐘功能狀態
參閱
init(), deinit()

實作 hal::Base.

◆ microseconds()

virtual uint64 mcxa153::core::CoreMonotonicClock::microseconds ( void ) const
overridevirtual

取得系統啟動至今的微秒數

返回系統啟動以來經過的微秒數,提供微秒級精度的時間測量。 此方法是單調時鐘的核心功能之一。

傳回值
uint64 經過的微秒數 範圍:0 到 18,446,744,073,709,551,615 對應時間:約0秒到584,942年

計算方式:

  • 基於硬體定時器頻率換算
  • 公式:vCycles * 1,000,000 / timer_frequency
  • 考慮當前定時器計數值
  • 確保結果單調遞增

精度特性:

  • 微秒級解析度
  • 基於穩定硬體時鐘
  • 溫度補償(如硬體支援)
  • 長期穩定性佳

單調性保證:

  • 連續調用值必定遞增或相等
  • 不受系統時間調整影響
  • 不會因負載而倒退
  • 適合時間差測量

使用範例:

uint64 start = clock.microseconds();
// 執行某項操作
uint64 end = clock.microseconds();
uint64 duration = end - start; // 操作耗時(微秒)

應用場景:

  • 高精度計時
  • 效能測量
  • 事件時間戳
  • 超時檢測
此方法可以在任何時候安全調用
警告
在高頻率調用時注意系統負載
參閱
seconds(), vCycles, reset()

實作 ufm::lang::Clock.

◆ reset()

virtual void mcxa153::core::CoreMonotonicClock::reset ( void )
overridevirtual

重設單調時鐘計數器

將累積的週期計數器歸零,重新開始時間計數。 此操作會影響後續所有時間查詢結果。

重設效果:

  • vCycles計數器歸零
  • microseconds()返回值從0開始
  • seconds()返回值從0開始
  • 硬體定時器繼續正常運行
  • 中斷機制保持正常

重設時機:

  • 開始新的測量週期
  • 系統狀態重設
  • 避免長期運行溢位
  • 測試和除錯需要

執行緒安全:

  • 需要在適當的時機執行
  • 可能需要暫時停用中斷
  • 確保操作的原子性

使用範例:

// 重設時鐘並開始測量
clock.reset();
uint64 start = clock.microseconds(); // 應該接近0
// 執行某項長時間操作
performLongOperation();
uint64 duration = clock.microseconds(); // 操作總耗時

注意事項:

  • 重設會丟失之前累積的時間資訊
  • 依賴此時鐘的其他模組可能受影響
  • 不影響硬體定時器本身的運行
重設是軟體層面的操作,硬體定時器持續運行
警告
重設會影響所有依賴此時鐘的時間測量
參閱
vCycles, microseconds(), seconds()

實作 ufm::lang::Clock.

◆ seconds()

virtual uint32 mcxa153::core::CoreMonotonicClock::seconds ( void ) const
overridevirtual

取得系統啟動至今的秒數

返回系統啟動以來經過的秒數,提供秒級精度的時間測量。 適合不需要高精度的時間應用。

傳回值
uint32 經過的秒數 範圍:0 到 4,294,967,295 對應時間:約0秒到136年

計算方式:

  • 基於microseconds()結果除以1,000,000
  • 或直接基於vCycles計算:vCycles / timer_frequency
  • 使用整數除法,捨棄小數部分

精度考量:

  • 秒級精度,忽略毫秒和微秒
  • 單調遞增特性保持
  • 計算效率較微秒高

溢位處理:

  • 32位元範圍可運行136年
  • 對大多數應用充分滿足
  • 溢位後從0重新開始(需注意)

使用範例:

uint32 uptime = clock.seconds();
printf("系統運行時間:%u 秒\n", uptime);
// 檢查是否運行超過1小時
if (uptime > 3600) {
// 執行某項維護操作
}

應用場景:

  • 系統運行時間監控
  • 週期性任務調度
  • 長期趨勢分析
  • 簡單超時檢測
相較於microseconds()有更好的效能
警告
注意32位元範圍限制,約136年後溢位
參閱
microseconds(), vCycles, reset()

實作 ufm::lang::Clock.


此類別(class) 文件是由下列檔案中產生: