300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > c语言 stm32结构体赋值 STM32学习笔记9——结构体赋值问题

c语言 stm32结构体赋值 STM32学习笔记9——结构体赋值问题

时间:2022-06-14 16:57:36

相关推荐

c语言 stm32结构体赋值 STM32学习笔记9——结构体赋值问题

采用TCP/IP上报采集数据,用结构体的形式建立数据缓冲区。在对结构体整体赋初值(比如帧头之类的可以先赋值)时,发现结构体只能在定义时整体赋初值,而不能在初始化语句中赋。

比如我定义的结构体为:

//帧格式结构体

typedef struct

{

uint32_t frame_head; //帧标志

uint16_t frame_len;//帧长

stcSystemTime frame_time;//帧时间

stcFrameParameter frame_parameter;//参数列表

uint8_t frame_head_check;//帧头校验码

uint8_t frame_total_check;//整帧校验码

stcADSData frame_data[CHANEL_NUM][CHANEL_DATA_NUM];//帧数据

}stcDataFrame;

可以这样在定义时赋初值:

stcDataFrame TCPTxBuff[TX_BUFF_SIZE] ={0} ;

当然,也可以写成{0,0,0,....}之类的形式,对结构体中的每个元素分别赋初值。

但是,下面的做法错误,会报错。即使对每个结构体中的元素分别赋值(采用{0,0,0.....}的形式)也是错的。

void Sys_InfoInit( void )

{

//2路数据缓冲初始化

TCPTxBuff[0] = {0};

TCPTxBuff[1] = {0};

return;

}

如果在定义时没有赋初值,初始化还是要老实地对每个元素赋值,如下:

void Sys_InfoInit( void )

{

uint16_t i = 0;

uint16_t j = 0;

uint16_t k = 0;

//2路数据缓冲初始化

for( i = 0; i <= TX_BUFF_SIZE-1; i++ )

{

TCPTxBuff[i].frame_head = TX_FRAME_HEAD_LE; //STM32是小端模式

TCPTxBuff[i].frame_len = TX_FRAME_LEN_LE;

TCPTxBuff[i].frame_time.year = 0;//时间

TCPTxBuff[i].frame_time.month = 0;

TCPTxBuff[i].frame_time.day = 0;

TCPTxBuff[i].frame_time.hour = 0;

TCPTxBuff[i].frame_time.minute = 0;

TCPTxBuff[i].frame_time.second = 0;

TCPTxBuff[i].frame_time.milsecond_high = 0;

TCPTxBuff[i].frame_time.milsecond_low = 0;

TCPTxBuff[i].frame_parameter.device_type = 1;//设备类型

TCPTxBuff[i].frame_parameter.data_resolution = 24;//采样精度

TCPTxBuff[i].frame_parameter.data_len = CHANEL_DATA_NUM_LE;//数据长度

TCPTxBuff[i].frame_parameter.data_width = CHANEL_NUM;//数据宽度

TCPTxBuff[i].frame_parameter.frame_num = 0;//帧计数

TCPTxBuff[i].frame_parameter.reserve1 = 0;//保留1

TCPTxBuff[i].frame_parameter.reserve2 = 0;//保留2

TCPTxBuff[i].frame_head_check = 0;//帧头校验码

TCPTxBuff[i].frame_total_check = 0;//整帧校验码

for( j = 0; j <= CHANEL_NUM - 1; j++ )//数据

{

for( k = 0; k <= CHANEL_DATA_NUM - 1; k++ )

{

TCPTxBuff[i].frame_data[j][k].byte1 = 0;

TCPTxBuff[i].frame_data[j][k].byte2 = 0;

TCPTxBuff[i].frame_data[j][k].byte3 = 0;

}

}

}

return;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。