happem

#

基于C语言基础概念

C语言对现代编程语言有着巨大的影响,许多现代编程语言都借鉴了大量C语言的特性,在众多基于C的语言中,以下几种非常具有代表性。

1C++包括了所有C特性,但增加了类和其他特性以支持面向对象编程。

2java是基于C++的,所以也继承了C的许多特性。

3C# 是由C++java发展起来的一种特新的语言。

4perl 最初是一种非常简单的脚本语言,在发展过程中采用了C的许多特性

考虑到这些新语言的普及程度,人们自然会问:“C语言还值得学习吗?”我想答案是肯定的。原因如下:第一,学习C有助于更好的理解C++javaC#perl以及其他基于C的语言特性,一开始就学习其他语言的程序员往往不能很好的掌握承自C语言的基本特性;第二:目前仍有许多C程序,我们需要读懂并维护这些代码;第三,C语言仍然广泛用于新软件开发,特别是内存或者处理能力受限的情况下以及需要使用C语言简单特性的地方。

与其他任何编程语言一样,C语言也是有自己优缺点:

1C语言是一种底层语言。为了适应系统编程的需要,C语言提供了对机器级概念的访问,而这些是其他编程语言试图隐藏的内容。此外,C语言还提供了与计算机内置指令紧密协调的操作,使得程序可以快速执行。

2C语言是一种小型语言。与其他许多编程语言相比,C语言提供了一套更有限的特性集合。

3C语言是一种包容性语言。C语言假设用户知道自己在做什么,因此它提供了比其他许多语言更广阔的自由度,此外,C语言不像其他语言那样强制进行详细的错误检查。资源来自:http://www.lirenedu.org/index.php?ack=xinwen&id=1024 扩展阅读更多。

posted @ 2012-08-20 10:41 happem 阅读(118) | 评论 (0)编辑 收藏

Uart和Modem接口描述

1.       UART接口描述:

通用异步收发器UART是用硬件实现异步串行通信的通信接口电路,在记者原基础上可以扩展阅读接口下仲裁与时钟都实现,UART异步串行通信接口是嵌入式系统最常见都接口,可用来与上位机或其他外部设备进行数据通信。

由于UART应用都普通性,所以大部分微控制器内部都集成有UART接口,但是不同类型都微控制器的UART接口内部电路和操作寄存器并不一定相同。

  LPC2000系列ARM7微控制器均具有两个UART,它们的结构及寄存器符合16C550工业标准。

2.       UART16c550rs232的区别:

Uart是通用异步串行通信接口的总称,uart允许在串行链路上进行全双工的通信,输出/输入的电平为TTL电平。一般来说,全双工UART定义了一个串行发送引脚和一个串行接收引脚,可以在同一时刻发送和接收数据。但是不同芯片都UART接口内部电路、操作寄存器和工作模式并不一定相同。比如标准80c51UART接口为全双工的UART,但没有波特率发生器。一个控制寄存器SCON和一个串口数据缓冲区SBUF寄存器,支持8位、9位数据传输模式。

16c550是一种工业标准的UART,此类UART芯片内部集成了可编程的波特率发生器、发送/接收FIFO、处理器中断系统和各种总线状态错误检测电路等等,并具有完全的MODEM控制能力,工作模式为全双工模式,支持5-8位数据长度,1/2位停止位,可选其偶校验位。

   Rs232是美国电子工业协会制定的串行通信标准,又称ra-232-C,早期它被应用于计算机和调制解调器的连接控制,MODEM在通过电话线进行远距离的数据传输。RS232是一个全双工的通信标准,它可以同时进行数据接收和发送的工作。RS232标准包括一个主通道和一个辅助通道,在多数情况下主要使用主通道,即RXDTXDGND信号。

 严格地讲,RS232接口是DTEDCE之间的一个接口,DTE包括计算机、终端和串口打印机等设备。DCE通常只有MODEM和某些交换机等。

 

 

posted @ 2012-08-14 09:10 happem 阅读(3788) | 评论 (0)编辑 收藏

函数calloc和realloc概念

数组比链表更加适于快速排序、查找和数据访问。然而,数组通常是静态数据结构。通用程序库(stdlib.h)提供了另外两个函数来动态分配内存,这两个函数是calloc和realloc。这些函数可以用于创建和修改动态数组。数组指针可以像数组那样使用下标。所以,calloc所创建的连续内存空间的指针可以像数组那样处理。函数calloc动态为数组分配内存。

Calloc的原型是:

Void * calloc(size_t nmemb,size_t size);

函数有两个参数,即元素的个数和每个元素的大小,并将数组的元素初始化为0,函数返回值指向已分配内存的指针,或者,如果没有分配内存,则返回NULL指针。Malloc和calloc之间的主要差别在于,calloc清理它所分配的内存,而malloc不清理。

函数realloc修改前面对malloc、calloc或者realloc的调用而分配的对象大小。如果分配的内存大雨以前分配的数量,则不会修改原始对象的内容。否则,原对象中从起始位置到新对象大小的这一范围内的内容不会发生变化,realloc的原则是:

Void * realloc(void * ptr,size_t size);

函数realloc有两个参数,指向原始对象的指针和对象的新大小,如果ptr是NULL,则realloc的工作方式和malloc一样。如果size是0,而ptr不是MULL,则释放对象的内存,否则,如果ptr不是NULL,而大小大于0,则realloc试图为对象分配新的内存块,如不能分配新的空间,则ptr所指向对象将不会发生变化。函数realloc返回指向重新分配内存的指针,或者MULL指针。

来自里仁教育网:http://www.lirenedu.org/index.php?ack=xinwen&id=1105

posted @ 2012-08-01 16:59 happem 阅读(434) | 评论 (0)编辑 收藏

C++对象的内存映像

什么是C++对象模型?要想理解它,必须把C++语言层面的面向对象特征和概念与对象的底层实现技术结合起来进行分析。前者如构造函数、拷贝和赋值函数、析构函数、静态成员、虚函数、继承、组合、动态创建对象、RTTI等。后者则是语言是实现隐藏起来的细节,如对象的内存映像、vtable的构造、vptr的插入和初始化时机、构造和析构函数的自动调用时机、对象的构造和析构次序、临时对象的创建和销毁、RTTI的底层实现技术,等等。

 对象模型涉及的内容非常之多,构成了一套完整的语言实现体系,我们不可能讲述其中的每一个主题,仅进行粗浅的介绍,以起到抛砖引玉的作用。

 了解对象首先要知道对象在内存中的布局,也就是对象在内存中如何存放和表示的。这里我们简单阐述一下C++类的内存映像。

   Class rectangle

{   pibilc:

     Rectangle();m-length(1),m-width(1){……}

    ~rectangle(){…}

      Float getlength()const{return m-length;}

      void setlength(float length){m-length;}

      float getwidth()const{return m-width;}

      void setwidth(float width){m-width=width};

      void draw(){….}

static unsigned int getcount(){return m-count;}

protected:

 rectangle(const rectangle©){….}

rectangle& operator=(const rectangle& assign){….}

private:

 float m-length;   //

 float m-width;    //

 static unsigned int m-count; //对象计数

}

Rectangle 这种基本的C++对象模型有下述几个规则:

l         非静态数据成员被放在每一个对象体内作为对象专有的数据成员;

l         静态数据成员被提取出来放在程序的静态数据区内为该类所有对象共享,因此仅存在一份;

l         静态和非静态成员函数最终都是被提取出来放在程序的代码段中并为该类的所有对象共享,因此每个成员函数也只存在一份代码实体;

l         类内嵌套定义的各种类型与放在类外面定义的类型除了作用域不同外没有本质区别。

因此,构成对象本身的只有数据,任何成员函数都不隶属任何一个对象,非静态成员函数与对象的关系就是绑定,绑定的中介就是this指针。

posted @ 2012-08-01 16:54 happem 阅读(483) | 评论 (0)编辑 收藏

工程师的发展之路,不一样的人生!

文章发自:http://www.lirenedu.org/index.php?ack=xinwen&id=545 

中长期规划---螺旋式上升方式修改完善职业之路
              
    一、中长期职业发展的自我准备:

  1、心态上随时做好准备 机会是给有准备的人的------“有准备”是你在做准备的过程中让“别人”认为你“有准备”!别人是包括你现在的老板和别的老板,以及你身边的人!他们对你的赏识程度决定了你的机会
       2、专注于自己的优势  70%专注于长处,25%专注于学新事物,5%专注于避免短处
       3、不断修正自己的技术方向,扩大自己的知识与能力的金字塔  增强自己的核心竞争力,但尽量别改变太多太快(今天做手机、明天做电视、后天做空调,这样很乱的,大大不利)
       4、积极争取机会 柳传志说,杨元庆就是“哭着喊着要进步”,实际上,就是争取自己的机会;当然,这种强烈的进步欲望,也是领导看重的地方。每一步都走在前面,积累多了,你就有了比其他人更多的机会了。要积极争取如下机会:
     a、新项目的机会  
      b、到新部门的机会  
      c、带新人的机会 如果公司不安排带,那就自己主动去帮助新人,做半个师傅。
      d、管理项目的机会  
      e、管理团队的机会(卡位非常非常重要) 
      5、做多揽活干的傻子    与工作相关的事情,没人做就主动去做;别人没干好就主动帮他们干好  要乐意去干工作职责范围以外的事情
      6、使自己变得不可替代  最重要的就是,别人做到的你要做得更加好,别人做不到的你就要做到,要不断超越老板的期望!才能赢得老板或者别的老板的信任,才能得到更多的机会与回报!
      7、 关注技术、公司及相关行业的发展,达到对技术、技术发展趋势、团队管理、行业情况与发展趋势等能吹能侃的地步
   
    二、中长期规划时间表(想升官的想发大财的朋友):
    

 0-2年内      多干蓝领的工作,多学习多积累技术经验
     2-4年内       多看技术发展趋势方面文章,多交与本职岗位相关的朋友
     4-6年内        多看技术发展趋势与行业发展趋势文章,多交与本部门业务相关的朋友
     6年以后       多看管理书籍,多了解行业发展趋势,多交与本行业相关的朋友
     8年后--        多与产业链的朋友及资本相关的朋友交流

    如果不想操心太多,就想走技术专家路线的朋友,请把0-6年的3个阶段继续延续下去。

   三、需要纠正的几个观念:

   1、不是每个工程师都适合做管理的        走技术路必然会和走管理路分开
       2、不是人人都可以做市场做销售的        性格、亲和力、知识结构等影响很大
       3、不是人人都可以做老板开公司的       小老板辛苦程度高,其实还不如高级白领滋润(特别是IC,最适合工程师打工的)
   
   四、螺旋式上升方式修改完善职业之路  

   大公司与小公司循环,职位与薪水自然跟着循环,职业生涯平台自然跟着上(当然能在公司内部上升自然最好) ;

posted @ 2012-07-04 09:38 happem 阅读(182) | 评论 (0)编辑 收藏

从存储器映射的I/O取指

不同ARM的实现在存储器指令取指时会相当大的区别,因此强烈建议存储器映射的I/O位置只用于数据的装载和保存,不用与指令取指,任何依赖于从存储器映射I/O位置取指的系统设计都可能难以移植到将来的ARM实现。

2.    对存储器映射I/O数据访问:

一个指令序列在执行时,会在不同的点访问数据存储器,产生装载和保存访问的时序,如果这些装载和保存访问是正常的存储器位置,那么在它们访问相同的存储器位置时,只是执行交互操作,结果,对不同存储器位置保存和装载可以按照不同于指令的顺序执行,但不会改变最终的结果,这种改变存储器访问顺序的自由被存储器系统用来提高性能。

此外,对同一存储器位置的访问拥有其他可用提升性能的特性,其中包括:

1) 从相同的位置连续加载产生相同的结果。

2) 从一个位置执行加载操作,将返回最后保存到该位置的值。

3) 对某个数据规格的多次访问有时可合并成单个的更大规模的访问,例如,分别存储一个字所包含两个半字可合并成单个字的存储。

但如果存储器字、半字或字节访问的对象是存储器映射的I/O位置。一次访问会产生副作用,使后续访问改变成一个不同的地址。如果是这样,那么不同时间顺序的访问将会使代码序列产生不同的最终结果,因此访问存储器映射I/O位置时不能进行优化,它们的时间顺序绝对不能改变。http://www.lirenedu.org/index.php?ack=xinwen&id=1081 

posted @ 2012-07-04 09:36 happem 阅读(1142) | 评论 (0)编辑 收藏

对象类的概念

继承

对象类的概念是很有用的,因为对象类可以实现用最小的代价创建许多新的对象实例。使用继承机制可使得这一概念更加有用[TAIV96]。

  继承可以在已有类上定义新的对象类。称为子类的新类,将自动包含称为父类的原始类所定义的方法和变量。子类在许多方面不同于父类:

1. 子类可以包含父类中所没有的方法和变量。

2. 子类可以通过重新定义来重载父类中任何相同名字的方法和变量。这提供了处理特例的简单有效方法。

3. 子类可以对从父类继承的方法或变量在某些方面加以限制。

继承机制是递归的,可以实现子类成为其子类的父类。这样,就建立了一种继承层次,从概上可以认为继承层次是定义了一种方法和变量的搜索技术。当一个对象收到一个消息,而执行没有在其类中定义的方法时,对象将沿继承层次向上搜索直至找到该方法。类似地,,如果一种方法的执行造成相关变量没有在该类中定义,则对象就会沿着继承层次向上搜索变量名。

多态性

多态性是一个很有趣且很有用的特性。它使得把不同实现隐藏于共同接口之后成为可能。两个多态的对象使用相同的方法名字,对其他对象呈现相同接口。例如,对不同的输出设备会有许多打印对象,如printDotmatrix、printLaser、printScreen等;或是不同类型的文件,如printText、printDrawing、print-Compound。如果每一对象包含一个称为print的方法,那么通过向合适的对象发送print消息,任何文件都可以被打印,而不必关心方法是怎样真正实现的,多态性典型地应用于一个父类的多个子类的相同方法,每个方法都有一个不同的具体实现。

将多态性与常用的标准组件编程技术进行比较是有益的。自上而下的标准组件设计的目的是要使用高层模块的固定接口实现底层模块的通用效用。可以实现一个较低层的模块被许多不同的高层的模块使用。

接口

接口使得子类对象使用父类的功能,有时需要定义一个具有多个父类功能的子类,这可能对相应产生一个子类继承多个父类。C++是一种允许多重继承的语言。然而,为简单起见,大多数现代面向对象编程语言,如java、C#和Visual Basic.NET,限制一个子类能继承一个父类。相反,接口为人所知的特征是可以实现一个类借用类中的一些功能或是借用完全不同类的功能。
源地址:http://www.lirenedu.org/index.php?ack=xinwen&id=1086 

posted @ 2012-07-03 11:05 happem 阅读(290) | 评论 (0)编辑 收藏

仅列出标题
共2页: 1 2