点击上方蓝色字体了解更多的嵌入式编程实用技能。
如果你觉得该文章对你有帮助,欢迎点赞+关注
这篇重点介绍一下代码编程规范的扩展要求-其他的建议
【规范1】变量的类型定义建议统一采用uint8_t
、uint16_t
、int8_t
等定义
根据8位、16位和32位等机器的不同,
int
等类型所占的字节不一样,如果采用int
等方式定义,那么在不同位机器移植代码时就会出现很多问题
为了提高代码的移植性,一般采用uint8_t
、uint16_t
、int8_t
等定义的方式,它是通过typedef
定义的,而不是一种新的数据类型,typedef
定义的uint8_t
、uint16_t
、int8_t
等可以更好的兼容各个平台,不用担心位不同机器造成的兼容性问题
虽然也有用u8
、u16
、u32
等其他typedef
定义方式,但是毕竟是少数,而uint8_t
、uint16_t
、int8_t
等定义的方式是业界通用的,具有更高的兼容性
【规范2】关于指针定义时的*
的位置,建议是靠近变量或者函数
如下列代码,靠近变量的
*
更能直观地看出该变量是指针uint8_t* src; // *靠近类型
uint8_t *src; // *靠近变量
uint8_t* GetInfo(void); // *靠近返回值类型
uint8_t *GetInfo(void); // *靠近函数
【规范3】char
定义的字符串在申请内存或者定义大小时都需要留结尾标识\0
空间
strncpy
等安全函数在拷贝字符串到达指定长度时,不会在目标字符串结尾添加\0
,如果不手动添加\0
,则会出现意向不到的问题
通常是在申请后立马清零或者定义时清零
【规范4】文件的编码格式尽量统一,如有中文,则统一为 utf8 的编码格式
在单片机开发或者需要开发 LCD 驱动的情况,需要自己通过工具生成需要使用的中文字库(大多是 GB2312 格式),则需要留意该文件的编码格式,如果文件的编码格式是 utf8,则不能正常对应,如下是LCD 驱动的部分使用的字体库(一般为 GB2312 编码)
/**
* @brief 24 * 24 汉字字符集点阵索引
* @note 对应点阵数据 LCD_FONT_24X24_DATA
*/
const uint8_t LCD_FONT_24X24_IDX[] = {
"参数"
};
/**
* @brief 24 * 24 汉字字符集点阵数据
*/
const uint8_t LCD_FONT_24X24_DATA[]= {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x06,0x00,
0x00,0x81,0x01,0xC0,0x00,0x06,0xE0,0xFF,0x0D,0x00,0x04,0x08,
0x00,0x06,0x20,0xFC,0xFF,0x7F,0x00,0x41,0x00,0x80,0x91,0x00,
0xC0,0x18,0x03,0x20,0x0C,0x0E,0x10,0xC3,0x78,0x8C,0x60,0x00,
0x60,0x18,0x00,0x00,0x0C,0x06,0x00,0x83,0x03,0xE0,0xE0,0x00,
0x00,0x38,0x00,0x00,0x0E,0x00,0xF8,0x01,0x00,0x00,0x00,0x00,/*"参",0*/
0x00,0x00,0x00,0x00,0x80,0x00,0x80,0x81,0x01,0x88,0x98,0x00,
0x90,0xCC,0x00,0xB0,0x44,0x00,0x90,0x4A,0x20,0xFC,0xDF,0x7F,
0xC0,0x60,0x08,0xA0,0x67,0x08,0x90,0x5C,0x08,0x88,0x54,0x0C,
0x84,0x48,0x0C,0xC0,0x80,0x04,0x40,0x8C,0x04,0xFC,0x8F,0x04,
0x20,0x04,0x07,0x20,0x02,0x03,0xC0,0x03,0x03,0x80,0x8F,0x06,
0x40,0x48,0x1C,0x30,0x30,0x78,0x0E,0x0C,0x10,0x00,0x00,0x00,/*"数",1*/
}而在调用 LCD 的显示中文函数的文件为 utf8 编码格式,则程序运行时函数
LCD_ShowChinese
无法和字体库匹配(编码格式不一样)LCD_ShowChinese("参数");
解决方式有两种:
将调用 LCD 的显示中文函数的文件全部调整为 GB2312 编码格式,这样源码就存在 GB2312 和 utf8 的编码格式文件
在函数
LCD_ShowChinese
增加 UTF8 转 GB2312 格式功能,这样就不需要将调用 LCD 的显示中文函数的文件转成 GB2312 编码格式了