zoukankan      html  css  js  c++  java
  • 物联网操作系统Hello China V1.76(PC串口版)版本发布

    作为向ARM平台移植的基线版本,经过三个多月的努力,Hello China V1.76终于完成并发布。相对原来发布的V1.75版本,该版本主要做了如下修改:

    彻底去掉了原来版本源代码中的C++特性,采用纯C语言实现

    V1.75以前的版本,不论是内核还是GUI/网络等外围模块,都是采用C++语言编写的。虽然仅仅使用了诸如函数名重载/自定义对象类型等初级特性,但是在迁移到其它非VC开发环境的时候,发现还是困难重重。于是在V1.76版本的实现中,全部去掉了C++特性,完全采用纯C语言实现。

    这样修改之后,顺利移植到MDK/GCC等开发环境上。由此也事实上证明,用C++语言实现操作系统的内核,还是有难度的。

    增加了串口驱动程序及内置的基于串口的shell

    原来版本虽然也具备串口通信功能,但串口驱动并未纳入Hello China的驱动程序框架。在V1.76内核的实现中,把串口作为基础的调试接口,为之编写了完整的驱动程序,并纳入统一的驱动程序框架。这样,一台运行Hello China的计算机,就无需有物理屏幕和键盘了,可以由另外一台计算机通过串口进行操作。比如,在我的老旧的DELL电脑上运行Hello China,在另一台上网本上运行超级终端,就可操作DELL计算机了。前提是,使用交叉串口线,把DELL计算机和上网本连接起来,同时设置串口波特率为9600,无奇偶校验,8位数据位,一个停止位,即最常用的串口默认设置。由于Hello China V1.76版尚未加入USB驱动程序,因此必须具备物理串口。

    下图是运行Hello China V1.75的DELL笔记本,当然,如果有屏幕和键盘,也可直接通过计算机自己的键盘来操作Hello China。

     

    下图是运行在另外一台笔记本电脑上的超级终端软件。绝大部分通过物理键盘和显示器能够完成的操作,通过超级终端都能完成。一些超级终端无法支持的按键输入,比如“CTRL + ALT + DELETE”,就无法处理了。

    统一了设备访问接口

    应用程序可通过访问文件的接口,来访问任何驱动程序。比如,用户可以采用下列代码来直接访问串口设备:

             #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.");

                       }

             }

    访问串口的代码与访问普通文件的代码一样。只要把上述代码中的文件名,修改为一个普通文件,上述代码就完成了普通文件的读写功能。

    定义了统一的消息输入框架

    不论是键盘输入,还是通过串口的输入,甚至是其它具备主动输入能力的输入,都被统一处理,遵循统一的消息传递路径,把消息传递给应用程序或shell。这样的好处是,不论我的操作方式是什么,是串口也好,是键盘和鼠标也好,甚至是基于网络的telnet,应用程序统统不用关心,只要统一调用GetMessage来处理消息队列中的消息即可。这样就最大程度的保证了应用程序的可移植性。

    其他一些改进

    除此之外,还做了一些其它的修改和改进,比如代码的规范性,注释,修改了几个导致内存泄漏的地方,进一步优化了程序框架,使得整个内核可配置可裁剪,等等。

    V1.76版已成功移植到MDK编译开发环境,顺利通过编译链接。但由于目标硬件尚未定义好,故尚未完成移植。接下来的工作将分两步进行(同步):

    第一步:增加GPRS/3G等无线网络支持功能和Zigbee通信功能,基于PC构筑一个智能家居控制系统;

    第二步:启动向STM32平台上的移植。

    V1.76版的内核源代码(其他模块,比如GUI等,无变化),可从下列链接下载:

    http://download.csdn.net/detail/hellochina15/6399069


  • 相关阅读:
    BF算法和KMP算法
    Python课程笔记 (五)
    0268. Missing Number (E)
    0009. Palindrome Number (E)
    0008. String to Integer (atoi) (M)
    0213. House Robber II (M)
    0198. House Robber (E)
    0187. Repeated DNA Sequences (M)
    0007. Reverse Integer (E)
    0006. ZigZag Conversion (M)
  • 原文地址:https://www.cnblogs.com/new0801/p/6176046.html
Copyright © 2011-2022 走看看