乾貨| 小論定時器玩法(時間輪詢法)

2020-12-23 電子工程世界網


EEWORLD

電子資訊 犀利解讀 

技術乾貨 每日更新


經常來說,對於一些不複雜的單片機應用,而且對於內存和存儲要求比較嚴格,又需要多分時去處理一些指定的任務,在無法使用RTOS的情況下,使用一個硬體定時器,來建立各種任務時間標誌位,是比較通用的做法,但是隨著時間標誌位變量的增加,代碼的維護以及簡潔度卻越來越艱難。


因此,樓主使用了一種類似線程管理的時間輪詢方式(可能用詞不當),來進行一個硬體定時器模擬多個軟體定時器(以下就說明為線程吧),支持線程註冊、註銷、掛起、喚醒、處理等接口。在使用上,只需要引用兩個接口,即可開始工作。     先說明下此接口文件的頭文件的一些變量,THREAD_NUM_MAX是指能支持最大的線程數目,理論上可以達到四個字節長度數目。使用時候先初始化線程Thread_Init,然後把Thread_RunCheck放在硬體定時器上1ms查詢一次當作時鐘基準,然後Thread_Process放於while裡面輪詢查找線程標誌。需要定時運行某個任務時候(函數),在進入while裡面之前使用註冊函數Thread_Login即可。主要退出這個函數使用Thread_Logout即可。下面會舉個example來說明這些接口的使用。



接下來簡單介紹下一些接口的實現。源碼會放於附件,具體的可以自行分析理解。


首先來說明下兩個結構體定義。首先第一個結構體是對線程狀態封裝,包括線程運行標識flag,當定時輪詢到這個線程此標誌位會置位,運行條件con包括單次執行運行條件,也就是說此線程只執行一次,還有多次執行條件,永久執行條件。此些條件在頭文件的枚舉定義。運行次數表示執行的次數,但為永久執行條件,此cnt賦值為0即可。frep為運行周期,即是多少毫秒運行一次,fun是線程函數的指針。thread_manage結構體是線程管理結構體,裡面包含當前線程運行數和掛起數。在這裡我們申請下一個靜態線程管理實例變量。static struct thread_manage thread;所有的線程狀態變量都在這裡。


 

大概說明下線程是如何一個一個輪詢執行的。主要在Thread_Process接口裡面。


 

同樣再來分析下線程註冊接口,這是在初始化的時候需要用到。


 

線程運行條件核對,放在於1ms的硬體定時器中斷或者回調中,以此輪詢查找線程運行周期狀態是否滿足。


 

在這裡使用的是nucle-L011板子,利用cube生成代碼工程。使用兩個外設,GPIO(LED)和usart,在這裡我們新建兩個線程,一個500ms點燈,一個1s串口發送數據。


 
生成的cube代碼在tim.c文件上,開啟定時器中斷,並且寫上自己的回調函數。

 
寫好自己的線程函數


 
初始化以及註冊線程。


 

以下微信公眾號均屬於

 EEWorld(www.eeworld.com.cn)

歡迎長按二維碼關注!

EEWorld訂閱號:電子工程世界

EEWorld服務號:電子工程世界福利社


相關焦點

  • 定時器有幾種實現方式?
    定時器像水和空氣一般,普遍存在於各個場景中,一般定時任務的形式表現為:經過固定時間後觸發、按照固定頻率周期性觸發、在某個時刻觸發。定時器是什麼?說到底,定時器還是靠線程輪詢實現的。3 數據結構我們主要衡量 NewTask(新增任務),Cancel(取消任務),Run(執行到期的定時任務)這三個指標,分析他們使用不同數據結構的時間/空間複雜度。
  • 定時器?你知道有幾種實現方式嗎?
    定時器像水和空氣一般,普遍存在於各個場景中,一般定時任務的形式表現為:經過固定時間後觸發、按照固定頻率周期性觸發、在某個時刻觸發。定時器是什麼?說到底,定時器還是靠線程輪詢實現的。3 數據結構我們主要衡量 NewTask(新增任務),Cancel(取消任務),Run(執行到期的定時任務)這三個指標,分析他們使用不同數據結構的時間/空間複雜度。
  • stm32定時器時間計算
    STM32定時器的工作原理   STM32之所以能夠實現定時,是單片機內部在計數脈衝(來自晶振)   T=1/F (F為頻率)   例如:我們以51單片機舉例,假設單片機搭配12MHz的晶振,由於51單片機是12分頻(即1個機器周期有12個時鐘周期),則單片機的最小定時時間為
  • STM32定時器時間的計算方法
    STM32定時器時間的計算方法 STM32中的定時器有很多用法: (一)系統時鐘(SysTick) 設置非常簡單,以下是產生1ms中斷的設置,和產生10ms延時的函數: (二)第二種涉及到定時器計數時間(TIMx) /*TIM3時鐘配置*/ TIM_TimeBaseStructure.TIM_Prescaler = 2; //預分頻(時鐘分頻)72M/(2+1)=24M TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上計數
  • 自學單片機第五十三篇:設置定時器時間
    定時器的難點也就在這裡了。我們使用定時器時,通過手冊可以查詢到T0定時器是有4中工作方式的,每種工作方式是不一樣的,也就導致了設置的方法也稍有不同。先看下手冊中的四種方式。然後我們就可以用這個來作為基礎時間,單片機的最基礎運算是加減運算,都是佔用一個機器周期,我們的定時器就是靠著加法來完成定時的。例如我們前文所說的第二種定時器使用方式中,16位定時器,就是讓一個0一直加到65535,這個加的過程是單片機自己完成的,無需我們控制。
  • 跟我學RocektMQ之理解長輪詢機制
    缺點是如果不能很好的設置拉取的頻率,時間間隔,過多的空輪詢會對服務端造成較大的訪問壓力,數據的實時性也不能得到很好的保證。基於對上述兩個策略的優缺點的綜合考慮,RocketMQ的DefaultMQPushConsumer採用了結合了推拉模式兩者優點的長輪詢機制,對消息進行消費。這樣,既能保證主動權在客戶端,還能保證數據拉取的實時性。
  • 鄉村小發明:鍾控定時器
    果然,時間一到,電源接通,水管就開始出水了。發明人潘路安管他發明的這個小玩意叫鍾控定時器。發明人:潘路安平時需要周期性送電的情況下,家裡要澆地、澆菜,人不在的情況下,可以自動定時,到時候就送電了。經過元大爺這麼一試,看來用定時器控制電源自動開關的目的是達到了,不過水泵工作的時間要長達一小時,既費水又費電,怎麼才能更精確地控制通電的時間長短呢?
  • 單片機定時器工作原理_單片機定時器工作方式_單片機定時器作用
    定時器是一種用於控制時間的儀表,隨著科技發展,人們對定時器進行改進,達到準確控制時間的目的。定時器使相當多需要人控制時間的工作變得簡單了許多。人們甚至將定時器用在了軍事方面,製成了定時炸彈,定時雷管。現在的不少家用電器都安裝了定時器來控制開關或工作時間。
  • 電動式定時器工作原理_電子式定時器工作原理
    打開APP 電動式定時器工作原理_電子式定時器工作原理 網絡整理 發表於 2019-12-04 11:50:05   電動式定時器   電動式定時器的輪繫結構及時間控制組件與機械式定時器基本相同,所不同的是由微電機代替發條做動力源,其結構如圖2-13所示。
  • 系統時鐘和定時器——PWM定時器
    各種時鐘比例對應的寄存器設置如下圖所示:1、 PWM(Pulse Width Modulation)定時器S3C2440 有5個16位定時器。其中定時器0、1、2、3有PWM功能,即他們都有一個引腳,可以用過定時器來控制引腳周期性的高低電平變化;定時器4沒有輸出引腳。定時器時鐘源為PCLK。
  • 門頭燈定時器怎麼調整 門頭燈定時器種類有哪些
    現在有不少的朋友們為了生活的方便,在購買燈具的時候會選擇門頭燈帶有定時器的燈具,這樣的話平時可以用來調整一下,燈具關閉的時間對於自己的生活能夠帶來很多的方便,而且也能有效的節省時間。那麼門頭燈定時器怎麼調整?門頭燈定時器種類有哪些?下面我們來了解一下吧。
  • 電子定時器技巧:[4]定時器如何調整通電模式
    電子定時器做為獨立的組件,不僅僅可以用來做為定時器用,也可以做為轉換插頭使用,可以有4種工作狀態:一直連通,一直關閉,默認關閉到時間開啟,默認開啟到時間關閉。在當前時間狀態,連續按【模式】鍵,液晶屏左側將循環顯示「自動關」「開」「自動開」「關」4種模式,以下分別進行說明使用方法和環境,按需進行選擇設置。【自動關】:即連通電源後,電源輸出為關閉狀態,之後自動按照設定的程序工作,遇到第1個開啟時間點進行工作.(如果定時模組已經設定完畢,當前不希望馬上進入通電狀態,就可以使用此模式)。
  • 詳解定時器實用電路
    定時器電路是一種實用電路,包括固定時間定時器、時間可變定時器、倒計時定時器等。定時器啟動後即自動運行,定時時間結束時會發出聲、光提示,也可控制負載的動作。簡單定時電路圖1-56所示為最簡單的定時器電路,以單向晶閘管VS為核心組成, R 1 為定時電阻, C 1 為定時電容,HA為自帶音源的電磁訊響器,S為電源開關。定時時間由 R 1 和 C 1 確定, R 1 和 C 1 越大,定時時間越長。
  • 定時器的使用方法 MM32主/從定時器同步與精準定時操作實例
    > 在MM32L073一個定時器有4 通道 PWM 輸出,有客戶在應用中需要使用兩個定時器控制6路PWM輸出,為了使兩個定時器的PWM輸出相同的波形,所以需要兩個定時器實現同步功能。 所有 TIMx 定時器在內部相連,用於定時器同步或連結。當一個定時器處於主模式時,它可以對另一個處於從模式的定時器的計數器進行復位、啟動、停止或提供時鐘等操作。 MM32L073的每個定時器都可以由另一個定時器觸發啟動定時器一般是通過軟體設置而啟動,MM32L073的每個定時器也可以通過外部信號觸發而啟動,還可以通過另外一個定時器的某一個條件被觸發而啟動。
  • 電子定時器代換洗衣機機械定時器的方法介紹
    久而久之造成機械定時器內部齒輪損壞。筆者採用電子定時器更換機械定時器。既克服了機械定時器易損壞的毛病,又收到了意想不到的良好效果。 這兩種定時器除了外形一樣外,其內部構造、工作原理以及引出線色等均完全不同,下面以長風XPB50-8S洗衣機四線機械定時器及五線電子定時器為例。
  • 一個高效的定時器分析及設計
    1)ACE_Timer_Heap定時器,根據觸發時間建立一個優先級隊列(一個最小堆數據結構)來維護所有的定時器,代價就是刪除和插入過程為O(logn),代價比較高。2)ACE_Timer_List定時器,根據觸發時間建立一個有序的雙向鍊表,代價就是插入定時器代價較高。
  • 555定時器的電路結構與功能,由555定時器實現看門狗電路
    555定時器是一種模擬和數字功能相結合的中規模集成器件。一般用雙極型(TTL)工藝製作的稱為 555,用 互補金屬氧化物(CMOS )工藝製作的稱為 7555,除單定時器外,還有對應的雙定時器 556/7556。