1. 程式人生 > >UCOSIII軟體定時器

UCOSIII軟體定時器

在學習微控制器的時候會使用定時器來做很多定時任務,這個定時器是微控制器自帶的,也就是硬體定時器,在UCOSIII中提供了軟體定時器

定時器的工作模式
定時器其實就是一個遞減技術器,當計數器遞減到0的時候就會觸發一個動作,這個動作就是回撥函式,當定時器完成技術時就會自動呼叫這個回撥函式。因此我們可以使用這個回撥函式來完成一些設計。比如,定時10秒後開啟某個外設等等,在毀掉函式中應該避免任何可以阻塞或者刪除定時任務的函式。如果要是用定時器的話需要江紅OS_CFG_TMR_DEL_EN定義為1.定時器的解析度有我們定義的的系統節拍率OS_CFG_TICK_RATE_HZ決定,比如我們定義為200,系統時鐘週期就是5ms,定時器的最小解析度很定就是5ms。但是定時器的實際解析度是通過巨集OS_CFG_TMR_TASK_RATE_HZ定義的,這個值絕對不能大於OS_CFG_TICK_RATE_HZ。比如我們定義OS_CFG_TMR_TASK_RATE_HZ為100,則定時器的時間解析度為10ms。有關UCOSIII定時器函式都在os_tmr.c檔案中。

建立一個定時器
如果我們要使用定時器,肯定需要建立一個定時器,使用OSTmrCreate()函式來建立一個定時器,這個函式也用來確定定時器的執行模式
p_tmr : 指向定時器的指標,巨集 OS_TMR 是一個結構體。
p_name: 定時器名稱 。
dly: 初始化定時器的延遲值 。
period: 重複週期。
opt: 定時器執行選項 ,這裡有兩個模式可以選擇。
     OS_OPT_TMR_ONE_SHOT 單次定時器
     OS_OPT_TMR_PERIODIC 週期定時器
p_callback: 指向回撥函式的名字。
p_callback_arg: 回撥函式的參。
p_err: 呼叫此函式以後返回的錯誤碼。

單次定時器
使用OST沒人Create()函式建立定時器吧引數opt設定為OS_OPT_TMR_ONE_SHOT,就是建立的單次定時器。建立一個單次定時器以後,我們以當呼叫OST沒人Start()函式定時器就會衝建立時定義的dly開始倒計數,直到減為0呼叫回撥函式
![單次定時器](https://img-blog.csdn.net/20160805142104462)
下圖展示了單次定時器在呼叫OSTmrStart()函式後開始倒計數,將dly減為0後呼叫回撥函式的過程,到這裡定時器就停止執行,不再做任何事情了,我們可以呼叫OSTmrStop()函式來刪除這個執行完成的定時器。其實我們也可以重新呼叫OSTmrStart()函式來開啟一個已經執行完成的定時器,通過呼叫OSTmrStart()函式來重新觸發單次定時器

週期定時器(無初始化延遲)
在建立定時器的時候也可以建立帶有初始化延時的,初始化延時就是OSTmrCreate()函式中的引數dly 就是初始化延遲,定時器的第一個週期就是dly。當第一個週期完成後就是用引數period 作為週期值,呼叫OSTmrStart()函式開啟有初始化延時的定時器。
![週期定時器](https://img-blog.csdn.net/20160805142855269)

相關推薦

UCOSIII軟體定時-OSTmrStart()函式

建立好的軟體定時器需要呼叫OSTmrStart()函式來啟動軟體定時器 函式原型:CPU_BOOLEAN  OSTmrStart (OS_TMR  *p_tmr,                          OS_ERR  *p_err) 功能:This funct

UCOSIII 軟體定時

一、相關理論 1、使用定時器需開啟巨集   OS_CFG_TMR_DEL_EN     1u 2、定時器解析度由定義的系統節拍頻率 OS_CFG_TICK_RATE_HZ 決定  如 OS_CFG_TMR_TASK_RATE_HZ = 100,系統時鐘週期為  10ms

UCOSIII軟體定時

在學習微控制器的時候會使用定時器來做很多定時任務,這個定時器是微控制器自帶的,也就是硬體定時器,在UCOSIII中提供了軟體定時器 定時器的工作模式 定時器其實就是一個遞減技術器,當計數器遞減到0的時候就會觸發一個動作,這個動作就是回撥函式,當定時器完成技術時

UCOSIIIUCOSIII軟體定時

在學習STM32的時候會使用定時器來做很多定時任務,這個定時器是微控制器自帶的,也就是硬體定時器,在UCOSIII中提供了軟體定時器,我們可以使用這些軟體定時器完成一些功能,本文我們就講解一下UCOSIII軟體定時器。UCOSIII軟體定時器簡介定時器其實就是一個遞減計數器,

基於連結串列的軟體定時實現(轉)

軟體定時器在實際應用比較重要,本文旨在實現一種便於移植,易擴充套件功能,效率高的軟體定時器。本定時器是基於排序連結串列,將最近將觸發的定時器置於連結串列頭,後續新增定時器將計算出其合適位置插入。 主要資料結構及資料   typedef struct m_tm_tcb_struct { uint

FreeRTOS軟體定時

1.軟體定時器: 軟體定時器允許設定一段時間,當設定的時間到達之後就執行指定的功能函式,被定時器 呼叫的這個功能函式叫做定時器的回撥函式。回撥函式的兩次執行間隔叫做定時器的定時週期, 簡而言之,當定時器的定時週期到了以後就會執行回撥函式。 2.軟體定時器功能: 單次定時器:(

uCOS的軟體定時、uCOS時鐘節拍和滴答定時的關係

uCOS2.81後的版本中有軟體定時器的概念,如果要開啟定時器任務,需要在OS_CFG.H檔案中 #define  OS_TMR_EN                 1 軟體定時器其實跟硬體中斷

ARM cortex-M核心晶片的軟體定時功能異常問題解決

      最近一個專案中的使用了軟體定時器功能,程式執行在前後臺的系統中,使用軟體定時器建立任務處理應用。硬體上外接一個水流感測器,水流感測器輸出的是一個方波訊號,水流越快,訊號的頻率越高。CPU採用的是STM32L051的晶片,使用外部中斷接收這個方波訊號,中斷

藍芽BLE---DA14585的軟體定時使用

Dialog DA14585的軟體定時器用起來還是比較方便的,軟體定時器理論上可以開無數個。 首先定義初始化函式 void key_timer_scan(void) { key_sc

stm32滴答定時構建多組軟體定時

stm32有很多組定時器,處理一般業務已經足夠用了。 但是殺雞焉用牛刀,對時間精度要求不高的場合可以考慮使用軟體定時器,使用方便,快捷。 怎麼實現呢?其實並不難,就是使用回撥函式即可。 1. 先將使用到的引數用結構體封裝一下吧 #de

004_軟體定時

軟體定時器API函式:紅色常用 函式名 作用 OSTmrCreate() 建立定時器並制定執行模式 OSTmrDel() 刪除定時器 OSTmrRemainGet

軟體定時osTimerCreate返回NULL

CMSIS-RTOS是對FreeRtos的封裝,函式名比較適合純軟體程式設計。 現在的版本是1.0.2. id1 = osTimerCreate(osTimer(Timer_1), osTimerOnce, NULL); 但是這個osTimerCreate總是返回0x0

FreeRTOS 軟體定時的使用

本質 軟體定時器本質上是一個週期性的任務或單次執行任務。 第一步:巨集配置 使用軟體定時器需要在FreeRTOSConfig.h先配置, 需要注意的是優先順序和堆疊,這幾個資料要根據具體情況具體設定。 #define configUSE_TIMERS 1

51微控制器自定義多個軟體定時

/*---------------------------------------------------- 名稱:用定時器控制led亮滅 微控制器:stc12c2052 晶振:12M 說明:四個led,四種頻率亮。 ------------------------------------------

unix軟體定時程式碼分享

#include <signal.h>#include <time.h>#include <sys/time.h>#include <unistd.h>#include <stdio.h>#include <stdlib.h>void t

【FreeRTOS】小白進階之任務如何共用FreeRTOS軟體定時回撥函式(二)

介紹兩個定時器任務如何通過定時器 handle 共用一個回撥函式。 1、標頭檔案宣告和函式定義 #include "FreeRTOS.h" #include "task.h" #include "t

一種嵌入式系統軟體定時的實現:以STM32為例

1.什麼是軟體定時器 軟體定時器是用程式模擬出來的定時器,可以由一個硬體定時器模擬出成千上萬個軟體定時器,這樣程式在需要使用較多定時器的時候就不會受限於硬體資源的不足,這是軟體定時器的一個優點,即數量不受限制。但由於軟體定時器是通過程式實現的,其執行和維護

用連結串列+函式指標+定時中斷實現的一個軟體定時(試用於所有微控制器)

因為需要移植nrf51822的程式到普通微控制器上,於是分析了協議棧裡的軟體定時器,用連結串列+函式指標+定時器中斷的方法實現了軟體定時器的功能。 下面介紹程式碼和使用方法 1、函式指標和連結串列初始化 typedef void (*app_timer_timeout_

使用FREERTOS軟體定時

    剛剛學會用FREERTOS,剛好稱公司專案需要,就學習著用,有幾個定時需求,本來想使用硬體中斷定時器,再用軟體做個分組定時,剛好看到FREERTOS有軟體定時器組,就想用用試試看效果;    使用的是FREERTOSV10.0.1,MCU用的是STM32F205RET

軟體定時排程不准問題解決辦法

我們在日常程式設計時,時長用的定時器,在對定時器精度要求不是很高的情況,我們通常用軟體定時器來實現,但是在定時器上量後,常常出現定時器排程不是很精確,有事誤差會超出幾秒鐘,從而會帶來一些列的其他問題,為了解決此問題,我們可以在定時器的回撥函式中每呼叫一次,來糾正一下下一次的排