A. 常見嵌入式系統有哪些
一個嵌入式系統裝置一般都由嵌入式計算機系統和執行裝置組成,嵌入式計算機系統是整個嵌入式系統的核心,由硬體層、中間層、系統軟體層和應用軟體層組成。執行裝置也稱為被控對象,它可以接受嵌入式計算機系統發出的控制命令,執行所規定的操作或任務。執行裝置可以很簡單,如手機上的一個微小型的電機,當手機處於震動接收狀態時打開;也可以很復雜,如SONY智能機器狗,上面集成了多個微小型控制電機和多種感測器,從而可以執行各種復雜的動作和感受各種狀態信息。
硬體層
硬體層中包含嵌入式微處理器、存儲器(SDRAM、ROM、Flash等)、通用設備介面和I/O介面(A/D、D/A、I/O等)。在一片嵌入式處理器基礎上添加電源電路、時鍾電路和存儲器電路,就構成了一個嵌入式核心控制模塊。其中操作系統和應用程序都可以固化在ROM中。
(1)嵌入式微處理器
嵌入式系統硬體層的核心是嵌入式微處理器,嵌入式微處理器與通用CPU最大的不同在於嵌入式微處理器大多工作在為特定用戶群所專用設計的系統中,它將通用CPU許多由板卡完成的任務集成在晶元內部,從而有利於嵌入式系統在設計時趨於小型化,同時還具有很高的效率和可靠性。
嵌入式微處理器的體系結構可以採用馮·諾依曼體系或哈佛體系結構;指令系統可以選用精簡指令系統(RecedInstructionSet Computer,RISC)和復雜指令系統CISC(Complex Instruction Set Computer,CISC)。RISC計算機在通道中只包含最有用的指令,確保數據通道快速執行每一條指令,從而提高了執行效率並使CPU硬體結構設計變得更為簡單。
嵌入式微處理器有各種不同的體系,即使在同一體系中也可能具有不同的時鍾頻率和數據匯流排寬度,或集成了不同的外設和介面。據不完全統計,全世界嵌入式微處理器已經超過1000多種,體系結構有30多個系列,其中主流的體系有ARM、MIPS、PowerPC、X86和SH等。但與全球PC市場不同的是,沒有一種嵌入式微處理器可以主導市場,僅以32位的產品而言,就有100種以上的嵌入式微處理器。嵌入式微處理器的選擇是根據具體的應用而決定的。
(2)存儲器
嵌入式系統需要存儲器來存放和執行代碼。嵌入式系統的存儲器包含Cache、主存和輔助存儲器。
1、Cache
Cache是一種容量小、速度快的存儲器陣列它位於主存和嵌入式微處理器內核之間,存放的是一段時間微處理器使用最多的程序代碼和數據。在需要進行數據讀取操作時,微處理器盡可能的從Cache中讀取數據,而不是從主存中讀取,這樣就大大改善了系統的性能,提高了微處理器和主存之間的數據傳輸速率。Cache的主要目標就是:減小存儲器(如主存和輔助存儲器)給微處理器內核造成的存儲器訪問瓶頸,使處理速度更快,實時性更強。
在嵌入式系統中Cache全部集成在嵌入式微處理器內,可分為數據Cache、指令Cache或混合Cache,Cache的大小依不同處理器而定。一般中高檔的嵌入式微處理器才會把Cache集成進去。
2、主存
主存是嵌入式微處理器能直接訪問的寄存器,用來存放系統和用戶的程序及數據。它可以位於微處理器的內部或外部,其容量為256KB~1GB,根據具體的應用而定,一般片內存儲器容量小,速度快,片外存儲器容量大。
B. 搞懂RTOS 需要哪些方面的知識儲備
1、集成在keil中,沒有所謂移植概念。針對任何MCU都可以一鍵添加(試想一下,如果你將來用的不是STM32,那麼移植OS是不是還是那麼容易);
2、佔用資源極小。大約5kB,而且針對cortex系列ARM官方優化,效率不言自明;
3、組件豐富。常用中間件USB/network/GUI/文件系統等,ARM官方已羨消經准備好,只需要在keil中一鍵添加,同樣沒有移植概念;
4、模擬非常方便。在keil的debug模式中,輕松查看任務的CPU、內存佔用,還有各任務的運行時間、運行狀態,各任務之間如何搶占,非常直觀,不需要像其他RTOS那樣調用專用的查看函數;
5、CMSIS RTOS是ARM現在熱推的物聯網操作系統mbedOS的基礎,搞懂這個RTOS API,mbedOS更容易上手,物聯網是大勢所趨,ARM的在這個浪潮中的地位眾所周知(軟銀收購ARM的核心原因),物聯網以後估計會產生大量的相關工作機會;
6、使用極簡單。再次提醒,CMSIS RTOS只是一套API,有興趣和派冊的可以去研究它封裝OS源碼,喚宏沒興趣的,看看API拿來就用;
7、!這點和freeRTOS一樣,比uc/oS更有潛力,不過freeRTOS是個人開源項目,後續升級維護缺乏商業模式,而ARM剛從軟銀那裡搞來大筆錢,估計後續發展推廣更為強勁,話說回來,如果freeRTOS真的非常優秀,ARM也可以對它進行封裝。
C. 為什麼要用CMSIS RTOS
1、集成在keil中,沒有所謂移植概念。針對任何MCU都可以一鍵添加(試想一下,如果你將來用的不是STM32,那麼移植OS是不是還是那麼容易);
2、佔用資源極小。大約5kB,而且針對cortex系列ARM官方優化,效率不言自明;
3、組件豐富。常用中間件USB/network/GUI/文件系統等,ARM官方已經准備好,只需要在keil中一鍵添加,同樣沒有移植概念;
4、模擬非常方便。在keil的debug模式中,輕松查看任務的CPU、內存佔用,還有各任務的運行時間、運行狀態,各任務之間如何搶占,非常直觀,不需要像其他RTOS那樣調用專用的查看函數;羨消
5、CMSIS RTOS是ARM現在熱推的物聯網操作系統mbedOS的基礎,搞懂這個RTOS API,mbedOS更容易上手,物聯網是大勢所趨,ARM的在這個浪潮中的地位眾所周知(軟銀收購ARM的核心原因),物聯網以後估計會產生大量的相關工作機會;
6、使用極簡單。再次提醒,CMSIS RTOS只是一套API,有興趣的可以去研究它封裝OS源碼,沒興趣的,看看API拿來就用;
7、免費!這點和freeRTOS一樣,比uc/oS更有潛力,不過freeRTOS是個人開源項目,後續升級維護缺乏商業模式,而ARM剛從軟銀那裡搞來大筆錢,估計後續喚宏發展推廣更為強勁,話說回來,如果freeRTOS真的非常優秀,ARM也可以對它進行封裝和派冊。
D. 阿里新發布的玄鐵910是晶元大腦,阿里的格局真的要比華為大嗎
不一定,這只是一塊明伍畢晶元而已,僅僅代表了阿里的一個發展方向,也許華為也在相關方面有研發,但是不被外界所知道而已,他們想低調一點,但是阿里作為一個資本家運作橘哪的一個企業,高調的宣布,可以積累大量的資本,可以更好的發展自己的企業,所以這兩者是不一樣的。
晶元基於RISC-V指令集設計,支持16核心,單核性能達到7.1Coremark/MHz,主頻2.5GHz,目前性能最好的RISC-V處理器。阿里計劃將在以後開源910的IP Core,全球開發者可不要任何的花費下載其中FPGA源碼,以助力該處理器架構的日後設計和發展。
E. 如何定義正在使用的通訊設備
LIBUSB是一款簡單好用的USB通訊開發庫,一般HID設備用該庫通訊能大大降低開發周期,使用如下,首先需要為設備安裝驅動
在libusb的bin目錄下有一個inf_wirzed.exe的文件,該文件是生成驅動所用,具體步驟可以網上網路,很是傻瓜式操作,安裝好驅動之後就可以使用其通訊函數了,
安裝好驅動之後的情坦巧況如下
使用visual studio開發,將lib_msvc目錄下的libusb.lib文件添加到工程目錄並將lusb0_usb.h文件加入工程,如下
之後在MFC工程中如下操作
OnInitDialog方叢虛法中調用usb_init函數,這是初始化函數庫的,每個工程需要而且僅僅需要初始化一次.
查找系統中全部USB的方法如下
usb_find_busses();
usb_find_devices();//重新尋找設備
for (bus = usb_get_busses(); bus; bus = bus->next)
{
for (dev = bus->devices; dev; dev = dev->next)
{
usbCount++;
deviceName.Empty();
handle = usb_open(dev);
usb_get_string_simple(handle,dev->descriptor.iProct,nameBuffer,128);
usb_close(handle);
pidBuffer[usbCount-1] = dev->descriptor.idProct;//枚舉所有設備
vidBuffer[usbCount-1] = dev->descriptor.idVendor;
pvnBuffer[usbCount-1] = dev->descriptor.bcdDevice;
deviceName.AppendFormat("%s",nameBuffer);
((CComboBox*)GetDlgItem(IDC_COMBO_USB_DEVICE_ENMU))->AddString(deviceName);
}
}
打開usb設備的方法如下
//現在遍歷全部設讓鄭鍵備,找到對應PID vid的設備打開
usb_find_busses();
usb_find_devices();//重新尋找設備
for (bus = usb_get_busses(); bus; bus = bus->next)
{
for (dev = bus->devices; dev; dev = dev->next)
{
if(dev->descriptor.idProct == myPid && dev->descriptor.idVendor)
{
//PID VID相同
usb_handle = usb_open(dev);
}
}
}
發送數據的方法
char sendBuffer[64] = {0};
CString sendString;
GetDlgItem(IDC_EDIT_USB_SEND_MESSAGE)->GetWindowText(sendString);
for(int i = 0; i < 64; i++)
{
if(i >= sendString.GetLength())sendBuffer[i] = 0;
else
{
sendBuffer[i] = sendString.GetAt(i);
}
}
usb_claim_interface(usb_handle, 0);//默認設備
usb_interrupt_write(usb_handle,0x01,sendBuffer,64,100);
usb_release_interface(usb_handle, 0);
接收數據的方法
char receiveBuffer[64] = {0};
CString receiveString;
int recvCount = 0;
usb_claim_interface(usb_handle, 0);//默認設備
recvCount = usb_interrupt_read(usb_handle,0x81,receiveBuffer,64,100);
usb_release_interface(usb_handle, 0);
if(recvCount > 0)
{
GetDlgItem(IDC_EDIT_USB_RECV_SHOW)->GetWindowText(receiveString);
for(int i = 0; i < recvCount; i++)
{
receiveString.AppendChar(receiveBuffer[i]);
}
GetDlgItem(IDC_EDIT_USB_RECV_SHOW)->SetWindowText(receiveString);
每次發送和接手之前需要調用usb_claim_interface將函數庫和操作系統關聯起來
有了這些基本方法,通訊應該就不成問題了
詳細代碼見鏈接
http://download.csdn.net/detail/dengrengong/8523587
使用LIBUSB實現和自定義通訊設備通訊--MFC代碼在末尾的更多相關文章
IOT設備通訊,MQTT物聯網協議,MQTTnet
一.IOT設備的特性 硬體能力差(存儲能力基本只有幾MB,CPU頻率低連使用HTTP請求都很奢侈) 系統千差萬別(Brillo,mbedOS,RIOT等) 如使用電池供電,電量消耗敏感 如果是小設備, ...
廠商自定義USB設備固件程序及特性
通過前面的學習,大家應該對USB固件程序結構有了比較深的認識,現在再來詳細說說固件里決定設備識別成廠商自定義USB設備的地方有哪些,或者說廠商自定義USB設備的固件特性有哪些. 之前不止一次說過學習U ...
廠商自定義USB設備類概述
USB協會將常用具有相同/相似功能的設備歸為一類,並制定了相關的設備類規范,這樣就能保障只要依照同樣的規范標准,即使不同的廠商開發的USB設備也可以使用同樣的驅動程序,而且操作系統中無須為每種設備提供 ...
java之旅(十四)——靜態同步函數的鎖是class對象,多線程的單例設計模式,死鎖,線程中的通訊以及通訊所帶來的安全隱患,等待喚醒機制
JAVA之旅(十四)--靜態同步函數的鎖是class對象,多線程的單例設計模式,死鎖,線程中的通訊以及通訊所帶來的安全隱患,等待喚醒機制 JAVA之旅,一路有你,加油! 一.靜態同步函數的鎖是clas ...
Windows Phone:自定義字體在xaml和代碼中使用
最近,我的小應用<認字>更新了一個能發聲的版本,朋友對Speech做讀音沒有興趣,反而對其中使用的楷體文字表示了興趣,也許Speech的文章比較多,這次我對這個自定義字體在xaml和代碼中 ...
C#自定義FTP訪問類的代碼
如下資料是關於C#自定義FTP訪問類的代碼,應該對各朋友有幫助. using System; using System.Collections.Generic; using System.Text; ...
springboot掃描自定義的servlet和filter代碼詳解_java - JAVA
文章來源:嗨學網 敏而好學論壇www.piaodoo.com 歡迎大家相互學習 這幾天使用spring boot編寫公司一個應用,在編寫了一個filter,用於指定編碼的filter,如下: /** ...
設備通訊——RS232
RS232的介面有兩種--一種公頭.一種母頭,兩種頭的引腳是有區別的 MAX232電路圖: 注意:串口通訊需要交叉接線.
安卓MonkeyRunner源碼分析之與android設備通訊方式
如前文<誰動了我的截圖?--Monkeyrunner takeSnapshot方法源碼跟蹤分析>所述,本文主要會嘗試描述android的自動化測試框架MonkeyRunner究竟是如何和目 ...
隨機推薦
織夢DEDECMS更新6月7日補丁後出現版權鏈接的刪除辦法
說最近網站底部多出了一個Power by DedeCms的超鏈接版權信息,但是該網友最近只是升級了0607更新補丁,其它的源代碼並沒有改動,而以前的文章頁面並沒有,看來是這次更新dedecms後才被加 ...
Converting between IEEE 754 and Float (Format related
The float can be converted to well known single-precision IEEE 754 number, why 754? It's the standar ...
HDU2199,HDU2899,HDU1969,HDU2141--(簡單二分)
二分是一種很有效的減少時間開銷的策略, 我覺得單列出二分專題有些不太合理, 二分應該作為一中優化方法來考慮 這幾道題都是簡單的使用了二分方法優化, 二分雖然看似很簡單, 但一不注意就會犯錯. 在寫二分 ...
java 隨機流
Example10_8.java import java.io.*; public class Example10_8 { public static void main(String args[]) ...
List<Map>去重排序
數據格式 [ { "id":"d3e8a9d6-e4c6-4dd8-a94f-07733d3c1b59", "parentId":" ...
MQ日常維護操作手冊
假設隊列管理器為QMgrName,以下所有使用QMgrName的地方您都可以替換成您維護的mq隊列管理器名稱. 一.MQ的啟動與停止 用root用戶啟/停需要root用戶包含在mqm組中. 1.MQ的 ...
jquery控制audio的播放與暫停
<audio id="audio" src='music.mp3'></audio> <script type="type/javascri ...
apt
今天單元測試看到巨長字元串被加了很多引號,想起以前可以用跳脫符斷行,試了不行,google說java7可以,我操. https://github.com/benelog/multiline/wiki/ ...
C# 經典入門12章-使用泛型類型-2
關於jdk環境變數配置成了1.6.0_39 32位jdk 的路徑 cmd中java -version卻還是顯示 64位或者其他jdk 路徑的解決方法
其實是c盤或者其他盤的 jdk 安裝的太多了,把其他的都卸載掉就行了