20240727 影石 笔试

news2024/10/24 21:47:46

文章目录

  • 1、选择题
    • 1.1
    • 1.2
    • 1.3
    • 1.4
    • 1.5
    • 1.6
    • 1.7
    • 1.8
    • 1.9
    • 1.10
  • 2、简答题
    • 2.1
    • 2.2
    • 2.3
    • 2.4
    • 2.5
    • 2.6
    • 2.7
    • 2.8
  • 3、编程题
    • 3.1


岗位:云台嵌入式工程师-2025校招

题型:10 道选择题,8 道简答题,1 道编程题


1、选择题

1.1

【多选】以下关于DMA的描述哪些是准确的? (BCE)

  1. 控制器不能独立于 CPU 运行,需要 CPU 提供时钟信号
  2. DMA 控制器独立于 CPU 进行工作,将输入输出设备的数据直接送到内存,无需 CPU 参与,节省了中断处理的时间
  3. DMA 总是在数据准备好时立即开始,无论 CPU 状态如何
  4. 即使启用 DMA,CPU 仍然必须介入,将数据从输入输出设备传送到 DMA 缓冲区
  5. DMA 传输时,源地址和目标地址内存对齐是为了数据传输的效率和稳定性

解答:

DMA,直接内存读取,独立于 CPU 运行,无需 CPU 提供时钟信号,也无需 CPU 的介入,选项 A、D 错误

1.2

【单选】C++ 中 const 关键词的作用描述不正确的是 (D)

  1. const 函数不会修改类的数据成员
  2. const 成员变量不能被修改
  3. const 函数只能调用 const 函数
  4. const 函数可以调用任意函数

解答:

const 关键词用于修饰常量,不可修改,选项 A 正确
const 函数不能修改类的非 mutable 成员变量,选项 B 正确
const 函数只能调用 const 函数,因为如果调用其他函数,可能会对成员变量产生修改,选项 C 正确,选项 D 错误

1.3

【单选】设有一个空栈,现有输入序列为 1,2,3,4,5 经过 push,push,pop,push,pop,push,pop,push 后,栈还存储什么值? (C)

  1. 1,3
  2. 1,2
  3. 1,5
  4. 1,4

解答:

1 -> push
2 -> push -> pop -> 2
3 -> push -> pop -> 3
4 -> push -> pop -> 4
5 -> push

1.4

【单选】当需要将一个 GPIO 引脚设置为输出模式时,以下哪个位需要设置为 1 (B)

  1. 中断使能寄存器(IE)
  2. 方向控制寄存器(DDR)
  3. 输入数据寄存器(PIN)
  4. 输出数据寄存器(OUT)

解答:

IE 用于设置 GPIO 中断是否使能
DDR 用于设置 GPIO 输入/输出
PIN 用于设置输入模式下输入的数据
OUT 用于设置输出模式下输出的数据

1.5

【单选】C 语言中以下错误的表达式为 (B)

struct {
	int a;
	char b;
}Q, *p=&Q;
  1. Q.a
  2. *p.b
  3. p->a
  4. (*p).b

解答:

结构体对象使用 . 访问成员变量
结构体对象指针使用 -> 访问成员变量
Q 是一个结构体对象,Q.a,选项 A 正确
p 是一个结构体指针,*p 是 Q ,(*p).bp->a,选项 C、D 正确
. 的优先级高于 * , 因此 *p.b 会先进行 p.b 导致选项 B 错误

1.6

【单选】执行语句 k=7>>1; 后,变量 k 的当前值是 (B)

  1. 15
  2. 3
  3. 1
  4. 31

解答:

>> 运算符优先级高于 =
7 >> 1 ,意味着 7 右移 1 位(相当于除 2),结果为 3
K = 3

1.7

【单选】以下关于数字滤波的作用中,错误的是 (A)

  1. 增加信号的带宽
  2. 提取特定频率成分
  3. 信号重建
  4. 去除噪声

解答:

数字滤波不能增加信号的带宽

1.8

【单选】函数 fun() 的正确定义方式为 (A)

int main(){
	int a[3][4];
	fun(a);
	return 0;
}
  1. void fun(int p[][4]){}
  2. void fun(int *p[][4]){}
  3. void fun(int *p[4]){}
  4. void fun(int *p[3][4]){}

解答:

观察四个选项不同之处,这道题主要是考察函数参数列表
int a[3][4]; 这里 a 应该是一个二维数组指针,类型为 int (*)[4]
int p[][4] 类型为 int (*)[4]
int *p[][4] 类型为 int* (*)[4]
int *p[4] 类型为 int **
int *p[3][4] 类型为 int* (*)[4]

1.9

【多选】以下关于 RTOS 中优先级翻转描述中,哪些是正确的 (AC)

  1. 优先级反转问题可以通过优先级继承或优先级上限等方式来解决
  2. 优先级翻转可以通过使用信号量或互斥锁来避免
  3. 优先级翻转是指高优先级任务被低优先级任务阻塞的现象
  4. 优先级翻转可以通过增加任务的优先级来解决

解答:

优先级反转是指高优先级的任务需要等待低优先级的任务释放资源
在 FreeRTOS 中信号量存在优先级翻转的潜在问题,而互斥量在信号量的基础上增加了优先级继承机制
互斥量能够尽量的避免出现优先级翻转的情况,但不能完全杜绝
综上,选项 A、C 正确,选项 B、D 错误

1.10

【单选】适宜采用 inline 定义函数情况是 (C)

  1. 函数体含有递归语句
  2. 函数体含有循环语句
  3. 函数代码少、频繁调用
  4. 函数代码多、不常调用

2、简答题

2.1

用变量 a 给出下面的定义:

(示例)一个整型数:int a;

  1. 一个指向整型数的指针:1
  2. 一个指向指针的的指针,它指向的指针是指向一个整型:2
  3. 一个有 10 个整型数的数组:3
  4. 一个有 10 个指针的数组,该指针是指向一个整型:4
  5. 一个指向有 10 个整型数数组的指针:5
  6. 一个指向函数的指针,该函数有一个整型参数和一个浮点型参数,并返回一个整型数:6

解答:

  1. int *a;
  2. int **a;
  3. int a[10];
  4. int *a[10];
  5. int (*a)[10];
  6. int (*a)(int , float);

2.2

请使用宏定义,实现一个 FUN(x) 功能,其需求如下

  1. 当 x<0 时,返回值为 0
  2. 当 x=0 时,返回值为 1
  3. 当 x>0 时,返回值为 2

解答:

#define FUN(x) (x)<0?0:(x==0?1:2))

2.3

以下代码的运行结果是

#include <stdio.h>

int main() {
    int *p1, *p2;
    int arr[3] = {0};
    p1 = arr;
    p2 = arr;
    p1--;
    p2++;
    printf("%d, ", p1 - p2);
    printf("%d, ", (char*)p1 - (char*)p2);
    printf("%d", sizeof(arr) / sizeof(*arr));
    return 0;
}

解答:

两个指针相减

p1 - p2 = (指针 p1 地址 - 指针 p2 地址) / sizeof(int) = -2
(char*)p1 - (char*)p2 = (指针 p1 地址 - 指针 p2 地址) / sizeof(char) = -8
sizeof(arr) / sizeof(*arr) = 12 / 4 = 3

最终输出 -2,-8,3

2.4

在一个光滑平面上,一质量为 m 长度为 L 电阻为 R 的铁棒两端用一电阻可忽路的柔性导线连接,铁棒导线系统垂直放置于强度为 B 的磁场中,力 F 垂直作用于铁棒质心拖动铁棒使其运动,请立该系统的动力学模型?

20240727_Insta360_Exam_14_question

解答(抛砖引玉,非标准答案,存疑):

根据题目可以的出如下信息:

  1. 光滑平面,表示平面摩擦力为 0
  2. 根据法拉第电磁感应定律,闭合电路在磁场中切割磁感线会产生电流 I,感应电动势 V
  3. 电流在磁场中会产生阻力 F2

感应电动势 V = BLv,其中v是移动速度
感应电流 I = V/R = BLv/R
阻力 F2 = BIL = B^2*L^2*v/R
F-F2 = ma,其中a为加速度
也即 F-B^2*L^2*v/R = m*dv/dt

2.5

采样定理要求采样率至少是信号(最高)频率的 2 倍,才能保证采样后信号频率不失真,但采样率设置不足时会导致混叠现象的出现,比如用 4Hz 的采样 3Hz 的正弦波会产生混叠,如下图所示:

20240727_Insta360_Exam_15_question

请问当采样率 fs=500Hz,且原始信号频率 fa 分别是 180Hz,280Hz,580Hz 时,混叠后的频率 fd 分别是多少?

解答(抛砖引玉,非标准答案,存疑):

采样率 500 Hz,能不失真采样的最大频率为 250 Hz
采样率 500 Hz,原始信号频率 180 Hz,500 > 180*2,满足香农采样定律,混叠后的频率为 180 Hz
采样率 560 Hz,原始信号频率 280 Hz,不满足香农采样定律,280 Hz 超过了 250 Hz,混叠后的频率为|280-500| = 220 Hz
采样率 500 Hz,原始信号频率 580 Hz,不满足香农采样定律,580 Hz 超过了 250 Hz,混叠后的频率为|580-500| = 80 Hz

2.6

描述 I2C、SPI、UART 的工作方式以及差异?

解答(抛砖引玉,非标准答案):

I2C 特点:

  1. 串行、半双工、近距离、低速、同步通信
  2. 一般需要 SDA、SCL 两根线
  3. 是一种多主机总线
  4. 从机具有唯一的 7 位地址,器件既可以为主机又可以为从机,但同一时刻只能有一个主机
  5. 标准模式下速率 100Kbit/s,高速模式下速率 400Kbit/s
  6. 采用开漏结构,通过外部上拉电阻完成逻辑 1

I2C 通信过程:

主机向从机写数据

  1. Start
  2. Salve address + Wr ->
  3. Salve ACK <-
  4. Register address ->
  5. Salve ACK <-
  6. Data ->
  7. Salve ACK <-
  8. Repeat steps 6-7 until the data transfer is complete
  9. Stop

主机从从机读数据

  1. Start
  2. Slave address + Wr ->
  3. Salve ACK <-
  4. Register address ->
  5. Salve ACK <-
  6. Start repeat
  7. Slave address + Rd ->
  8. Salve ACK <-
  9. Data <-
  10. NACK
  11. Stop

SPI 特点:

  1. 串行、全双工、高速、同步通信
  2. 一般需要 MOSI、MISO、CS、SCLK 四根线
  3. 无需从机地址,片选选中即可

SPI 通信过程:

  1. 拉低片选信号
  2. 通过 MISO、MOSI 两个引脚全双工传递数据
  3. 通信完毕拉高片选信号

UART 特点:

  1. UART 是一种串行,全双工,低速,异步通信方式
  2. UART 需要 RX、TX 两根线
  3. 帧格式:起始位(逻辑0) + 数据位(5到9位,常见8位) + 校验位 + 停止位(逻辑1,1到2位)
  4. 传输数据以字节为单位,传输速度由波特率控制(常见9600、115200)

2.7

在 51 或 32 单片机上(例如 AT89C51 或 STM32F4)实现 Bootloader 功能,措述实现的逻辑流程?

解答(抛砖引玉,非标准答案):

何为 Bootloader?
BootLoader 为当单片机上电开始工作后首先运行的程序,他会做一些初始化配置,然后重点设置 NVIC 的偏移量,最后跳转到某个应用程序入口执行用户的应用程序;个人用户一般情况下,使用单片机编写 APP 无需使用 BootLoader,因为一般而言你只需编写一个应用程序,无需引导,后续更新大可直接烧录程序;但是对于一个完整的商品来说,不应该留给用户烧录的接口,而且大多数用户也不会开发,因此需要一个 Bootloader 可以方便的更新固件,修改 BUG 等等。

如何实现 Bootloader?
通常情况下,对于 STM32F4,其程序默认烧录在 0x80000000 的内存地址处,当 MCU 上电之后,他会从该处加载程序然后执行,假设我们将整个内存空间分为几个不同的部分,将 0x80000000 开始的比如 64K 字节数据划分为一个引导区,然后后面的剩余内存空间划分为 APP 区域,当 MCU 上电之后他会先执行引导区的程序,等待一切就绪后在 goto 到用户 APP 区域的内存处开始执行。

需要注意的事情?
NVIC 中断向量表的偏移地址,在跳转到 APP 前必须设置 NVIC 中断向量表的偏移地址,否则在 APP 中发生中断会执 BootLoader 的中断服务函数,而不是 APP 的中断服务函数。

2.8

假设结构体的首地址在 STM32 上为 0x20001000,请按如下格式列出下面结构体在 STM32 中的内存分布:

  1. a: 0x20001000
  2. b: 0x2000xxxx
  3. c: 0x2000xxxx
typedef struct
{
	int8_t a;
	int16_t b;
	int16_t c;
	int8_t *p_a;
	int16_t *p_b;
	uint8_t d;
	uint16_t e;
}data_align_t;

解答:

  1. a: 0x20001000
  2. b: 0x20001004
  3. c: 0x20001006
  4. p_a: 0x20001008
  5. p_b: 0x2000100C
  6. d: 0x20001010
  7. e: 0x20001012

3、编程题

3.1

有一个可 360 度连续测量的角度传感器,其角度输出范国是 (-π,π] ,由于传感器采样具有一定的高斯白噪声,请设计一个滤波算法滤除角度信号中的高频噪声

  1. 注意角度跳变点
  2. 滤波系数为可调变量
  3. 滤波算法不限

解答:

#include <stdio.h>
#include <assert.h>

// 一个匀速旋转的角度输出数据示例
float test_data[] = {
	 1.5568,  1.6427,  1.7804,  1.8525,  1.9416,  2.1797,  2.3703,  2.4818,
	 2.3664,  2.5448,  2.6128,  2.7571,  2.7795,  2.8205,  3.0309,  3.0522,
	 3.1078, -2.7968, -2.8540, -2.5947, -2.5545, -2.6810, -2.3792, -2.2714,
	-2.1896, -2.1175, -2.1178, -1.8515, -1.9148, -1.7719, -1.5159, -1.4263,
	-1.4625, -1.3878, -1.2006, -1.2393
};

int main()
{
	// 请在此处书写代码
	
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2210741.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pytest中fixture含返回值时如何隐式自动应用?

在我们使用 Pytest 框架进行自动化测试时&#xff0c;强大的 fixture 夹具为框架的灵活应用提供了极大的便利。比如我们可以利用 fixture 的autouse属性&#xff0c;使它在测试方法的不同范围层级上自动生效。但如果要引用fixture的返回&#xff0c;我们通常还是要明确指定&…

FMEA 在智能制造中的应用与挑战_SunFMEA

【大家好&#xff0c;我是唐Sun&#xff0c;唐Sun的唐&#xff0c;唐Sun的Sun。一站式数智工厂解决方案服务商】 FMEA&#xff08;失效模式与影响分析&#xff09;在智能制造中具有重要的应用价值&#xff0c;但同时也面临着一系列的挑战。 应用&#xff1a; 产品设计优化 在…

react18+react-transition-group实现路由切换过度

效果如下 官网安装对应的插件 创建对应的样式 .fade-enter {opacity: 0; } .fade-exit {opacity: 1; } .fade-enter-active {opacity: 1; } .fade-exit-active {opacity: 0; } .fade-enter-active, .fade-exit-active {transition: opacity 500ms; }const location useLoca…

WSL(Windows Subsystem for Linux)——简单的双系统开发

文章目录 WSLWSL的作用WSL的使用WSL的安装挂载磁盘的作用安装linux发行版wsl下载mysql&#xff0c;mongodb&#xff0c;redis WSL 前言&#xff1a;本人由于在开发中需要linux环境&#xff0c;同时还想要直接在Windows下开发&#xff0c;来提升开发效率&#xff0c;随即简单学…

【问题分析】使用gperftools分析排查内存问题

背景 当程序长时间允许时(压测、服务器程序)&#xff0c;就会面临更大的挑战&#xff0c;其中内存泄漏就是一类典型的问题&#xff0c;内存泄漏往往不易发现&#xff0c;导致的现象更是千奇百怪&#xff0c;本文主要介绍如何借助gperftools分析一个模块的内存泄漏 案例代码 …

SpringBoot框架在高校竞赛管理中的创新应用

3系统分析 3.1可行性分析 通过对本高校学科竞赛平台实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本高校学科竞赛平台采用SSM框架&#xff0c;JAVA作为开发语…

编译/引导EDK2 树莓派4

格蠹的幽兰代码本(RK3588)支持UEFI启动&#xff0c;在阅读RK3588代码的时候发现EDK2也对树莓派系列进行了支持。经过一番尝试&#xff0c;借助幽兰&#xff0c;我也在树莓派上bringup EFI bios(只能引导到Bios setup界面&#xff0c;不知道如何安装OS)&#xff0c;在此记录SOP。…

1.Label Studio 介绍

Label Studio 介绍 文章目录 Label Studio 介绍前言一、安装介绍二、Run with Docker Compose1、WSL2安装2、Docker Desktop安装3、Label Studio安装&#xff08;第二种方法 Run with Docker Compose &#xff09; 三、Install for local development1.下载源码2.安装poetry3.安…

YOLO11改进 | 注意力机制 | 用于增强小目标感受野的RFEM

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 近年来&#xff0c;基于深度学习的人脸检…

【计算机网络】计算机网络相关术语

文章目录 NAT概述NAT的基本概念NAT的工作原理1. **基本NAT&#xff08;静态NAT&#xff09;**2. **动态NAT**3. **NAPT&#xff08;网络地址端口转换&#xff0c;也称为PAT&#xff09;** 底层实现原理1. **数据包处理**2. **转换表**3. **超时机制** NAT的优点NAT的缺点总结 P…

vue3 高德地图标注(飞线,呼吸点)效果

装下这两个 npm 忘了具体命令了&#xff0c;百度一下就行 “loca”: “^1.0.1”, “amap/amap-jsapi-loader”: “^1.0.1”, <template><div id"map" style"width: 100%;height: 100%;"></div> </template><script setup> …

linux 下 verilog 简明开发环境附简单实例

author: hjjdebug date: 2024年 10月 12日 星期六 10:34:13 CST descripton: linux 下 verilog 简明开发环境附简单实例 甲: 安装软件 1. sudo apt install iverilog 该包verilog 源代码的编译器iverilog&#xff0c;其输出是可执行的仿真文件格式vvp格式 它可以检查源代码中…

ubuntu20.4环境下gcc-aarch64交叉编译器的安装

交叉编译器&#xff08;Linux环境&#xff09;arm gcc 8.3一共有5个版本&#xff0c;常用的有4个版本&#xff08;另外一个为大端linux版本&#xff09;&#xff0c;分别是32bit裸机版本&#xff08;arm-eabi&#xff09;、64bit裸机版本&#xff08;aarch64-elf&#xff09;、…

4. 单例模式线程安全问题--是否加锁

单例模式线程安全问题--是否加锁 是否加锁问题指什么&#xff1f;解决多线程并发来带的问题继承MonoBehaviour的单例模式不继承MonoBehaviour的单例模式 总结 是否加锁问题指什么&#xff1f; 如果程序当中存在多线程&#xff0c;我们需要考虑当多个线程同时访问同一个内存空间…

【Java】面向UDP接口的网络编程

【Java】面向UDP接口的网络编程 一. 基本通信模型二. APIDatagramSocketDatagramPacket 三. 回显服务器/客户端示例服务器客户端总结 一. 基本通信模型 UDP协议是面向数据报的&#xff0c;因此此处要构建数据报(Datagram)在进行发送。 二. API DatagramSocket DatagramSocke…

Ubuntu 24.04 在 BPI-F3 上通过 SD 卡安装并从 NVME 运行

github 代码&#xff1a; https://github.com/rcman/BPI-F3 Ubuntu 24.04 现在正在我的 BPI-F3 上运行。很快会为 YouTube 制作一个视频。 这应该适用于任何版本的 Linux&#xff0c;仅在 Ubuntu 24.04 上测试过 入门 下载 Bianbu映像并使用您最喜欢的工具将其映像到微型 SD 卡…

进程 vs 线程:你需要知道的关键区别

“大树根深&#xff0c;才能迎风而立。” 进程&#xff1a;计算机中正在执行的程序的实例&#xff0c;它是操作系统进行资源分配的基本单位。 通过写特殊代码&#xff0c;把多个 CPU 核心都能利用起来&#xff0c;这样的代码就称为“并发编程”。 虽然多进程能够解决问题&…

PHP商会招商项目系统一站式服务助力企业腾飞

商会招商项目系统——一站式服务&#xff0c;助力企业腾飞 &#x1f680;&#x1f4bc; &#x1f680; 开篇&#xff1a;企业成长的加速器&#xff0c;商会招商项目系统来袭 在竞争激烈的市场环境中&#xff0c;企业如何快速找到适合自己的发展路径&#xff0c;实现腾飞&…

CUDA(C)磁态蒙特卡洛和传输矩阵多GPU并行计算分析

&#x1f3af;要点 使用英伟达GPU、大都会和并行回火算法模拟蒙特卡洛。使用兰佐斯算法计算传输矩阵特征值。使用 Suzuki-Trotter 公式归一化量子无序系统。算法模型特征&#xff1a;多CUDA线程&#xff0c;多GPU和多任务式并行计算。 &#x1f341;磁态分析角度 Python和MA…

BUUCTF-[2019红帽杯]easyRE(Reverse逆向)

第一步 查壳 如图&#xff0c;无壳&#xff0c;ELF文件 第二步 IDA 64位IDA&#xff0c;无法直定位到主函数F5&#xff0c;所以使用&#xff0c;查找关键字符串定位主函数大法ShiftF12 发现这些关键字符串&#xff0c;双击上图蓝色字符串&#xff0c; 然后交叉引用CtrlX跟踪 …