嵌入式程序员应知道的0x10个基本问题.docx

上传人:夺命阿水 文档编号:141620 上传时间:2022-12-23 格式:DOCX 页数:10 大小:35.88KB
返回 下载 相关 举报
嵌入式程序员应知道的0x10个基本问题.docx_第1页
第1页 / 共10页
嵌入式程序员应知道的0x10个基本问题.docx_第2页
第2页 / 共10页
嵌入式程序员应知道的0x10个基本问题.docx_第3页
第3页 / 共10页
嵌入式程序员应知道的0x10个基本问题.docx_第4页
第4页 / 共10页
嵌入式程序员应知道的0x10个基本问题.docx_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《嵌入式程序员应知道的0x10个基本问题.docx》由会员分享,可在线阅读,更多相关《嵌入式程序员应知道的0x10个基本问题.docx(10页珍藏版)》请在课桌文档上搜索。

1、嵌入式程序员应知道的Ox1.O个基本问题goodguy发表留言于200561513:50:00C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这是个愚蠢的问题吗?如要你答出某个字符的ASCII值。这些问题着重考察你的系统调用和内存分配策略方面的能力吗?这标志着出题者也许花时间在微机上而不是在嵌入式系统上

2、。如果上述任何问题的答案是“是的话,那么我知道我得认真考虑我是否应该去做这份工作。从面试者的角度来讲,一个测试也许能从多方面揭示应试者的素质:最基本的,你能了解应试者C语言的水平。不管怎么样,看一下这人如何回答他不会的问题也是满有趣。应试者是以好的直觉做出明智的选择,还是只是瞎蒙呢?当应试者在某个问题上卡住时是找借口呢,还是表现出对问题的真正的好奇心,把这看成学习的机会呢?我发现这些信息与他们的测试成绩一样有用。有了这些想法,我决定出一些真正针对嵌入式系统的考题,希望这些令人头痛的考题能给正在找工作的人一点帮助。这些问题都是我这些年实际碰到的。其中有些题很难,但它们应该都能给你一点启迪。这个测

3、试适于不同水平的应试者,大多数初级水平的应试者的成绩会很差,经验丰富的程序员应该有很好的成绩。为了让你能自己决定某些问题的偏好,每个问题没有分配分数,如果选择这些考题为你所用,请自行按你的意思分配分数。预处理器(Preprocessor)1 .用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#defineSECONDS_PER_YEAR(60*60*24*365)U1.我在这想看到几件事情:1.)#define语法的基本知识(例如:不能以分号结束,括号的使用,等等)2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的

4、值,是更清晰而没有代价的。3)意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号1.,告诉编译器这个常数是的长整型数。4)如果你在你的表达式中用到U1.(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。2 .写一个“标准“宏MIN,这个宏输入两个参数并返回较小的一个。#defineMIN(A,B)(A)6)?puts(,6):puts(,6原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是非常重要的。如果你答错

5、了这个问题,你也就到了得不到这份工作的边缘。13 .评价下面的代码片断:unsignedintzero=0;unsignedintcompzero=OxFFFF;*scomp1.ementofzero*/对于一个im型不是16位的处理器来说,上面的代码是不正确的。应编写如下:unsignedintcompzero=0;这一问题真正能揭露出应试者是否懂得处理器字长的重要性。在我的经验里,好的嵌入式程序员非常准确地明臼硬件的细节和它的局限,然而PC机程序往往把硬件作为一个无法避免的烦恼。到了这个阶段,应试者或者完全垂头丧气了或者信心满满志在必得。如果显然应试者不是很好,那么这个测试就在这里结束了。

6、但如果显然应试者做得不错,那么我就扔出下面的追加问题,这些问题是比较难的,我想仅仅非常优秀的应试者能做得不错。提出这些问题,我希望更多看到应试者应付问题的方法,而不是答案。不管如何,你就当是这个娱乐吧.动态内存分配(DynamiCmemOrya1.IoCatiOn)14 .尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆(heap)中动态分配内存的过程的。那么嵌入式系统中,动态分配内存可能发生的问题是什么?这里,我期望应试者能提到内存碎片,碎片收集的问题,变量的持行时间等等。这个主题已经在ESP杂志中被广泛地讨论过了(主要是PJP1.aUger,他的解释远远超过我这里能提到的任何解释),所

7、以回过头看一下这些杂志吧!让应试者进入一种虚假的安全感觉后,我拿出这么一个小节目:下面的代码片段的输出是什么,为什么?char*ptr;if(ptr=(char*)ma1.1.oc(0)=NU1.1.)puts(,Gotanu1.1.pointer);e1.seputs(,Gotava1.idpointer);这是一个有趣的问题。最近在我的一个同事不经意把0值传给了函数maoc,得到了一个合法的指针之后,我才想到这个问题。这就是上面的代码,该代码的输出是”Gotava1.idPoimer。我用这个来开始讨论这样的一问题,看看被面试者是否想到库例程这样做是正确。得到正确的答案固然重要,但解决问题

8、的方法和你做决定的基本原理更重要些。Typedef15 Typedef在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。例如,思考一下下面的例子:#definedPSstructs*Iypedefstructs*tPS;以上两种情况的意图都是要定义C1.PS和IPS作为一个指向结构S指针。哪种方法更好呢?(如果有的话)为什么?这是一个非常微妙的问题,任何人答对这个问题(正当的原因)是应当被恭喜的。答案是:Iypedef更好。思考下面的例子:dPSp1.,p2;IPSp3,p4;第一个扩展为structs*p1.,p2;上面的代码定义P1.为一个指向结构的指,p2

9、为一个实际的结构,这也许不是你想要的。第二个例子正确地定义了p3和p4两个指针。(厉害!)晦涩的语法16.C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?inta=5,b=7,c;c=a+b;这个问题将做为这个测验的一个愉快的结尾。不管你相不相信,上面的例子是完全合乎语法的。问题是编译器如何处理它?水平不高的编译作者实际上会争论这个问题,根据最处理原则,编译器应当能处理尽可能所有合法的用法。因此,上面的代码被处理成:c=a+b;因此,这段代码持行后a=6,b=7,c=12o如果你知道答案,或猜出正确答案,做得好。如果你不知道答案,我也不把这个当作问题。我发现这个问题的最大

10、好处是这是一个关于代码编写风格,代码的可读性,代码的可修改性的好的话题。好了,伙计们,你现在已经做完所有的测试了。这就是我出的C语言测试题,我怀着愉快的心情写完它,希望你以同样的心情读完它。如果是认为这是一个好的测试,那么尽量都用到你的找工作的过程中去吧。天知道也许过个一两年,我就不做现在的工作,也需要找一个。软中断goodguy发表留言于200561513:48:00软中断:编程异常通常叫做软中断软中断是通讯进程之间用来模拟硬中断的一种信号通讯方式。中断源发中断请求或软中断信号后,CPU或接收进程在适当的时机自动进行中断处理或完成软中断信号对应的功能软中断是软件实现的中断,也就是程序运行时其他程序对它的中断:而硬中断是硬件实现的中断,是程序运行时设备对它的中断。1 .软中断发生的时间是由程序控制的,而硬中断发生的时间是随机的2 .软中断是由程序调用发生的,而硬中断是由外设引发的3 .硬件中断处理程序要确保它能快速地完成它的任务,这样程序执行时才不会等待较长时间

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号