FreeRTOS 數據類型 (1)

前言

  1. 本博文基於MDK,FreeRTOSV9.0.0庫爲例,參考野火教程編寫,算是對野火教程的一個提煉總結筆記;
  2. 根據我的個人理解,下文中出現的單詞port翻譯爲端口,接口,但是我認爲理解爲CPU架構更容易理解;
  3. 如有不足之處還請多多指教;

數據類型的重定義

重定義的目的: 爲了適應不同的編譯環境和處理器(同一個數據類型在不同的編譯器和CPU架構裏的位數大小可能不同);
具體實現: 在FreeRTOSV9.0.0官方庫下的portable文件夾中,包含着FreeRTOS官方爲各種開發環境而編寫的數據類型重定義頭文件 “portmacro.h”(端口宏定義.h);使用不同的環境,使用不同的文件即可;如下圖:
在這裏插入圖片描述
以RVDS中的ARM_CM3文件爲例:
在這裏插入圖片描述
展開portmacro.h爲例:

/*-----------------------------------------------------------
 * Port specific definitions. 端口指定類型
 *
 * The settings in this file configure FreeRTOS correctly for the
 * given hardware and compiler.  
 *
 * These settings should not be altered. 這些配置不應該被改變;
 *-----------------------------------------------------------
 */

/* Type definitions. */
#define portCHAR		char
#define portFLOAT		float
#define portDOUBLE		double
#define portLONG		long
#define portSHORT		short
#define portSTACK_TYPE	uint32_t
#define portBASE_TYPE	long   

typedef portSTACK_TYPE StackType_t;
typedef long BaseType_t;
typedef unsigned long UBaseType_t;

#if( configUSE_16_BIT_TICKS == 1 )
	typedef uint16_t TickType_t;
	#define portMAX_DELAY ( TickType_t ) 0xffff		
#else
	typedef uint32_t TickType_t;
	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL	

#endif
/*-----------------------------------------------------------*/

需要重要記住的幾個宏定義類型:
BaseType_t(portBASE_TYPE/UBaseType_t): 根據處理器的架構來決定是多少位的, 如果是 32/16/8bit 的處理器則是 32/16/8bit 的數據類型。一般用於定義函數的返回值或者布爾類型。
TickType_t:用於定義系統時基計數器的值和阻塞時間的 值 。 FreeRTOSConfig.h 頭 文 件 中 的 宏configUSE_16_BIT_TICKS 爲 1 時則爲 32位。
portMAX_DELAY :系統最大堵塞時間設置(32Bit/16Bit);
portSTACK_TYPE (StackType_t):

野火補充:
在編程的時候,如果用戶沒有明確指定 char 的符號類型, 那麼編譯器會默認的指定char 型的變量爲無符號或者有符號。正是因爲這個原因,在 FreeRTOS 中,我們都需要明確的指定變量 char 是有符號的還是無符號的。 在 keil 中, 默認 char 是無符號的;在Keil中可配置
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章