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


  • 相关阅读:
    Rest
    docker-4
    Arrays.asList
    docker-3
    docker
    docker
    linux-ss
    jackson
    Java将图片的路径转为Base64,VUE前端显示
    java base64视频存到本地或服务器
  • 原文地址:https://www.cnblogs.com/new0801/p/6176046.html
Copyright © 2011-2022 走看看