面试知识点总结篇三
一、arm中断流程和函数
- ARM 中断流程
- 中断触发
- 保存上下文
- 中断向量表
- 执行ISR
- 清除中断标志 - 恢复上下文
- 返回中断
二、STM32任务间通信有哪些方式
消息队列、 信号量、共享内存、任务通知
三、uboot内存没驱动之前是怎么操作的
- 硬件初始化
- 内存检测
- 设置内存映射
- 控制台初始化
- 启动加载器
四、用户态调用内核态怎么调用
- 用户态调用内核态主要通过系统调用(syscall)实现
- 具体步骤
1. 系统调用接口(例如文件操作)
2. 设置系统调用参数(参数通常包括:系统调用号(识别要调用的内核服务)
相关的输入参数(如文件描述符、缓冲区地址等))
3. 触发上下文切换
4. 内核态处理
5. 返回用户态
五、设备树的作用
- 设备树是一种数据结构,主要用于在系统启动时向操作系统描述硬件设备的信息。这种机制特别适合在那些不能自动探测硬件设备的系统。
- 主要作用
- 硬件描述 :包括处理器、总线、存储设备、外设等。这包括设备的类型、配置参数、内存映射、中断号和其他必要的硬件信息。
- 系统启动和配置:在系统引导时,操作系统内核会解析设备树文件(通常为 .dtb,即 Device Tree Blob),以获取硬件配置和结构信息。这样做允许操作系统理解如何与已安装的硬件进行交互,尤其是在系统中包含多个不同的硬件组件时。
- 操作系统的移植性:使用设备树可以提高操作系统的可移植性。开发者可以为不同的硬件平台使用相同的内核代码,通过更改设备树文件来适配不同的硬件。这样,操作系统内核无需为每个硬件平台编写特定的硬件抽象层代码。
- 动态配置:设备树使得动态配置成为可能,允许系统根据设备树中描述的信息在运行时调整硬件配置。这对于可以热插拔的设备特别有用。
- 简化驱动开发:通过使用设备树,驱动开发人员可以更容易地编写与硬件无关的驱动代码。驱动程序可以读取设备树中的信息,而不是硬编码设备的参数,这使得同一驱动能够支持多种略有不同的硬件设备。
六、sizeof用法
- sizeof是一个编译时运算符,用于计算变量或类型所占的字节数。
七、int a=5, b=7; int c = a+++b;
- 这里c = a+++b;被解析为c = a++ + b;。首先a的值增加1,然后将增加前的a(5)与b(7)相加,所以c为12,a变为6。
八、printf, strcpy, memcpy用法和区别
- printf用于格式化输出。
- strcpy用于复制字符串。
- memcpy用于内存复制。
- 区别:strcpy只适用于字符串,结束于第一个空字符;memcpy可以复制任意数据,包括含有空字符的数据,需要指定复制的字节数。
九、extern "C"用法
- 用于C++代码中,用以告诉编译器按照C的链接方式处理所标记的代码,主要用于使得C++代码能够链接到C编写的库
十、全局变量和局部变量可以重名吗
- 可以重名,局部变量在其作用域内会隐藏同名的全局变量。
十一、const的用法
- 用于声明常量,即不可变的值。这有助于提高程序安全性和可读性
十二、C++中STL之间的关系
- STL(标准模板库)提供了一系列模板化的数据结构和算法,包括容器(如vector, map)、迭代器、函数对象、算法等,它们之间高度集成,支持高效的数据存储和操作。
十三、信号与槽要注意些什么
- 在Qt中,信号和槽用于对象间的通信。注意信号不能被阻塞,槽可以是任意的成员函数,不必声明为slot。
- 保证连接正确且不产生无限递归或循环调用。
十四、Qt中多线程需要注意些什么
- 使用QThread时,尽量不要直接继承QThread,而是继承QObject并将其移动到QThread。
- 避免跨线程直接操作GUI元素。
十五、在主线程中初始化函数,怎么在子线程中调用
- 在主线程创建和初始化对象,通过信号和槽安全地在子线程中调用。
十六、Qt中UDP/TCP流程
- TCP:使用QTcpSocket,建立连接,进行读写操作。
- UDP:使用QUdpSocket,进行绑定后可以直接发送和接收数据报。
十七、 U-Boot是什么
- U-Boot(Universal Boot Loader)是一个开源的启动加载程序,广泛用于嵌入式设备。
- 它负责在设备启动时初始化硬件(如内存控制器、时钟、网络等),并加载并执行操作系统。
- U-Boot 支持多种操作系统,如 Linux、Android 等,并且提供了灵活的命令行界面用于开发和调试。
十八、Linux驱动中字符设备驱动模型
- Linux内核支持三种主要类型的设备驱动:字符、块和网络。字符设备驱动允许用户对设备进行字节流式访问
- 字符设备驱动:管理那些按字符进行数据传输的设备,例如串口、打印机等。它们通常实现了一组标准操作:open、close、read、write 和 ioctl。
十九、 主设备号和次设备号
- 主设备号:用来标识驱动程序的。
- 次设备号:用来标识由相同驱动程序控制的不同设备。
- 它们共同构成设备号,用于区分系统中的设备。
二十、 总线设备
- 总线用于连接各种硬件组件,允许数据在这些组件间传输。常见的总线设备包括 PCI、USB、I2C、SPI 等。
二十一、驱动加载到内核的方法
- 静态链接:在编译内核时将驱动编译进内核镜像。
- 模块加载:在系统运行时动态加载驱动模块。
二十二、字符型驱动设备怎么创建
- 通过编写字符设备驱动并在内核中注册设备号和设备操作集合。
- 使用register_chrdev()或alloc_chrdev_region()注册设备号,然后使用cdev_add()添加字符设备结构。
二十三、联合体介绍
- 联合体(union)允许在相同的内存位置存储不同的数据类型,成员共享内存。
二十四、DMA和中断的应用和区别
- 在需要高速数据传输且CPU负载较重的项目中使用,如音视频处理或网络通信。
- 区别
- DMA:直接内存访问,用于高速数据传输,无需CPU介入。
- 中断:响应外部或内部事件的机制,中断当前CPU操作。
原文地址:https://blog.csdn.net/m0_51830537/article/details/142471655
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!