LiteOS之双向链表
来源:互联网 发布:可可验证9.5源码 编辑:程序博客网 时间:2024/06/15 05:03
LiteOS中的双向链表和linux中的实现相差不大。一直很难理解为什么liteOS系统中会出现类似a.h, a.inc, a.ph的头文件,为了避免采用相同后缀会出现重名。采用不同后缀而文件名相同的好处是啥呢?
链表结构定义
节点的结构定义
typedef struct LOS_DL_LIST{ struct LOS_DL_LIST *pstPrev; /**< Current node's pointer to the previous node*/ struct LOS_DL_LIST *pstNext; /**< Current node's pointer to the next node*/} LOS_DL_LIST;
在链表初始化的头节点中前后的节点指针指向其本身,同时以此作为判断链表是否为空的依据。
用户使用如何定义结构方式
typedef struct USR_LIST_DEFINE{ ... //定义其他元素 LOS_DL_LIST usrListNode; ...//定义其他元素} USR_LIST_DEFINE;
关于node和entry概念
简单的讲用户定义的结构地址为entry地址,而此结构中的LOS_DL_LIST占用地址为node地址。链表连接维护的地址为node地址,具体如下图,绿色为USR_LIST_DFINE结构体。
链表的操作
链表的操作包括初始化、元素的增加、删除、状态判断、元素获取及遍历等等。在使用LiteOS的链表接口进行链表操作时,链表中存储的信息均为node的地址信息。而当访问用户定义的机构时,需要进行地址的转换,即需要从node的地址转换为ENTRY地址。在liteOS的接口中已经提供了ENTRY地址转换的相关接口,看看具体的实现方式。
实现代码如下:
#define LOS_OFF_SET_OF(type, member) ((long)&((type *)0)->member)#define LOS_DL_LIST_ENTRY(item, type, member) ((type *)((char *)item - LOS_OFF_SET_OF(type, member)))
首先得到然后得到偏移值offset,然后从Node的地址减去offset得到相应的Entry地址。
阅读全文
0 0
- LiteOS之双向链表
- LiteOS之任务管理
- 数据结构之双向链表
- 数据结构之双向链表
- c++之双向链表
- 数据库之双向链表
- 数据结构之双向链表
- 单链表之双向链表
- 数据结构之双向链表
- 数据结构之双向链表
- 数据结构之双向链表
- 数据结构之双向链表
- 数据结构之双向链表
- 数据结构之双向链表
- 链表源码之双向链表
- 线性表之双向链表
- 线性表之双向循环链表
- 线性表之双向链表
- Effective C++之构造、析构、赋值运算
- Django 模板继承 (extend) 笔记
- BeautifulSoup爬取虎扑评论并进行词云分析
- Tika 1.16架构及核心模块
- 串口基础&Android串口
- LiteOS之双向链表
- 如何在VMware虚拟机上安装Linux操作系统(Ubuntu)
- 栈的基本实现(更新中)
- HttpServlet的两个Service()方法区别
- 分布式数据库数据一致性原理说明与实现
- #pragma用法详解
- 获取包含非西欧字符(汉字)的GET请求参数
- 【复习记录】BFS
- Servlet中统计网站访问量