基于systick實現獲取系統運行時間
文章目錄
- 基于systick實現獲取系統運行時間
- systick.c
- 代碼結構:
- 代碼功能:
- 總結
systick.c
#include <stdint.h>
#include "gd32f30x.h"static volatile uint64_t g_sysRunTime = 0;/**
***********************************************************
* @brief systick初始化
* @param
* @return
***********************************************************
*/
void SystickInit(void)
{/*1ms 產生一次定時中斷*/if (SysTick_Config(rcu_clock_freq_get(CK_AHB) / 1000)){while (1);}
}/**
***********************************************************
* @brief 定時中斷服務函數,1ms產生一次中斷
* @param
* @return
***********************************************************
*/
void SysTick_Handler(void)
{g_sysRunTime++;
}/**
***********************************************************
* @brief 獲取系統運行時間
* @param
* @return 以1ms為單位
***********************************************************
*/
uint64_t GetSysRunTime(void)
{return g_sysRunTime;
}
該代碼段實現了系統時鐘初始化、定時中斷服務函數以及獲取系統運行時間功能,屬于嵌入式系統中的典型 systick 模塊。
代碼結構:
- 頭文件包含:
- stdint.h: 標準stdint頭文件,定義標準數據類型
- gd32f30x.h: GD32F30x系列芯片的寄存器頭文件
- 函數定義:
- SystickInit: 系統時鐘初始化函數
- SysTick_Handler: 定時中斷服務函數
- GetSysRunTime: 獲取系統運行時間函數
- 全局變量:
- g_sysRunTime: 系統運行時間,以1ms為單位
代碼功能:
- SystickInit()函數:
- 配置SysTick定時器,使其每1ms產生一次中斷
- 配置失敗則死循環
- SysTick_Handler()函數:
- 每1ms執行一次
- 將系統運行時間加1
- GetSysRunTime()函數:
- 返回系統運行時間
代碼特點: - 模塊化設計:將systick相關功能封裝成獨立模塊,方便代碼管理和維護
- 層次分明:代碼結構清晰,易于理解
- 接口簡潔:對外提供簡單易用的接口,方便調用
代碼改進: - 可以增加對SysTick中斷優先級的配置
- 可以增加獲取系統運行時間的精度
總結
該代碼段是一個典型的systick模塊,實現了系統時鐘初始化、定時中斷服務以及獲取系統運行時間功能。代碼結構清晰、模塊化設計、層次分明、接口簡潔,易于理解和維護。
以下是一些相關代碼的作用:
- rcu_clock_freq_get(CK_AHB): 獲取AHB時鐘頻率
- SysTick_Config(): 配置SysTick定時器
- while (1);: 死循環
- g_sysRunTime++: 將系統運行時間加1
- return g_sysRunTime: 返回系統運行時間