Free RTOS基本配置总结

重新定义

    int 在Free RTOS 中不使用,只使用short 和long类型 
    在Cortex-M内核的MCU,short 16位    long 32位
    
    char = portCHAR
    short = portSHORT
    
    portTickType =  unsigned short int
                          =  unsigned int   在Config.h中文件定义 configUSE_16_BITICKS = 0则为32位
                 
                 
    portBASE_Type= long   根据架构决定多少位的 一般用于定义函数的返回值或布尔类型

    
如果没有明确指出char的类型,编译器会默认成指定char的变量为无符号或者有符号的, keil中默认为无符号的

FreeRTOS 定义变量的时候会把变量的类型当作前缀加在变量上

        char  前缀 c
        short 前缀 s
        long  前缀 l 
        portBASE_Type  前缀 x
        数据结构 任务句柄 队列句柄  前缀 x 
        
        无符号 前缀 u 
        指针变量 前缀 p 
        无符号的char变量 uc
        一个char类型的指针 pc

    函数名 包含了返回值的类型 函数所在的文件名 函数的功能  如果是私有的函数会加prv    

信号量的函数都是一个宏定义,函数的命名方法遵循函数的命名方法 而不是宏定义的方法

    通用的宏  表示0和1
    pdTRUE        1
    pdFALSE        0
    pdPASS        1
    pdFAIL       0

FreeRTOS 中源码的list和list item  就是链表和节点
    链表就是列表
    节点就是列表项
    链表分为 单向链表和双向链表(使用最多)
    节点结构体定义

struct node
{
	struct node *next;  /*指向链表的下一个节点-节点指针*/   
	char data1;/*单个数据*/
	unsigned char array[]; /*数组*/
	unsigned long *prt;	/*指针*/
	struct userstruct data2;  /*自定义结构体类型数据*/
}

以上代码 除了节点指针其他可认为可携带的数据,但这种方法很少用。
通常做法是通过链表存储的数据内嵌一个节点

在节点内嵌一个数据结构 ,存储的数据通过内嵌的节点可挂接到链表中

struct node/*节点定义*/
{
	struct node *next;	/*指向链表的下一个节点*/
}

struct userstruct
{
	/*在结构体中,内嵌一个节点指针,通过这个节点将数据挂接到链表中*/
	struct node *next;
	/*各种各样的存储数据*/
}

    链表的常规操作:节点的插入与删除,
    为了顺利的插入 规定一个根节点,这个根节点称为生产者 
    根节点还会有一个节点计数器,用于统计整条链表的节点个数
    


    双向链表和单向链表的区别节点中有两个节点指针
    


  
链表与数组的对比 

 链表:链表是通过节点把离散的数据链接成一个表,通过对节点的插入与删除从而实现对数据的存取
 数组:数组是开辟一段连续的内存来存储数据

        链表是一个圈 没有头和尾之分,为了方便节点的插入与删除规定了一个根节点
        
        数组有起始地址和结束地址

      RTOS
    链表  =   列表    list
    节点  =   列表项   list item

链表和数组的区别:
    链表是通过 节点 把离散的数据链接成一个表,通过对 节点 的插入和删除操作从而实现对数据的存取。
    数组是通过开辟一段连续的内存来存储数据。--> 数组与链表最大的区别
    数组的每个member对应链表的节点,成员与节点的数据类型可以是标准的C类型或者是用户自定义的结构体。数组有起始地址和结束地址,链表是一个圈,没有头和尾之分,
为了方便节点操作的插入和删除会人为的规定一个根节点

链表节点的数据结构在list.h中定义

{
	#if (configUSE_16_BIT_TICKS ==1)
	typedef uint16_t TickType_t;
	
}

struct xLIST_ITEM
{
	TickType_t xItemValue;	/*辅助值*/
	struct xLIST_ITEM * pxNext;
	struct xLIST_ITEM * pxPrevious;	
	void * pvOwner;			/*指向拥有该节点的内核对象,通常是TCB*/
	void * pvContainer;		/*指向该节点所在的链表*/
	
};
typedef struct xLIST_ITEM ListItem_t;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值