久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2787|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品视频在线观看 | 国产精品成人一区二区三区夜夜夜 | 日本三级网址 | 99re视频在线 | 日韩精品视频在线 | 欧美日韩国产一区 | caoporn免费在线视频 | 丝袜 亚洲 欧美 日韩 综合 | 精品99爱视频在线观看 | 天堂精品 | 国产激情片在线观看 | 在线观看免费av网站 | 久久久久久久一区二区三区 | www.99re| 91在线视频免费观看 | 日韩精品一区二区三区视频播放 | 欧美精品日韩 | 老司机午夜性大片 | 国产三区视频在线观看 | 国产精品视频999 | 国产人成精品一区二区三 | 久久精品视频在线观看 | 欧美在线日韩 | 日韩av免费在线电影 | 国产精品不卡视频 | 黄色片av| 亚洲第一av| 韩日免费视频 | 丝袜美腿一区二区三区 | 久久只有精品 | 亚洲成人久久久 | 超碰在线97国产 | 中文字幕欧美日韩一区 | 国产色| 成人免费淫片aa视频免费 | 天天干视频| 五月花丁香婷婷 | 91视频精选| 欧美一区久久 | www.操.com| 亚洲精品久久久久久首妖 |