经验累积
使用结构体 C面向对象
例如描述ModbusRTU的协议帧
typedef struct
{
uint8 device_addr;//从机地址域
uint8 func_code;//功能码
uint8 data[];//数据域
uint8 CRC_L;
uint8 CRC_H;
}ModbusRTU_Frame;
使用枚举类型 增加代码可读性
替代意义不明的数字,增加代码可读性
//状态机状态枚举
typedef enum
{
uint8 STATE1 = 1,
uint8 STATE2,//递增为2
uint8 STATE3,//递增为3
uint8 STATE4,//....4
uint8 STATE5,//....5
}State_Type;
使用映射思想 MAP记录数据
例如,通过ascii值记录出现过的字母,以及出现过的频次
使用寄存器bit位思想 记录标志位
例如,一个16位的数据类型,uint16。可以使用位操作对16个位赋予1/0状态。用于标记状态位
types.h
// Define to prevent recursive inclusion
#ifndef __TYPES_H
#define __TYPES_H
// Files includes
#include <stdint.h>
#include <stdbool.h>
#ifdef __cplusplus
#define __I volatile ///< Defines 'read only' permissions
#else
#define __I volatile const ///< Defines 'read only' permissions
#endif
#define __O volatile ///< Defines 'write only' permissions
#define __IO volatile ///< Defines 'read / write' permissions
//typedef long long u64;
//typedef long long s64;
typedef int64_t u64;
typedef uint64_t s64;
typedef signed int s32;
typedef signed short s16;
typedef signed char s8;
typedef signed int const sc32; ///< Read Only
typedef signed short const sc16; ///< Read Only
typedef signed char const sc8; ///< Read Only
typedef volatile signed int vs32;
typedef volatile signed short vs16;
typedef volatile signed char vs8;
typedef volatile signed int const vsc32; ///< Read Only
typedef volatile signed short const vsc16; ///< Read Only
typedef volatile signed char const vsc8; ///< Read Only
typedef unsigned int u32;
typedef unsigned short u16;
typedef unsigned char u8;
typedef unsigned int const uc32; ///< Read Only
typedef unsigned short const uc16; ///< Read Only
typedef unsigned char const uc8; ///< Read Only
typedef volatile unsigned int vu32;
typedef volatile unsigned short vu16;
typedef volatile unsigned char vu8;
typedef volatile unsigned int const vuc32; ///< Read Only
typedef volatile unsigned short const vuc16; ///< Read Only
typedef volatile unsigned char const vuc8; ///< Read Only
typedef bool BOOL;
#ifndef NULL
#define NULL ((void *)0)
#endif
typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;
typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;
#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))
#define U8_MAX ((u8)255)
#define S8_MAX ((s8)127)
#define S8_MIN ((s8)-128)
#define U16_MAX ((u16)65535u)
#define S16_MAX ((s16)32767)
#define S16_MIN ((s16)-32768)
#define U32_MAX ((u32)4294967295uL)
#define S32_MAX ((s32)2147483647)
#define S32_MIN ((s32)-2147483648uL)
#define MAX(a,b)((a)>(b)?(a):(b))
#define MIN(a,b)((a)<(b)?(a):(b))
#define SET_BIT(reg, bit) ((reg) |= (bit))
#define CLEAR_BIT(reg, bit) ((reg) &= ~(bit))
#define READ_BIT(reg, bit) ((reg) & (bit))
#define CLEAR_REG(reg) ((reg) = (0x0))
#define WRITE_REG(reg, value) ((reg) = (value))
#define READ_REG(reg) ((reg))
#define MODIFY_REG(reg, CLEARMASK, SETMASK) WRITE_REG((reg), (((READ_REG(reg)) & (~(CLEARMASK))) | (SETMASK)))
#define POSITION_VAL(value) (__CLZ(__RBIT(value)))
#define LEFT_SHIFT_BIT(x) (1 << x)
#endif