嵌入式笔试刷题(第10天)
1. 分时操作系统的主要目的是提高计算机系统的性能。( )
✅ 正确。
解释:分时操作系统通过快速切换多个任务,让每个任务都能“占用”CPU一段时间,从而提高系统的响应速度和CPU的利用率,最终提升整体性能。
2. 一个任务从运行状态变成就绪状态必定会引起任务的切换。( )
❌ 错误。
解释:任务从运行转为就绪只是说明该任务不再运行,但不一定引起任务切换(如没有高优先级任务)。只有调度器主动调度别的任务才会真正发生切换。
3. 块设备不能直接与I/O系统交互,I/O系统与块设备之间必须有文件系统。( )
❌ 错误。
解释:块设备如硬盘可以被I/O系统直接访问(如通过dd
命令),文件系统只是用于提供文件层次结构的抽象。
4. 一个任务可以从运行状态变成等待状态,也可以从等待状态变成运行状态。( )
❌ 错误。
解释:任务不能从等待状态直接进入运行状态,必须先变成就绪状态,再由调度器选中才能运行。
5. 按实时性来分,嵌入式系统可分为几类?它们的特点是什么?
答:
- 硬实时系统:对时间要求极高,必须在指定时间完成任务,如汽车刹车系统。
- 软实时系统:尽量满足时限,但偶尔延迟可以接受,如多媒体播放器。
- 非实时系统:对时间无严格要求,如文件拷贝。
6. 什么是死锁,什么是锁住?
- 死锁:多个任务互相等待彼此释放资源,导致系统停滞。
- 锁住:一个任务对资源加锁,不释放,其他任务被阻塞,但不是互相等待。
7. 软件测试的意义:
答:验证软件是否符合设计需求,发现潜在缺陷,提升可靠性、健壮性和用户满意度。
8. C 程序题:将一个数组 char A[n]
的每个字节的8bit数据高低调转,存到 B[n]
#include <stdio.h> unsigned char reverse_bits(unsigned char byte) { unsigned char rev = 0; for (int i = 0; i < 8; ++i) { rev <<= 1; rev |= (byte & 1); byte >>= 1; } return rev; } void reverse_array_bits(unsigned char A[], unsigned char B[], int n) { for (int i = 0; i < n; ++i) { B[i] = reverse_bits(A[i]); } }
9. 用 dot(x, y) 实现 lineto(x1, y1, x2, y2)
使用 Bresenham 算法画线:
void dot(int x, int y); // 画点函数 void lineto(int x1, int y1, int x2, int y2) { int dx = abs(x2 - x1), dy = abs(y2 - y1); int sx = x1 < x2 ? 1 : -1; int sy = y1 < y2 ? 1 : -1; int err = dx - dy; while (1) { dot(x1, y1); if (x1 == x2 && y1 == y2) break; int e2 = 2 * err; if (e2 > -dy) { err -= dy; x1 += sx; } if (e2 < dx) { err += dx; y1 += sy; } } }
10. u-boot 向 Linux 2.6+ 传递启动参数的方法:
答:通过 bootargs
环境变量传递。使用结构体 tag
(ATAG)或设备树(DTB)。
常见参数:
root=
:根文件系统位置console=
:串口输出设备init=
:init 进程路径mem=
:内存大小
11. 数组名做实参时传的是?
✅ A. 数组空间的首地址
12. 枚举题:enum language { Basic=3 , Assembly , Ada=100 , COBOL , Fortran };
✅ C. 102
解释:Basic=3, Assembly=4, Ada=100, COBOL=101, Fortran=102
13. 共用体内存分配:
✅ C. 成员中占内存量最大者所需的容量
14. 哪个命令可以调整进程优先级?
✅ B. nice
15. 如何修改文件权限?
✅ A. chmod
16. 哪个符号使程序后台执行?
✅ B. &
17. swap 函数的问题:
swap(int *p1 ,int *p2) { int *p; *p = *p1; *p1 = *p2; *p2 = *p; }
✅ D. 可能会破坏系统的正常工作状况
解释:p
未初始化就解引用,会导致段错误。
18. 程序判断 p1 == p2
:
int a, k = m = 4, *p1 = &k, *p2 = &m; a = p1 == p2;
✅ C. 0
解释:虽然 k=m=4
,但 k
和 m
是两个变量,地址不同。
19. 对结构体成员的引用:
struct sk{int a ; float b ; }data , *p; p = &data;
✅ *B. (p).a
或者更常见写法:p->a
20. 程序输出分析:
int a,b,c,d; a = 10; b = a++; // b = 10, a = 11 c = ++a; // a = 12, c = 12 d = 10 * a++; // d = 10 * 12 = 120, a = 13 printf("b, c, d: %d, %d, %d", b, c, d);
✅ 输出:b, c, d: 10, 12, 120
嵌入式笔试专栏 文章被收录于专栏
本专栏系统整理了嵌入式方向笔试中常见的知识点和高频考题,涵盖基础理论、常用算法、C语言陷阱、操作系统原理、驱动开发、常见外设通信协议(如 I2C/SPI/UART)、RTOS、Linux 内核、以及实用电路知识等内容。