物联网操作系统Hello China V1.76(PC串口版)版本发布
作為向ARM平臺移植的基線版本,經(jīng)過三個多月的努力,Hello China V1.76終于完成并發(fā)布。相對原來發(fā)布的V1.75版本,該版本主要做了如下修改:
徹底去掉了原來版本源代碼中的C++特性,采用純C語言實現(xiàn)
V1.75以前的版本,不論是內(nèi)核還是GUI/網(wǎng)絡(luò)等外圍模塊,都是采用C++語言編寫的。雖然僅僅使用了諸如函數(shù)名重載/自定義對象類型等初級特性,但是在遷移到其它非VC開發(fā)環(huán)境的時候,發(fā)現(xiàn)還是困難重重。于是在V1.76版本的實現(xiàn)中,全部去掉了C++特性,完全采用純C語言實現(xiàn)。
這樣修改之后,順利移植到MDK/GCC等開發(fā)環(huán)境上。由此也事實上證明,用C++語言實現(xiàn)操作系統(tǒng)的內(nèi)核,還是有難度的。
增加了串口驅(qū)動程序及內(nèi)置的基于串口的shell
原來版本雖然也具備串口通信功能,但串口驅(qū)動并未納入Hello China的驅(qū)動程序框架。在V1.76內(nèi)核的實現(xiàn)中,把串口作為基礎(chǔ)的調(diào)試接口,為之編寫了完整的驅(qū)動程序,并納入統(tǒng)一的驅(qū)動程序框架。這樣,一臺運行Hello China的計算機,就無需有物理屏幕和鍵盤了,可以由另外一臺計算機通過串口進行操作。比如,在我的老舊的DELL電腦上運行Hello China,在另一臺上網(wǎng)本上運行超級終端,就可操作DELL計算機了。前提是,使用交叉串口線,把DELL計算機和上網(wǎng)本連接起來,同時設(shè)置串口波特率為9600,無奇偶校驗,8位數(shù)據(jù)位,一個停止位,即最常用的串口默認(rèn)設(shè)置。由于Hello China V1.76版尚未加入USB驅(qū)動程序,因此必須具備物理串口。
下圖是運行Hello China V1.75的DELL筆記本,當(dāng)然,如果有屏幕和鍵盤,也可直接通過計算機自己的鍵盤來操作Hello China。
?
下圖是運行在另外一臺筆記本電腦上的超級終端軟件。絕大部分通過物理鍵盤和顯示器能夠完成的操作,通過超級終端都能完成。一些超級終端無法支持的按鍵輸入,比如“CTRL + ALT + DELETE”,就無法處理了。
統(tǒng)一了設(shè)備訪問接口
應(yīng)用程序可通過訪問文件的接口,來訪問任何驅(qū)動程序。比如,用戶可以采用下列代碼來直接訪問串口設(shè)備:
?
???????? #defineTARGET_FILE_NAME “\\\\.\\COM1”
hCom1 = IOManager.CreateFile(
?????????????????? (__COMMON_OBJECT*)&IOManager,
?????????????????? TARGET_FILE_NAME,
?????????????????? 0,
?????????????????? 0,
?????????????????? NULL);
???????? if(NULL== hCom1)
???????? {
?????????????????? PrintLine("ComDebug: Can not open COM1 interface.");
?????????????????? goto__TERMINAL;
???????? }
???????? else
???????? {
?????????????????? PrintLine("ComDebug:Open COM1 interface successfully.");
?????????????????? if(IOManager.WriteFile((__COMMON_OBJECT*)&IOManager,
??????????????????????????? hCom1,
??????????????????????????? strlen(pData),
??????????????????????????? pData,
??????????????????????????? &dwWriteSize))
?????????????????? {
??????????????????????????? PrintLine("Writedata to COM1 interface successfully.");
?????????????????? }
?????????????????? else
?????????????????? {
??????????????????????????? PrintLine("Cannot write data to COM1 interface.");
?????????????????? }
?????????????????? PrintLine("ComDebug:Try to read data from COM interface...");
?????????????????? if(!IOManager.ReadFile((__COMMON_OBJECT*)&IOManager,
??????????????????????????? hCom1,
??????????????????????????? 1,
??????????????????????????? (LPVOID)&buff[0],
??????????????????????????? NULL))
?????????????????? {
??????????????????????????? PrintLine("Cannot read COM interface.");
?????????????????? }
?????????????????? else
?????????????????? {
??????????????????????????? PrintLine("ReadCOM interface sucessfully.");
?????????????????? }
???????? }
?
訪問串口的代碼與訪問普通文件的代碼一樣。只要把上述代碼中的文件名,修改為一個普通文件,上述代碼就完成了普通文件的讀寫功能。
?
定義了統(tǒng)一的消息輸入框架
不論是鍵盤輸入,還是通過串口的輸入,甚至是其它具備主動輸入能力的輸入,都被統(tǒng)一處理,遵循統(tǒng)一的消息傳遞路徑,把消息傳遞給應(yīng)用程序或shell。這樣的好處是,不論我的操作方式是什么,是串口也好,是鍵盤和鼠標(biāo)也好,甚至是基于網(wǎng)絡(luò)的telnet,應(yīng)用程序統(tǒng)統(tǒng)不用關(guān)心,只要統(tǒng)一調(diào)用GetMessage來處理消息隊列中的消息即可。這樣就最大程度的保證了應(yīng)用程序的可移植性。
?
其他一些改進
除此之外,還做了一些其它的修改和改進,比如代碼的規(guī)范性,注釋,修改了幾個導(dǎo)致內(nèi)存泄漏的地方,進一步優(yōu)化了程序框架,使得整個內(nèi)核可配置可裁剪,等等。
?
V1.76版已成功移植到MDK編譯開發(fā)環(huán)境,順利通過編譯鏈接。但由于目標(biāo)硬件尚未定義好,故尚未完成移植。接下來的工作將分兩步進行(同步):
第一步:增加GPRS/3G等無線網(wǎng)絡(luò)支持功能和Zigbee通信功能,基于PC構(gòu)筑一個智能家居控制系統(tǒng);
第二步:啟動向STM32平臺上的移植。
V1.76版的內(nèi)核源代碼(其他模塊,比如GUI等,無變化),可從下列鏈接下載:
http://download.csdn.net/detail/hellochina15/6399069
轉(zhuǎn)載于:https://www.cnblogs.com/fengju/p/6174206.html
總結(jié)
以上是生活随笔為你收集整理的物联网操作系统Hello China V1.76(PC串口版)版本发布的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何:添加缺少的 ContentPlac
- 下一篇: java信息管理系统总结_java实现科