嵌入式笔试刷题(第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,但 km 是两个变量,地址不同。

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 内核、以及实用电路知识等内容。

全部评论
分时系统性能提升
点赞 回复 分享
发布于 04-15 15:10 黑龙江

相关推荐

如果你不知道如何准备面试内容,那你一定要先经历一次面试。说实话,我第一次拿到面试机会是在23年底,那是我在BOSS上找的实习,我一开始也不清楚如何准备,我只得去反复从招聘内容里面复习相关的内容,但最终还是复习的不到位,没有了解到相关内容而没通过面试。也是从这次开始,我从处女面的内容中知道了我所缺乏的知识,也因此我可以针对性的再去补偿相关方面的内容。因此,对于不知道如何准备面试的同学,我建议三点:第一:一定要去经历一轮面试,不管是什么内容的面试,这可以让你实打实的了解到面试的内容以及流程,在经历这第一轮处女面之后,你就从面试中自己的缺点出发,不断的补充短板,从而达到一个近似均衡的六边形战士!第二:可以提前去牛客、某乎或者小某书上了解是否有相关的面试经验帖子,这一般是有最大帮助的,对于大厂的面经一般都不会少;如果你是小厂的面试,在找不到相关面经的前提下,你可以去公司官网了解一下公司的信息,包括但不限于公司的产品、理念以及在行业中的发展情况。了解公司的产品可以猜测到一些可能会问到的问题:比如:xx公司是做xx整机设备的,那么就极有可能问到相关材料特性、零部件选型以及对于这方面的前景的看法等相关的问题;理念和发展情况一般在人事面中可能会遇到,可以简单留个印象,避免hr问你是否了解过我们公司这种问题而回答不上来。第三:如果有相关竞赛项目或者社团活动,一定要吃熟相关的环节。比如在项目中,你的机器是如何设计的,为什么这样设计?你的材料是如何选择的,你为什么要选择这个材料?为什么不选择xx材料?这都是常见问题,所以自己一定要心里提前有一套说辞。社团活动也一样,我经历的问的最多的就是:你在xx活动/项目中遇到的困难是什么,怎么解决的?对于这个问题的话我认为大家不必去考虑太复杂的回答,只要简单假设出一个突发事件,然后按部就班的解决即可,没有固定答案的,只要能回答上来即可。我对于面试前的准备一般就这三点,最终要的还是第二点,面对不同的企业需要不断的去重新了解不同企业的产品及理念,至于第三点则基本可以通用,回答过一次基本就没什么问题了。#面试之前应该如何准备?#
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务