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中可配置
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值