嵌入式软件培训课程 嵌入式软件培训考试( 二 )


switch(i) {
case 9:i++;
case 10:i++;
case 11:i++;
default:i++;
}
printf("result= %d\n", i);
return 0;
}


A.12
B.13
C.11
D.14
答案:B


11、以下能对二维数组a进行完整初始化的语句是()
A.int a[2][3]=((0,1,2),(3,4,5));
B.int a[2][3]={{0,1,2},{3,4,5}};
C.int a[2][3]={{0,1},{2,3},{4,5}};
D.int a[2][3]={0,1,2,3,4};
答案:B


12、下面程序的输出值,正确的是()
#define CALC(x,y) x*y+x
int main()
{
int a = CALC(2 * 3, 3 + 2);
printf("result= %d\n", a);
return 0;
}


A.26
B.30
C.24
D.36
答案:A


13、下面程序的输出值,正确的是()
void swap(int *a, int *b) {
int *t;
t = a;
a = b;
b = t;
}
int main()
{
int x = 1, y = 2;
int *p = &x, *q = &y;
swap(p, q);
printf("%d %d\n", *p, *q);
return 0;
}


A.1 1
B.2 2
C.1 2
D.2 1
答案:C
解答:本题的swap函数是将形参中的a、b两个指针指向的地址交换了,实参p、q并没有变化 。可以比对一下:
swap(&x, &y); //有效果
void swap(int *a, int *b) {
int t;
t = *a;
*a = *b;
*b = t;
}


14、假如test指针的值为0x12345678,则表达式test_p[1]的指针地址值是()
char test[8] = { 0x01,0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
int *test_p = (int*)test;


A.0x12345678
B.0x1234567C
C.0x12345679
D.0x1234567A
答案:B


15、下面的C语言程序运行后,n的值是()
int n = 0;
int f = 17;
n = 4 * f % 3 + 1;


A.3
B.9
C.2
D.0
答案:A


16、下面那个操作可以将flag的bit[2](假定bit[31...0]对应flag的32位)置0()
A.flag|=4
B.flag^=4
C.flag&=~4
D.flag|=~4
答案:C


17、下面程序的运行结果为()
#define TEST(a,b) a*b
int main()
{
int a = TEST(1 + 2, 3);
printf("result= %d\n", a);
return 0;
}


A.2
B.3
C.7
D.9
答案:C


18、对于堆、栈、队列描述错误的是()
A.队列空间缓冲由进程申请,栈的空间缓冲由OS分配
B.堆总是一棵完全二叉树
C.堆的数据类型和队列相似
D.队列先进先出,栈后进先出
答案:B


19、以下对字符数组test赋值方式错误的是()
A.char test[10]; strcpy(test,"test");
B.char test[10]; test="test";
C.char test[]={\'t\',\'e\',\'s\',\'t\'};
D.char test[10]={\'t\',\'e\',\'s\',\'t\'};
答案:B


20、可用于中断下半段处理的处理机制有()
A.tasklet
B.工作队列
C.软中断
D.双向链表
答案:ABC
解答:上半部是不能中断的,仅仅是响应中断;下半部是可以中断的 。对于适时要求高的,必须放在上半部 。下半部的实现主要是通过软中断、tasklet、工作队列来实现的 。上半部的功能是响应中断 。当中断发生时,它就把设备驱动程序中中断处理例程的下半部挂到设备的下半部执行队列中去,然后继续等待新的中断到来 。这样一来,上半部的执行速度就会很快,它就可以接受更多它负责的设备所产生的中断了 。上半部之所以快,是因为它是完全屏蔽中断的,如果它没有执行完,其他中断就不能及时地处理,只能等到这个中断处理程序执行完毕以后 。所以要尽可能多的对设备产生的中断进行服务和处理,中断处理程序就一定要快;下半部的功能是处理比较复杂的过程 。下半部和上半部最大的区别是可中断,而上半部却不可中断 。下半部几乎完成了中断处理程序所有的事情,因为上半部只是将下半部排到了它们所负责的设备中断的处理队列中去,然后就不做其它的处理了 。下半部所负责的工作一般是查看设备以获得产生中断的事件信息,并根据这些信息(一般通过读设备上的寄存器得来)进行相应的处理 。下半部是可中断的,所以在运行期间,如果其它设备产生了中断,这个下半部可以暂时的中断掉,等到那个设备的上半部运行完了,再回头运行这个下半部 。


特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。