回覆列表
  • 1 # 熙爸愛釣魚

    我覺得微控制器的靈魂在於暫存器。

    暫時能想到這些:

    程式在微控制器中執行就會涉及到一系列暫存器,如程式暫存器(PC)、狀態暫存器(PSW)、資料地址指標(DPH、DPL)等;中斷暫存器(如 IP、IE等),所有用到中斷的場景都會涉及;計時器暫存器(如 TH0、TL0 等),在用到計時、PWM 等場景都會涉及;通用輸入輸出暫存器(GPIO暫存器,如 P0、P1、P2、P3),所有GPIO的控制實質上就是操作暫存器;外部介面暫存器,如序列介面(SCON、SBUF)等,如果支援其他通訊協議(如SPI、IIC等)也會涉及到相應暫存器;

    當我們學習微控制器時,實際上在學習微控制器內部的各種暫存器,如果都搞明白並能熟練運用了,那麼就可以算是精通某款微控制器了。

    因此,我覺得微控制器的靈魂在於暫存器。

  • 2 # 子更

    微控制器的“靈魂”—資料儲存器

    可以說程式儲存器的裡面存放的是微控制器的靈魂,它就是工作程式。小的可能只有1KB(最多隻能裝1024條8位資料,因為實際指令還有許多2位元組、3位元組指令,所以它還裝不下1024條指令)大的也有128KB的。這些8位資料要麼在工廠裡做摸子光刻進去,要麼一次性的燒寫進去,要麼……用程式設計器這個特殊工具把除錯成功的機器碼裝載進去,或者像AVR微控制器那樣自己花幾塊錢做一條下載線,把電腦裡這些東西灌進去(或許是AVR最吸引人之處),它一旦進駐電腦的程式儲存器中,除了藉助上述裝置便不能自由改寫,在微控制器執行時,只是從其中讀出指令或固定的資料,所以給程式儲存器一個“只讀儲存器”的別名,簡寫為ROM,包括用程式設計器寫紫外線擦除內容的EPROM.用電擦除的EEPROM和現在新興的FLASH ROM;一次性寫入的ROM僅用於電路和程式固定的批次產品中,實際工作起來,都是一樣的。

      在實際的使用中,微控制器執行時為了定位ROM中的資料,其實每個8位儲存單元都有一個固定的“地址”,通常用16進數表示:例如對於一個所謂4K的ROM,地址從0000H到0FFFH,(即是從0000,0001…4095),微控制器執行時從哪個地址取資料,完全由程式本身決定,並不要我們干預。記住,給微控制器一通電,它經過一個短暫的復位過程,立即轉向ROM的最低地址0000H,在這裡面放置的往往是一條“跳轉”指令,它從這裡一步跳到另一個地址:程式的真正起始地址,例如51機的0080H.難道ROM中就只有指令不能來點別的?ROM是程式儲存器,除了指令外還包括執行程式必須的某些固定資料。假如,我們要求在微控制器的某口上輸出00H到FFH(255)按正弦半波變化的數值,每秒10000次,那如果硬要它按照公式一個個計算,對於它來說未免力不從心,可是我們可以把預先計算好的數值存入ROM中,到時候直接取出。

      提到資料儲存器,它其實是個可以隨時存取資料的一塊儲存器,也就是可以讀(取)也可以寫(存)的儲存器,簡稱RAM.現在的微控制器裡面使用的RAM屬於靜態RAM或SRAM,這個和電腦用的記憶體條有所不同,只要你把資料寫入SRAM後,只要不斷電,或者不清除掉,這個資料就一直儲存在那裡,電腦是用的動態RAM,要不斷給它加重新整理脈衝才能儲存資料。因為微控制器處理的資訊量比電腦小很多,所以它帶的RAM也比較少:從完全不帶、帶128、256、……1K、2K到4K,比ROM少多了。因為實際上RAM只是作為資料臨時存放的地方,除非進行影象處理需要存放大量的資料外,一般對於執行較簡單任務的微控制器,有這麼多也夠用,如果實在不夠用也只能採取外加SRAM如6116、6264等等來擴充套件。為了對RAM單元存取8位二進數,當然也的和ROM一樣用“地址”來標示它的具體位置假如某微控制器有1K(1024)RAM,它的地址也是從0000到1024,或16進數的0000H到03FFH可見和ROM的地址是一樣的,不會混淆不清?不會,因為讀ROM是由微控制器的程式指標或轉移指令或查表指令進行,而這些指令是不會進入RAM區的,讀寫RAM是另外的資料傳送指令,也不會進入ROM區,這點也是和電腦不同之處,後者程式和資料都在記憶體條裡面,地址不同,如果竄位了就會造成不可預見後果。微控制器的這種儲存器結構也稱為哈佛結構。

      在這裡本文中要說到的RAM,其在微控制器裡的用途主要是存放臨時資料,例如用微控制器測溫,每秒測1次,顯示1分鐘的平均值(1分鐘更新一次);我們先透過感測器,放大電路,A/D轉換,把溫度這個模擬量轉變為成比例的二進數,然後每秒鐘1次把數字量透過輸入口順序存入到微控制器的RAM中,然後對他們進行兩兩求和再平均的計算(題外話:要微控制器進行“除法”運算比較麻煩,例外的是除以2,4,8……卻非常簡單。運用“右移”指令1、2、3次便可)最後的數值顯示出來,然後把這60個儲存單元統統寫0清除舊資料,下次又如此這般地迴圈進行。另外在微控制器裡面還有若干暫存器,數量不多但是作用很大,除了暫存資料,還可以交換、加工、傳遞等等,以及隨時紀錄微控制器當前處於什麼狀態,輸入輸出口,也是作為特殊功能的暫存器存在,具體各有不同,就不是隨便說說可以搞清楚的,要看有關書籍了。

  • 3 # 喵喵學習

    第一 你為什麼說c語言的靈魂在於指標,這個評價的標準是什麼。

    前面有人說微控制器靈魂是暫存器和儲存器,但是這些東西不是獨特的。我認為的微控制器的靈魂在於對IO口的控制。微控制器就是微控制器,透過控制Pin管腳達到控制外圍電路的目的。無論多複雜的系統,歸根結底都是在控制IO口。

  • 4 # 和不同

    指標可以認為是C語言的“一招鮮”,是區別於其它大部分語言的特性。

    微控制器區別於其它SoC,或者獨立CPU的特性是什麼呢?

    個人認為是儲存器內建,具體來說:

    RAM內建

    ROM/FLASH內建

    有時候還要加上晶振內建。

    當這兩種儲存器同時內建時,微控制器的外部依賴性極小,硬體設計也變得簡單。

    能讓開發人員輕鬆設計和製造出可用的電路板和可用的系統,才是微控制器超越其它系統的“一招鮮”。

  • 5 # 大學生程式設計指南

    從事嵌入式開發十幾年,對於C語言這門程式語言還算熟悉。C語言的指標是靈魂這是毋容置疑的,因為指標的存在讓C語言這門程式語言增加了非常多的靈性,但這其中必須要搞清楚的一個道理,語言的學習在於實踐,實踐的前提是理解但對於初學者來講單純意義上的理解概念也是十分困難的事情,真正能夠讓自己的程式設計知識學起來更加的順暢需要理解的基礎上實踐,實踐完了再回歸昇華理論,實踐最快的方式就是在工作中做實際的專案,早期程式設計企業要求相對低一些,現在很多企業對於程式設計師都是要求有經驗,所謂的經驗就是專案實戰。

    C語言單純的理解語法其實不難,很多人覺得C語言語法學起來非常簡單,有些悟性好的人對於指標的理解起來也覺得不是很難,但是真正掌握C語言還是要在專案中尋找其內涵,C語言指標對於真正意義上的掌握者就是一把利器的存在,對於不熟悉者就是一種災難的存在,因為工作的關係現有公司的嵌入式的研發團隊大部分是以應屆生為主,所以在搭建框架的時候對於指標還是避免少用為主,在這些初學者的基本功上來之後,再去用指標重構程式碼,這樣再去重構程式碼的時候就會有深刻的感覺。指標是C語言的靈魂不假但不是每個人都能真正意義上的理解到位, 需要經歷專案的實戰才能真正的感受深刻。

    在平時的開發過程中涉及到微控制器的開發也是非常多,微控制器學習的基礎也是C語言,每款微控制器對應不同的暫存器的型別,掌握一款微控制器需要對其暫存器的配置有了解才能真正意義上的驅動起來,微控制器應用的場景在生活中也是無處不在,微控制器開發昇華到一定層面就是嵌入式開發了,微控制器對於開發功能相對單一有著自己非常獨特的優勢,但是在對複雜的功能特別是應用場景複雜多變用嵌入式的就會多起來,微控制器開發在掌握C語言的基礎之後,熟悉了基本的暫存器操作之後,基本的開發流程就屬於狀態機的方式,事件觸發採用中斷方式,整體來講開發邏輯還是相對簡單。

    在解決複雜的邏輯的時候,微控制器需要耗費精力就會比較大,在嵌入式裡面由於有作業系統存在特別是執行緒概念的存在能夠解決微控制器裡面很多不能解決的問題,所以微控制器程式設計昇華到一定層面就是涉足到嵌入式行業了,很多在微控制器領域做了多年的人就順便去參與到嵌入式開發了。微控制器程式設計套路就是在初期熟悉的時候覺得困難,熟悉了常見的套路之後發現微控制器真正意義上靈魂在於C語言。

  • 6 # 聽雨7219

    微控制器的靈魂或特別之處就來自於“單片”,在這個單晶片上,集成了眾多的功能模組,使得微控制器的價效比高到離譜。例如,有些低端的微控制器只要兩、三毛錢,和一個標準4000系列的CMOS整合塊相仿。

    功能多,價效比高是微控制器的特點,是它的靈魂,也是它的生存之道。否則,你能想像把CPU、記憶體條、硬碟、BIOS塊、南北橋,再加上AD、DA轉換器塞進電磁爐或豆漿機裡是什麼樣子嗎?

  • 7 # 火山口

    對於C語言的靈魂在於指標這個觀點,個人持保留意見。因為指標操作是所有CPU的天賦技能,用匯編也必須用指標啊。

    指標,其實就是在一塊記憶體空間(變數)中儲存另一個記憶體空間的地址碼。所有的CPU執行,都離不開指標。指標的應用,其實就是對記憶體地址的各種操作。任何一次c函式呼叫,都涉及指標。在彙編層面也是一樣的,彙編裡管函式叫子程式。每一次呼叫子程式,都意味著一次對地址的跳轉操作。

    所以,指標並不是C的特徵。

    至於微控制器的靈魂,個人認為在於完全掌控。如果你是用匯編寫微控制器,你會發現微控制器的每一步動作都是由你來設計和控制的。這在高階語言平臺上,是絕對不可能的故事。習大大說了,做技術就要做到自主可控,而微控制器,是很最容易做到這一點的操作平臺。

    目前對微控制器的應用程式設計,分兩大流派

    傳統的模式A:初始化+死迴圈+硬體中斷。

    近年來比較火的模式B:即在作業系統下,透過各種回撥函式做嵌入式程式設計。

    模式A

    優點:程式的可靠性好,靈活性、可控性高,只要你有足夠的技術,可以很輕鬆的讓實時性與可靠性等效能表現優於模式B。

    缺點:技術門檻要高於模式B。尤其在很多種外設佔用中斷資源時,你需要很小心的設計實施各種外設中斷的優先權。同時,對各種外設及通訊應用方面的庫資源較少,如果碰上比較複雜的應用,就要拼真功夫(各種演算法原理底蘊)了。

    模式B

    優點:開發資源豐富,入門門檻比較低。開發週期短,用起來很方便

    缺點:靈活性差,程式可靠性可控性差。因為很多黑箱的存在,一旦遇見問題,很難定位和解決。

  • 8 # 散居獵人

    微控制器沒有靈魂,更多關注暫存器和片上資源就行了。

    C語言靈魂也不是指標。指向某個記憶體地址的變數就是指標,計算機儲存器天然特性,怎麼就成了靈魂?

    各個語法要素都有存在價值。結構,陣列,傳地址,遞迴,庫函式,系統呼叫,都是基本內容。

    如果非要選個做靈魂,系統呼叫才是首選。比如windows API的引用。

  • 9 # 搖椅小琦

    微控制器的靈魂在bootload,或者再講透一點是處理器晶片,寫這種軟體其實很簡單,一般不涉及什麼複雜的演算法,太複雜就不可能搬到微控制器上,但是你需要看懂晶片手冊,暫存器怎麼配置的,地址線怎麼譯碼的,中斷異常怎麼管理的,綜合起來就是一個bootload

  • 10 # 光明右使8787

    微控制器的靈魂當然是暫存器,看看DATASHEET,整篇都是對寄存的使用說明。掌握了暫存器就能讓微控制器做任何事。

  • 11 # 請叫我碼王

    我認為c語音靈魂是指標和結構體整合,微控制器的靈魂應該是對應微控制器的指令集。。因為除外設以外,微控制器所有硬體都是為了實現和服務指令集正常執行。

  • 12 # 風吹6700

    中斷,軟中斷與硬中斷,一切任務由中斷引發透過棧交換任務資料。任務完成則退出所有佔用資源。這樣,你的程式碼就能生生不息。

  • 中秋節和大豐收的關聯?
  • 在動漫《火影忍者》中,鼬一直是很多人喜歡的人物,那麼大家都喜歡鼬神的哪一面呢?