logo资料库

嵌入式软件工程师笔试题.pdf

第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
资料共17页,剩余部分请下载后查看
嵌入式软件工程师笔试题 嵌入式软件工程师笔试题 嵌入式软件工程师笔试题收集整理 嵌入式软件工程师笔试题 1、将一个字符串逆序 2、将一个链表逆序 3、计算一个字节里(byte)里面有多少bit被置1 4、搜索给定的字节(byte) 5、在一个字符串中找到可能的最长的子字符串 6、字符串转换为整数 7、整数转换为字符串 1、c51单片机的串口异步通信和同步通信的区别,说说他们的优缺点。 2、C51单片机的数据总线和地址总线是如何复用的,说明原理。 3、C51单片机的绝对寻址范围是多少k? 4、说明下面的寻址方式 (1)MOV A , #30H (2)MOV A,@R0 (3)ADD A , R4 (4)MOVA+@DPTR 5、写出下面分别是什么指针? (1)int *a[10]; (2)int(*a)[10]; (3)int(*P)(int) ; (4)int (*a[10])(int); 6、 void swap(int a,int b) { int temp; temp = a; a=b; b=temp; } main(void) { int x="3",y=4; swap(x,y); } 问 上面程序执行完后 x= ?,y=? 7、typedef structtest{ int i; short s; char c;
union{ int a; short b; } }example ; int y ; y = sizeof(example); 请问在TC环境下,y=? 8、编程实现数组的逆置,例如,“hello,world!”逆置后为“!dlrow,olleh”。 9、你认为嵌入式操作系统包括哪些部分?说说实时操作系统有哪些特点。 10、冯诺依曼结构的计算机由哪几部分组成? 11、说说程序,进程,线程的区别。 12、说说你怎样理解 程序 = 数据 + 结构 + 算法 13、根据函数原型编程实现 一个数组,按从大到小的冒泡排序。 void tibbule(int a[],int n);//a[]为数组,n为数组长度 14、OSI有哪几层?tcp/ip包括哪几层? 15、编程实现一个双链表的节点插入和删除。 5。写一个数据类型:一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个 整型数。 6。嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a 的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。 7。嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址 为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。 8。字符串倒序。 9。float a,b,c 问下列两个的值: (a+b)+c == (b+a)+c (a+b)+c == (a+c)+b 10。关键字static的作用是什么? 关键字const有什么含意? 11。关键字volatile有什么含意?并给出三个不同的例子。 1)一个参数既可以是const还可以是volatile吗?解释为什么。 2) 一个指针可以是volatile 吗?解释为什么。 3)下面的函数有什么错误: int square(volatile int *ptr) { return *ptr * *ptr;
} 12。嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址 为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。 13。动态内存分配 下面的代码片段的输出是什么,为什么? char *ptr; if ((ptr = (char *)malloc(0)) == NULL) puts("Got a null pointer"); else puts("Got a valid pointer"); 14。Typedef 在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。 例如,思考一下下面的例子: #define dPS struct s * typedef struct s * tPS; 以上两种情况的意图都是要定义dPS 和 tPS 作为一个指向结构s指针。哪种方法更好呢?(如果有的话) 为什么? 15。中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具 代表事实是,产生了一个新的关键字 __interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断 服务子程序(ISR),请评论一下这段代码的。 __interrupt double compute_area (double radius) { double area = PI * radius * radius; printf("\nArea = %f", area); return area; } 16。下面的代码输出是什么,为什么? void foo(void) { unsigned int a = 6; int b = -20; (a+b > 6) ? puts("> 6") : puts("<= 6"); } 17。评价下面的代码片断: unsigned int zero = 0; unsigned int compzero = 0xFFFF; /*1's complement of zero */ 18。C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?
int a = 5, b = 7, c; c = a+++b; 19。编写一个可重入的函数。 20。编写ISR需要注意哪些地方? 21。如何设计一个内存拷贝函数,考虑效率及强健性原则。 22。怎样理解"地址对齐","内存分配","处理器字节序"的意义,应用上有什么需要注意的地方吗?举例。 如何测试一个处理器的字节序? 23。至少举两个例子从硬件和微码执行的角度说明CPU响应中断的过程。 24。如何实现任务调度? 25。如何避免优先级反转? 26。任务锁和终端锁之间的区别,应用上应该怎么去选择? 27。进程间通讯与同步的手段有哪些?举例说明。 4 嵌入式系统相关问题 a) 对于整形变量A=0x12345678,请画出在little endian及big endian的方式下在内存中是如何存储的。 b) 在ARM系统中,函数调用的时候,参数是通过哪种方式传递的? c) 中断(interrupt,如键盘中断)与异常(exception,如除零异常)有何区别? 定: 1) 下面的测试题中, 认为所有必须的头文件都已经正确的包含了 2) 数据类型 char 一个字节 1 byte int 两个字节 2 byte (16位系统, 认为整型是2个字节) long int 四个字节 4 byte float 四个字节4 byet double 八个字节 8 byte long double 十个字节 10 byte pointer 两个字节 2 byte(注意, 16位系统, 地址总线只有16位) 第1题: 考查对volatile关键字的认识 #include static jmp_buf buf; main() { volatile int b; b =3; if(setjmp(buf)!=0) { printf("%d ", b); exit(0);
} b=5; longjmp(buf , 1); } 请问, 这段程序的输出是 (a) 3 (b) 5 (c) 0 (d) 以上均不是 第2题:考查类型转换 main() { struct node { int a; int b; int c; }; struct node s= { 3, 5,6 }; struct node *pt = &s; printf("%d" , *(int*)pt); } 这段程序的输出是: (a) 3 (b) 5 (c) 6 (d) 7 第3题:考查递归调用 int foo ( int x , int n) { int val; val =1; if (n>0) { if (n%2 == 1) val = val *x; val = val * foo(x*x , n/2); }
return val; } 这段代码对x和n完成什么样的功能(操作)? (a) x^n (x的n次幂) (b) x*n(x与n的乘积) (c) n^x(n的x次幂) (d) 以上均不是 第4题:考查指针,这道题只适合于那些特别细心且对指针和数组有深入理解的人 main() { int a[5] = {1,2,3,4,5}; int *ptr = (int*)(&a+1); printf("%d %d" , *(a+1), *(ptr-1)); } 这段程序的输出是: (a) 2 2 (b) 2 1 (c) 2 5 (d) 以上均不是 第5题:考查多维数组与指针 void foo(int [][3]); main() { int a [3][3]= { { 1,2,3} , { 4,5,6},{7,8,9}}; foo(a); printf("%d" , a[2][1]); } void foo(int b[][3]) { ++ b; b[1][1] =9; } 这段程序的输出是: (a) 8 (b) 9 (c) 7 (d)以上均不对
第6题:考查逗号表达式 main() { int a, b,c, d; a=3; b=5; c=a,b; d=(a,b); printf("c=%d" ,c); printf("d=%d" ,d); } 这段程序的输出是: (a) c=3 d=3 (b) c=5 d=3 (c) c=3 d=5 (d) c=5 d=5 第7题:考查指针数组 main() { int a[][3] = { 1,2,3 ,4,5,6}; int (*ptr)[3] = a; printf("%d %d ", (*ptr)[1], (*ptr)[2]); ++ptr; printf("%d %d" , (*ptr)[1], (*ptr)[2]); } 这段程序的输出是: (a) 2 3 5 6 (b) 2 3 4 5 (c) 4 5 0 0 (d) 以上均不对 第8题:考查函数指针 int *f1(void) { int x =10; return(&x); } int *f2(void)
{ int*ptr; *ptr =10; return ptr; } int *f3(void) { int *ptr; ptr=(int*) malloc(sizeof(int)); return ptr; } 上面这3个函数哪一个最可能引起指针方面的问题 (a) 只有 f3 (b) 只有f1 and f3 (c) 只有f1 and f2 (d) f1 , f2 ,f3 第9题:考查自加操作(++) main() { int i=3; int j; j = sizeof(++i+ ++i); printf("i=%d j=%d", i ,j); } 这段程序的输出是: (a) i=4 j=2 (b) i=3 j=2 (c) i=3 j=4 (d) i=3 j=6 第10题:考查形式参数, 实际参数, 指针和数组 void f1(int *, int); void f2(int *, int); void(*p[2]) (int *, int); main() { int a; int b;
分享到:
收藏