自家相对没悟出小编会在此边跟我们说大话皮

自身是卓波,我是一名嵌入式程序猿,小编相对没悟出作者会在那跟大家说大话皮。

嵌入式框架Zorb Framework搭建进度

嵌入式框架Zorb
Framework搭建意气风发:嵌入式意况搭建、调节和测验输出和树登时间连串

嵌入式框架Zorb
Framework搭建二:环形缓冲区的兑现

嵌入式框架Zorb
Framework搭建三:列表的实现

嵌入式框架Zorb
Framework搭建四:状态机的落到实处

嵌入式框架Zorb
Framework搭建五:事件的兑现

嵌入式框架Zorb
Framework搭建六:电火花计时器的完结

嵌入式框架Zorb
Framework搭建七:职责的落到实处

 

一、前言

  在从今以后生可畏篇中,大家将为Zorb
Framework提供列表功用。列表是自家最欢悦用的数据结构,未有之后生可畏。在只要涉及四处理对象不仅仅一个的时候,小编就能想到列表。前面将在设计的状态机、事件、停车计时器和天职等等都必要列表的支撑,能够说列表在整整框架之中是必要的叁个意义。

 

二、列表设计

  大家先来探访要兑现的列表提供怎么着功能:

  最早要提供的功力如下:

  1、能够在钦命地方扩展数量

  2、能够在内定地点删除数据

  3、可见列表数据的个数

  4、能够清空驶列车表

  5、能够不自由数据,仅仅把多少移出列表

  6、能够依赖数据获得它所在的目录

  由此,初阶设计的数据结构如下: 

 1 /* 列表节点结构 */
 2 typedef struct _ListNode
 3 {
 4     bool IsExternData;          /* 是否外部数据,是则销毁时不释放 */
 5     uint8_t *pData;             /* 指向数据的指针 */
 6     uint32_t Size;              /* 数据的大小 */
 7     struct _ListNode *Next;     /* 指向下一个节点 */
 8 } ListNode;
 9 
10 /* 列表结构 */
11 typedef struct _List
12 {
13     ListNode *pRootNode;        /* 指向根节点数据 */
14     uint32_t Count;             /* 节点个数 */
15     
16     /* 在尾端增加节点 */
17     bool (*Add)(struct _List * const pList, ListNode *pNode);
18     
19     /* 删除节点(释放空间) */
20     bool (*Delete)(struct _List * const pList, ListNode *pNode);
21     
22     /* 移除节点(不释放空间) */
23     bool (*Remove)(struct _List * const pList, ListNode *pNode);
24     
25     /* 返回指定索引处的节点的指针 */
26     bool (*GetElementAt)(struct _List * const pList, uint32_t index,
27         ListNode **ppNode);
28     
29     /* 返回数据区指向data的节点的指针 */
30     bool (*GetElementByData)(struct _List * const pList, void *pdata,
31         ListNode **ppNode);
32     
33     /* 返回指定索引处的节点的数据缓冲区的指针 */
34     void *(*GetElementDataAt)(struct _List * const pList, uint32_t index);
35     
36     /* 返回节点的索引 */
37     bool (*GetElementIndex)(struct _List * const pList, ListNode *pNode,
38         uint32_t *pIndex);
39     
40     /* 在指定索引处增加节点 */
41     bool (*AddElementAt)(struct _List * const pList, uint32_t index,
42         ListNode *pNode);
43     
44     /* 在指定索引处删除节点(释放空间) */
45     bool (*DeleteElementAt)(struct _List * const pList, uint32_t index);
46     
47     /* 在指定索引处移除节点(不释放空间) */
48     bool (*RemoveElementAt)(struct _List * const pList, uint32_t index);
49     
50     /* 清空列表(释放空间) */
51     bool (*Clear)(struct _List * const pList);
52     
53     /* 释放列表(释放空间) */
54     bool (*Dispose)(struct _List * const pList);
55 } List;

  为了完毕动态列表,在列表中提供了三个Dispose的意义。

  列表已经希图好了,具体落到实处请看附属类小零件代码或在文末的github地址拉框架源码。

 

三、列表结果测量检验

  轻松的测验代码如下:

  1 /**
  2   *****************************************************************************
  3   * @file    app_list.c
  4   * @author  Zorb
  5   * @version V1.0.0
  6   * @date    2018-06-28
  7   * @brief   列表测试的实现
  8   *****************************************************************************
  9   * @history
 10   *
 11   * 1. Date:2018-06-28
 12   *    Author:Zorb
 13   *    Modification:建立文件
 14   *
 15   *****************************************************************************
 16   */
 17 
 18 #include "app_list.h"
 19 #include "zf_includes.h"
 20 #include "string.h"
 21 
 22 /* 列表指针 */
 23 List *pBookList;
 24 
 25 /* 书本数据结构 */
 26 typedef struct _Book
 27 {
 28     uint32_t Index; /* 索引 */
 29     char Name[10];  /* 书名 */
 30 } Book;
 31 
 32 /******************************************************************************
 33  * 描述  :任务初始化
 34  * 参数  :无
 35  * 返回  :无
 36 ******************************************************************************/
 37 void App_List_init(void)
 38 {
 39     /* 创建列表 */
 40     List_create(&pBookList);
 41 }
 42 
 43 /******************************************************************************
 44  * 描述  :任务程序
 45  * 参数  :无
 46  * 返回  :无
 47 ******************************************************************************/
 48 void App_List_process(void)
 49 {
 50     uint32_t i;
 51     ListNode *pNode;
 52     Book *pBook;
 53     
 54     ZF_DEBUG(LOG_D, "book list count before adding data is %drn",
 55         pBookList->Count);
 56     
 57     /* 填充10个数据 */
 58     for (i = 0; i < 10; i++)
 59     {
 60         /* 创建节点 */
 61         List_mallocNode(&pNode, (void **)&pBook, sizeof(Book));
 62         
 63         /* 填充节点内容 */
 64         pBook->Index = i;
 65         strcpy(pBook->Name, "book x");
 66         pBook->Name[5] = '0' + i;
 67         
 68         /* 添加到列表 */
 69         pBookList->Add(pBookList, pNode);
 70     }
 71     
 72     ZF_DEBUG(LOG_D, "book list count after adding data is %drn",
 73         pBookList->Count);
 74     
 75     /* 读出第3个数据看是否正确 */
 76     pBook = (Book *)pBookList->GetElementDataAt(pBookList, 2);
 77     
 78     ZF_DEBUG(LOG_D, "book index is %drn", pBook->Index);
 79     ZF_DEBUG(LOG_D, "book name is %srn", pBook->Name);
 80     
 81     ZF_DEBUG(LOG_D, "rn");
 82     
 83     /* 删除第5个数据 */
 84     pBookList->DeleteElementAt(pBookList, 4);
 85     
 86     ZF_DEBUG(LOG_D, "book list count after deleteing data is %drn",
 87         pBookList->Count);
 88     
 89     /* 显示现有数据 */
 90     for (i = 0; i < pBookList->Count; i++)
 91     {
 92         pBook = (Book *)pBookList->GetElementDataAt(pBookList, i);
 93         
 94         ZF_DEBUG(LOG_D, "rn");
 95         ZF_DEBUG(LOG_D, "book index is %drn", pBook->Index);
 96         ZF_DEBUG(LOG_D, "book name is %srn", pBook->Name);
 97     }
 98     
 99     while(1);
100 }
101 
102 /******************************** END OF FILE ********************************/

  结果:

book list count before adding data is 0
book list count after adding data is 10
book index is 2
book name is book 2

book list count after deleteing data is 9

book index is 0
book name is book 0

book index is 1
book name is book 1

book index is 2
book name is book 2

book index is 3
book name is book 3

book index is 5
book name is book 5

book index is 6
book name is book 6

book index is 7
book name is book 7

book index is 8
book name is book 8

book index is 9
book name is book 9

 

四、最后

  本篇为Zorb
Framework提供了列表功用,并且那些列表可以装载差异类别的数目。能够说是小效率,大效率。

 

  Zorb Framework
github:

  版权全体,转发请打赏哟

 

若果你喜爱小编的文章,能够经过Wechat扫一扫给自己打赏哟

图片 1

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website