找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 2204|回復: 1
打印 上一主題 下一主題
收起左側

單片機功能如何通過程序表達出來

[復制鏈接]
跳轉到指定樓層
樓主
ID:109892 發(fā)表于 2016-5-12 20:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請問各位大神我想知道單片機的功能如何通過程序表達出來,主要是如何設計函數結構把功能表達出來、
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:120375 發(fā)表于 2016-5-12 20:51 | 只看該作者
作者:肖木木
鏈接:http://www.zhihu.com/question/31013098/answer/52255132
來源:知乎
著作權歸作者所有。商業(yè)轉載請聯系作者獲得授權,非商業(yè)轉載請注明出處。


任何計算機系統都是軟件和硬件的結合體,如果只有硬件而沒有軟件,則硬件是沒有靈魂的軀殼;如果只有軟件沒有硬件,則軟件就是一堆無用的字符。在底層硬件的基礎上,操作系統覆蓋一層驅動,屏蔽底層硬件的操作,通過特定的軟件接口去操作底層硬件,用戶在用戶空間可以很容易的把軟件設計目標放在策略與需求上,可以很方便的屏蔽掉底層實現,從而很好的完成客戶功能需求。計算機系統是軟件和硬件的結合體。而軟件又分為應用層軟件和驅動層軟件。驅動層軟件是應用層軟件和底層硬件的紐帶。通過驅動層軟件實現對底層硬件屏蔽。

在裸機時代,比如單片機系統,程序員往往是直接操作硬件寄存器,直接設置硬件。而在Linux操作系統中,硬件驅動程序中實現對硬件直接操作,而用戶空間,通過通用的系統調用接口,實現對硬件操作,應用程序沒有直接操作底層設備,通過posix標準,應用程序的系統調用往往是被規(guī)定和限值,用戶只能通過規(guī)定的接口實現對底層硬件的操作,導致了應用程序在類UINIX操作系統具有非常好的可移植性。


圖2.1 直接操作硬件程序

上圖2.1 是裸機時代,應用程序和硬件操作糅合在一起,應用程序和硬件操作高度耦合的框圖,上述代碼一般很難有良好的代碼互用和移植性。往往從一個平臺移植到另一個平臺,甚至是同一平臺不同硬件配置都要求很大的代碼改動,另外從應用層來說,應用與驅動高度耦合,應用程序也幾乎難以移植,甚至說是沒有應用程序概念,原因在于應用與驅動的糾纏不清。


圖2.2 無操作系統應用程序和設備驅動程序關系

上圖2.2所示,良好的裸機代碼框架,設備驅動層和應用層之間有良好的分層思想,用戶可以較好的實現策略和需求,例如:客戶要求實現流水燈程序,程序員在底層機制實現(硬件操作)的基礎下,可以充分在用戶應用程序中把主要精力方法流水燈的實現,即策略。但是在良好的裸機程序設計,代碼移植性可能從一個平臺移植到另外一平臺只需要修改少量的底層驅動,例如:LED_ON()的實現。但是在用戶空間,沒有系統調用概念,函數接口千差萬別。應用程序移植性差。


圖2.3 Linux系統調用框圖

操作系統中,需求決定應用程序,通過系統調用,調用底層驅動,此外,在驅動程序中,把一部分公用的驅動接口抽象出來,如此,程序員只需修改很少量的驅動資源,形成特定的驅動框架。導致用戶只需添加專用的硬件屬性作為平臺資源,在內核中獲取資源,大大解放了設備驅動開發(fā),提高了設備驅動的通用型。在用戶空間,由于遵循posix標準,類UNIX操作系統中,所有操作接口基本一樣,從而方便了應用程序的移植,應用程序幾乎不要做修改。如圖2.3所示。

Linux操作系統對于所有的硬件都是當做一個文件來操作:一切設備皆文件。Linux設備文件一般分為字符設備,塊設備,網絡設備。在Linux系統中,除了網絡設備之外,所有的設備都被映射到Linux的文件系統中。如圖2.4所示。


圖2.4 Linux操作系統與應用程序關系

--------------------------------------------------------------------------------------------------------------------------------------------

講講51,linux,安卓之間的差別。先申明一下,我是實際工作中沒有使用過單片機,我使用單片機僅僅是用來參加全國電子設計大賽。工作主要在android driver這一塊。我們這一行很多人說單片機是有瓶頸的,我也不是很清楚。但是實話實說,這鳥東西太簡單了,沒啥技術含量的,你要之后android的龐大。

歡迎點贊。后面會說說android,linux,51,32單片機之間的聯系與學習方法,雖然我也是菜鳥,如果你現在看不懂也沒關系,有個映像就行。以后就有方向去學習了。想當初我真的是一個人孤孤學習linux

===============================================================

補充一個:單片機要點亮一個led等,同樣在安卓上你點亮一個燈也要驅動的,不然怎么亮呢,只是我們只看到了app。 背后驅動,怎么實現的,安卓架構,跟單片機有啥區(qū)別,相同的地方。其實手機arm芯片跟單片機都是嵌入式微處理器,單片機叫做微控制器。高通,mtk啥的也是嵌入式微處理器~都是一樣的~但是難度你想想看就知道了。


51單片機大家都知道了,裸機,直接操作硬件,直觀,簡單,沒有框架,沒有系統。

STM32,可以學習一下RTOS了,實時的小系統,ucos II等等許多實時系統,STM32+ucos II這種組合學習方式還是挺好的。STM32比較難的在我印象中一個是時鐘樹,因為我們從51,沒有時鐘樹的概念12M晶振,時鐘不要你配置,而比較新的ARM框架,外設都是有時鐘的�?赡軇倓偨佑|概念不是很清楚,但是也是很簡單的。另外一個是定時器,什么輸入捕獲模式,定時器模式,編碼器模式。。。。。強大的多,比起51。總的來說還是簡單的。因為是沒有框架的原因,代碼量真的很少。你要知道,MTK android 5.1 所有的東西加起來 10G多,包括bootloader,linux kernel,android framework ,定制的部分。等等。我們接觸的就那些目錄,當你去看C++,java代碼時,你就知道面向過程的代碼真的很容易看�?赡苡行┡笥巡恢繿ndroid的框架,以及android 與linux之間的關系,以及l(fā)inux驅動與裸機的關系,聯系與區(qū)別。你現在只要知道linux驅動比較大,android框架更大。單片機簡單。單片機一般是C語言,而android一般涉及三種語言:底層linux內核C,中間的JNI層是C++,framework和app是java。


學過51單片機的朋友知道,我們要點亮一個LED燈,是這樣子的P0 = xxx ,我們就點亮了一個,好。一燒寫,好,燈亮了。linux,上我們要亮一個燈,有點難了,有了操作系統,沒那么容易了。一般人搞不定了。好,到android,更加難了。但是你想一想手機芯片也是ARM。亮燈這種肯定都是CPU的管腳操作。上了系統了,難了,點個燈都費勁的。本質上是一樣的。很多人都知道單片機有瓶頸的。原因是會點硬件,會點C,輕輕松松就可以亮燈的。入門容易。



我舉一個小的例子說明一下51,linux,android三者的之間的差別。你就知道是啥區(qū)別。下面是51單片機:

大概是這樣:
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表