当前位置: 首页 > news >正文

网站建设公司怎么办密云网站建设

网站建设公司怎么办,密云网站建设,wordpress 基础主题,网页浏览器在线使用1.列表和列表项的简介 列表是 FreeRTOS 中的一个数据结构,概念上和链表有点类似,列表被用来跟踪 FreeRTOS中的任务。列表项就是存放在列表中的项目。 列表相当于链表,列表项相当于节点,FreeRTOS 中的列表是一个双向环形链表列表的…

1.列表和列表项的简介

列表是 FreeRTOS 中的一个数据结构,概念上和链表有点类似,列表被用来跟踪 FreeRTOS中的任务。列表项就是存放在列表中的项目。

在这里插入图片描述

  • 列表相当于链表,列表项相当于节点,FreeRTOS 中的列表是一个双向环形链表
  • 列表的特点:列表项间的地址非连续的,是人为的连接到一起的。列表项的数目是由后期添加的个数决定的,随时可以改变
  • 数组的特点:数组成员地址是连续的,数组在最初确定了成员数量后期无法改变
  • 在OS中任务的数量是不确定的,并且任务状态是会发生改变的,所以非常适用列表(链表)这种数据结构

1.1.列表的数据结构

typedef struct xLIST
{listFIRST_LIST_INTEGRITY_CHECK_VALUE	/* 校验值 */volatile UBaseType_t 					uxNumberOfItems;			/* 列表中的列表项数量 */ListItem_t * c							onfigLIST_VOLATILE pxIndex	/* 用于遍历列表项的指针 */MiniListItem_t 							xListEnd					/* 末尾列表项 */listSECOND_LIST_INTEGRITY_CHECK_VALUE	/* 校验值 */
} List_t;
  • 在该结构体中, 包含了两个宏,这两个宏是确定的已知常量, FreeRTOS通过检查这两个常量的值,来判断列表的数据在程序运行过程中,是否遭到破坏 ,该功能一般用于调试, 默认是不开启的
  • 成员uxNumberOfItems:用于记录列表中列表项的个数(不包含 xListEnd)
  • 成员 pxIndex:用于指向列表中的某个列表项,一般用于遍历列表中的所有列表项
  • 成员xListEnd:是一个迷你列表项,排在最末尾

1.2.列表项的数据结构

struct xLIST_ITEM
{listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE	/* 用于检测列表项的数据完整性 */configLIST_VOLATILE 						TickType_t xItemValue				/* 列表项的值 */struct xLIST_ITEM * 						configLIST_VOLATILE pxNext			/* 下一个列表项 */struct xLIST_ITEM * 						configLIST_VOLATILE pxPrevious		/* 上一个列表项 */void * 										pvOwner								/* 列表项的拥有者 */struct xLIST * 								configLIST_VOLATILE pxContainer; 	/* 列表项所在列表 */listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE	/* 用于检测列表项的数据完整性 */
};
typedef struct xLIST_ITEM ListItem_t; 	
  • xItemValue为列表项的值,这个值多用于按升序对列表中的列表项进行排序
  • pxNext 和 pxPrevious分别用于指向列表中列表项的下一个列表项和上一个列表项
  • pxOwner 用于指向包含列表项的对象(通常是任务控制块)
  • pxContainer 用于指向列表项所在列表。

1.3.迷你列表项的数据结构

struct xMINI_LIST_ITEM
{listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE 	/* 用于检测数据完整性 */configLIST_VOLATILE 						TickType_t xItemValue;			/* 列表项的值 */struct xLIST_ITEM * 						configLIST_VOLATILE pxNext;		/* 上一个列表项 */struct xLIST_ITEM * 						configLIST_VOLATILE pxPrevious; /* 下一个列表项 */
};
typedef struct xMINI_LIST_ITEM MiniListItem_t;
  • xItemValue为列表项的值,这个值多用于按升序对列表中的列表项进行排序 (一般为0xFFFFFFFF)
  • pxNext 和 pxPrevious 分别用于指向列表中列表项的下一个列表项和上一个列表项
  • 迷你列表项只用于标记列表的末尾和挂载其他插入列表中的列表项,因此不需要成员变量 pxOwner 和 pxContainer,以节省内存开销

1.4.列表、列表项、迷你列表项的关系

在这里插入图片描述
在这里插入图片描述

2.列表相关API函数介绍

2.1.初始化列表vListInitialise()

void vListInitialise( List_t * const pxList) 
{ /* 初始化时,列表中只有xListEnd,因此pxIndex指向xListEnd */ pxList->pxIndex = ( ListItem_t * ) &( pxList->xListEnd ); /* xListEnd的值初始化为最大值,用于列表项升序排序时,排在最后 */pxList->xListEnd.xItemValue = portMAX_DELAY; /* 初始化时,列表中只有xListEnd,因此上一个和下一个列表项都为xListEnd本身 */ pxList->xListEnd.pxNext = ( ListItem_t * ) &( pxList->xListEnd ); pxList->xListEnd.pxPrevious = ( ListItem_t * ) &( pxList->xListEnd ); /*初始化时,列表中的列表项数量为0(不包含xListEnd) */ pxList->uxNumberOfItems = ( UBaseType_t ) 0U; /* 初始化用于检测列表数据完整性的校验值 */ listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList ); listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList ); 
}
  • 形参:待初始化列表
    在这里插入图片描述

2.2.初始化列表项vListInitialiseItem()

void vListInitialiseItem(ListItem_t * const pxItem)
{/* 初始化时,列表项所在列表设为空 */pxItem->pxContainer = NULL;/* 初始化用于检测列表项数据完整性的校验值 */listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem );listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem );
}
  • 形参:待初始化列表项

2.3.列表末尾插入列表项vListInsertEnd()

void vListInsertEnd(List_t * const pxList,ListItem_t * const pxNewListItem)
{/* 获取列表pxIndex 指向的列表项 */ListItem_t * const pxIndex = pxList->pxIndex;/* 检查参数是否正确 */listTEST_LIST_INTEGRITY( pxList );listTEST_LIST_ITEM_INTEGRITY( pxNewListItem );/* 更新待插入列表项的指针成员变量 */pxNewListItem->pxNext = pxIndex;pxNewListItem->pxPrevious = pxIndex->pxPrevious;/* 测试使用,不用理会 */mtCOVERAGE_TEST_DELAY();/* 更新列表中原本列表项的指针成员变量 */pxIndex->pxPrevious->pxNext = pxNewListItem;pxIndex->pxPrevious = pxNewListItem;/* 更新待插入列表项的所在列表成员变量 */pxNewListItem->pxContainer = pxList;/* 更新列表中列表项的数量 */( pxList->uxNumberOfItems )++;
}
  • 形参:列表、待插入列表项
  • 此函数用于将待插入列表的列表项插入到列表 pxIndex 指针指向的列表项前面,是一种无序的插入方法
    在这里插入图片描述

2.4.列表插入列表项vListInsert()

void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem) 
{ListItem_t * pxIterator; const TickType_t xValueOfInsertion = pxNewListItem->xItemValue; /* 检查参数是否正确 */ listTEST_LIST_INTEGRITY( pxList ); listTEST_LIST_ITEM_INTEGRITY( pxNewListItem ); /* 如果待插入列表项的值为最大值 */ if( xValueOfInsertion == portMAX_DELAY ) { /* 插入的位置为列表xListEnd前面 */ pxIterator = pxList->xListEnd.pxPrevious; } else { /* 遍历列表中的列表项,找到插入的位置 */ for( 	pxIterator = ( ListItem_t * ) &( pxList->xListEnd ); pxIterator->pxNext->xItemValue <= xValueOfInsertion; pxIterator = pxIterator->pxNext ) {} } /* 将待插入的列表项插入指定位置 */ pxNewListItem->pxNext = pxIterator->pxNext; pxNewListItem->pxNext->pxPrevious = pxNewListItem; pxNewListItem->pxPrevious = pxIterator; pxIterator->pxNext = pxNewListItem; /* 更新待插入列表项所在列表 */ pxNewListItem->pxContainer = pxList; /* 更新列表中列表项的数量 */ ( pxList->uxNumberOfItems )++; 
}
  • 形参:列表、待插入列表项
  • 此函数用于将待插入列表的列表项按照列表项值升序进行排序,有序地插入到列表中
    在这里插入图片描述

2.5.列表移除列表项uxListRemove()

UBaseType_t uxListRemove(ListItem_t * const pxItemToRemove)
{List_t * const pxList = pxItemToRemove->pxContainer;/* 从列表中移除列表项 */pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious;pxItemToRemove->pxPrevious->pxNext = pxItemToRemove->pxNext;/* 测试使用,不用理会 */mtCOVERAGE_TEST_DELAY();/* 如果pxIndex 正指向待移除的列表项 */if( pxList->pxIndex == pxItemToRemove ){/* pxIndex 指向上一个列表项 */pxList->pxIndex = pxItemToRemove->pxPrevious;}else{mtCOVERAGE_TEST_MARKER();}/* 将待移除列表项的所在列表指针清空 */pxItemToRemove->pxContainer = NULL;/* 更新列表中列表项的数量 */( pxList->uxNumberOfItems )--;/* 返回列表项移除后列表中列表项的数量 */return pxList->uxNumberOfItems;
}
  • 形参:待移除列表项
  • 返回值:待移除列表项移除后,所在列表剩余列表项的数量
  • 此函数用于将列表项从列表项所在列表中移除
    在这里插入图片描述

3.列表项的插入和删除实验

  • 实验目的:学会对FreeRTOS 列表和列表项的操作函数使用,并观察运行结果和理论分析是否一致
  • 实验设计:将设计三个任务:start_task、task1、task2
    start_task:用来创建其他的2个任务
    task1:实现LED0每500ms闪烁一次,用来提示系统正在运行
    task2:调用列表和列表项相关API函数,并且通过串口输出相应的信息,进行观察

在这里插入图片描述

http://www.yayakq.cn/news/709274/

相关文章:

  • 网站推广软件哪个最实惠江西建设质量检测网站
  • 做php网站的书宏泰机械网站建设
  • 台州的网站建设古德设计官网
  • 网站空间ip需不需要备案woocommerce做零售网站
  • 蓝牙音箱东莞网站建设怎么把视频制作成链接
  • 网站和网页的设计方法保险网站
  • 厦门市建设路网站做网站怎么买服务器
  • 188建站系统源码食品包装设计风格
  • 上海网站建设公司兴田德润简介东莞排名推广
  • 网站开发加盟商怎么做深圳做网站的公司那个好
  • 网站底部版权信息模板app外包什么意思
  • html5旅游网站自己建一个网站做电子商务
  • 如何用使用好wordpress按天计费的seo弊端
  • 在哪公司建设网站网络管理平台
  • 谢岗做网站车工订单网站
  • 网站开发设计思想小视频哪个网站比较好
  • 石家庄兼职做网站房地产图文制作网站
  • 网站数据库做好了 怎么做网页公司查询网
  • 米拓网站建设教程蜡笔小新网页制作模板
  • 高端商务网站建设源码站
  • 织梦企业黄页网站源码优化什么
  • 视频网站主持人如何在电脑上重新装wordpress
  • 企业网站开发课程jsp做的网站
  • 企业网站的常见服务开发板是什么东西
  • 网站建设商务工程建设与设计
  • iis下建多个网站wordpress上传文件夹
  • 怎么自己做网站吗如何弃掉wordpress版权
  • 手机浏览wordpress企业seo优化服务
  • 番禺网站建设专家网站底部悬浮
  • 常州建设网站公司网站广西柳州住房和城乡建设局网站