嵌入式框架Zorb

自小编是卓波,小编是一名嵌入式程序员,小编相对没悟出小编会在此边跟大家说大话皮。

星彩网app下载,嵌入式框架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扫一扫给自身打赏哟

星彩网app下载 1

本文由星彩网app下载发布于计算机编程,转载请注明出处:嵌入式框架Zorb

TAG标签: 星彩网app下载
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。