作为向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

物联网操作系统Hello China V1.76(PC串口版)版本发布的更多相关文章

  1. 物联网操作系统Hello China移植mile stone之一:移植基础版本V1.76发布

    Hello China V1.76版发布,这是向ARM系列CPU移植的基础版本.相对V1.75版,该版本主要做了如下的一些调整: 1.  通过宏定义的方式对内核实现了模块化,开发者可以通过开启或关闭预 ...

  2. 让我们共同构筑物联网起飞的平台:物联网操作系统Hello China寻求应用合作伙伴

    经过几天的努力,终于把Hello China V1.76版的内核移植到基于Cortex-M3内核的STM32 chipset上.因为还希望进一步写一个USART驱动程序,因此详细的移植文档,预计一周之 ...

  3. 物联网操作系统HelloX V1.77(beta)版本发布

    物联网操作系统HelloX V1.77发布 经过近半年的努力,物联网操作系统HelloX V1.77版本正式完成,源代码已上载到github(github.com/hellox-project/Hel ...

  4. 物联网操作系统HelloX V1.80测试版发布

    经过HelloX开发团队近半年的努力,在HelloXV1.79版本基础上,增加许多功能特性,并对V1.79版本的一些特性进行了进一步优化之后,正式形成HelloX V1.80测试版本.经相对充分的测试 ...

  5. 物联网操作系统HelloX V1.79发布公告

    经过HelloX开发团队近半年的努力,在HelloX V1.78版本基础上,增加许多功能特性,并对V1.78版本的一些特性进行了进一步优化之后,正式形成HelloX V1.79测试版本.经相对充分的测 ...

  6. 物联网操作系统HelloX V1.78测试版正式发布

    经过HelloX开发团队近四个月的努力,在HelloX V1.77版本基础上,增加许多功能特性,并对V1.77版本的一些特性进行了进一步优化之后,正式形成HelloX V1.78测试版本,经相对充分的 ...

  7. 物联网操作系统HelloX已成功移植到MinnowBoard MAX开发板上

    在HelloX开发团队的努力下,以及Winzent Tech公司(总部在瑞典斯德哥尔摩)的支持下,HelloX最新版本V1.78已成功移植到MinnowBoard MAX开发板上.相关源代码已经发布到 ...

  8. android模拟器使用PC串口调试

    android模拟器使用PC串口调试1.模拟器可以使用PC的串口  启动模拟器并加载PC串口 命令如下:  运行 emulator @模拟器名称 -qemu -serial COM12.查看串口是否被 ...

  9. Google物联网操作系统协同框架Weave深度解析

    1.       Google Weave框架 在2015年的Google I/O大会上,负责Android业务的桑达.皮查伊(SundarPichai)宣布了Google最新的物联网战略.这包括一个 ...

随机推荐

  1. VC++编程之对话框贴图

    基于对话框的程序写好后,为对话框贴上个图片让界面更加美观(我承认做界面,MFC显得力不从心,不如QT). 其实很简单,我们以位图为例,选好我们需要的位图资源(bmp),假若自己的图片不是位图资源,可以 ...

  2. 什么是锚点(AnchorPoint)

    1.锚点通常是图形的几何中心, AnchorPoint(x,y)的两个参量x和y的取值通常都是0到1之间的实数,表示锚点相对于节点长宽的位置. 例如,把节点左下角作为锚点,值为(0,0): 把节点的中 ...

  3. [收藏]win8安装弹出输入的产品密钥与用于安装任何可用windows映像都不匹配

    问题描述: 帮朋友装win8(第一次装大神不要喷我啊)结果到 现在安装 这一步的时候 点击 现在安装 弹出个窗口 说输入的产品密钥与用于安装任何可用windows映像都不匹配.请输入其他产品密钥 解决 ...

  4. Facebook Graph API 接口请求

    Graph API 调试器 这两天因项目需求,在调试FB的接口.项目的应用在FB上面.L特傻.没有区分FB的api的使用方式. 因为应用是在FB上面的.所以在登录应用的时候,就已经登录了FB平台.对于 ...

  5. 【LRU Cache】cpp

    题目: Design and implement a data structure for Least Recently Used (LRU) cache. It should support the ...

  6. 【BZOJ】【1863】【ZJOI2006】trouble 皇帝的烦恼

    二分+DP Orz KuribohG 神题啊= = 满足单调性是比较显然的…… 然而蒟蒻并不会判断能否满足……QwQ 神一样的DP姿势:f[i]表示第 i 个与第1个最多有多少个相同,g[i]表示最少 ...

  7. Leetcode#138 Copy List with Random Pointer

    原题地址 非常巧妙的方法,不需要用map,只需要O(1)的额外存储空间,分为3步: 1. 先复制链表,但是这个复制比较特殊,每个新复制的节点添加在原节点的后面,相当于"加塞"2. ...

  8. [noip2005提高]过河 dp

    由于L的范围到了109,用普通dp做肯定是不成了: 可以观察到M的数量很小,dp在转移的过程中有大量的无用转移: 可以想到压缩范围,问题是如何压缩,观察若S=9,T=10时,能到达的点,9,10,18 ...

  9. 华农js抢课神器

    又到了华农选课的时候,服务器估计就受不了,每天奔溃几次,这次选课贪心了点,竟然选了5门,好吧,我承认我只中了1门,什么??刚刚换课给同学马上就被人抢了?我来告诉你原因吧,最近发现一位大神写了一份js脚 ...

  10. 批量安装操作系统之cobbler

    Cobbler 部署文档 服务端配置 操作系统:Centos6.4 关闭防火墙及 selinux 安装cobbler软件 添加yum源 rpm -Uvh https://dl.fedoraprojec ...