单片机中的结构体运用
2016-10-13 来源:elecfans
结构体:
进入单片机查看更多内容>>
在单片机开发中,经常会遇到要初始化一个外设,比如串口,它的初始化状态是由几个属性来决定的,比如串口号,波特率,极性及模式。对于这种情况,在我们没有学习结构体时,我们一般的方法是:
void USART_Init( u8 usartx , u32 BandRate , u8 parity , u8 mode );
这种方式是有效的同时在一定场合是可取的。但是试想,如果有一天,我们希望往这个函数里再传入一个参数,那么势必我们需要修改这个函数的定义,重新加入字长这个入口参数。于是我们的定义被修改为:
void USART_Init( u8 usartx , u32 BandRate , u8 parity , u8 mode , u8 wordlength );
但是如果我们这个函数的入口参数是随着开发不断的增多,那么是不是我们就要不断的修改函数的定义呢?这是不是给我们开发带来很多的麻烦呢?那又怎样解决这种情况呢?
这样如果我们使用到结构体就能解决这个问题了。我们可以在不改变入口参数的情况下,只要改变结构体的成员变量,就可以达到上面改变入口参数的目的。
结构体就是将多个变量组合为一个有机的整体。上面的函数,BandRate,wordlength,Parity,mode,这些参数,他们对于串口而言,是一个有机整体,都是来设置串口参数的,所以我们可以将他们通过定义一个结构体来组合在一个。MDK中是这样定义的:
typedef struct
{
uint32_t USART_BandRate;
uint16_t USART_WordLength;
uint16_t USART_StopBits;
uint16_t USART_Parity;
uint16_t USART_Mode;
uint16_t USART_HardwareFlowControl;
} USART_InitTypeDef;
于是,我们在初始化串口的时候入口参数就可以是USART_InitTypeDef类型的变量或者指针变量了,MDK中是这样做的:
void USART_Init( USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct );
这样,任何时候,我们只需要修改结构体成员变量,往结构体中间加入新的成员变量,而不需要修改函数定义就可以达到修改入口参数同样的目的了。
在以后的开发过程中,如果你的变量定义过多时,如果某几个变量是用来描述某一个对象,你可以考虑将这些变量定义在结构体中,这样也许可以提高你的代码的可读性。
相关文章
- 德州仪器推出新款实时微控制器系统 可在汽车与工业应用中实现更智能的处理流程
- RW61X:安全i.MX RT MCU中的Wi-Fi 6三频器件
- keil中GD32 MCU IAP中APP的存储地址如何设置?
- 自动驾驶中的DCU、MCU、MPU、SOC和汽车电子架构分析
- STM32单片机中的C语言基础知识
- 灵动微电子在洗衣机中的MCU方案布局
- 单片机keil C中的data、bdata、idata、xdata、hdata、pdata、code解释
- 8x8LED点阵+单片机+普中+江科大自化协
- LCD1602+单片机+普中+江科大自化协
- DS1302时钟+单片机+普中+江科大自化协
最新器件