我觉得 一个 单片机 代码 程序猿 连一个链表都不会写的 话 ,太说不过去了 ,学习 一下
链表
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