ARM/Linux嵌入式面经(三三):大疆
嵌入式工程师考察主要蕴含:C/C++,处理器的架构,操作系统(linux或嵌入式实时操作系统),常见硬件接口协议/总线,文件存储系统等几方面
文章目录
- 1)C/C++
-
- static作用,变量加入static以后在内存中存储位置的变化。
-
- static的作用
- 变量加入static后在内存中存储位置的变化
- 面试官可能的追问
- volatile作用
-
- volatile的作用
- 示例代码
- 面试官的追问
- C++为什么有指针还要引用,为什么不和JAVA一样抛弃指针
-
- 为什么C++有指针还要引用?
- 为什么C++不和JAVA一样抛弃指针?
- 面试官可能追问的问题:
- delete和delete[]的区别
-
- `delete`
- `delete[]`
- 示例
- 面试官可能的追问
- 虚函数是用来干嘛的?虚函数机制怎么实现的?虚表指针在内存中的存放位置?
-
- C++虚函数是用来干嘛的?
- 虚函数机制怎么实现的?
- 虚表指针在内存中的存放位置?
- 面试官可能的追问
- C++多态怎么理解?C++有哪些多态的典型例子?
-
- C++多态的理解
- C++多态的典型例子
-
- 1. 虚函数实现多态
- 2. 纯虚函数与抽象类
- 面试官可能的追问
- 叙述程序编译都包含哪些阶段,每个阶段干了什么?
-
- 面试官可能的追问
- CMake是如何包含文件目录的
-
- 使用`include_directories()`
- 使用`target_include_directories()`
- 面试官可能的追问
- 全局变量和局部变量在什么地方?堆栈如何申请资源?
-
- 全局变量和局部变量的存储位置
- 堆栈如何申请资源
- 面试官可能的追问
- C语言编译后的内存分布
-
- C语言编译后的内存分布
- 面试官可能的追问
- 我连续调用同一个函数两次,他的局部变量初始化结果是否会一致?(函数调用的过程)
-
- 完整且有深度的回答
- 面试官可能追问的几个相关问题
- 你说静态局部变量存储在静态区,那么静态区的创建和消失是在什么时候?
-
- 静态区的创建和消失时机
- 面试官可能的追问
- 我在windows里面运行了多个进程,其中一个进程执行完了,他的静态区会如何处理?(多进程的内存管理问题)
-
- 回答
- 面试官可能的追问
- 静态局部变量与局部变量的区别?为什么局部变量未定义时,每次初始化的结果是不确定的?是个真随机数还是个伪随机数?
-
- 静态局部变量与局部变量的区别
- 为什么局部变量未定义时,每次初始化的结果是不确定的?是个真随机数还是个伪随机数?
- 面试官可能的追问
- 嵌入式中栈的工作机制是什么?
-
- 栈的工作机制
- 面试官的追问
- struct字节对齐了解么?
-
- struct字节对齐概述
- 字节对齐的作用
- 字节对齐的规则
- 示例分析
- 面试官的追问
- 容器了解吗?vector实现的机制是怎么样的?
-
- 容器了解吗?
- vector实现的机制是怎么样的?
- 迭代器有了解吗?讲解一下你的理解
-
- 迭代器的理解
- 面试官的追问
- 内存分配函数了解么?如果系统中只有10K内存,而我要分配12K,能分配成功吗?如果能,那么将分配到的区域用memset进行初始化,会成功吗?
-
- 回答内存分配函数及其相关问题
- 面试官可能的追问:
- 2)处理器架构
-
- 51和32架构的区别
-
- 51架构与32位架构(以ARM为例)的主要区别
- 面试官可能追问的问题
- MCU可以运行Liunux吗,为什么?
-
- 为什么MCU可以运行Linux?
- 挑战与限制
- 面试官追问
- STM32启动过程(上电开始->main执行的过程)
-
- STM32启动过程
- 面试官可能提出的追问
- 中断响应执行流程,中断上下文指的什么,保存中断上下文是完成的什么操作,以STM32为例,都有哪些寄存器被保存
-
- 中断响应执行流程
- 中断上下文
- 保存中断上下文的操作
- STM32中被保存的寄存器
- 面试官可能追问的问题
- STM32 F1和F4的区别
-
- 一、内核与性能
- 二、外设与功能
- 三、存储与资源
- 四、功耗与效率
- 面试官可能追问的问题:
- Cotex-M系列使用浮点运算对STM32中断效率会产生什么影响
-
- 浮点运算对STM32中断效率的影响
-
- 1. Cortex-M系列内核的浮点运算能力
- 2. 对中断效率的影响
- 3. 优化建议
- 面试官可能追问的问题
- 什么是大小端模式
-
- 大小端模式定义
- 大小端模式的应用场景
- 面试官可能追问的问题
- 3)操作系统
-
- Freertos支持的任务调度方式,详细说下每种方式
-
- 1. 抢占式调度(Preemptive Scheduling)
- 2. 时间片轮转调度(Round-Robin Scheduling)
- 总结
- 任务(线程)间通信方法
-
- 常用的任务(线程)间通信方法
- 进程和线程的区别
-
- 进程和线程的区别
- 面试官可能的追问
- 互斥量和信号量的区别
-
- 一、定义与用途
- 二、特性与行为
- 三、使用场景
- 四、面试官可能追问的问题
- 优先级翻转,如何避免优先级翻转
-
- 一、优先级翻转的避免策略
- 二、面试官可能追问的问题
- STM32任务切换为什么用PendSV
-
- 一、PendSV的优势
- 二、STM32任务切换的具体过程
- 三、面试官可能追问的问题
- FreeRTOS的内存管理怎么实现的?为什么这么做?
-
- 实现方式
- 为什么这么做
- 面试官可能追问的问题
- 对于临界区数据的处理,使用互斥锁和自己通过条件来判断,哪样更好,为什么?
-
- 使用互斥锁的优势
- 自己通过条件来判断的劣势
- 面试官可能追问的问题
- 4)常见硬件接口协议/总线
-
- (1)SPI
-
-
- 问题1:
- 问题2:
- 问题3:
-
- (2)IIC
-
-
- 问题1:
- 问题2:
- 问题3:
- 问题4:
-
- (3)UART
-
-
- 问题1:
- 问题2:
- 问题3:
-
- (4)FSMC
-
-
- 问题1:
- 问题2:
- 问题3:
-
- (5)AXI
-
-
- 问题1:
- 问题2:
- 问题3:
-
1)C/C++
static作用,变量加入static以后在内存中存储位置的变化。
static作用及变量加入static后在内存中存储位置的变化
static的作用
在C/C++等编程语言中,static
关键字有着多重作用,主要根据它被应用到的上下文环境(如全局变量、局部变量、函数等)而有所不同。但总体来说,static
主要提供了两个核心功能:
-
隐藏:当
static
用于全局变量时,它限制了该变量的作用域仅在其被声明的文件内部,避免了不同文件中同名全局变量的冲突,实现了对变量的隐藏。 -
持久性:无论
static
用于局部变