历史上的今天
今天是:2025年02月19日(星期三)
2019年02月19日 | STM32学习笔记9——结构体赋值问题
2019-02-19 来源:eefocus
采用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;
}
史海拾趣
|
摘要:介绍了一种以8XC196MC为内核的逆变电源系统。其逆变控制系统实现了全数字操作。逆变部分的SPWM控制脉冲波形完全由8XC196MC单片机生成,使用IR2130实现对功率管的驱动和保护,频率电压可由数码管显示,可用串口与上位机进行通讯.该系统硬件电路简 ...… 查看全部问答> |
|
CT球管经过多次曝光后,球管中的油会发生变质,其绝缘性和冷却能力都已降低,直接影响球管的使用寿命。我们对CT球管进行清洗、换油,大大的延长CT球管的使用寿命,现将经验介绍如下: 材料和方法:抽真空机一台,负压表一只,真空自动加油缓冲器一 ...… 查看全部问答> |
|
我要采集的信号是5V左右,但是我用的AD芯片TLC5510的输入信号范围是0.6~2.6V。我想将采集信号进行缩小后再采集。当然直接电阻分压肯定是不行的吧。哪位大侠指教一下。也考虑过用电阻分压后,再用射级跟随器减小输入阻抗, 这样是否可行?… 查看全部问答> |
|
我是一名新手,做毕业设计要用WinCE,和看了几天WinCE了,可就是入不了门,而且现在有一个大问题,不知都用什么软件。 现在了解到要装Platform Builder 5.0; 还要用到Visual Studio 2005/2008或EVC++ 还听说要用ADS1.2 还要用到ActiveSync ...… 查看全部问答> |
|
下面是nboot(steldr——boot)里关于休眠唤醒的处理代码 WAKEUP_POWER_OFF ; Release SCLKn after wake-up from the POWER_OFF mode. ldr r1, =MISCCR & ...… 查看全部问答> |
|
The process of changing an EXE or DLL program file after it has been loaded to reflect the actual load address is called “fixing up”. 哪位朋友能帮我解释下这个fix up的意思么? 还有这样一句: kernel.dll is also ‘fixed up’ by ...… 查看全部问答> |
|
wince5.0和linux都没问题。。。。。。我按照飞凌提供的手册,eboot.nb0飞凌提供的是wince5.0的。NK.bin是wince6.0的。。。。。。。。结果烧写后启动白屏然后断电重启后bootload都要重新烧写,每次都这样。。。有人知道什么问题吗,谢了… 查看全部问答> |
|
你想不想知道在应用中如何实现低功耗Wi-Fi®?我们的SimpleLink™ Wi-Fi 器件系列提供易于使用且高效的方法来优化应用功耗,从而实现更长的产品使用寿命。请继续往下读,看看我们是如何实现的。Wi-Fi是目前最普遍的无线互联网连通性技术。 ...… 查看全部问答> |




