我如果想寫個程序用這個程序去控制一些硬體,具體步驟是什麼,軟體是如何通過什麼介面去控制一個硬體的?

電腦上寫軟體可以直接運行,但它如何去嵌入到硬體里,在硬體里起作用,而不是在計算機里運行,具體通過什麼東西什麼步驟可以做到軟體控制硬體,比如控制燈的開關啦什麼的


1、看懂硬體原理圖,讀懂CPU手冊

2、根據要操作的硬體和CPU之間的介面,在CPU手冊中找到相關操作寄存器。

3、按正確的順序讀寫相關寄存器


其實用電腦也可以控制這些所謂的硬體。只是如果專門用來控制一個開關是不是有點浪費呢?

首先,你說的電腦之外的能控制硬體的設備,就統一稱為嵌入式設備吧。其實就是為了特定功能定製的一個系統而已,舉個栗子:手機其實也是一個嵌入式設備,但是手機不需要滑鼠,於是在定製手機的時候就把滑鼠給去掉了。如果你想用滑鼠,在定製的時候也是可以加上的。

不過就你說的控制燈開關這些暫時也用不到像手機那麼複雜的系統,一個最簡單的51單片機就可以搞定了。

其實這裡說的不管是計算機還是嵌入式設備都是通過CPU去控制的。這裡就不細說了,就放一張圖吧。圖中的ARM7 TDMI S3C44BOX 就是一個CPU,其他的都是可定製的可選擇的設備。外圍設備就要根據你自己需求去定製了。不多做介紹。大致了解一下就OK。如果需要以後肯定需要深入學習的。

就說一下如何在嵌入式系統裡面跑應用程序

這裡就要分:帶操作系統與裸機程序了

帶操作系統的話就是將應用程序給移植到嵌入式設備裡面去,如何移植,就是在編譯應用程序的時候選擇相關平台的編譯器將源碼編譯成可以在目標平台上執行的可以執行程序。其實這個應用程序跟計算機上面的程序沒有多少差別,只是編譯成了在指定的設備上運營的可執行程序而已。

不帶操作系統的叫做裸機,就是直接跑一個專門的應用程序,因為這個時候你的任務比較簡單就不需要使用操作系統去給你做任務調度,內存管理之類的。裸機你可以參考一下單片機程序是如何開發的。

其實如果真的對概念不理解的話,可以去玩一玩一些開源硬體:

Arduino 或者Raspberry Pi 。這兩個入門非常簡單的,而且資料非常豐富齊全。而且各種極客做的好玩的東西,都是有傻瓜似的教程的。


去玩arduino


本質上就是寫幾個寄存器而已。而 c 就是最簡單粗暴的方法了。


謝邀,簡單的硬體你可以理解為開關模式,通電就動,不通電就不動,複雜點的就是多開關組合而成的,再複雜的你就理解其內置了小型電腦,裡面有個簡單的操作系統,可以執行一些便攜好的程序,這樣理解就可以了。


在系統級,軟體通過驅動去控制硬體。至於你說的嵌入式,如果在系統層面,其主要是使用的編譯器不同,不同的編譯器最終編譯成不同架構硬體可以正確識別的機器語言。

個人見解,知識比較淺薄,望指點。


都說陌陌上的妹子,知乎上的段子,我來發我這人生第一帖吧!

硬體就像寫輪眼,軟體就是查克拉,沒有查克拉,再流弊的眼睛也是白瞎。

有三勾玉了,有萬花筒了,天照月讀,須佐能乎放出來了,這個時候,寫輪眼你算是掌握了。

懂I/O了,懂定時器中斷了,會配置寄存器了,各種通信外設都玩過了,這個時候你就懂怎麼操硬體了。


軟體控制硬體無非是通過兩種途徑:

一,有OS的平台上通過系統介面進行對硬體的控制

二,無OS的平台直接通過讀寫寄存器對硬體進行控制。

由於是做軟體的,主要說第一種方式,眾所周知,操作系統是對硬體進行控制,對資源進行合理調度的計算機硬體管家,現代的操作系統為了維護系統的安全性對上層屏蔽了直接操作硬體的介面,所以,想對硬體進行控制,只能通過操作系統請求。

在Linux系統中,一切設備都抽象成了文件,這就極大方便我們對硬體資源的訪問,以讀硬碟為例,我們在用戶層調用庫函數read,對文件進行讀操作。在這個庫函數內部要調用系統調用進行系統級操作,使CPU運行環境從用戶態潛入到內核態,系統調用是中斷號為0X80的軟體中斷,中斷後CPU根據寄存器傳入的系統調用號執行相應的中斷處理,這裡的中斷處理又會調用硬碟的驅動程序對硬碟進行數據讀寫,而硬碟的驅動程序又是通過對硬碟控制器這個硬體晶元的寄存器進行讀寫從而完成控制和數據交換的。

總之,和計算機相關的設計大體都是採用分層設計的思想,每一層對上層提供服務介面,屏蔽實現細節。


1:我們可以通過cpu的io口的高低電平控制燈的亮滅。(cpu引腳負載能力很弱,需要放大電路,這裡先不考慮)

2:高低電平對應該io口映射內存空間的0/1bit位。

3:直接操作對應的內存就相當於操作對應的io口啦

舉個栗子(大概知道什麼意思就行了):

#define GPIODAT (*(volatile unsigned long *)0x50000000)

GPIODAT | = (1&<&<3) ;

將該組引腳的第三位設為高電平


貼一下我的畢業設計,雖然挫


謝邀。

如果想知道原理,建議去看編碼 (豆瓣)。


郭天祥十天單片機


硬體只是一個個只能執行固定動作的器件,寫軟體就是給這些硬體觸發條件。


找個單片機學習學習就行了。基本能滿足你的慾望。


不知道你的水平也不知道該怎麼說好了 雖然我也是只是個初學者哈哈 步驟的話如許鎮一樣 需要交叉編譯 然後下載到晶元上(下載的方法又有排說了) 而軟體是怎麼控制硬體的 其實學過單片機的話也大概知道需要配置寄存器,裸碼的話好辦,只要知道寄存器的地址啊寄存器的功能啊然後讀寫就好了,而如果是帶操作系統的話,那就複雜咯,應用層需要通過系統調用open設備文件,同時你還得寫驅動程序(又得好好讀讀設備驅動的知識了哎好煩)總之寫的就不止一個程序這麼簡單咯~但根本的東西還是根據配置寄存器編寫程序最後控制引腳的輸出輸入啦。不知我有沒有說錯呀,我自學驅動幾個月啦苦啊 哭~


難道不是arduino大法好嗎?


是單純用電腦控制硬體呢?還是把電腦寫的程序移植到硬體?單純前著主要是同跟硬體通訊的方式控制的,去給兩者加藍牙、rs232、wifi等,比較電腦用wifi發送信號1給硬體,硬體自己用程序判斷如果接受的是1就代表控制燈,下一個發送的信號就可以為是開燈還是關燈,電腦上的軟體是把跟人的互動轉化為信號通過各種方式發送出去,硬體程序做的把接受的信號按照自己約定好的協議解析成硬體要乾的事情。如果是後者就純粹用電腦軟體把控制硬體的程序翻譯為硬體能識別的語言,然後把翻譯好的東西放進硬體里去。


這個不是典型的操作硬體嘛,給你的建議是看看C語言,可以很好的操作系統硬體!


推薦閱讀:

為什麼很多人都討厭 360?
如何客觀公正地評價PHP語言?
有哪些實用的電腦軟體值得推薦?
ADSafe或類似的廣告屏蔽軟體安全嗎?
Windows 平台有哪些值得推薦的常用軟體?

TAG:軟體 | 嵌入式系統 | 嵌入式開發 | 硬體開發 |