C語言編程學習超簡單面試必考——“中斷”

C語言是面向過程的,而C++是面向?qū)ο蟮?/b>

C和C++的區(qū)別:

C是一個結(jié)構(gòu)化語言,它的重點在于算法和數(shù)據(jù)結(jié)構(gòu)绽榛。C程序的設(shè)計首要考慮的是如何通過一個過程,對輸入(或環(huán)境條件)進行運算處理得到輸出(或?qū)崿F(xiàn)過程(事務)控制)辜御。

C++,首要考慮的是如何構(gòu)造一個對象模型屈张,讓這個模型能夠契合與之對應的問題域擒权,這樣就可以通過獲取對象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過程(事務)控制。 所以C與C++的最大區(qū)別在于它們的用于解決問題的思想方法不一樣袜茧。之所以說C++比C更先進菜拓,是因為“ 設(shè)計這個概念已經(jīng)被融入到C++之中 ”。

C與C++的最大區(qū)別:在于它們的用于解決問題的思想方法不一樣笛厦。之所以說C++比C更先進纳鼎,是因為“ 設(shè)計這個概念已經(jīng)被融入到C++之中 ”,而就語言本身而言裳凸,在C中更多的是算法的概念贱鄙。那么是不是C就不重要了,錯姨谷!算法是程序設(shè)計的基礎(chǔ)逗宁,好的設(shè)計如果沒有好的算法,一樣不行梦湘。而且瞎颗,“C加上好的設(shè)計”也能寫出非常好的東西。

“別人休息捌议,我學習哼拔!”感謝大家今天又和小編一起學習來學習C語言嵌入式,希望大家一天天進步瓣颅,“吃得苦中苦倦逐,方為人上人”。

小編推薦一個學C語言/C++的學習裙【 六九九宫补,四七零檬姥,五九六 】曾我,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學習健民!裙內(nèi)有開發(fā)工具抒巢,很多干貨和技術(shù)資料分享!

懸梁刺股

今天小編和大家一起來探討C語言嵌入式中最最最重要的一項內(nèi)容“中斷”秉犹!“中斷”這個概念要使用起來也挺簡單虐秦,可要是真的深入了解其實也比較復雜,為了不是大家困惑凤优,我們還是從簡單出發(fā),直接給大家介紹它的機制和使用方法蜈彼,最后在和大家稍微介紹一下原理筑辨!

大家知道MCU在執(zhí)行任務時,都是順序執(zhí)行的幸逆,執(zhí)行完任務1棍辕,再執(zhí)行任務2,之后一直到任務n还绘,再重頭開始執(zhí)行楚昭。但是有時我們需要執(zhí)行的事件是不確定性的。例如:你平常在干活時拍顷,你的電話突然響了抚太,這時候你肯定會放下手中的事情去接電話,電話鈴聲就是一個中斷信號昔案,它打斷了你當前正在做的事情尿贫,讓你去執(zhí)行接電話這個任務,待電話結(jié)束之后再回到原來的任務踏揣,從剛才停下來的地方繼續(xù)執(zhí)行庆亡。“電話”什么時候會響捞稿,這件事情什么時候發(fā)生我們無法確定又谋,但是只要電話響了我們就要去接電話,這就是中斷娱局!當然了假設(shè)MCU帶操作系統(tǒng)彰亥,我們可以使用多線程,采用輪詢的方式去實時查看“電話”是不是響了铃辖,但是這無疑加重了CPU的負擔剩愧,使用中斷就可以大大減少CPU的負擔,讓他能夠高效地去執(zhí)行其他任務娇斩。

所以嵌入式產(chǎn)品在設(shè)計功能時仁卷,針對不確定性的因素最好使用中斷來實現(xiàn)控制穴翩。但是中斷也有一定的限制,那就是中斷執(zhí)行函數(shù)時間不可過長锦积,我在使用ARM編程時芒帕,中斷函數(shù)中不可以添加延時函數(shù),否則系統(tǒng)就會崩潰丰介,中斷函數(shù)就是“要少要執(zhí)行快”背蟆,主要是因為中斷函數(shù)占用了CPU的資源,只能允許短時間的使用哮幢,否則他就找不到“原來的路”了带膀!所以大家“接電話的時間不可過長”,那么多長的時間才可以呢橙垢?老實說這個小編也沒有嘗試過垛叨,不過小編在日常編程中都是盡量使用較為簡潔的語言來實現(xiàn),常常也就是改變一個標志量柜某,例如函數(shù)中有“接電話”的函數(shù)功能嗽元,但是只有在“電話響了”這個標志位使能了才執(zhí)行,那么中斷函數(shù)就是去使能這個標志位喂击。使能一個標志位是很快的剂癌,將接電話的功能放到主函數(shù)中去執(zhí)行。

接下來就和大家一起學習STM32的外部中斷的使用方法翰绊。我使用的是STM32F4系列的芯片佩谷,它的外部IO口中斷線只有16根,但是幾乎每個管腳都可以配置為外部中斷辞做,那就說明一根中斷線對應多個引腳.具體對應情況如下圖:

中斷線對應IO口

我們在使用之前要確認引腳所對應的的中斷線琳要,這一步做錯了,那么中斷肯定不會響應了秤茅。所以我們需要將中斷線和IO口匹配起來稚补。

接下來讓我們來捋一捋邏輯關(guān)系。和之前一樣框喳,從外到內(nèi)從大到小依次分析:

1课幕、我們使用IO口外部中斷功能,當外部產(chǎn)生中斷信號那么就要執(zhí)行相應的中斷函數(shù)

2五垮、要使用中斷乍惊,那么使用的是哪個IO引腳?

3放仗、配置IO引腳润绎,并且將IO引腳與對應的中斷線連接起來

4、配置中斷參數(shù)

5、設(shè)置中斷管理器

6莉撇、完成中斷響應函數(shù)

按照這樣的流程呢蛤,我們就能明確自己的任務,和大家講過棍郎,條理理清了就很容易去寫其障,不要看到功能就埋頭去寫代碼,會寫代碼的不代表是優(yōu)秀的程序猿涂佃,會思考的才是一流的人才励翼。

那么我們按照上述流程來完成中斷的實現(xiàn):

第一步:配置引腳并且將引腳和中斷線匹配起來

GPIO_InitTypeDef GPIO_InitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);//使能GPIOA,GPIOE時鐘

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG中斷線時鐘

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //KEY0對應引腳

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通輸入模式

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉

GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE2

··SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource2);//PE2 連接到中斷線2

第二步:配置中斷參數(shù)

EXTI_InitTypeDef EXTI_InitStructure;//定義外部中斷

EXTI_InitStructure.EXTI_Line = EXTI_Line2;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中斷事件

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿觸發(fā)

EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中斷線使能

EXTI_Init(&EXTI_InitStructure);//配置中斷

第三步:配置中斷管理器

NVIC_InitTypeDef NVIC_InitStructure;//定義中斷管理器

NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;//外部中斷2

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;//搶占優(yōu)先級3

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子優(yōu)先級2

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中斷通道

NVIC_Init(&NVIC_InitStructure);//配置

第四步:完成中斷響應函數(shù)

void EXTI2_IRQHandler(void)

{

delay_ms(10);//消抖 10ms時間延時

if(KEY2==0)

{

LED0=!LED0; //這里實現(xiàn)的是LED燈的反轉(zhuǎn),LED燈的實現(xiàn)函數(shù)這里就不寫了

}

EXTI_ClearITPendingBit(EXTI_Line2);//清除LINE2上的中斷標志位

}

看看是不是很簡單辜荠,只要完成上述幾個步驟一個外部中斷就完成了汽抚,之后想怎么使用這個功能就看大家自己的發(fā)揮了!

和大家一直強調(diào)的是伯病,配置函數(shù)(初始化函數(shù))基本就是配置幾個模塊殊橙,而且這些都是有例可循的,關(guān)鍵是大家如何去活學活用狱从,將這些功能科學合理地使用起來!人和人的差別就在于思維叠纹,你能想到季研,而別人想不到,你就比他強誉察,所以我們平時要多思考与涡,不要擔心異想天開,其實正是異想才使世界變得豐富多彩持偏!

最后在和大家看一下中斷的原理驼卖,如下圖:

小編推薦一個學C語言/C++的學習裙【 六九九,四七零鸿秆,五九六 】酌畜,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學習卿叽!裙內(nèi)有開發(fā)工具桥胞,很多干貨和技術(shù)資料分享!

中斷執(zhí)行流程

1考婴、原程序正在執(zhí)行

2贩虾、產(chǎn)生了1號中斷

3、保護原程序現(xiàn)場

4沥阱、執(zhí)行中斷1

5缎罢、執(zhí)行中斷1時產(chǎn)生了中斷優(yōu)先級更高的中斷2

6、保護中斷1的現(xiàn)場

7、執(zhí)行中斷2

8策精、中斷2執(zhí)行結(jié)束之后舰始,回到中斷1的現(xiàn)場

9、繼續(xù)執(zhí)行中斷1

10蛮寂、中斷1執(zhí)行結(jié)束之后蔽午,回到原程序執(zhí)行現(xiàn)場

11、執(zhí)行原程序

所以中斷函數(shù)的流程還是較為復雜的酬蹋,幸好我們只要會使用中斷就可以了及老,更底層的函數(shù),如果大家想更深入了解可以自己去查查資料范抓!

小編推薦一個學C語言/C++的學習裙【 六九九骄恶,四七零,五九六 】匕垫,無論你是大牛還是小白僧鲁,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學習!裙內(nèi)有開發(fā)工具象泵,很多干貨和技術(shù)資料分享寞秃!

好了謝謝大家今天的陪伴,如果大家喜歡話點個贊或評論兩句吧偶惠,小編需要大家的支持春寿。當然如果小編哪里寫錯了還希望大家批評指正,再次謝謝大家了忽孽。

這些是C/C++能做的

服務器開發(fā)工程師绑改、人工智能、云計算工程師兄一、信息安全(黑客反黑客)厘线、大數(shù)據(jù) 、數(shù)據(jù)平臺出革、嵌入式工程師造壮、流媒體服務器、數(shù)據(jù)控解骂束、圖像處理费薄、音頻視頻開發(fā)工程師、游戲服務器栖雾、分布式系統(tǒng)楞抡、游戲輔助等

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市析藕,隨后出現(xiàn)的幾起案子召廷,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竞慢,死亡現(xiàn)場離奇詭異先紫,居然都是意外死亡,警方通過查閱死者的電腦和手機筹煮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門遮精,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人败潦,你說我怎么就攤上這事本冲。” “怎么了劫扒?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵檬洞,是天一觀的道長。 經(jīng)常有香客問我沟饥,道長添怔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任贤旷,我火速辦了婚禮广料,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘幼驶。我一直安慰自己性昭,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布县遣。 她就那樣靜靜地躺著,像睡著了一般汹族。 火紅的嫁衣襯著肌膚如雪萧求。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天顶瞒,我揣著相機與錄音夸政,去河邊找鬼。 笑死榴徐,一個胖子當著我的面吹牛守问,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播坑资,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼耗帕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了袱贮?” 一聲冷哼從身側(cè)響起仿便,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后嗽仪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荒勇,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年闻坚,在試婚紗的時候發(fā)現(xiàn)自己被綠了沽翔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡窿凤,死狀恐怖仅偎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情卷玉,我是刑警寧澤哨颂,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站相种,受9級特大地震影響威恼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜寝并,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一箫措、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧衬潦,春花似錦斤蔓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至漂羊,卻和暖如春驾锰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背走越。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工椭豫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人旨指。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓赏酥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谆构。 傳聞我的和親對象是個殘疾皇子裸扶,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容