(十三)嵌入式面试题收集:6道

问题 1:分别画出由 RC 和 LC 组成的低通滤波电路和高通滤波电路(修正 "R0" 为 "RC")

1. RC 低通滤波电路
  • 电路结构:电阻 R 与电容 C 串联,输入信号接 R 的一端,输出信号从电容 C 两端引出(地与 C 非 R 连接端)。

  • 核心注释

    plaintext

    复制代码
    输入 → R → C → 地
            ↑
           输出(C两端)
    // 原理:电容容抗Xc=1/(2πfC),频率f越低,Xc越大,低频信号绝大部分落在C两端被输出;
    // 高频信号Xc极小,近似短路,高频信号被接地,无法输出,实现低通。
2. RC 高通滤波电路
  • 电路结构:电阻 R 与电容 C 串联,输入信号接 C 的一端,输出信号从电阻 R 两端引出(地与 R 非 C 连接端)。

  • 核心注释

    plaintext

    复制代码
    输入 → C → R → 地
            ↑
           输出(R两端)
    // 原理:高频信号Xc极小,可顺利通过电容,在R两端形成输出;
    // 低频信号Xc极大,难以通过电容,R两端无有效信号,实现高通。
3. LC 低通滤波电路
  • 电路结构:电感 L 与电容 C 并联,输入接并联电路一端,输出接并联电路另一端(地接并联电路公共端)。

  • 核心注释

    plaintext

    复制代码
          ┌─ L ─┐
    输入 ─┤      ├─ 输出
          └─ C ─┘
            ↓
           地
    // 原理:电感感抗Xl=2πfL,低频信号Xl小,近似短路,可通过L传输;
    // 高频信号Xc小,近似短路,高频信号被C接地,无法输出,实现低通。
4. LC 高通滤波电路
  • 电路结构:电感 L 与电容 C 串联,输入接 C 的一端,输出接 L 的非 C 连接端(地接 L 另一端)。

  • 核心注释

    plaintext

    复制代码
    输入 → C → L → 地
            ↑
           输出(L非C端)
    // 原理:高频信号Xc小,可通过C,且L对高频阻碍小,形成有效输出;
    // 低频信号Xl小,近似短路,低频信号被L接地,且C对低频阻碍大,无法输出,实现高通。

问题 2:计算结构体 s2 的内存大小(64 位操作系统)

前置规则(注释)
复制代码
/* 64位系统内存对齐规则:
1. 基本类型自身对齐:char(1)、bool(1)、short(2)、int(4)、double(8)、long double(16)、指针(8);
2. 结构体整体对齐:最终大小为结构体中最大基本类型对齐值的整数倍;
3. 成员对齐:每个成员起始地址为自身对齐值的整数倍,不足则补空字节(填充)。
*/
步骤 1:计算 struct s1 的大小(带逐行注释)
复制代码
struct s1{
    char a;        // 1字节,自身对齐1 → 起始地址0,占用[0],补15字节填充(凑8?不,最大基本类型是long double(16),对齐单位16)→ 实际占用[0-15](16字节)
    bool b;        // 1字节,自身对齐1 → 起始地址16,占用[16],累计17字节
    (char*) c[2];  // 2个字符指针,每个8字节,共16字节 → 起始地址17(非8倍数),补15字节填充到32,占用[32-47],累计48字节
    int d;         // 4字节,自身对齐4 → 起始地址48(4的倍数),占用[48-51],累计52字节
    const char* f; // 8字节,自身对齐8 → 起始地址52(非8倍数),补4字节填充到56,占用[56-63],累计64字节
    long double(*g)[2]; // 函数指针(本质指针),8字节 → 起始地址64(8的倍数),占用[64-71],累计72字节(非16倍数,补8字节到80)
    double e[2];   // 2个double,每个8字节,共16字节 → 起始地址80(8的倍数),占用[80-95],累计96字节
};
// struct s1最大基本类型对齐值:long double(16),96是16的整数倍 → s1大小=96字节
步骤 2:计算 struct s2 的大小(带逐行注释)
复制代码
struct s2{
    int *a1[2];    // 2个int指针,每个8字节,共16字节 → 起始地址0,占用[0-15],累计16字节
    char b1[3];    // 3字节char数组,自身对齐1 → 起始地址16,占用[16-18],累计19字节(补1字节填充到20,凑short对齐值2)
    short c1;      // 2字节short,自身对齐2 → 起始地址20(2的倍数),占用[20-21],累计22字节(补2字节填充到24,凑8的倍数)
    struct s1 s3;  // 嵌套结构体s1,大小96字节,对齐值16 → 起始地址24(非16倍数,补0?24是8倍数,s1对齐值16,补8字节到32)→ 占用[32-127],累计128字节
    int (*e1)[4];  // 数组指针(本质指针),8字节 → 起始地址128(8的倍数),占用[128-135],累计136字节?
    // 修正:重新逐行精准计算
    int *a1[2];    // [0-15] → 16字节(2×8)
    char b1[3];    // [16-18] → 3字节,累计19 → 补1字节([19])→ 20字节(凑short对齐)
    short c1;      // [20-21] → 2字节,累计22 → 补2字节([22-23])→ 24字节(凑8倍数)
    struct s1 s3;  // [24-119] → 96字节,累计24+96=120字节
    int (*e1)[4];  // [120-127] → 8字节,累计128字节
};
// struct s2最大基本类型对齐值:指针(8),128是8的整数倍 → s2大小=128字节
/* 最终结论:
struct s1 内存大小:96字节
struct s2 内存大小:128字节
*/

问题 1:指针运算代码的运算结果

代码:

复制代码
#include <stdio.h>
int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int *p = arr + 5;
    int *q = arr + 3;
    printf("%d\n", p - q);
    printf("%d\n", (char*)p - (char*)q);
    return 0;
}

答案及注释

  1. p - q的结果:2

    • 指针相减(同类型),结果是 "元素个数差"。p指向arr[5]q指向arr[3],差值为5-3=2
  2. (char*)p - (char*)q的结果:8

    • 强转为char*后,指针相减的结果是 "字节数差"。64 位系统中int占 4 字节,2个int元素对应的字节数是2×4=8

问题 2:无符号数与有符号数运算的代码结果

代码:

复制代码
#include <stdio.h>
int main() {
    unsigned int a = 1;
    int b = -2;
    if (a + b > 0) {
        printf("Positive\n");
    } else {
        printf("Non-positive\n");
    }
    return 0;
}

答案及注释 :输出:Positive

  • unsigned intint运算时,int会被隐式转换为unsigned int
  • b=-2unsigned int后是 "无符号最大值 - 1"(64 位系统中为4294967294),与a=1相加得4294967295,远大于 0,因此进入if分支。

问题 3:宏定义SQUARE(x)的潜在问题(代码未完整展示,补充常见考点)

代码片段:

复制代码
#include <stdio.h>
#define SQUARE(x) x * x

常见考点示例 :若执行SQUARE(2+3),结果是11(而非25

  • 宏是 "文本替换",SQUARE(2+3)会被替换为2+3*2+3,按运算优先级计算得2+6+3=11
  • 正确写法应加括号:#define SQUARE(x) (x) * (x)(或((x)*(x)))。

相关推荐
国科安芯2 小时前
国产RISC-V架构MCU在工控系统中的节能性分析
网络·单片机·嵌入式硬件·fpga开发·性能优化·架构·risc-v
夜月yeyue3 小时前
Linux内高端内存
linux·运维·单片机·嵌入式硬件·ci/cd·硬件架构
沉在嵌入式的鱼6 小时前
linux串口对0X0D、0X0A等特殊字符的处理
linux·stm32·单片机·特殊字符·串口配置
学习路上_write6 小时前
AD5293驱动学习
c语言·单片机·嵌入式硬件·学习
影阴7 小时前
存储器和寄存器
stm32·单片机·嵌入式硬件
吃西瓜的年年8 小时前
3. C语言核心语法2
c语言·嵌入式硬件·改行学it
李洛克078 小时前
RDMA CM UDP 通信完整指南
单片机·网络协议·udp
思茂信息8 小时前
CST电动车EMC仿真——电机控制器MCU滤波仿真
javascript·单片机·嵌入式硬件·cst·电磁仿真
小曹要微笑9 小时前
I2C总线技术解析(纯文字版)
单片机·嵌入式硬件·esp32·iic