色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

嵌入式里通用微秒計時函數框架設計與實現

Q4MP_gh_c472c21 ? 來源:痞子衡嵌入式 ? 作者:痞子衡嵌入式 ? 2022-10-14 12:41 ? 次閱讀

今天給大家分享的是嵌入式里通用微秒(microseconds)計時函數框架設計與實現

嵌入式軟件開發里,計時可以說是非常基礎的功能模塊了,其應用也非常廣泛,比如可以輔助計算信號脈沖寬度時間,也可以直接用于常規延時等。相信很多人初次領略 MCU 的神奇,都是從計時功能相關小程序開始的。

在 MCU 里要想實現精確計時,往往都是利用其內部硬件定時器。不同廠商的 MCU,其定時器設計與使用都不太一樣。即使是同一 MCU 內,通常也會有好幾種不同類型的定時器共存。

基于此,今天分享一種非常簡單實用的通用計時函數框架。這個框架的目的是統一計時函數接口,并且在實現上將通用部分和硬件相關部分剝離開。這樣你的嵌入式項目在使用這個框架時,可以無縫快捷地切換底層定時器。

注:本框架主要適合定時器時鐘源不小于 1MHz 的 MCU,因為函數接口里延時最小單元是 1us。對于一些定時器時鐘源低于 1MHz 的 MCU,可將本框架簡單改成毫秒(milliseconds)計時函數。

一、微秒(microseconds)計時函數庫設計

1、函數接口定義

首先是設計通用計時函數框架頭文件:microseconds.h ,這個頭文件里直接定義如下 7 個接口函數原型。涵蓋必備的初始化流程init()、shutdown(),最核心的計時功能get_ticks()、convert_to_microseconds(),常用的延時功能delay()、set_delay()、is_timeout()。

//!@brief初始化計時
voidmicroseconds_init(void);
//!@brief關閉計時
voidmicroseconds_shutdown(void);
//!@brief獲取系統累計計數值
uint64_tmicroseconds_get_ticks(void);
//!@brief將計數值轉換為時間值(微秒)
uint32_tmicroseconds_convert_to_microseconds(uint64_tticks);
//!@brief阻塞型延時(微秒級)
voidmicroseconds_delay(uint32_tus);
//!@brief設置超時時間(用于非阻塞型延時)
voidmicroseconds_set_delay(uint32_tus);
//!@brief判斷是否超時(用于非阻塞型延時)
boolmicroseconds_is_timeout(void);

2、通用函數實現

然后是設計通用計時函數框架共用源文件:microseconds_common.c,這個文件里涉及三個靜態全局變量定義,四個私有函數聲明,以及除了 get_ticks() 之外的 6 個接口函數實現。

其中 s_tickPerMicrosecond 變量存的是每微秒對應計數值,其實這個變量不是一定要定義的,可以在函數需要時實時計算,但為了小小提升框架性能,就在 init() 里將這個值先算出來了,方便其他函數直接使用。

s_highCounter 變量存的是定時器中斷次數,即高位計數器,因為框架 get_ticks() 接口返回的是 64bit 的計數值,對于有些寬度小于 32bit 的定時器,我們常常需要開啟定時器中斷,否則無法保證系統長時間運行線性計時的正確性(比如 100MHz 時鐘源的 32bit 定時器,最長約 43 秒就會清零翻轉一次,需要 s_highCounter 變量記錄翻轉次數)。

當然,如果 MCU 里能級連出 64bit 的定時器,就可以不用開啟中斷(清零翻轉的時間特別長,可近似認為是永久),s_highCounter 此時就不需要了。

關于延時函數接口,delay() 用于阻塞型延時,即調用這個函數后一定是死等指定時間后才退出,系統會被強制掛起;set_delay()/is_timeout()用于非阻塞型延時,系統可以繼續干其他任務,在需要的時侯來查看一下超時時間是否到了即可。兩種延時各有各的用途。

//!

二、微秒(microseconds)計時函數庫實現

1、定時器相關實現(基于Cortex-M內核的SysTick)

最后是設計 MCU 相關的通用計時函數框架源文件:microseconds_xxTimer.c,這里我們以 Cortex-M 系列 MCU 的內核定時器 SysTick 為例。

SysTick 是 24bit 遞減定時器,時鐘源有兩種配置:一是內核主頻,二是外部時鐘(看廠商實現),最常用的時鐘源配置就是與內核同頻。

之前我們說過,用 SysTick 這類寬度小于 32bit 的定時器,是需要開啟定時器中斷的,所以 s_highCounter 會生效。get_ticks()是整個計時函數框架里最基礎也最核心的功能接口,這里面的實現有一個需要特別注意的地方,就是取系統當前計數值可能會有數值回退的風險,需要使用代碼中 do {} while();方式來確保正確性。

//!CTRL&=~(SysTick_CTRL_CLKSOURCE_Msk|
SysTick_CTRL_TICKINT_Msk|
SysTick_CTRL_ENABLE_Msk);
SysTick->VAL=0;
}

uint32_tmicroseconds_get_clock(void)
{
returnSystemCoreClock;
}

uint64_tmicroseconds_get_ticks(void)
{
uint32_thigh;
uint32_tlow;
//這里的實現要注意確保中斷發生時獲取系統累計計數值的正確性
do
{
//先緩存高位計數器
high=s_highCounter;
//再讀定時器實際計數值
low=~SysTick->VAL&SysTick_LOAD_RELOAD_Msk;
}while(high!=s_highCounter);//保證緩存高位值與讀實際低位值間隙中沒有發生中斷

return((uint64_t)high<

當然還有很多具體 MCU 平臺的各種定時器實現,因此這個項目會不斷更新,也歡迎大家來參與貢獻。

至此,嵌入式里通用微秒(microseconds)計時函數框架設計與實現便介紹完畢了。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17123

    瀏覽量

    350983
  • 嵌入式
    +關注

    關注

    5082

    文章

    19104

    瀏覽量

    304802
  • 定時器
    +關注

    關注

    23

    文章

    3246

    瀏覽量

    114719
  • 函數
    +關注

    關注

    3

    文章

    4327

    瀏覽量

    62569

原文標題:MCU通用微秒計時函數框架設計

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    嵌入式計時器以及simulink設計實現

    嵌入式計時器是一種在嵌入式系統中用于計時、計數和測量時間間隔的設備。
    發表于 07-21 17:20 ?5128次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>計時</b>器以及simulink設計<b class='flag-5'>實現</b>

    什么叫嵌入式 嵌入式應用

    防、智能農業工控類:機械手臂、醫療用具3、嵌入式開發框架:Linux開發:c語言——>編譯文件(二進制)——>下載到操作系統——>運行4、c語言框架頭文件——聲明接口函數
    發表于 08-12 07:51

    嵌入式框架

    1.overview 圖1-1 嵌入式框架嵌入式系統分為硬件以及軟件兩大部分,大多數人參與的是嵌入式軟件設計,更多的是接觸的是上層軟件系統部分,可以分為兩大類型
    發表于 10-27 08:26

    如何去設計一個linux嵌入式UI框架

    看了“自己動手設計并實現一個linux嵌入式UI框架”顯然沒有盡興,因為還沒有看到廬山真面目,那我今天繼續,先來說說,我用到了哪些知識背景。如:C語言基礎知識,尤其是指針、函數指針、內
    發表于 11-08 07:22

    嵌入式通用微秒計時函數框架的設計資料分享

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是嵌入式通用微秒(microseconds)計時
    發表于 12-08 07:35

    嵌入式低功耗電源管理框架的設計資料分享

    概述目標本篇的目標是介紹低功耗電源管理框架設計的概念理解低功耗管理的重要性理解如何開發適合的低功耗管理框架理解如何去管理產品的功耗形勢大多數的嵌入式產品非常注重低功耗設計,尤其近年來,硬件不斷
    發表于 12-21 07:39

    基于Chirp函數的Nios Ⅱ嵌入式實現

    分析Chirp函數在頻域上的一般特性,提出利用FPGA的嵌入式軟核NiosⅡ處理器在嵌入式操作系統μC/OS-Ⅱ上實現Chirp的方法
    發表于 06-15 11:02 ?1166次閱讀
    基于Chirp<b class='flag-5'>函數</b>的Nios Ⅱ<b class='flag-5'>嵌入式</b><b class='flag-5'>實現</b>

    嵌入式應用框架EAF詳解

    EAF是Embedded Application Framework 的縮寫,即嵌入式應用框架嵌入式應用框架是 Application framework的一種, 是在
    發表于 12-02 11:30 ?2828次閱讀

    關于嵌入式應用框架(EAF)的探索

    EAF是Embedded Application Framework 的縮寫,即嵌入式應用框架
    發表于 12-10 14:28 ?862次閱讀

    關于嵌入式應用框架(EAF)的分析

    EAF是Embedded Application Framework 的縮寫,即嵌入式應用框架嵌入式應用框架是 Application framework的一種, 是在
    發表于 01-01 09:50 ?1523次閱讀

    嵌入式堆棧的原理介紹和如何實現純C實現

    棧這種結構在嵌入式其實是非常常用的,比如函數調用與返回就是典型的棧應用,雖然很多時候棧都是CPU系統在自動管理,我們只需要在鏈接文件分配棧大小以及棧存放位置,但稍微了解一下棧的原理
    的頭像 發表于 04-06 10:10 ?4623次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>里</b>堆棧的原理介紹和如何<b class='flag-5'>實現</b>純C<b class='flag-5'>實現</b>

    嵌入式系統框架----硬件篇

    1.系統框架圖對于一個嵌入式系統,最重要的當然是運算以及存儲單元,基本的嵌入式系統可以簡化成如下系統框架圖:
    發表于 10-20 11:51 ?3次下載
    <b class='flag-5'>嵌入式</b>系統<b class='flag-5'>框架</b>----硬件篇

    自己動手設計并實現一個linux嵌入式UI框架(設計)

    看了“自己動手設計并實現一個linux嵌入式UI框架”顯然沒有盡興,因為還沒有看到廬山真面目,那我今天繼續,先來說說,我用到了哪些知識背景。如:C語言基礎知識,尤其是指針、函數指針、內
    發表于 11-03 16:51 ?12次下載
    自己動手設計并<b class='flag-5'>實現</b>一個linux<b class='flag-5'>嵌入式</b>UI<b class='flag-5'>框架</b>(設計)

    痞子衡嵌入式嵌入式通用微秒(microseconds)計時函數框架設計與實現

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是嵌入式通用微秒(microseconds)計時
    發表于 11-25 09:21 ?16次下載
    痞子衡<b class='flag-5'>嵌入式</b>:<b class='flag-5'>嵌入式</b><b class='flag-5'>里</b><b class='flag-5'>通用</b><b class='flag-5'>微秒</b>(microseconds)<b class='flag-5'>計時</b><b class='flag-5'>函數</b><b class='flag-5'>框架設</b>計與<b class='flag-5'>實現</b>

    深度詳解嵌入式系統專用輕量級框架設

    MR 框架是專為嵌入式系統設計的輕量級框架。充分考慮了嵌入式系統在資源和性能方面的需求。通過提供標準化的設備管理接口,極大簡化了嵌入式應用開
    發表于 04-27 02:32 ?983次閱讀
    深度詳解<b class='flag-5'>嵌入式</b>系統專用輕量級<b class='flag-5'>框架設</b>計
    主站蜘蛛池模板: 日本免费一区二区三区四区五六区| 一区在线观看在线| chinese情侣自拍啪hd| 久久两性视频| 亚洲精品AV中文字幕在线| 国产传媒在线观看| 日本一本二本三区免费免费高清| 99re热有精品国产| 老师你狠狂| 在镜头里被CAO翻了H| 精品96在线观看影院| 小泽玛丽av无码观看| 国产精品VIDEOS麻豆TUBE| 日本午夜精品久久久无码| WWW污污污抽搐喷潮COM| 你是淫荡的我的女王| 4k岛国精品午夜高清在线观看| 久久国产成人午夜AV影院无码| 亚洲日韩有码无线免费| 国内精品久久久久久久999下| 亚洲 自拍 清纯 综合图区| 国产精品毛片在线视频| 十八禁啪啦啪漫画| 国产成人mv 在线播放| 四虎国产精品高清在线观看| 国产 亚洲 另类 欧美 在线 | 乌克兰黄色录像| 国产电影无码午夜在线播放| 肉欲横流(NP高H)| 岛国大片在线播放高清| 日韩亚洲视频一区二区三区| 岛国在线无码免费观| 肉肉描写很细致的黄文| 国产 亚洲 中文字幕 在线| 色悠久久综合| 国产成人无码一区AV在线观看| 四虎影视永久无码精品| 国产精品视频免费观看| 亚洲高清视频免费| 韩国演艺圈悲惨在线| 一区二区三区内射美女毛片 |