首頁(yè) 智能 > 正文

【連載】謹(jǐn)以此文,向大家講述振南十多年前入門(mén)單片機(jī)階段的往事和感悟

大家還記得郭天祥老師書(shū)里那個(gè)100小時(shí)不眠不休,寫(xiě)代碼到淚流的“程序狂人”嗎?

對(duì),就是他,于振南老師,十年后,與郭天祥老師再度聯(lián)手打造全新課程。

現(xiàn)在網(wǎng)絡(luò)上,基本的C語(yǔ)言課程滿天飛,我們現(xiàn)在差不多都在半山腰,歇夠了沒(méi),于老師在嵌C之巔等我們!接下來(lái)我們將連載課程,介紹那些大佬背后不為人知的故事!

于老師跟郭老師合照


(相關(guān)資料圖)

致廣大單片機(jī)學(xué)習(xí)者和工程師:

你們所經(jīng)歷的,振南也一樣不落的都經(jīng)歷過(guò)。起初對(duì)于C語(yǔ)言和單片機(jī)學(xué)習(xí)上的迷茫困惑可能比你們更甚,但是一切都過(guò)來(lái)了,沒(méi)什么能夠真正難倒我們,相信自己!

謹(jǐn)以此文,向大家講述我十多年前入門(mén)階段的往事和感悟,以及告訴大家:?jiǎn)纹瑱C(jī)到底是什么?

為什么很多初學(xué)者都被困在C語(yǔ)言與單片機(jī)入門(mén)基礎(chǔ)的山腳下止步不前,彷徨徘徊?為什么大家在學(xué)習(xí)上花費(fèi)了如此大的精力,卻仍然是收效甚微?為什么C語(yǔ)言中的指針就那么難于理解,始終讓人們摸不著頭腦?又為什么看似毫無(wú)問(wèn)題的代碼,燒錄到單片機(jī)中運(yùn)行就是不對(duì)?這一切的一切都?xì)w結(jié)于一個(gè)根源:對(duì)C語(yǔ)言的本質(zhì)和單片機(jī)的體系結(jié)構(gòu)與運(yùn)作機(jī)制認(rèn)識(shí)不清!

通過(guò)本章,我希望能讓你看穿一切,升華你的整體認(rèn)知。

此時(shí),你會(huì)發(fā)現(xiàn)做單片機(jī)和嵌入式開(kāi)發(fā)是如此簡(jiǎn)單,單片機(jī)也變得“乖巧”了很多,仿佛一切都變得順暢了,和諧了!

注定墮入單片機(jī)05年開(kāi)始接觸單片機(jī)和嵌入式技術(shù),從此墮入其中,直至今日。這十幾年里經(jīng)歷了很多項(xiàng)目,遇到了無(wú)數(shù)技術(shù)點(diǎn)。從一個(gè)涉事不深的初學(xué)者,成長(zhǎng)為了現(xiàn)在還算稱得上是“資深”的工程師。這期間我還辦演著另一個(gè)角色—技術(shù)和知識(shí)的傳授者和解惑者。我熱衷于這種工程師之間的交流,它時(shí)常會(huì)帶給我反思、領(lǐng)悟和動(dòng)力,讓我一直保持追求新技術(shù)新高度的熱情和信念。在交流中,我無(wú)數(shù)次的被問(wèn)到一個(gè)問(wèn)題:“如何才能學(xué)好嵌入式C語(yǔ)言和單片機(jī)?”我也確實(shí)深深感覺(jué)到:C語(yǔ)言的掌握程度嚴(yán)重制約著單片機(jī)和嵌入式工程師的研發(fā)水平。其實(shí),我在硬件方面的研發(fā)水平很大程度上得益于我C語(yǔ)言的扎實(shí)基礎(chǔ)和對(duì)其深入細(xì)致的理解。下面,我結(jié)合我較早期的學(xué)習(xí)經(jīng)歷和感悟來(lái)講一下嵌入式C語(yǔ)言應(yīng)該如何學(xué)好(年代可能會(huì)有些久遠(yuǎn))。也許,我的經(jīng)歷不易復(fù)制,但它作為一種學(xué)習(xí)方式,大家多少可以借鑒。

引用我啟蒙老師的一句話:“C語(yǔ)言,學(xué)得多精都不為過(guò)!要學(xué)單片機(jī),先學(xué)C語(yǔ)言。”

1.1 懵懂好奇的我

性格決定你所能從事的事業(yè),也決定了你的命運(yùn)。

我的性格是對(duì)新鮮事物有極大的好奇,而且這種好奇會(huì)發(fā)展為興趣,并最終狂熱。當(dāng)我腦子里出現(xiàn)一個(gè)新想法,我就會(huì)迫不及待地去實(shí)現(xiàn)它,而且不看到它最后的樣子,不會(huì)輕易放棄,不論成敗都要試試。在我記憶里,我小時(shí)候就是這樣的。

有一次我看到一根鐵絲,正好我衣兜里有一個(gè)皮筋,于是我就做了一個(gè)彈弓。后來(lái)一發(fā)不可收拾,我迷上了做彈弓,各種各樣,大大小小。還不乏創(chuàng)新和發(fā)揮,我想到在電影里見(jiàn)過(guò)的弩(其實(shí)我當(dāng)時(shí)還不知道它叫弩),于是接下來(lái)的很長(zhǎng)時(shí)間我一直在研究如何用鐵絲制造一把弩。最終,弩出現(xiàn)了。原來(lái)玩彈弓時(shí)的紙子彈被我換成了石子,隨著扳機(jī)的扣動(dòng),我的屁股也開(kāi)花了。

上初中的時(shí)候,我通過(guò)學(xué)校開(kāi)設(shè)的興趣班第一次接觸到計(jì)算機(jī),第一次知道了DOS、Windows98、WPS、輸入法這些東西,迅速燃起了對(duì)計(jì)算機(jī)的好奇和興趣。當(dāng)時(shí)我渴望擁有自己的計(jì)算機(jī)。于是開(kāi)始天天纏著我爸媽給我買(mǎi)一臺(tái)計(jì)算機(jī)。礙于當(dāng)時(shí)的經(jīng)濟(jì)條件,最后家里給我買(mǎi)了一臺(tái)學(xué)習(xí)機(jī)。用它可以模擬DOS環(huán)境、練習(xí)指法,還有一些簡(jiǎn)單的編程,如LOGO、BASIC等。從此,我開(kāi)始有了最基本的編程意識(shí):程序就是一行行順序執(zhí)行的語(yǔ)句。但是對(duì)循環(huán)、條件判斷等比較復(fù)雜的東西還不夠熟練,只能說(shuō)有一個(gè)概念。

對(duì)計(jì)算機(jī)的興趣沒(méi)有像以往一樣,熱乎一段時(shí)間就放下了。我發(fā)現(xiàn)計(jì)算機(jī)要學(xué)的東西非常多,而且它好像一直都在變化出新,這些新的東西又會(huì)再一次掀起我的興趣。對(duì)計(jì)算機(jī)的狂熱從上了高中就開(kāi)始了。長(zhǎng)期基于學(xué)習(xí)機(jī)的練習(xí),我的指法已經(jīng)足夠熟練,但是用拼音輸入文字速度太慢,所以我報(bào)班學(xué)了五筆,一直延用至今(現(xiàn)在每當(dāng)有人知道我用五筆的時(shí)候都會(huì)對(duì)我投來(lái)欽佩的目光)。在一頓軟磨硬泡之下,我擁有了第一臺(tái)自己的奔IV電腦,從此我的“折騰”開(kāi)始了。

平時(shí)一有時(shí)間就研究VB、軟件加解密、網(wǎng)絡(luò)攻防這些東西,還訂閱了雜志《電腦愛(ài)好者》,期期不落。到高考前,我應(yīng)該可以稱得上是半個(gè)“業(yè)余電腦專家”了,也已經(jīng)可以使用VB開(kāi)發(fā)一些小的桌面軟件,比如計(jì)算器、小游戲。計(jì)算機(jī)讓我的好奇心得到了很大的滿足,也使我的創(chuàng)造力得到了施展。

1.2 我的C語(yǔ)言學(xué)習(xí)經(jīng)歷

基于我對(duì)計(jì)算機(jī)的濃厚興趣,高考報(bào)志愿的時(shí)候,我四個(gè)志愿全部報(bào)了計(jì)算機(jī)專業(yè),從那時(shí)起,注定了我將以計(jì)算機(jī)為伴、為業(yè)。

原以為進(jìn)了大學(xué)就能馬上接受正統(tǒng)的計(jì)算機(jī)教育了,其實(shí)并不是。計(jì)算機(jī)專業(yè)一開(kāi)始并不直接學(xué)編程,而是學(xué)數(shù)學(xué)。我當(dāng)時(shí)比較迷茫,覺(jué)得學(xué)計(jì)算機(jī)不教編程,上學(xué)有什么用?其實(shí)我知道專業(yè)課程安排的用意,計(jì)算機(jī)科學(xué)的基礎(chǔ)是數(shù)學(xué),應(yīng)該先打基礎(chǔ)。但是又有多少學(xué)生真正去好好學(xué)習(xí)這些基礎(chǔ)而枯燥的東西。導(dǎo)致很多人整個(gè)大一的寶貴時(shí)間都浪費(fèi)在打游戲上,估計(jì)他們已經(jīng)忘了自己為什么要學(xué)計(jì)算機(jī)了。我也怕會(huì)變成這樣。

我開(kāi)始自學(xué)很多計(jì)算機(jī)方面的知識(shí),但是又漫無(wú)目的,直到我碰到一個(gè)“能人”。據(jù)說(shuō)他小學(xué)開(kāi)始學(xué)計(jì)算機(jī),初中已經(jīng)可以獨(dú)立開(kāi)發(fā)軟件,高中時(shí)因?yàn)殚_(kāi)發(fā)了一個(gè)網(wǎng)絡(luò)軟件,被某軟件平臺(tái)收錄,并評(píng)為五星軟件,而被免試特招。他智商高,但似乎情商不是太高,經(jīng)常容易得罪人,有一些讓別人不太舒服的做事風(fēng)格。有一次我們偶然聊天,他提到國(guó)際ACM程序設(shè)計(jì)競(jìng)賽的事情,問(wèn)我有沒(méi)有興趣參加,說(shuō)已經(jīng)集結(jié)了五六個(gè)人,組成小組參加比賽。從此我開(kāi)始有了動(dòng)力,開(kāi)始自學(xué)C語(yǔ)言和算法,參加團(tuán)隊(duì)集訓(xùn),下載往年競(jìng)賽題目模擬競(jìng)技,相互交流經(jīng)驗(yàn)。當(dāng)時(shí)專業(yè)課還沒(méi)有開(kāi)C語(yǔ)言,但是我們已經(jīng)都是C語(yǔ)言高手了。也許,應(yīng)該在這里放一道ACM競(jìng)賽的試題給大家解解悶(這是一道陳年老題,感興趣的話可以百度)。

對(duì)!ACM試題是全英文的。

圖1.1 國(guó)際ACM程序設(shè)計(jì)競(jìng)賽歷屆真題

大二下學(xué)期,C語(yǔ)言專業(yè)課開(kāi)了。很多人并不知道C語(yǔ)言有什么用,帶著迷茫上課、考試、通過(guò),最后忘掉。我開(kāi)始慢慢深刻感覺(jué)到C語(yǔ)言的精妙,它有自己嚴(yán)格的語(yǔ)法規(guī)則,但是又不作過(guò)多限定,這讓它非常靈活而實(shí)用。同一個(gè)邏輯功能,可以有很多種C語(yǔ)言的表達(dá)方式,它一定程度上體現(xiàn)出了編程者自身的習(xí)慣和素養(yǎng)。代碼可以寫(xiě)得很亂,也可以寫(xiě)得很優(yōu)雅;可以寫(xiě)得冗長(zhǎng)啰嗦,也可以寫(xiě)得如蜻蜓點(diǎn)水,幾行了事。但是亂也可以錯(cuò)落有致,寥寥幾行也可以大顯功底。我意識(shí)到C語(yǔ)言沒(méi)那么簡(jiǎn)單,不僅僅是一門(mén)語(yǔ)言而已,它會(huì)伴隨我一生,正如后來(lái)有人所說(shuō)的“程序如人生”。

我的性格仍然在發(fā)揮著巨大的作用。隨著不斷的學(xué)C語(yǔ)言,用C語(yǔ)言,我開(kāi)始覺(jué)得C語(yǔ)言真的是樂(lè)趣多多,如同挖礦,永遠(yuǎn)都有那些未曾遍及的角落,永遠(yuǎn)都有沒(méi)有見(jiàn)過(guò)的另類技巧,永遠(yuǎn)都有富含創(chuàng)意的智慧的流露。(關(guān)于C語(yǔ)言的技巧,振南專門(mén)整理成了一章《C語(yǔ)言的那些技巧與深層理解》,感興趣的讀者可以看一下)

1.3 C語(yǔ)言的頂級(jí)賽事

在C語(yǔ)言專業(yè)課上,老師告誡我們:“C語(yǔ)言,學(xué)得多精都不為過(guò)!”

很多人可能當(dāng)時(shí)并沒(méi)有完全理解這句話,但是我卻深深的贊同。后來(lái),我們的ACM參賽組對(duì)編程的高漲熱情感染了整個(gè)計(jì)算機(jī)學(xué)院,而這位C語(yǔ)言老師,也成為了我們的集訓(xùn)老師。再后來(lái),我們的舉動(dòng),帶動(dòng)了更多人參加ACM程序設(shè)計(jì)競(jìng)賽,學(xué)院、學(xué)校、乃至哈爾濱市、黑龍江省、東北三省。最終,國(guó)際ACM委員會(huì)委任我們學(xué)校為國(guó)際ACM中國(guó)東北賽區(qū)承辦方(南方賽區(qū)承辦方是浙大)。當(dāng)時(shí),全校到處都掛滿了條幅:“Program Your World!”

關(guān)于ACM程序設(shè)計(jì)競(jìng)賽,當(dāng)年還有一個(gè)關(guān)于浙大的傳奇故事(浙大是當(dāng)年的ACM世界總冠軍)。我們知道寫(xiě)程序要經(jīng)歷編程、編譯、查錯(cuò)修改、再編譯,如此往復(fù),若干次。這個(gè)往復(fù)的次數(shù),與程序的難度與程序員的能力有很大關(guān)系。但是要做到所有一次成功,不能說(shuō)不可能,但是極難!當(dāng)年浙大參加總決賽,只剩十分鐘,還有最后一道試題。參賽隊(duì)員,打開(kāi)記事本,直接寫(xiě)代碼,直接提交,一次通過(guò)。這件事情,在圈里流傳,也許有夸張的成分。但是,也足以顯示我們與頂尖編程高手之間的巨大差距。

ACM競(jìng)賽,就是一群瘋狂熱愛(ài)計(jì)算機(jī)和編程的人們,一起正在z做的事情。他們技術(shù)夯實(shí),以不斷獵奇、不斷學(xué)習(xí)、不斷完成新的目標(biāo)為最大樂(lè)趣。

除了ACM,我私下還在關(guān)注另一個(gè)國(guó)際編程競(jìng)賽,IOCCC(國(guó)際混亂C代碼大賽,官方網(wǎng)站http://www.ioccc.org/,如圖1.2)。其實(shí)很多人都不知道這個(gè)比賽,我也是偶然間發(fā)現(xiàn)的。

圖1.2 IOCCC官網(wǎng)歷屆比賽的消息公布

為什么會(huì)關(guān)注這樣一個(gè)似乎不太正經(jīng)的比賽?它不比算法,也不比代碼的質(zhì)量和風(fēng)格,而是比誰(shuí)的代碼最亂,但是亂得要藝術(shù),要能編譯,要能實(shí)現(xiàn)正確的功能,如圖1.3所示代碼。

圖1.3 第24屆IOCCC(2015年)參賽代碼

C語(yǔ)言代碼還能寫(xiě)得如此任性?它體現(xiàn)了C語(yǔ)言在形式上的靈活性。當(dāng)然,也不是單純用代碼來(lái)畫(huà)畫(huà),就能被稱為“亂”的,它有更多更深層的編程技巧。在這里,你可以看到C語(yǔ)言世界的無(wú)奇不有,各種揮揮灑灑的編程風(fēng)格,以及映射出來(lái)的代碼背后的那個(gè)“高手”。

我對(duì)C語(yǔ)言的學(xué)習(xí)熱情是自始至終的,現(xiàn)在也還是在學(xué)習(xí)。記得大學(xué)時(shí)候我們宿舍有一個(gè)習(xí)慣,就是大考之后的晚上要傾巢出動(dòng)去網(wǎng)吧包宿。當(dāng)時(shí)流行玩CS,他們聯(lián)網(wǎng)打得熱鬧。但是我對(duì)游戲毫無(wú)興趣,就窩在一個(gè)靠邊的位置上,上網(wǎng)看C語(yǔ)言代碼。當(dāng)時(shí)特別熱衷逛編程網(wǎng)站,比如CSDN、PUDN等,還喜歡把代碼包全下載下來(lái),看看別人的代碼是怎么寫(xiě)的??戳舜a,就想編譯試試,于是就在網(wǎng)吧的電腦上安裝VC6.0。室友過(guò)來(lái)看我在干啥,然后就驚呆了:“都考完了,你還在看C語(yǔ)言?”

1.4 岔路口上選擇單片機(jī)

接下來(lái),我繼續(xù)學(xué)了C++,還有后來(lái)的MATLAB、VHDL和Verlog(其實(shí)當(dāng)時(shí)對(duì)硬件、數(shù)字信號(hào)處理和仿真沒(méi)什么概念,所以對(duì)于后者沒(méi)有多少熱情)。在學(xué)C++之前,我使用VC6.0已經(jīng)有一定經(jīng)驗(yàn)了,尤其是MFC(當(dāng)時(shí)有人建議我學(xué).NET,比如C#,或者JAVA,說(shuō)MFC已經(jīng)過(guò)時(shí),說(shuō)MFC的意思就是Maybe Finally Canceled,即最終會(huì)被微軟取消)。在系統(tǒng)學(xué)了C++之后,我對(duì)MFC(微軟基礎(chǔ)類庫(kù))有了深入的理解,開(kāi)始閱讀這方面的一些專業(yè)書(shū)籍,已經(jīng)可以編寫(xiě)一些功能復(fù)雜的多層級(jí)的應(yīng)用軟件了。

到這里,我對(duì)編程的學(xué)習(xí)開(kāi)始出現(xiàn)瓶頸,感覺(jué)到迷茫。C語(yǔ)言,很優(yōu)雅,很強(qiáng)大,它的父集C++,面向?qū)ο蟮木幊棠J?,可以開(kāi)發(fā)專業(yè)的桌面軟件。然后呢?似乎其他人用C#或者JAVA,開(kāi)發(fā)軟件的速度更快,做得更好。優(yōu)雅不能當(dāng)飯吃,在這種驅(qū)使下,我開(kāi)始轉(zhuǎn)入C#、JAVA、PHP、JSP、ASP這些上層應(yīng)用級(jí)語(yǔ)言的學(xué)習(xí),準(zhǔn)備努力成為一個(gè)出色的軟件工程師。

在這個(gè)岔路口上,我遇到了我的啟蒙老師,讓我再一次打開(kāi)好奇之門(mén),從而走上了單片機(jī)和嵌入式技術(shù)的道路。他就是杜撰(化名):他以年齡最小、學(xué)歷最低的身份,代表黑龍江省參加全國(guó)“挑戰(zhàn)杯”科技創(chuàng)新大賽,憑自己設(shè)計(jì)的“仿生蛇”獲得二等獎(jiǎng)。獲獎(jiǎng)后,他把相關(guān)技術(shù)全部無(wú)償給了國(guó)防科大。曾作為“小崔說(shuō)事”欄目的特邀嘉賓接受專訪。

關(guān)于“杜撰”和我當(dāng)初進(jìn)入單片機(jī)圈的經(jīng)歷,振南在本書(shū)《我與郭天祥的那些事兒》這一章有詳細(xì)的描寫(xiě)。他給我講了很多關(guān)于單片機(jī)的事情,當(dāng)時(shí)我對(duì)單片機(jī)完全不了解,只知道在他的“仿生蛇”里使用了單片機(jī),而且單片機(jī)可以用C語(yǔ)言進(jìn)行編程開(kāi)發(fā)。單片機(jī)可以做出如此強(qiáng)大的東西,它遠(yuǎn)比在電腦上寫(xiě)桌面軟件要有趣的多。正是這一點(diǎn),深深吸引了我。

“你從51開(kāi)始學(xué)吧,先焊?jìng)€(gè)最小系統(tǒng),然后點(diǎn)個(gè)燈!”

他給了我一個(gè)最小系統(tǒng)板和一些配件,還有一個(gè)叫《平凡的C51教程》的電子文檔。

“你就在我這學(xué)吧,有問(wèn)題問(wèn)我就行?!?/p>

圖1.4 我的第一個(gè)單片機(jī)實(shí)驗(yàn)原理圖(摘自《平凡的C51教程》)

我照著圖1.5依葫蘆畫(huà)瓢的焊完了我人生中第一個(gè)電路板。雖然慘不忍睹,但是經(jīng)杜撰過(guò)目之后,評(píng)價(jià)是“還不錯(cuò),能用?!比缓?,就讓我去學(xué)C51。其實(shí)我對(duì)這個(gè)被稱為“最小系統(tǒng)”的電路為什么要用到這些元件,為什么要焊成這樣,完全沒(méi)有概念。帶著諸多的迷惑不解開(kāi)始了我的單片機(jī)C語(yǔ)言學(xué)習(xí)之旅,讓我開(kāi)始慢慢明白了C語(yǔ)言課上老師說(shuō)的“C語(yǔ)言是最貼近硬件的高級(jí)語(yǔ)言”這句話。

1.5 窗戶紙破了

C語(yǔ)言,不論是變量、函數(shù),還是分支循環(huán),乃至于算法,哪怕是最復(fù)雜的算法,這一切的體質(zhì)都是CPU內(nèi)核的指令執(zhí)行和訪存操作(RAM和ROM)。這是起初我對(duì)C語(yǔ)言的理解。那如何讓C語(yǔ)言去操控硬件產(chǎn)生物理效果呢?當(dāng)時(shí)讓我百思不得其解的是C語(yǔ)言是軟件,發(fā)光二極管是物理上的硬件,軟件是如何能夠影響到物理世界的呢?小到點(diǎn)燈;大到“仿生蛇”產(chǎn)生一系列的動(dòng)作;更大的比如控制火箭發(fā)動(dòng)機(jī)點(diǎn)火。這曾經(jīng)是我入門(mén)階段無(wú)法逾越的一條思維鴻溝。

sfr P1=0x80;

void main(void){P1=0x55;While(1);}

這是我親手寫(xiě)過(guò)的第一個(gè)嵌入式C語(yǔ)言代碼。它為我第一次揭示了C語(yǔ)言與硬件之間的交互方式—特殊功能寄存器(Special Function Register)。

register在標(biāo)準(zhǔn)C語(yǔ)言中是一個(gè)修飾符。一個(gè)變量在定義的時(shí)候如何加入這個(gè)修飾符,編譯器便不會(huì)把它分配在內(nèi)存里,而是直接放在CPU內(nèi)部寄存器里。它的目的是為了加快變量的訪問(wèn)速度,尤其是那些需要被頻繁訪問(wèn)的變量。

register int i;register int sum=0;

for(i=1;i<=100;i++){sum+=i;}

上面這段代碼(計(jì)算1到100的和)的執(zhí)行效率就比沒(méi)有register要高。

51單片機(jī)中的SFR本質(zhì)上也是一些隨機(jī)存儲(chǔ)單元,它們的訪問(wèn)速度很快(與CPU之間采用直接尋址)。但其又有特殊之處,它們都是一些電路(片內(nèi)外設(shè))的門(mén)戶出入口。向這些寄存器寫(xiě)入數(shù)值,會(huì)直接影響相關(guān)電路的運(yùn)行和輸出。

51單片機(jī)的C語(yǔ)言中,為這些有特殊功能的寄存器,專門(mén)增加了一個(gè)修飾符—SFR。由它定義的標(biāo)識(shí)(類似變量名),是可以訪問(wèn)到相應(yīng)的特殊功能寄存器的,即片內(nèi)外設(shè)電路的出入口,從而達(dá)到控制電路的目的。諸多的電路,具有各自的功能,它們紛紛留出寄存器接口,形成一系列的SFR。通過(guò)CPU統(tǒng)一調(diào)配、有機(jī)控制,最終就可以完成復(fù)雜而有序的各種功能。這就是單片機(jī),乃至于更高端的嵌入式CPU,如ARM、DSP等均采用的運(yùn)作機(jī)理。而這些電路,連同CPU內(nèi)核,還有存儲(chǔ)器,當(dāng)然還有連接它們之間的總線,被塑封在一起(即封裝),再把電路(片內(nèi)外設(shè))的相關(guān)外部信號(hào)通過(guò)引腳引出,這就是我們所看到的單片機(jī)芯片了。其實(shí)它就是一個(gè)完整的計(jì)算機(jī)。這大大拓寬了我起初對(duì)計(jì)算機(jī)認(rèn)識(shí)的范疇:凡是擁有獨(dú)立計(jì)算能力,具備輸入輸出和存儲(chǔ)功能的設(shè)備都可以稱為計(jì)算機(jī)。從某種意義來(lái)說(shuō),算盤(pán)就是最原始的計(jì)算機(jī),雖然它很大程度上依賴人的操作和輔助。

一直困惑我的謎霧終于變得清晰了。捅破了這層C語(yǔ)言軟件與硬件之間的窗戶紙,讓我看清了硬件和嵌入式系統(tǒng)的本質(zhì)。我覺(jué)得在硬件上,我將可以發(fā)揮更大的創(chuàng)造力。興趣的泛濫再一次一發(fā)不可收拾。

基于我在C語(yǔ)言方面的扎實(shí)基礎(chǔ)和深入的理解,我對(duì)單片機(jī)的學(xué)習(xí)也較為順利。

理解了51單片機(jī)的SFR,很多東西便變得簡(jiǎn)單了。對(duì)“C語(yǔ)言,學(xué)得再精也不為過(guò)!”這句話有了更深的認(rèn)識(shí):C語(yǔ)言不光是一門(mén)語(yǔ)言,它影射出了整個(gè)計(jì)算機(jī)體系的運(yùn)作機(jī)制,每當(dāng)硬件出現(xiàn)進(jìn)步,甚至是革命的時(shí)候,C語(yǔ)言必定會(huì)隨之進(jìn)化。(大家可以看一下GCC編譯器的迭代歷程,基本上就是主流編程語(yǔ)言衍化的寫(xiě)照)

我們不應(yīng)再為C語(yǔ)言如何操控硬件而產(chǎn)生疑惑,因?yàn)閺奈覀兪褂肅語(yǔ)言寫(xiě)下第一行代碼的那一刻起,其實(shí)我們就已經(jīng)在操控硬件了(內(nèi)存訪問(wèn)、數(shù)據(jù)傳送、CPU執(zhí)行就是硬件行為)。

下一節(jié),看透單片機(jī)!

歷時(shí)籌備一年,于振南老師結(jié)合多年實(shí)戰(zhàn)經(jīng)驗(yàn),全新系統(tǒng)性的打造了一套課程《十天登頂嵌入式C語(yǔ)言之巔(高手C)》,一共100講,總課時(shí)2000多分鐘,為我們解密了很多嵌入式C語(yǔ)言中你所不知道、經(jīng)常出錯(cuò)的問(wèn)題。

希望這套課程,可以讓那些已經(jīng)入門(mén)C語(yǔ)言,還在【半山腰】徘徊的人們,能夠再提升一個(gè)層次,最終登頂嵌入式C語(yǔ)言之巔峰??!

課程7月底更新完之后恢復(fù)原價(jià)1299元,6.18日-6月20日進(jìn)行三天活動(dòng),特惠499元,感興趣的同學(xué)可以在下面海報(bào)掃碼先去看看免費(fèi)章節(jié),今晚再行入手!轉(zhuǎn)發(fā)下面海報(bào)到微信群或朋友圈,可以找老宇哥返現(xiàn)69元!

點(diǎn)擊閱讀原文注冊(cè),跟小伙伴們一起學(xué)習(xí)吧!

關(guān)鍵詞:

最近更新

關(guān)于本站 管理團(tuán)隊(duì) 版權(quán)申明 網(wǎng)站地圖 聯(lián)系合作 招聘信息

Copyright © 2005-2023 創(chuàng)投網(wǎng) - mallikadua.com All rights reserved
聯(lián)系我們:39 60 29 14 2@qq.com
皖I(lǐng)CP備2022009963號(hào)-3