博文

嵌入式领域Linux系统为什么为众多厂商所青睐(2013-03-22 10:19:00)

摘要:以下是本人的一些分享,我热爱编程,希望能多交编程的爱好者,如果你也是其中一名,那么请加好友,大家关注一下,下面的文章是自己觉得一些有用的东西,留下来给自己当笔记,当然也希望能帮助到你,首先感谢你的阅读~! 在经济领域内,任何新产品的出现都必然面临着挑战和被挑战。而计算机软件作为一个特殊的商品,目前正面临着开放源代码的挑战。开放源代码促进了计算机技术的交流与发展,得到了越来越多的肯定与支持。但开源并不意味着免费。用户在获取并使用软件的同时,也在使用厂商提供的服务和安全保障。而服务和安全保障是计算机软件的真正价值所在,这是永远无法免费的。同时对于安全性和保密性要求较高的领域来说,免费和非自主版权并不是一个很好的选择。 谈到开源就不得不谈谈Linux系统。目前以Linux系统为代表的开源系统软件对传统的非开源系统软件发起了强有力的挑战。Linux系统的优秀特性和源代码的完全免费开放为我们提供了追赶世界先进水平的有利工具,但并不是唯一工具。如果我们仅局限于利用Linux来发展我们自己的计算机软件产业,那么是毫无前途可言的。 Linux系统之所以为众多厂商所青睐,除其自身的技术优秀外,还在于它为计算机软件厂商提供了廉价经济甚至免费的开发平台。但Linux系统并不是完美无缺的。在嵌入式系统上运行Linux的一个缺点是Linux体系提供硬实时性能需要添加实时软件模块。而这些模块运行的内核空间正是操作系统实现调度策略、硬件中断异常和执行程序的部分。由于这些实时软件模块是在内核空间运行的,因此代码错误可能会破坏操作系统从而影响整个系统的可靠性,这对于实时应用将是一个非常严重的弱点(内核空间更多的使用指针)。 另一方面,现成的实时操作系统(RTOS)完全是为实时性能而设计的,它通过在由用户而非系统级进程启动时分配给某个进程以高于其它进程的优先级的方式来实现实时性。进程在操作系统看来就是在内存里或硬盘驱动器上执行的程序。给他们指定进程ID或者数字标识符为的是避免直接使用指针,野指针的使用后果是灾难性的,有利于提高可靠性。 广州达内凭借不断创新的“达内教学系统(Tarena Teaching System - TTS)”,达内科技已在中国20多个主要城市建立了40多家培训中心,累计为IBM、微软、摩托罗拉、华为、中软、用友、Yahoo、阿里巴巴、 TOM、新浪、搜......

阅读全文(2832) | 评论:1

嵌入式领域Linux系统为什么为众多厂商所青睐(2013-03-22 10:18:00)

摘要:以下是本人的一些分享,我热爱编程,希望能多交编程的爱好者,如果你也是其中一名,那么请加好友,大家关注一下,下面的文章是自己觉得一些有用的东西,留下来给自己当笔记,当然也希望能帮助到你,首先感谢你的阅读~! 在经济领域内,任何新产品的出现都必然面临着挑战和被挑战。而计算机软件作为一个特殊的商品,目前正面临着开放源代码的挑战。开放源代码促进了计算机技术的交流与发展,得到了越来越多的肯定与支持。但开源并不意味着免费。用户在获取并使用软件的同时,也在使用厂商提供的服务和安全保障。而服务和安全保障是计算机软件的真正价值所在,这是永远无法免费的。同时对于安全性和保密性要求较高的领域来说,免费和非自主版权并不是一个很好的选择。 谈到开源就不得不谈谈Linux系统。目前以Linux系统为代表的开源系统软件对传统的非开源系统软件发起了强有力的挑战。Linux系统的优秀特性和源代码的完全免费开放为我们提供了追赶世界先进水平的有利工具,但并不是唯一工具。如果我们仅局限于利用Linux来发展我们自己的计算机软件产业,那么是毫无前途可言的。 Linux系统之所以为众多厂商所青睐,除其自身的技术优秀外,还在于它为计算机软件厂商提供了廉价经济甚至免费的开发平台。但Linux系统并不是完美无缺的。在嵌入式系统上运行Linux的一个缺点是Linux体系提供硬实时性能需要添加实时软件模块。而这些模块运行的内核空间正是操作系统实现调度策略、硬件中断异常和执行程序的部分。由于这些实时软件模块是在内核空间运行的,因此代码错误可能会破坏操作系统从而影响整个系统的可靠性,这对于实时应用将是一个非常严重的弱点(内核空间更多的使用指针)。 另一方面,现成的实时操作系统(RTOS)完全是为实时性能而设计的,它通过在由用户而非系统级进程启动时分配给某个进程以高于其它进程的优先级的方式来实现实时性。进程在操作系统看来就是在内存里或硬盘驱动器上执行的程序。给他们指定进程ID或者数字标识符为的是避免直接使用指针,野指针的使用后果是灾难性的,有利于提高可靠性。 广州达内凭借不断创新的“达内教学系统(Tarena Teaching System - TTS)”,达内科技已在中国20多个主要城市建立了40多家培训中心,累计为IBM、微软、摩托罗拉、华为、中软、用友、Yahoo、阿里巴巴、 TOM、新浪、搜......

阅读全文(2935) | 评论:1

在PHP如何安装配置PHPUnit单元测试(2013-03-20 10:48:00)

摘要:以下是本人的一些分享,我热爱编程,希望能多交编程的爱好者,如果你也是其中一名,那么请加好友,大家关注一下,下面的文章是自己觉得一些有用的东西,留下来给自己当笔记,当然也希望能帮助到你,首先感谢你的阅读~! 单元测试是保证代码质量不可缺少的手段,熟悉Java的童鞋非常清楚:使用JUnit测试框架,再加上Eclipse集成的JUnit插件,在开发的过程中进行单元测试非常方便和顺手。PHP也有PHPUnit。下面和大家分享在PHP如何安装单元测试。  配置PHPUnit  首先安装pear,如果有的话,略过这段,具体的如下: 1,去网上下载:go-pear.phar 2,在用php go-pear.phar,就可以自动安装成功了 然后安装PHPUnit1pear channel-discover pear.phpunit.de 2pear channel-discover components.ez.no 3pear channel-discover pear.symfony-project.com 4pear install phpunit/PHPUnit 测试: phpunit –help 如果找不到的话,说明你的phpunit没有装成功,或者少东西。 在使用如下命令: 查看源代码 打印 帮助1pear upgrade-all 2pear install --alldeps --force p 广州达内凭借不断创新的“达内教学系统(Tarena Teaching System - TTS)”,达内科技已在中国20多个主要城市建立了40多家培训中心,累计为IBM、微软、摩托罗拉、华为、中软、用友、Yahoo、阿里巴巴、 TOM、新浪、搜狐、百度、联想、亚信等知名企业培养输送了近9万名学员,迅速成长为中国高端IT培训领军品牌。......

阅读全文(3490) | 评论:1

我们重点分析Web开发转发的问题(2013-03-18 10:19:00)

摘要:以下是本人的一些分享,我热爱编程,希望能多交编程的爱好者,如果你也是其中一名,那么请加好友,大家关注一下,下面的文章是自己觉得一些有用的东西,留下来给自己当笔记,当然也希望能帮助到你,首先感谢你的阅读~! 对于学java的初学者来说。Web开发中请求和响应的处理可能是比较头疼的一件事,尤其是对于和转发两者之间的用法,很多初学者可能会认为:用和转发是习惯问题,喜欢用哪个就用哪个。其实不然,用和转发不是一个习惯的问题,而是在某种情况下必须要用转发的问题。那么我们分析下和转发。 什么是转发? 一个web组件(servlet/jsp) 将未完成的处理交给另外一个web组件继续完成。 一般应用的场合:一个servlet处理请求之后,将处理结果交给一个jsp,让jsp依据处理结果生成相应的界面。 如果是按照通俗一点的按照流程里说就是这样:发送请求 -->服务器处理请求-->进行请求的重新设置,例如通过request.setAttribute(name,value)-->根据转发的地址,获取该地址的jsp网页-->响应请求给浏览器。 编程的时候怎么写?这个比要复杂一点: ① 将处理结果绑订定到request对象上。 request.setAttribute(String name,Object obj); //如果name对应的值不存在,则返回null。 Object request.getAttribute(String name); request.removeAttribute(String name); ② 获得转发器 //uri:是要转发的目的地,目的地只能是同一个应用的内部。 RequestDispatcher rd = request.getRequestDispatcher(String uri); ③ 转发 rd.forward(request,response); 需要注意的是: 转发之前,不要有任何的刷新操作,否则会出错。 转发之前,如果response当中缓存有数据,会先清空。 转发的特点 ① 转发的目的地只能是同一个应用内部的各个组件之间。 ② 转发之后,浏览器地址栏的地址不会变。 在互联网时代,JAV......

阅读全文(3036) | 评论:2

揭开嵌入式c面试题背后的玄机(2013-01-16 16:15:00)

摘要: 今天老大让我针对一个面试者出些嵌入式培训方面的面试题,主要是想对他的技术深度进一步了解。我就出了下面这些问题,每个问题背后都是考察一个嵌入式程序员应该具备的相关技能。当然这些只是我的个人理解,不一定正确。在此与大家分享,只是希朋友们能够得到一点点启发:如何抓住每一个契机展现你的与众不同?同样的技术问题,很多人可能都能够回答得对,但有些人只是知其然而不知所以然。其实面试官每一个问题背后通常都隐藏着一个考察点。如果我们能够透过问题看到背后的实质,在回答出答案的时候还能够借机发挥,我相信90和100分的差别就出来了。哪个面试官不喜欢招一个喜欢思考、能透过现象看本质的员工呢~ 下面我们来看看嵌入式C面试题背后到底藏何玄机~。以下仅是个人的一些想法,欢迎大家讨论,拍砖的轻点~~ //////////////////////////// 1、 int a=2,b=11,c=a+b++/a++; 则c值为多少? 【考点】编码规范。 表面上考察你对运算符优先级的掌握程度,但实际上优先级这些玩意很难死记硬背得住?大家的疑惑不就是运算符的结合顺序么?那么如何去避免呢?c=a+((b++)/(a++))不就行了么,其实问题背后考察的是你的编码规范,如何写清晰易懂的代码,如何在一个团队中让自己的代码狠容易毫无偏差的让新人看懂~ 2、 Static用在全局变量定义和函数内部局部变量定义有何区别? 【考点】编码规范及模块化设计。 Static变量的两个属性涉及存储位置及可见域。在大型的程序设计中static全局变量可以有效的避免名字空间的重复及无意的变量引用,这样可以有效的提高程序设计的安全性,同时也利用模块化作业 3、 在程序设计中哪些地方需要使用define?如何用define来定义一年内有多少小时的常量? 【考点】可移植性。 嵌入式程序设计的特点就是软硬件平台可变性,有效利用define常量可以提高程序的可移植性,这样改动方便,不易出错 4、 Define宏语句和inline函数有什么区别? 【考点】时空效率及宏的副作用。 嵌入式系统平台通常存储资源有限,但同时又对实时性有一定的要求,二者如何权衡需要考虑。Define宏语句相对于函数调用能提高运行时间性能,但消耗了空间,并且不标准的宏语句定义在不标准的编码中更容易出现副作用,因此......

阅读全文(2908) | 评论:1

marvell笔试题(嵌入式软件)(2013-01-16 16:11:00)

摘要:有幸去Marvell参加面试,由于其要求WCDMA/GSM之类的,我还特地恶补了下这方面的知识。后来坐了2个小时的地铁后,到达了Marvell。公司还蛮不错的,里面环境都还可以。我投了这家公司也是同学介绍的。在技术面试之前,先进行了1个小时的笔试,笔试主要是C语言的东西,还有附加题里有些ARM的知识。 (1)MIN宏定义; (2)SWAP宏定义; (3)big endian 和 little endian区别,举例说明; (4)enum枚举; (5)extern; (6)一个变量除以16(不能用*),除以15,如何实现,(<<); (7)位操作(&,|,~等); (8)指定0×10000000地址的值;如何使程序跳转到一个地址;(汇编) (9)数组定义,指针指向数组,取值操作; (10)指针变量,指针函数,指针数组,指针的指针等; (11)程序问题,uchar溢出,数据格式问题; (12)车库自动车辆记录系统,包括硬件和软件; (13)ARM知识(附加题);没怎么做。 后面就是技术面试,主要是和项目相关!面试官还挺和气的!现在还不知道结果怎么样,不过这个技术面试过程中还是挺舒服的,感觉不像是在面试,而是在交流。面试快结束时,面试官问我还有其他问题嘛,我就问了下他们的工作时间,加班情况什么的。整个过程历经2个小时左右,后来离开了Marvell后,去见了一个印度人客户,我终于知道他们为什么说印度英语很难听懂了。回到学校已经很晚了,结果已经不重要了,第一次面试,感觉还可以,以后的面试不慌。......

阅读全文(4235) | 评论:2

.net内存管理与指针(2012-12-28 15:28:00)

摘要: 本人前段时间准备做个TIN三角网的程序,思想是是分割合并法,分割的同时建立平衡二叉树,然后子树建三角网并相互合并,再向上加入父亲的点集。由于我对。net语言熟点,就准备用c#语言实现。但是不知从那听过当建立的类型只想用来存储数据时,最好是用结构即值类型,用类影响性能。想想我先建立二叉树的节点,只需要一个点集集合和左右孩子节点的指针,用c++表示如下: struct Node { char c; Node* lChind; Node* rChild; } C++等指针性语言很容易建立这种结构,但是c#呢,这就比较麻烦了。c#等非指针性语言不直接支持指针类型,值类型之间赋值时会进行值的复制,只有在函数参数有关键字ref或out时才又引用的功能,怎样才能方便的实现值类型的指针功能呢。查资料知道c#支持unsafe关键字,这里就顺便总结一下。net的这方面的相关知识。这里先给个上面结构的c#实现方法: unsafe struct Node { public char c; Node* lChild; Node* rChild; public Node(char value_ch) { c = value_ch; lChild = null; rChild = null; } public Node* LChild { get { return lChild; } set { lChild = value; } } public Node* RChild { get { return rChild; } set { rChild = value; } } public override string ToString() { string s = "值为:" + c; if (lChild != null) s += "," + "左孩子节点值为:" + lChild->c; if(rChild!=null) s += "," + "右孩子节点值为:" + rChild->c; return s; } } unsafe关键字支持以下的用法: 1.定义不安全类(unsafe class class_name......

阅读全文(3395) | 评论:0

Oracle数据库重装恢复数据解决(2012-12-26 11:33:00)

摘要: Oracle重装恢复数据解决 原因: 开发用的Oracle数据库出问题了 各种问题,调来调去搞不定。重装,但是想保留数据文件。 解决方法: 1.备份原来oradata文件夹,包括数据文件,控制文件,redo log文件,备份为oradata_bak 2.卸载原来的数据库 3.安装新数据库,注意数据库的参数要与原来安装的一样,如Oracle sid,数据文件存放位置等。要不然要改很多配置 4.关闭数据库,执行shutdown命令 5.把oradata_bak下的文件拷贝到新的oradata文件夹下 6.startup即可 注意:em想要访问的话需要重启em服务......

阅读全文(2199) | 评论:0

JSP技术分享:常用禁止缓存的四种方法(2012-12-25 12:08:00)

摘要: 以下是常用禁止缓存的四种方法: 1、客户端缓存要在head中加入类似如下内容: <META HTTP-EQUIV="pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"> <META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT"> 或 <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> 2、在服务器的动态网页中禁止缓存,要加入类似如下脚本: response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires", 0); 3、设置有限时间的缓存: int minutes = 10; Date d = new Date(); String modDate = d.toGMTString(); String expDate = null; expDate = (new Date(d.getTime() + minutes * 60000))。toGMTString(); response.setHeader("Last-Modified", modDate); response.setHeader("Expires", expDate); response.setHeader("Cache-Control", "public"); //  ......

阅读全文(1733) | 评论:0

Spring获取WebApplicationContext为null解决方案(2012-12-24 11:14:00)

摘要: 在web.xml中配置Spring,配置如下     <servlet>     <servlet-name>springServlet</servlet-name>     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>     <init-param>     <param-name>contextConfigLocation</param-name>     <param-value>/WEB-INF/applicationContext.xml</param-value>     </init-param>     <load-on-startup>1</load-on-startup>     </servlet>     在Servlet中通过WebApplicationContextUtils.getWebApplicationContext(getServletContext())获取WebApplicationContext对象为null.这是由于除了配置DispatcherServlet,还需要配置ContextLoaderServlet,否则无法获取WebApplicationContext.配置方法如下,在web.xml中加入     <servlet>     <servlet-name>context</servlet-......

阅读全文(1983) | 评论:0