初學(xué)單片機會(huì )有以下幾個(gè)誤區,過(guò)來(lái)人這么說(shuō): (1)很難記住繁雜的寄存器? 寄存器不用死記硬背,鴻哥我行走江湖多年,連一個(gè)寄存器都記不住。需要配置寄存器的時(shí)候,直接在網(wǎng)上或者書(shū)本上參考別人現成的配置程序是上策,查找芯片數據手冊是中策,死記硬背寄存器是最最下策。 (2)很難記住繁雜的匯編語(yǔ)言指令? 除非是在校學(xué)生要應付考試或者少數工作中繞不開(kāi)匯編,否則學(xué)匯編就是浪費時(shí)間。我行走江湖多年,從來(lái)就沒(méi)有用匯編幫客戶(hù)做過(guò)一個(gè)項目。 (3)C語(yǔ)言很難學(xué)? 你不用學(xué)指針,你不用學(xué)帶形參的函數,你不用學(xué)結構體,你不用學(xué)宏定義,你不用學(xué)文件操作,你也不用死記繁瑣的數據類(lèi)型。你只要會(huì ): 5條指令語(yǔ)句switch語(yǔ)句,if else語(yǔ)句,while語(yǔ)句,for語(yǔ)句,=賦值語(yǔ)句。 7個(gè)運算符+,-,*,/,|,&,!。 4個(gè)邏輯關(guān)系符||,&&,!=,==. 3個(gè)數據類(lèi)型unsigned char, unsigned int, unsigned long。 3個(gè)進(jìn)制相互轉化,二進(jìn)制,十六進(jìn)制,十進(jìn)制。 1個(gè)void函數。 1個(gè)一維數組code(或const) unsigned char array[]。 那么世界上任何一種邏輯功能的單片機軟件你都能做出來(lái)。 我當年剛畢業(yè)出來(lái)工作的時(shí)候才知道可以用C語(yǔ)言開(kāi)發(fā)單片機,一開(kāi)始只用if語(yǔ)句就把項目做出來(lái)了,沒(méi)有用指針,沒(méi)有用帶形參的函數等復雜的功能。再到后來(lái)才慢慢開(kāi)始用C語(yǔ)言其他的高級功能,但是我發(fā)現C語(yǔ)言其他的高級功能,本質(zhì)上都是用我前面列舉出來(lái)的最基本功能集合而成,只是書(shū)寫(xiě)更加簡(jiǎn)單方便了一點(diǎn),編譯后的機器碼都大同小異。 所以不會(huì )指針等高級功能你不用自卑,恰恰相反,當你會(huì )最簡(jiǎn)單的幾個(gè)語(yǔ)句,就把這些高級功能的程序都做出來(lái)了,你才發(fā)現你對底層了解得更加透切,再學(xué)那些高級功能輕而易舉。當你裸機跑的程序都能夠協(xié)調得很好的時(shí)候,你才發(fā)現所謂高深的操作系統也不過(guò)如此,只要給你時(shí)間和金錢(qián)你也可以寫(xiě)個(gè)操作系統來(lái)玩玩。 (4)很難記住精確時(shí)間的計算公式? 經(jīng)?吹綍r(shí)間公式等于晶振,時(shí)鐘周期,執行指令次數他們之間的乘除關(guān)系式。我認為這些都是浮云,不用糾結也不用去記,大概了解一下就可以了。不管你對公式掌握得有多精確,你都不可能做出非常精確的時(shí)間。想用單片機做一個(gè)非常精確的時(shí)間這種想法一開(kāi)始就是錯的,不可能的。真想做一個(gè)比較精確的時(shí)間,應該用外圍時(shí)鐘芯片或者FPGA和CPLD,而不是單片機。 (5)很難記住繁雜的各種通信協(xié)議? 什么IIC、SPI、232串口通訊,CAN、USB等等。這些都是浮云,你不用記那么多,你只要理解兩種通訊方式就夠了,那就是串行通訊方式和并行通訊方式。不管世界上有多少種通訊協(xié)議,物理世界上只有這兩種通訊方式,其他各種名稱(chēng)的通訊協(xié)議都基于此兩種方式演變而來(lái)。 (6)很難寫(xiě)短小精悍的程序? 初學(xué)者不要糾結于此。做項目開(kāi)發(fā),程序容量不是刻意追求的目標,程序多一點(diǎn)少一點(diǎn)沒(méi)關(guān)系,現在大容量的單片機品種非常多,容量不會(huì )是寸土寸金的事情,我們更加要關(guān)注程序的運行效率,可讀性和可修改性。 以下課程可免費試聽(tīng)C語(yǔ)言、電子、PCB、STM32、Linux、FPGA、JAVA、安卓等。 想學(xué)習的你和我聯(lián)系預約就可以免費聽(tīng)課了。 宋工企鵝號:35--24-65--90-88 Tel/WX:173--17--95--19--08 |