當(dāng)前位置:首頁 > 公眾號(hào)精選 > 大魚機(jī)器人
[導(dǎo)讀]摘要:在看別人單片機(jī)程序時(shí),你也許是奔潰的,因?yàn)槿肿兞繚M天飛,不知道哪個(gè)在哪用了,哪個(gè)表示什么,而且編寫極其不規(guī)范。自己寫單片機(jī)程序時(shí),也許你也是奔潰的??偢杏X重新開啟一個(gè)項(xiàng)目,之前的寫過相似的代碼也無法使用,得重新敲,代碼重用度不高,編程效率低下,代碼無法積累。而且感覺寫這個(gè)...



總感覺重新開啟一個(gè)項(xiàng)目,之前的寫過相似的代碼也無法使用,得重新敲,代碼重用度不高,編程效率低下,代碼無法積累。


而且感覺寫這個(gè)代碼沒有思想,沒有靈魂,沒有框架,只是一個(gè)一個(gè)功能代碼的堆砌,很空泛。


那么這個(gè)時(shí)候,你也許應(yīng)該在單片機(jī)中引入
面向?qū)ο?/a>的思想了,使代碼更規(guī)范。


一、單片機(jī)程序框架

1、輪流執(zhí)行

int main (void)
{
while(1)
{
sing();
dance();
play();
}
}
函數(shù)sing執(zhí)行的時(shí)間比較長的話,函數(shù)dance就不能很快的被執(zhí)行。任何一個(gè)函數(shù)死掉的話就會(huì)影響整個(gè)系統(tǒng)。


2、前后臺(tái)

在使用 51、AVR、STM32 單片機(jī)裸機(jī)的時(shí)候一般都是在main函數(shù)里面用while(1)做一個(gè)大循環(huán)來完成所有的處理,即應(yīng)用程序是一個(gè)無限的循環(huán),循環(huán)中調(diào)用相應(yīng)的函數(shù)完成所需的處理。


有時(shí)候我們也需要中斷中完成一些處理。相對(duì)于多任務(wù)系統(tǒng)而言,這個(gè)就是單任務(wù)系統(tǒng),也稱作前后臺(tái)系統(tǒng),中斷服務(wù)函數(shù)作為前臺(tái)程序,大循環(huán)while(1)作為后臺(tái)程序。


對(duì)應(yīng)的編程代碼大概是這樣的:


void EXTI_IRQHandler()
{
flag = 1;
}
int main (void)
{
while(1)
{
if (flag = 1)
{
do_something();
flag = 0;
}
}
}
有什么問題?


前后臺(tái)系統(tǒng)的實(shí)時(shí)性差,前后臺(tái)系統(tǒng)各個(gè)任務(wù)(應(yīng)用程序)都是排隊(duì)等著輪流執(zhí)行,不管你這個(gè)程序現(xiàn)在有多緊急,沒輪到你就只能等著!


相當(dāng)于所有任務(wù)(應(yīng)用程序)的優(yōu)先級(jí)都是一樣的。但是前后臺(tái)系統(tǒng)簡單啊,資源消耗也少??!在稍微大一點(diǎn)的嵌入式應(yīng)用中前后臺(tái)系統(tǒng)就明顯力不從心了。


3、多任務(wù)

void first_task()
{
while (1)
{
if(has_data())
put_data();
}
}
void second_task()
{
while (1)
{
if(get_data())
do_something();
}
}

int main(void)
{
create_task(first_task);
create_task(second_task);
start_scheduler();
}
多任務(wù)系統(tǒng)會(huì)把一個(gè)大問題“分而治之”,把大任務(wù)劃分成很多個(gè)小問題,逐步的把小任務(wù)解決掉,大任務(wù)也就隨之解決了,這些任務(wù)是并發(fā)處理的。


注意,并不是說同一時(shí)刻一起執(zhí)行很多個(gè)任務(wù),而是由于每個(gè)任務(wù)執(zhí)行的時(shí)間很短,導(dǎo)致看起來像是同一時(shí)刻執(zhí)行了很多個(gè)任務(wù)一樣。


二、執(zhí)行的程序怎么寫?

以按鍵為例,點(diǎn)亮一個(gè)小燈!


1.常規(guī)寫法

int mian(void)
{
while (1)
{
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_3) == GPIO_PIN_SET)
{
printf("按鍵按下\r\n");
}
}
}

2.面向?qū)ο蟮膶懛?/span>

首先我們把每一個(gè)按鍵都看成一個(gè)對(duì)象,既然是對(duì)象就肯定有屬性和行為,比如我們定義一個(gè)學(xué)生,那么這個(gè)學(xué)生有什么屬性呢?


肯定有姓名、年齡、身高、體重對(duì)吧,這些是一些基本的屬性,我們可以用一些單獨(dú)的變量來定義它,比如:


typedef struct
{

uint8_t *name; //姓名(變量)
uint8_t age; //年齡(變量)
uint8_t height;//身高(變量)
uint8_t weight;//體重(變量)
} student_t;
但是一個(gè)學(xué)生還有很多行為對(duì)吧,它會(huì)唱歌、跳舞、打籃球、也會(huì)關(guān)注果果小師弟的公眾號(hào)對(duì)吧,于是我們就可以這樣定義:


typedef struct
{

uint8_t *name; //姓名(變量)
uint8_t age; //年齡(變量)
uint8_t height; //身高(變量)
uint8_t weight; //體重(變量)
void (*Sing_song)(void); //會(huì)唱歌(函數(shù)指針)
void (*Dance_latin)(void); //會(huì)跳舞(函數(shù)指針)
void (*Wechat_zhiguoxin)(void); //會(huì)關(guān)注果果的公眾號(hào)(函數(shù)指針)
} student_t;
好了,這里我們提到了函數(shù)指針,所以就來說一說函數(shù)指針。


函數(shù)指針,顧名思義它就是一個(gè)指針,只不過它是一個(gè)函數(shù)指針,所以指向的是一個(gè)函數(shù)。類比一般的變量指針,指針變量,實(shí)質(zhì)上是一個(gè)變量,只不過這個(gè)變量存放的是一個(gè)地址,在32位單片機(jī)中,任何類型的指針變量都存放的是一個(gè)大小為4字節(jié)的地址。


重要的話說三遍!牢記在心?。?!


為什要記住函數(shù)指針,因?yàn)樵?a href="/tags/單片機(jī)" target="_blank">單片機(jī)
面向?qū)ο?/a>編程中,結(jié)構(gòu)體的成員不是變量就是函數(shù)指針這兩種類型。變量就不用說了,函數(shù)指針理解就好。


其實(shí)函數(shù)指針可以類比一般的變量,看下面:


int   a; < = > void Sing_song(void);
int * p; < = > void (*zhiguoxin)(void);
p=
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉