我觉得 一个 单片机 代码 程序猿 连一个链表都不会写的 话 ,太说不过去了 ,学习 一下

链表

 

1、线性链表

 

   

 1 //最简单的 线性 链表
 2 
 3 //首先要定义一个结构体
 4 
 5 //遵循了以下 几点 规则
 6   /*
 7    * 1、结构体名称要全部大写,单词之间用下划线 隔开
 8    * 2、变量名称首个单词的首字母小写,单词之间首字母大写
 9     * 3、CB 代表 回调函数(借鉴TI 的蓝牙协议栈,callback)
10    * 4、出现数字 全部宏定义代替
11    * 5、指针变量名称前 + "p"
12    * 6、函数名称首个单词的首字母大写(用于区分变量还是函数名)
13
14   */
15 
16 #define COMMAND_LENGTH_MAX 50 //命令存放buffer的最大长度
17 
18 struct COMMAND_LIST
19 {
20 
21   unsigned char commandBuffer[COMMAND_LENGTH_MAX]; //存放命令
22 
23   unsigned int commandLength; //命令的 长度
24 
25   unsigned int commandSendCounter; //命令发送的次数
26 
27   unsigned char commandReplyState; //命令的应答状态
28 
29   void (*pCommandReplyCB)(void); //该指令应答消息的处理回调函数指针
30 
31   struct COMMAND_LIST *pCommandListNext;
32 
33 }

 

上面 的 代码 存在一下 的问题:  

 

    1、结构体  对齐 的 问题

    2、内存浪费的问题

 

最后 定义是这样的 !

 

 

 1  
 2  struct COMMAND_LIST
 3  {
 4      
 5      unsigned char *pCommandBuffer;             //存放命令缓冲区指针
 6      
 7      unsigned int  commandLength;               //命令的 长度
 8      
 9      unsigned int  commandSendCounter;          //命令发送的次数
10      
11      unsigned char commandReplyState;           //命令的应答状态
12      
13      unsigned char structAlignmentBuffer[3]; //结构体 对齐buffer (备用功能)根据结构体而定
14      
15      void (*pCommandReplyCB)(void);          //该指令应答消息的处理回调函数指针
16      
17      struct COMMAND_LIST *pCommandListNext;
18      
19  }
20  

 

posted on 2017-01-18 18:11  所长  阅读(1438)  评论(0编辑  收藏  举报

导航