自学内容网 自学内容网

面试知识点总结篇三

一、arm中断流程和函数

  1. ARM 中断流程
  • 中断触发
  • 保存上下文
  • 中断向量表
  • 执行ISR
    - 清除中断标志
  • 恢复上下文
  • 返回中断

二、STM32任务间通信有哪些方式

消息队列、 信号量、共享内存、任务通知

三、uboot内存没驱动之前是怎么操作的

  1. 硬件初始化
  2. 内存检测
  3. 设置内存映射
  4. 控制台初始化
  5. 启动加载器

四、用户态调用内核态怎么调用

  1. 用户态调用内核态主要通过系统调用(syscall)实现
  2. 具体步骤
1. 系统调用接口(例如文件操作)
2. 设置系统调用参数(参数通常包括:系统调用号(识别要调用的内核服务)
相关的输入参数(如文件描述符、缓冲区地址等))
3. 触发上下文切换
4. 内核态处理
5. 返回用户态

五、设备树的作用

  1. 设备树是一种数据结构,主要用于在系统启动时向操作系统描述硬件设备的信息。这种机制特别适合在那些不能自动探测硬件设备的系统。
  2. 主要作用
  • 硬件描述 :包括处理器、总线、存储设备、外设等。这包括设备的类型、配置参数、内存映射、中断号和其他必要的硬件信息。
  • 系统启动和配置:在系统引导时,操作系统内核会解析设备树文件(通常为 .dtb,即 Device Tree Blob),以获取硬件配置和结构信息。这样做允许操作系统理解如何与已安装的硬件进行交互,尤其是在系统中包含多个不同的硬件组件时。
  • 操作系统的移植性:使用设备树可以提高操作系统的可移植性。开发者可以为不同的硬件平台使用相同的内核代码,通过更改设备树文件来适配不同的硬件。这样,操作系统内核无需为每个硬件平台编写特定的硬件抽象层代码。
  • 动态配置:设备树使得动态配置成为可能,允许系统根据设备树中描述的信息在运行时调整硬件配置。这对于可以热插拔的设备特别有用。
  • 简化驱动开发:通过使用设备树,驱动开发人员可以更容易地编写与硬件无关的驱动代码。驱动程序可以读取设备树中的信息,而不是硬编码设备的参数,这使得同一驱动能够支持多种略有不同的硬件设备。

六、sizeof用法

  1. sizeof是一个编译时运算符,用于计算变量或类型所占的字节数。

七、int a=5, b=7; int c = a+++b;

  1. 这里c = a+++b;被解析为c = a++ + b;。首先a的值增加1,然后将增加前的a(5)与b(7)相加,所以c为12,a变为6。

八、printf, strcpy, memcpy用法和区别

  1. printf用于格式化输出。
  2. strcpy用于复制字符串。
  3. memcpy用于内存复制。
  • 区别:strcpy只适用于字符串,结束于第一个空字符;memcpy可以复制任意数据,包括含有空字符的数据,需要指定复制的字节数。

九、extern "C"用法

  • 用于C++代码中,用以告诉编译器按照C的链接方式处理所标记的代码,主要用于使得C++代码能够链接到C编写的库

十、全局变量和局部变量可以重名吗

  • 可以重名,局部变量在其作用域内会隐藏同名的全局变量。

十一、const的用法

  1. 用于声明常量,即不可变的值。这有助于提高程序安全性和可读性

十二、C++中STL之间的关系

  1. STL(标准模板库)提供了一系列模板化的数据结构和算法,包括容器(如vector, map)、迭代器、函数对象、算法等,它们之间高度集成,支持高效的数据存储和操作。

十三、信号与槽要注意些什么

  1. 在Qt中,信号和槽用于对象间的通信。注意信号不能被阻塞,槽可以是任意的成员函数,不必声明为slot。
  2. 保证连接正确且不产生无限递归或循环调用。

十四、Qt中多线程需要注意些什么

  1. 使用QThread时,尽量不要直接继承QThread,而是继承QObject并将其移动到QThread。
  2. 避免跨线程直接操作GUI元素。

十五、在主线程中初始化函数,怎么在子线程中调用

  1. 在主线程创建和初始化对象,通过信号和槽安全地在子线程中调用。

十六、Qt中UDP/TCP流程

  1. TCP:使用QTcpSocket,建立连接,进行读写操作。
  2. UDP:使用QUdpSocket,进行绑定后可以直接发送和接收数据报。

十七、 U-Boot是什么

  1. U-Boot(Universal Boot Loader)是一个开源的启动加载程序,广泛用于嵌入式设备。
  2. 它负责在设备启动时初始化硬件(如内存控制器、时钟、网络等),并加载并执行操作系统。
  3. U-Boot 支持多种操作系统,如 Linux、Android 等,并且提供了灵活的命令行界面用于开发和调试。

十八、Linux驱动中字符设备驱动模型

  1. Linux内核支持三种主要类型的设备驱动:字符、块和网络。字符设备驱动允许用户对设备进行字节流式访问
  2. 字符设备驱动:管理那些按字符进行数据传输的设备,例如串口、打印机等。它们通常实现了一组标准操作:open、close、read、write 和 ioctl。

十九、 主设备号和次设备号

  1. 主设备号:用来标识驱动程序的。
  2. 次设备号:用来标识由相同驱动程序控制的不同设备。
  • 它们共同构成设备号,用于区分系统中的设备。

二十、 总线设备

  1. 总线用于连接各种硬件组件,允许数据在这些组件间传输。常见的总线设备包括 PCI、USB、I2C、SPI 等。

二十一、驱动加载到内核的方法

  1. 静态链接:在编译内核时将驱动编译进内核镜像。
  2. 模块加载:在系统运行时动态加载驱动模块。

二十二、字符型驱动设备怎么创建

  1. 通过编写字符设备驱动并在内核中注册设备号和设备操作集合。
  2. 使用register_chrdev()或alloc_chrdev_region()注册设备号,然后使用cdev_add()添加字符设备结构。

二十三、联合体介绍

  1. 联合体(union)允许在相同的内存位置存储不同的数据类型,成员共享内存。

二十四、DMA和中断的应用和区别

  1. 在需要高速数据传输且CPU负载较重的项目中使用,如音视频处理或网络通信。
  2. 区别
    • DMA:直接内存访问,用于高速数据传输,无需CPU介入。
    • 中断:响应外部或内部事件的机制,中断当前CPU操作。

原文地址:https://blog.csdn.net/m0_51830537/article/details/142471655

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!