欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2965|回復: 0
收起左側

記錄C語言結構體的使用

[復制鏈接]
ID:636538 發表于 2020-1-8 11:12 | 顯示全部樓層 |閱讀模式
結構體: 在單片機開發中,經常會遇到要初始化一個外設,比如串口,它的初始化狀態是由幾個屬性來決定的,比如串口號,波特率,極性及模式。對于這種情況,在我們沒有學習結構體時,我們一般的方法是:
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 );
這樣,任何時候,我們只需要修改結構體成員變量,往結構體中間加入新的成員變量,而不需要修改函數定義就可以達到修改入口參數同樣的目的了。
在以后的開發過程中,如果你的變量定義過多時,如果某幾個變量是用來描述某一個對象,你可以考慮將這些變量定義在結構體中,這樣也許可以提高你的代碼的可讀性。

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表