1. 程式人生 > >【FreeRTOS】小白進階之任務如何共用FreeRTOS軟體定時器回撥函式(二)

【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

AndroidWeakReference弱引用基礎淺析

作為一枚 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方法用的就是