30分钟 让你成为一个更好的程序员

我相信激励是非常重要的。这也是为什么我常常把时间管理(这些书激励我不管改进我的时间管理方法)的书和软件开发拿出来看看。我最近刚看完一本书,“Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman”。这本书推动我仔细的思考我应该把时间花在哪里。

巧合的是最近是我25岁生日,也即将是新的一年。所有这一切都推动着我整理自己的技能,并制定下一年的学习计划。

我把它写到博客里面也是那本书的作者建议。我觉得这个建议非常好。和所有人分享你的计划,会让你更有动力去完成它!

技能

那本书的作者建议,制作一张图表,列出你所有的技能,然后评估他们。有这样一张图表你就非常清楚你下面将要学习什么。

我把所有的技能分成四组。其中两组是非常实用的,包含了我日常用到的技术。其他的两组是一些软件开发的基础知识,计算机科学的理论等等。我要说明的是,我 并没有做非常严格的调查,这个图表也不是我这些年积累的所有技能。这个图表的目的并不是让你对自己所有的知识列一张详细的表,而是让你自己对自己的专业技 能有一个全局的了解。我对技能打分为1-5,1分就是了解,但是没有实际操作过。5分就是非常熟练的掌握。

当我第一次看到这张表时,我意识到我的计算机理论是这么差。我也意识到我欠缺unix技能。还有,我发现我在使用ruby的时候,没有使用java和groovy的时候爽。我也也许应该在ruby上多花点时间,让它达到5分。

阅读列表

在我看来,书是最有效的获取任何一个领域知识的途径。你可以看视频,阅读博客,但是你的知识是很分散的,直到你阅读了这个领域的一本好书。我有一个建议, 那就是交替阅读技能书籍和基础书籍。阅读经典的基础书籍从长远来看一定会大有裨益。但你也不能停止学习新的技能,也许你明天就能用上。

根据我的技能图表,我决定阅读“Rails AntiPatterns”这本书。而计算机科学的基础知识我打算通过阅读“Types and Programming Languages”来提高。

也许你会觉得我没有必要做这个知识图表,因为不用这个图表我也可以做相同的决定。这很有可能,但是这个图表给了我做这个决定一个清晰的理由。

现在就尝试!

所有这些工作大约只需要花费你30分钟时间,而你将有可能成为一个更好的程序员。

嵌入式的开发学习

嵌入式的开发学习,网上有很多人介绍过了,这里只是说说我的WinCE学习之路。因为经过一个月的学习,我感觉自己已经弄懂了很多问题,而且是从根源上,现在可以肯定自己已经入门了。

        首先,WinCE要跑在硬件上,所以我建议一定要学习ARM的体系结构,弄明白里面的一些基本原理,比如处理器模式、寄存器设置、异常系统以及存储系统等等。
参考书籍:《ARM体系结构与编程》—杜春雷
                    《ARM嵌入式系统开发:软件设计与优化》–大牛推荐
        其次,学习WinCE的应用程序编程,了解Win32的系统架构,这部分只要了解就可以了,主要是为了以后编写驱动测试程序用的。
参考书籍:《wince编程第三版》
第三,WinCE嵌入式系统的全面了解,这是我建议,先从全面上了解WinCE嵌入式系统的整体开发组成以及一些基本的概念有一个初步的认识,这里会发现很多不明白,但是还是要看一遍,等以后遇到相关的问题时,可以返回来看看,这样的学习效果会比较好的。
参考书籍:《Windows_CE嵌入式系统》—何宗键
        第四,BSP学习。前面都是理论基础的学习,从这里开始源码学习。源码的学习肯定得从BSP开始,选择一款开发板,看看别人的源码是怎么写的,最好能比较几款开发板的BSP,这样通过比较的学习效果会比较好。重点是BootLoader启动过程以及WinCE的启动过程,这部分一定要细细的看,虽然这部分改动会比较小,但是看懂了,对以后WinCE的底层开发非常有帮助。
参考书籍:《Windows CE工程实践完全解析》—大牛推荐
         第五,WinCE驱动学习。其实BSP开发过程中,已经渗透了一些驱动的知识,所以上一步如果学好了,这一步就比较好走了。驱动可以分两步,刚开始做一些简单的流驱动类的,之后进行分层驱动的开发。
参考书籍:《WinCE 设备驱动程序开发指南》
                    《Windows CE设备驱动及BSP开发指南.》—周建设

嵌入式系统接入网及其网络接口技术研究

嵌入式系统以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应了各种应用系统中对功能、可靠性、成本、体积、功耗等的严格要求,因此它赢得了巨大的市场,在应用数量上远远超过了各种通用计算机。嵌入式接入Internet是近几年随着计算机网络技术的普及和发展而发展起来的一项新兴概念和技术,它通过为现有嵌入式系统增加因特网接入能力来扩展其功能,一般指设备通过嵌入式模块而非PC系统直接接入Internet,以Internet为介质实现信息交互的过程,通常又称为非PC接入。

嵌入式系统利用网络接口控制芯片实现与网络的通信功能,成本低,控制方便可靠,满足系统对通信的要求。考虑到本身的特点,在大量工业领域中应用嵌入式设备功能比较单一,在上述网络接口控制芯片接口程序的基础上只需要开发简化的嵌入式协议栈,就可满足许多情况下的应用需求。目前,许多公司和组织致力于将以太网与现场总线实现无缝连接,使以太网越来越向底层延伸。以太网在现场设备中的应用研究和基于以太网的智能芯片的开发等也日益成为研究的热点。

1 嵌入式接入网的主要方式

目前嵌入式系统接入Internet通常有以下两种主要方式:
(1)采用高速的16/32Bit微控制器直接实现TCP/IP协议,这种方法的实现框图如图1所示。这种方式可以使嵌入式系统直接与Internet相连,有很大的灵活性。缺点是占用的系统资源较多,对微控制器的要求也很高,无法在8/16Bit低速微控制器为核心的嵌入式系统上实现。

图1  直接实现TCP/IP系统

(2)使用嵌入式网关来实现,如图2所示。各个嵌入式系统首先和网关进行通信,通信方式采用传统的RS-232、RS-485等,由嵌入式网关负责实现TCP/IP协议,完成嵌入式系统的信息与Internet的信息交互。这种方案解决了以低速8/16Bit微控制器为核心的嵌入式系统接入Internet的问题。缺点是需要一个专门的嵌入式网关,而且和各个嵌入式系统之间的通信同样受到速度和距离的限制,这种方法的实现成本将会增加。

2 嵌入式系统的组成

嵌入式系统包括硬件和软件两部分。硬件包括处理器微处理器、存储器及外设器件和30端口、图形控制器等。软件部分包括操作系统软件(要求实时和多任务操作)和应用程序编程。嵌入式系统的核心是嵌入式微处理器。嵌入式互联的目标是嵌入式设备工作在以网络为中心的环境中,把“孤立的目标系统”相互连接起来。为适应嵌入式分布处理结构和应用上网需求,嵌入式系统必需配有一种或多种网络通信接口,使嵌入式微控制器不仅能执行传统的控制功能,而且还能执行与连接因特网相关的功能,从而把标准网络技术(TCP/IP)一直扩展到嵌入设备,由嵌入式系统自身实现Web服务器功能,这是解决嵌入式Internet问题的最佳方案。

嵌入式设备接入Intranet/Internet网原则上讲,只要实现TCP/IP网络协议就可以。针对嵌入式设备连接涉及的两个关键问题即传送信息的媒质和采用的协议。最常用的联接模式是以太网通信介质的有线连接与TCP/IP协议。其网络体系结构与协议分层如图1所示。利用网络接口控制器(NIC-Network Interface Controller)来实现物理层和链路层协议,同时微处理器运行嵌入式TCP/IP协议通信模块来实现与Intranet/Internet网的连接。一旦这个目标得以实现,就能在网络环境下在任何时间从任何地点对位于任何其它地方的系统中的微控制器进行监控,利用传统的Web和因特网机制远程监视数据和运行情况控制,而且还能在合适的条件下对系统进行调试、升级和维护。

3 技术难点分析

3.1 发送数据的封装

把一组数据发送到基于TCP/IP协议的网络上,首要条件是产生符合TCP/IP协议的数据格式。首先从一个物理帧的格式来分析。一个标准的IEEE802.3的物理帧如图4所示:

如果与嵌入式系统的通信只是局限于局域网之中,在物理帧的数据域内可以直接放置要发送的数据。如果需要和其他的网络进行通信,在物理帧的数据域中需要封装更高层的协议,嵌入式系统发送的数据应该封装在高层协议的数据域内。这些数据的层层封装和物理帧的形成对于速度没有特殊的要求,普通的低速微控制器完全可以实现。

3.2 发送数据的发送

以10M以太网为例说明,发送数据时应该做的工作是,首先对待发送的数据进行曼彻斯特编码,而后对编码后的数据进行扭曲处理,使发送的数据适合在10M以太网上传输,最后把处理好的数据以10M的速度发送到以太网上。同时,为了保证数据的有效发送,系统还应具有冲突检测和重发的功能。

从以上的发送过程可以看出,直接用普通的微控制器是很困难的,应该考虑用其他的方法实现。

4 一种嵌入式网络接口的实现方案

基于因特网的嵌入式网络体系结构实现的核心问题是如何实现嵌入式网络接口。在众多实现方案中,以MCU为核心的实现方案,虽然实现起来有一定困难,仍因其极低的成本,受到格外重视。在此实现了一种网络接口芯片与MCU相结合的方案,如图5所示。

RTL8019AS与硬件实现以太网接口芯片中,选用RTL8019AS。由台湾Realtek公司生产的RTL8019AS以太网控制器,由于其优良的性能、低廉的价格,使其在市场上的10Mbps网卡中占有相当的比例。使用8051/52兼容单片机实现对RTL8019AS的控制,电路图如图6所示。

RTL8019AS采用8位数据传输的跳线模式(IOCS16接地, JP接高电平)。P0口通过地址锁存器实现地址数据复用。P3.4片选RTL8019AS。数据收发不使用中断驱动,全部由软件查询实现。基地址选择引脚IOS[3:0]空,I/O基地址为300H。使用双绞线为通信介质,所使用的引脚有:TPIN+,TPIN-,POUT+,TPOUT-,连入耦合隔离变压器FB2022,通过RJ 45插头实现与网络的连接。

通常TCP/IP是指Internet协议簇,而不单单是TCP/IP。因此,在8bitMCU不大的ROM空间里,不可能实现所有的TCP/IP协议。考虑到嵌入式应用中硬件系统的多样性,完成特定功能的应用程序也各不相同,因而软件的设计在保证满足功能前提下,最好短小,易于被移植,尤其是应用程序与网络协议软件应具备一定的独立性。因此,选择TCP/IP作为嵌入式网络的通信协议,同时必须对TCP/IP协议簇根据实际需要进行必要的删减,即实现一个thinTCP/IP协议簇。通常的thinTCP/IP的层次结构与标准的TCP/IP的一样,也是四层结构(图7)。以太网接口层主要实现对以太网接口芯片的控制,IP层根据实际需要选择实现ARP(地址解析协议)、RARP(反向地址解析协议)、ICMP(因特网控制报文协议)以及IGMP(网络组管理协议)。传输层主要由TCP(传输控制协议)和UDP(用户数据报协议)组成,在实际实现时,根据需要可只实现其中一个。CIP(控制信息协议)是专为控制设备、基于对象的一种方法,它是独立于特定网络的应用层协议,提供了访问数据和控制设备操作的服务集。CIP的制定需要根据具体应用加以考虑,与通常协议的格式相似,也为“命令+数据”模式。

5 结束语

在信息技术广泛使用的今天,采用基于因特网的嵌入式网络体系结构,实现的嵌入式设备互连,是打破嵌入式设备联网技术停滞僵局的一种较好选择,可广泛应用于各种嵌入式设备的联网中。尽管在实现中遇到了许多困难,但这种廉价高速、使用广泛的网络必将极大地推动嵌入式设备的网络化进程。我国正处于Internet的初级阶段,Internet正在以前所未有的速度向前发展,如果将初级阶段称作Per sonaltoPersonal时代,那么未来的时代将是PersonaltoDevice,DevicetoDevice时代,随着该时代的到来,智能将下移到设备,大量的嵌入式设备将连到Inter net上,并通过网络相互通信,自动操作,而无需人的干预。可以想象,随着仪表、控制器、执行器、家电等嵌入式设备连到Internet上,网上设备将是现在的数百倍、数千倍。与此同时,随着制造工艺的进步,智能控制芯片和智能传感器的成本越来越低,功能却越来越强大,这使嵌入式微控制器与Internet连接的费用降低到了完全可以接受的程度.嵌入式Internet,适应了Internet发展的趋势,可以预言,嵌入式设备与Internet的结合代表着嵌入式系统和网络技术的真正未来。

6 本文作者创新点

本文以嵌入式系统的接入网技术为重点,在分析嵌入式系统网络连接的结构体系和协议层次基础上,提出一种新型基于因特网的嵌入式网络体系结构,并通过对其网络接口的实现的实例,对网络接口技术也做了详细分析。

网站添加小图标

把命名为favicon.ico的图片放在网站根目录(图片格式为ico大小为16*16)

然后把以下代码添加在<head></head>之间就可以了

代码如下:
<link href=”favicon.ico” mce_href=”favicon.ico” rel=”bookmark” type=”image/x-icon” />
<link href=”favicon.ico” mce_href=”favicon.ico” rel=”icon” type=”image/x-icon” />
<link href=”favicon.ico” mce_href=”favicon.ico” rel=”shortcut icon” type=”image/x-icon” />

说明:第一行和第三行代码的作用:在收藏夹下亦显示图标,无论是资源管理器窗口,还是浏览器的收藏夹。