【FreeRTOS】小白進階之任務如何共用FreeRTOS軟體定時器回撥函式(二)
介紹兩個定時器任務如何通過定時器 handle 共用一個回撥函式。
1、標頭檔案宣告和函式定義
#include "FreeRTOS.h" #include "task.h" #include "timers.h" #include "supporting_functions.h" #define mainONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 3333UL ) ) #define mainAUTO_RELOAD_TIMER_PERIOD ( pdMS_TO_TICKS( 500UL ) ) // 定時器共用回撥函式 static void prvTimerCallback( TimerHandle_t xTimer ); // 定時器 handle 定義 static TimerHandle_t xAutoReloadTimer, xOneShotTimer;
2、啟動定時任務
int main( void ) { BaseType_t xTimer1Started, xTimer2Started; // 定義 one-shot 定時任務 xOneShotTimer = xTimerCreate( "OneShot", mainONE_SHOT_TIMER_PERIOD, pdFALSE, 0, prvTimerCallback ); // 定義自動過載定時任務 xAutoReloadTimer = xTimerCreate( "AutoReload", mainAUTO_RELOAD_TIMER_PERIOD, pdTRUE, 0, prvTimerCallback ); if( ( xOneShotTimer != NULL ) && ( xAutoReloadTimer != NULL ) ) { // 啟動定時任務 xTimer1Started = xTimerStart( xOneShotTimer, 0 ); xTimer2Started = xTimerStart( xAutoReloadTimer, 0 ); if( ( xTimer1Started == pdPASS ) && ( xTimer2Started == pdPASS ) ) { /* Start the scheduler. */ vTaskStartScheduler(); } } for( ;; ); return 0; }
3、軟體定時器回撥函式
static void prvTimerCallback( TimerHandle_t xTimer ) { TickType_t xTimeNow; uint32_t ulExecutionCount; ulExecutionCount = ( uint32_t ) pvTimerGetTimerID( xTimer ); ulExecutionCount++; vTimerSetTimerID( xTimer, ( void * ) ulExecutionCount ); xTimeNow = xTaskGetTickCount(); if( xTimer == xOneShotTimer ) { vPrintStringAndNumber( "One-shot timer callback executing", xTimeNow ); } else { vPrintStringAndNumber( "Auto-reload timer callback executing", xTimeNow ); if( ulExecutionCount == 5 ) { xTimerStop( xTimer, 0 ); } } }
相關推薦
【FreeRTOS】小白進階之任務如何共用FreeRTOS軟體定時器回撥函式(二)
介紹兩個定時器任務如何通過定時器 handle 共用一個回撥函式。 1、標頭檔案宣告和函式定義 #include "FreeRTOS.h" #include "task.h" #include "t
【Android】小白進階之WeakReference弱引用基礎淺析
作為一枚 android 應用開發小白,工作中凡是遇到不懂的點都要做一番總結,希望對你有益。 1、弱引用定義 弱引用,與強引用相對,GC 在回收時會忽略掉弱引用物件(忽略掉這種引用關係)。 即,就算弱引用指向了某個物件,但只要該物件沒有被強引用指向,該物件也會被GC檢查
【Android】小白進階之單例模式淺析
1、基礎簡介 由於最近專案需求使用到了IO操作,特意花費一定的時間研究了下單例模式,希望對你有用。 定義: 確保某個類只有一個例項,而且自行例項化提供給外部使用。 使用場景: 某個型別的物件只應該有且只有一個,或者避免建立多個物件消耗過多的資源時。 例如: 訪問
STM32小白進階之路----按鍵的模組化,低延時,高靈敏
兩種按鍵查詢方法,兩種方式處理 第一種方法:掃描查詢法 優點:無延遲,高靈敏,無中斷 思想:也是別人的程式碼總結出來的,當按鍵連續讀到10個或者20(這個看你的按鍵多敏感,我的10就夠了)低電平,就算按鍵按下了 //需要迴圈掃描 u8 IsKey0Down()
Java小白進階之路(一)
1、字串操作:replace方法(舊字串,新子串)。 Scanner scanner = new Scanner(System.in); System.out.println("請輸入"); // 接收使用者的輸入的字串 String s1 = scanner.next(); // 接受整型 i
JAVA專案實戰練習-----小白進階之路2
今天接著昨天的內容,繼續來完成繪畫板這個專案昨天完成了滑鼠畫筆功能,那麼我們現在實現工具欄的功能,java中的工具欄使用javax.swing.JToolBar類表示,下面把新程式碼插入到DrawPictureFrame.java類中新增完工具欄之後就可以來一步步實現裡面的功
財會小白進階之路:如何在數字化財務時代成為行業大牛?
包括 alt mark 應該 設備 批量 認知 人員 活動 隨著雲技術、流程機器人、認知計算等創新型技術向財務領域不斷的深入,其在帶來組織架構、人員及管理變革的同時,也不禁引起了財會、稅務、審計等人員的困惑,在以機器人技術為牽引的數字化財務時代下,財會人員該如何獲得核心競爭
Android進階之讀取手機聯絡人顯示listview並點選撥號(CursorAdapter)
一、CursorAdapter介紹 1、繼承於BaseAdapter是個虛類,它為cursor和ListView提供了連線的橋樑。 如:public abstract class CursorAdapter extends BaseAdapter 2、注意
JS之回撥函式(callback)
1.什麼是回撥函式? -- 簡單點說,一個函式被作為引數傳遞給另一個函式(在這裡我們把另一個函式叫做“otherFunction”),回撥函式在otherFunction中被呼叫。 --可以是匿名函式也可以是命名函式 2.回撥函式的特點 (1)自己定義的函式 (2)你沒有呼叫 (
【Hibernate框架學習】:Hibernate進階之詳解Hibernate配置檔案和物件關係對映配置檔案
Hibernate核心配置檔案 我們先來看一個比較常見的hibernate.cfg.xml配置檔案: <!DOCTYPE hibernate-confi
<linux小白進階> sed指令的基本用法
linux指令本文內容較簡潔,適合linux有點基礎的菜鳥。。。功能介紹之後都有例子便於理解,希望對大家能起到幫助作用sed 是一種在線編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成後,把緩沖區
<linux小白進階> find的基本用法
linux指令本文內容較簡潔,適合linux有點基礎的菜鳥。。。看完希望對大家能起到幫助作用文件查找指令find的基本用法:Find:實時精確查找,遍歷指定目錄中的所有文件,相對於locate來書速度較慢-name:以文件名查找 EG: find /etc -name passwd-iname:以文件名查找不
【記錄】小白自主學習css的第一周
式表 cas 靜態 這樣的 rip 樣式表 文檔 員工 美化 CSS(Cascading Style Sheets)層疊樣式表,樣式可以層層累加 與HTML相比CSS支持更豐富的文檔外觀,可以為任何元素的文本和背景設置顏色;允許在任何元素外圍設置邊框,允許改變文本的大小寫
Python基礎【day03】:字典進階(二)
本節內容 深淺拷貝 迴圈方式 字典常用方法總結 一、深淺拷貝 列表、元組、字典(以及其他) 對於列表、元組和字典而言,進行賦值(=)、淺拷貝(copy)、深拷貝(deepcopy)而言,其記憶體地址是變化不通的。 賦值(=) 賦值只是建立一個變數,該變數指向原來的記憶體地址
【Zabbix】小白入門_Zabbix實踐-巨集變數
一、.巨集介紹 巨集是一種抽象概念(Abstraction),它根據一些列預定義的規則替換一定的文字模式,而解釋或編譯器在遇到巨集時會自動進行這一模式替換。類似地,zabbix基於巨集儲存預設文字模式,並且在呼叫時將其替
【Zabbix】小白入門必備——Zabbix snmptrap 配置
伺服器是通過snmptrap主動上報告警,而在zabbix配置snmptrap監控也是很簡單的。 1.登入被監控的裝置的bmc管理系統配置snmptrap地址指向我們的zabbix伺服器或代理伺服器。 設定團體名(下面發ilo為例的,也可以登入bmc管理介面設定): 設定告警
Python小白進階——TypeError: replaceSpace() missing 1 required positional argument: 'self'
# -*- coding:utf-8 -*- class Solution: # s 源字串 def replaceSpace(self, s): # write code here s = list(s) k =
Python小白進階——bisect函數了解一下
""" bisect 為可排序序列提供二分查詢演算法 """ import bisect #使用bisect函式前需要對列表進行排序,否則雖然可以輸出數值,但沒有意義 a = [1, 5, 6, 10, 9] a.sort() print("最初的列表:",
【乾貨】小白的機器學習乾貨 (更新)
下文的這些連結都是筆者在初學機器學習時的一些資源乾貨,其中有大部分需要科學上網才能瀏覽。 維基百科 機器學習 —— 維基百科 Matrix calculus(矩陣求導)—— 維基百科 最小二乘法 —— 維基百科 線性迴歸 —— 維基百科 多項式 —— 維基百科
java常用類解析一,小白進階必備!
Random 讓系統產生隨機數使用 0~9的隨機數 (int)(Math.random()*10); 0~999的隨機數 (int)(Math.random()*1000); a~b的隨機數 (int)(Math.random()*(b-a)); 其實Math的random方法用的就是