嵌入式笔试

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37787043/article/details/79844556

1.在int a[3][4]={0}中,数组a中每个元素均可以得到初值0;
在int a[3][4]={2}中,数组a中第一个元素为2,其余为0;
在int a[3][4]={{2}}中,数组a中第一个元素为2,其余为0;
在二维数组中,没有赋初值的,都默认为0.

2.CPU主要组成部分是运算器和控制器。

3.单片机程序一般存放在ROM里面。

4.-3的补码是??(3的原码取反再加1)
0000 0011–》1111 1100–》1111 1101
总结:
正整数的原码、反码和补码都一样;
负数部分:
原码和反码的相互转换:符号位不变,数值位按位取反
原码和补码的相互转换:符号位不变,数值位按位取反,末位再加1
已知补码,求原码的负数的补码:符号位和数值位都取反,末位再加1

1.试着简述一下DMA??
答:DMA是一种无须CPU的参与就可以让外设与系统内存之间进行双向数据传输的硬件机制,使用DMA可以让系统CPU从实际的I/O数据传输中摆脱出来,从而大大提高系统的吞吐量。

2.中断和轮询哪个效率高??怎样决定是采用中断方式还是轮询方式去实现驱动??
答:中断是CPU处于被动状态下接收设备的信号,而轮询是CPU主动去查询该设备是否有请求。如果请求设备是一个频繁请求CPU的设备,或者有大量数据请求的网络设备,那么轮询的效率比中断高。如果是一般设备,并且该设备请求CPU的概率比较低,则用中断的效率高。

3.const有什么用途(至少2种)??
(1)可以定义const常量,例如:
const int Max = 100;
int Array[Max];
(2)便于进行类型检查,例如:
void fun(const int i){……….}
(3)可以保护被修饰的变量
void fun(const int i)
{
i = 10;//编译报错
}
(4)为函数重载提供参考
class A
{
……
void fun(int i){…}file;//一个函数
void fun{int i}const{…}file;//上一个函数的重载
……
}
(5)可以节约空间,避免不必要的内存分配
#define PI 3.14159
const double pi = 3.1415
(6)提高效率
编译器通常不会为const常量分配存储空间,而是将它保存在符号表中,这使得它成为一个编译期间的常量,没有存储和读内存的操作,提高效率。

4.用变量a给出下面的定义
a)一个整型数(An integer)
int a;
b)一个指向整型数的指针(A pointer to an integer)
int *a;
c)一个指向指针的指针,它指向的指针是一个整型数(A pointer to a pointer to a integer)
int **a;
d)一个有10个整型数的数组(An array of 10 integer)
int a[10];
c)一个有10个指针的数组,该指针是指向一个整型数的(An array 10 pointers to integers)
int *a[10];
f)一个指向有10个整型数数组的指针(A pointer to an array of 10 integer)
int (*a)[10];
g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that an integer as an argument and return an integer)
int (*a)(int);
h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(An array of ten pointers to functions that take an
integer argument and return an integer)
int (*a[10])(int);

5.sizeof和strlen汇总:
1. strlen 是函数,sizeof 是运算符。
2.strlen 测量的是字符的实际长度,以’\0’ 结束,而sizeof 测量的是字符的分配大小。
3.数组作为sizeof的参数不退化,传递给strlen会退化为指针。 (详细看我的其他博客)

6.static全局变量和普通全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数和普通函数有什么区别?
答:(1)static全局变量只初始化一次,在其他文件中不能使用;
(2)static局部变量只被初始化一次,下一次依据上一次结果值;
(3)static函数在内存中只有一份,表示该函数在本文件中有效,别的文件中不能应用该函数;普通函数是全局的,在其他文件中只要申明就可以调用这个函数。
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。
从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。
static函数与普通函数作用域不同。static函数仅在本文件中使用。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件

7.如何引用一个已经定义过的全局变量?
答:可以用引用头文件的方式,也可以用extern关键字。如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间 会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。

8.全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
答:可以,在不同的C文件中以static形式来声明同名全局变量。
可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。

9.队列和栈有什么区别和相同点??
答:
栈与队列的相同点:
1.都是线性结构。
2.插入操作都是限定在表尾进行。
3.都可以通过顺序结构和链式结构实现。
4.插入与删除的时间复杂度都是O(1),在空间复杂度上两者也一样。
5.多链栈和多链队列的管理模式可以相同。
栈与队列的不同点:
1.栈中元素先进后出(举例:开顶箱),队列中元素先进先出(举例:火车从山洞一端开进,从山洞另一端开出,车厢好比一个个元素,最先进入山洞的车厢先出,后进山洞的车厢后出。);
1.删除数据元素的位置不同,栈的删除操作在表尾进行,队列的删除操作在表头进行。
2.应用场景不同;常见栈的应用场景包括括号问题的求解,表达式的转换和求值,函数调用和递归实现,深度优先搜索遍历等;常见的队列的应用场景包括计算机系统中各种资源的管理,消息缓冲器的管理和广度优先搜索遍历等。
3.顺序栈能够实现多栈空间共享,而顺序队列不能。

猜你喜欢

转载自blog.csdn.net/weixin_37787043/article/details/79844556