《C與指針》讀書筆記九
指針之所以在C語言中占據(jù)很大分量,是因為指針有很大的靈活性。指針以結構體結合確實為程序的編寫提供了一把鋒利無比的寶劍。在有些資料上介紹結構體是多種數(shù)據(jù)集合,也就是一個結構體可以包含若干種不同類型的數(shù)據(jù)。不同類型的數(shù)據(jù)恰可以和客觀事物的不同屬性結合,用于描述客觀事物非常高效方便。
本文引用地址:http://butianyuan.cn/article/201608/295845.htm#define RTX_MAX 50
#define UART_TIME_LIMT 5
typedef struct UART_TYPE
{
unsigned char RX_buf[RTX_MAX];
unsigned char RX_count;
unsigned char TX_buf[RTX_MAX];
unsigned char TX_count;
unsigned char TX_Len;
unsigned char flag;
unsigned char timer; //判斷一幀數(shù)據(jù)是否結束判斷
}UART_TYPE;
enum COM_FLAGE {NO_REC_ONE_FRAM,REC_ONE_FRAM};
以上是一個串口管理信息的數(shù)據(jù)結構,RX_buf[RTX_MAX]、TX_buf[RTX_MAX] 是發(fā)送接收數(shù)據(jù)緩沖。RX_count 、TX_count接收發(fā)送數(shù)據(jù)計數(shù)器。TX_Len 發(fā)送數(shù)據(jù)總長度。flag數(shù)據(jù)接收完成標志。timer接收數(shù)據(jù)起始計數(shù)器。
結構體定義相當于一個數(shù)據(jù)集合模板。當需要該數(shù)據(jù)結構時只需聲明一個即可。
UART_TYPE UART1 = {
{0,0},
0,
{0,0},
0,
0,
NO_REC_ONE_FRAM,
0
};
在編程中管理也非常方便,如果需要為串口設計一個數(shù)據(jù)使用,UART_TYPE UART;即可實現(xiàn)。在程序中使用也非常方便,比如:
//讀取多個寄存器
if(UART1.RX_buf[1]==0x03)
{
if(readMuliReg( )==0)
{
UART1_Clear_Buf( );
return;
}
else
{
goto RETURN_ERR;
}
}
指針與結構體的結合,在解析MODBUS協(xié)議時非常高效。借用一位同事話是“對內(nèi)存格式化”。也就是用結構體指針對MODBUS報文分析。
//讀多個寄存器
typedef struct MODELBUS03CMD
{
unsigned char targetADD; //目標地址
unsigned char CMD; //命令字
unsigned int regADD; //寄存器地址
unsigned int regNum; //寄存器數(shù)量
}MODELBUS03CMD;
這是一個03命令的報文頭結構。在程序使用方法是這樣
MODELBUS03CMD *pModelBus03;
pModelBus03 = UART1.RX_buf;
REGNumber = pModelBus03->regNum;
regADD = pModelBus03->regADD;
使用pModelBus03指針指向接收數(shù)據(jù)緩沖區(qū),很容易提取了regNum寄存器數(shù)量以及regADD寄存器地址。
評論