嵌入式软件笔试题_第1页
嵌入式软件笔试题_第2页
嵌入式软件笔试题_第3页
嵌入式软件笔试题_第4页
嵌入式软件笔试题_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、凹凸笔试题目嵌入式软件开发2007 02 - 07Embedded Software Desig n Engin eer1读程序段,答复下列问题int main (i nt argc,char *argv)int c=9,d=0;c=c+%5;d=c;pri ntf("d=%dn",d);return 0;a) 写岀程序输岀b) 在一个可移植的系统中这种表达式是否存在风险why?#i nclude ""int a=0;int b;static char c;int main (i nt argc,char *argv)char d=4;static sh

2、ort e;a+;b=100;c=(char)+a;e=(+d)+;pri ntf("a=%d, b=%d, c=%d, d= %d, e=%d",a,b,c,d,e);return 0;a) 写岀程序输岀b) 编译器如果安排各个变量(a,b,c,d) 在内存中的布局 (eg. stack,heap,data section,bsssectio n),最好用图形方式描述.2中断是嵌入式系统中重要的组成局部,这导致了许多编译开发商提供一种扩展:让标准C支持中断,产生了一个新的关键字in terrupt.下面的代码就使用了in terrupt关键字去定义了一个中断效劳子程序(I

3、SR),请评论以下这段代码._in terrupt double compute_area(double radius)double area = PI * radius *radius;pr in tf(" nArea = %f', area);return area;3 C/C+根底知识问题a) 关键字volatile在编译时有什么含义并给岀三个不同使用场景的例子(可以伪代码或者文字描述).b) C语言中static关键字的具体作用有哪些?c) 请问下面三种变量声明有何区别请给岀具体含义 int const *p;int* const p;int con st* cons

4、t p;4嵌入式系统相关问题a对于整形变量 A=0x,请画岀在little endian及big endian的方式下在内存中是如何存储的.b在ARM系统中,函数调用的时候,参数是通过哪种方式传递的?c中断interrupt,如键盘中断与异常exception,如除零异常有何区别?5设周期性任务 P1,P2,P3的周期为T1,T2,T3分别为100,150,400 ;执行时间分别为20,40,100 请设计一种调度算法进行任务调度,满足任务执行周期及任务周期.6优先级反转问题在嵌入式系统中是一中严重的问题,必须给与足够重视.a首先请解释优先级反转问题b很多 RTOS提供优先级继承策略Prior

5、ity inheritanee和优先级天花板策略Priorityceili ngs用来解决优先级反转问题,请讨论这两种策略.参考答案:1 5存在风险,由于c=c+%5;这个表达式对c有两次修改,行为未定义,c的值不确定inta=0;int ripple (int n,.)int i , j;int k;va_list p;k= 0;j = 1;va_start( p , n);for (; j<n; +j)i = va_arg( p , int);for (; i; i &=i-1 )+k;return k;这段程序的输出是7(b) 6(c) 5(d) 3第16题:考查静态变量的

6、知识int counter (int i)static int count =0;count = count +i;return (count );main()int i , j;for (i=0; i <=5; i+)j = counter(i);本程序执行到最后,j的值是:10(b) 15(c) 6(d) 7详细参考答案第1题:(b)volatile字面意思是易于挥发的.这个关键字来描述一个变量时,意味着 给该变量赋值(写入)之后,马上再读取,写入的值与读取的值可能不一样,所以说它"容易挥发的.这是由于这个变量可能一个存放器,直接与外部设备相连,你写入之后,该存放器也 有可

7、能被外部设备的写操作所改变;或者,该变量被一个中断程序,或另一个进程改变了 volatile不会被编译器优化影响,在longjump后,它的值 是后面假定的变量值,b最后的值是5,所以5被打印出来setjmp :设置非局部跳转/* */Stores con text in formatio nsuch as register values so that the lomgjmp functioncan return control to the statement following the one calling 0 when it isin itially called.Lonjjmp:执

8、行一个非局部跳转/* */Transferscontrolto the statement where the call to setjmp (which initializedbuf) was made. Execution continues at this point as if Iongjmp cannot return the value non volatile automatic variable might be cha nged by a call to you use setjmp and Ion gjmp, the only automatic variablesguar

9、a nteed to rema in validare those declared volatile.Note: Test program without volatile qualifier (result may very)更详细介绍,请参阅 C语言的setjmp和longjmp第2题:(a)结构题的成员在内存中的地址是根据他们定义的位置顺序依次增长的.如果一个结构体的指针被看成它的第一个成员的指针,那么该指针确实指向第一个成员第3题:此题目较难这个程序的非递归版本int what ( int x , int n) int val;int product;product =1;val =

10、x;while(n>0)if (n%2 = 1)product = product*val; /*如果是奇数次幂,x(val)要先乘上一次,;偶数次幂,最后返回时才会到这里乘以1*/val = val* val;n = n/2;return product;/*用二元复乘策略*/算法描述(while n>0)if next most significant binary digit of n( power) is onethen multiply accumulated product by current val ,reduce n(power) sequence by a fa

11、ctor of two using integer division .get next val by multiply current value of itself第4题:(c)a的类型是一个整型数组,它有5个成员&a的类型是一个整型数组的指针所以&a + 1指向的地方等同于 a6题目自身就给了足够的提示b00 = 4b10 = 7第6题:(c)考查逗号表达式,逗号表达式的优先级是很低的,比赋值(=)的优先级 低逗号表达式的值就是最后个兀素的值逗号表达式的还有一个作用就是分割函数的参数列表E1, E2,En上面这个表示式的左右是,E1, E2,En的值被分别计算出来,En计

12、算出来的结构赋给整个逗号表达式c=a,b; / *yields c=a* /d=(a,b); /* d =b */第7题:(a)a0al1245ptr+ptrptr是一个数组的指针,该数组有3个int成员第8题:(c)fl显然有问题,它返回一个局部变量的指针,局部变量是保存在stack中的,退出函数后,局部变量就销毁了,保存其指针没有意义,由于其指向的stack空间可能被其他变量覆盖了f2也有问题,ptr是局部变量,未初始化,它的值是未知的,*ptr不知道指向哪里了,直接给*ptr赋值可能会覆盖重要的系统变量,这就是通常说的野指针的一种第9题:(b)sizeof操作符给出其操作数需要占用的空间

13、大小,它是在编译时就可确定的,所以其操作数即使是一个表达式,也不需要在运行时进行计算.(+i + + i )是不会执行的,所以i的值还是3第10题:(a)很显然选a.f1交换*p和q的值,f1执行完后,*p和q的值确实交换了 ,但q的改变不会影响到b的改变,*p实际上就是a所以执行fl后,a=b=5这道题考查的知识范围很广,包括typedef自定义类型,函数指针,指针数组void(*p 2 ) ( int *, i nt);定义了一个函数指针的数组p,p有两个指针元素元素是函数的指针,函数指针指向的函数是一个带2个参数,返回void的函数,所带的两个参数是指向整型的指针,和整型p 0 = f1

14、; p 1 = f2 contain address of function .fun cti on n ame withoutpare nthesis represe nt address of function Value and address of variable ispassed to function only argume nt that is effected is a (address is passed).Because of call by value f1, f2 can not effect b第11题:(a)卅2e( 1) terminates1) termina

15、tes , o); e(-0) terminates Jr e(-l) terminatesprin<t%dJ,、0);c(-)tennina.tcs考查-操作和递归调用,仔细分析一下就可以了第12题:(c)建议不会的看看 C专家编程从左往有,遇到括号停下来,将第一个括号里的东西看成一个整体第13题:(c)考查什么时候数组就是指针.对某些类型T而言,如果一个表达式是 T (T 的数组), 这.所以(buf+1)5实际上就是个表达式的值实际上就是指向该数组的第一个元素的指针*(buf +6)或者 buf6第14题:(b)sizeof(int) 的值是2,所以p+=sizeof(int)指向

16、argv2,这点估计大家都没有什么疑问(p+=sizeof(int)-1指向 argv1,能理解吗,由于(p+=sizeof(int)-1就相当于(p+=2)-1, 也就是(p+2-1)第15题:(c)在C编译器通常提供了一系列处理可变参数的宏,以屏蔽不同的硬件平台造成的差异,增加程序的可移植性.这些宏包括va_start、va_arg和va_end等.采用ANSI标准形式时,参数个数可变的函数的原型声明是:type funcn ame(type para1, type para2, .)这种形式至少需要一个普通的形式参数,后面的省略号不表示省略,而是函数原型的一局部.type是函数返回值和形

17、式参数的类型.不同的编译器,对这个可变长参数的实现不一样,中是内置函数关于可变长参数,可参阅urlurl程序分析va_list p; /*定义一个变量,保存函数参数列表的指针*/va_start( p , n);/*用va_start 宏初始化 变量p,va start宏的第2个参数n ,是一个固定的参数, 必须是我们自己定义的变长函数的最后一个入栈的参数也就是调用的时候参数列表里的第1个参数*/for (; j<n; +j)/* j从1开始, 遍历所有可变参数*/i = va_arg( p , int);/*va_arg取岀当前的参数,并认为取出的参数是一个整数 int */for (

18、; i; i &=i-1 )/*判断取出的i是否为0*/+k;/*如果i不为0, k自加,与i-1进行与逻辑运算,直到i为0这是一个技巧,下面会谈到它的功能*/当我们调用ripple 函数时,传递给ripple 函数的参数列表的第一个参数 n的值是3 . va_start初始化p 士气指向第一个未命名的参数 n是有名字的参数,也就是is 5 第- 个.每次对va_arg的调用,都将返回一个参数,并且把p指向下一个参数.va_arg用一个类型名来决定返回的参数是何种类型,以及在var_arg 的内部实现中决定移动多大的距离才到达下一个参数(;i; i&=i-1) k+/*计算i有多少bit被置1 */5用二进制表示是101 27用二进制表示 111 3所以k返回52+3,也即此题应该选c举个例子,就很好理解了令 i= 9 = 1001i-1 = 1000(i-1) +1 = i1000+11 001由于i与i-1的最右边的那位(最低位)肯定是不同,如果i1,i-1肯定是0,反之亦然 i& i-1这个运算,在二相补的数字系统中,将会消除最右边的1位第16题:(b)答案是(b)相

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论