嵌入式知识点

知识点记录,持续更新!

1、IIC的SCL SDA是开漏模式,标准模式波特率小于100K,快速模式波特率小于400K,快速模式的占空比,有1/2(高电平是1,低电平是2)和9/16。

I2C(Inter-Integrated Circuit)是一种串行通信协议,广泛应用于嵌入式系统中,用于设备间的通信。在某些情况下,I2C总线需要配置为开漏模式(Open-Drain),这主要是出于以下几个原因:

1)**多主模式(Multi-master Mode)**:
   - 在I2C协议中,可以有多个设备作为主设备。开漏模式允许多个主设备共享同一总线,因为只有当主设备主动驱动数据线为低电平时,数据线才会被拉低。

2)**提高驱动能力(Enhanced Driving Capability)**:
   - 开漏模式下,数据线可以通过上拉电阻被拉高,而不需要每个设备都提供足够的驱动电流。这可以减少功耗,特别是在总线上连接了多个设备时。

3) **防止电流冲突(Current Conflict)**:
   - 如果两个主设备同时尝试驱动数据线,其中一个设备将驱动为低电平,而另一个设备则会被开漏模式的开漏输出所隔离,从而避免了电流冲突。

4) **支持更宽的电压范围(Wider Voltage Range Support)**:
   - 开漏模式允许I2C总线在不同的电压级别上工作,因为上拉电阻可以为不同的电压级别提供适当的电平转换。

5)**提高系统的灵活性(Increased System Flexibility)**:
   - 开漏模式提供了更多的设计灵活性,允许在不同的硬件配置下使用相同的I2C总线。

6)**减少电磁干扰(Reduced Electromagnetic Interference, EMI)**:
   - 开漏模式由于减少了电流的变化,可以降低电磁干扰,这对于需要低EMI的系统非常重要。

7)**支持热插拔(Support for Hot-Plugging)**:
   - 在某些应用中,设备可能需要支持热插拔,即在系统运行时连接或断开设备。开漏模式可以更好地处理这种情况,因为它允许设备在没有电源的情况下连接到总线上。

8)**简化设计(Simplified Design)**:
   - 在某些情况下,使用开漏模式可以简化电路设计,因为不需要为每个I2C设备添加单独的上拉电阻。

总的来说,开漏模式提供了一种灵活且可靠的方式,以支持I2C总线上的多设备通信和复杂的系统设计需求。

2、ARM系列

ARM7一般没有MMU,ARM9一般有,ARM的A系列和R系列,一般有MMU。需要有MMU才能跑Linux系统。一般ARM的M系列是跑RTOS系统。

3、ELF文件(Executable and Linkable Format):可执行与可链接格式,也算是一种程序文件,相比bin,hex,axf等可执行文件,这种文件包含信息更多、更复杂。
addressline原理:把elf文件通过objdump,反汇编生成lst文件,在lst文件中拿到输出信息。

参数:

-e:指定需要转换地址的可执行文件名;

-a:指定需要查询的地址;

-f:显示函数名;

-i:如果需要转换的地址是一个内联函数,则还将打印返回第一个非内联函数的信息。不仅会显示内联函数的名称,还会显示调用该内联函数的函数名。

例如:addr2line -e rtthread.elf -a -f 1806d33a 1806f884

ELF文件:

除机器码外,还有一些额外信息
– 段的加载地址、运行地址
– 符号表、重定位表等
ELF文件运行,需要OS环境和加载器(loader、ld-linux.so)

Bin文件:

– 只包含机器码,纯粹的程序文件,即镜像文件
– 类似的还有HEX文件
BIN文件运行,只需要将其加载到链接地址即可

ELF和map文件的区别:

- **编译过程**:在程序的编译和链接过程中,ELF文件和map文件都是由链接器生成的。ELF文件是主要的输出文件,包含了可执行的程序代码和数据;而map文件则是辅助性的输出,提供了程序的内存映射信息。
- **信息共享**:两者都包含了程序的符号信息,例如变量和函数的地址,这些信息对于调试和分析程序非常重要。

- **文件格式**:ELF文件是一种二进制文件格式,用于存储可执行代码、对象代码、共享库以及它们的调试信息等数据。它是可执行与可链接格式(Executable and Linkable Format)的缩写,通常用于嵌入式系统中的程序文件。
- **可读性**:与ELF文件不同,map文件是一种文本文件,它以人类可读的格式提供了程序的内存使用情况、变量和函数的地址等信息。它通常用于调试目的,帮助开发者理解程序的内存布局。
- **目的**:ELF文件的主要目的是作为可执行文件,它包含了程序的机器代码和数据对象。而map文件的主要目的是提供程序的内存映射信息,帮助开发者进行调试和优化内存使用。
- **内容**:ELF文件包含了程序的完整二进制内容,可能包含符号信息用于调试,以及将机器代码与源代码相关联的元数据。MAP文件则主要包含代码和数据对象的位置和大小信息,以及内存使用情况的摘要。

addressline -e -f的原理:

**ELF文件结构解析**
   - **节头表作用**:ELF文件中的节头表为文件中的各个节提供了必要的信息,如节的大小、偏移量以及节的类型等。这些信息是定位特定数据或代码段的关键。
   - **符号表索引**:ELF文件通过符号表来映射人类可读的函数和变量名称到它们的地址。符号表为程序中的每一个符号分配了一个唯一的索引,这个索引被用于间接地址的解析。
   - **程序链接表**:程序链接表在ELF文件中扮演着重要的角色,它描述了程序在运行时候的内存布局。程序头表中的每一项都对应一个内存段,包含了该段的地址、大小以及与其他段的关系等信息。

**命令行工具的作用**
   - **解析ELF文件**:addressline工具通过解析ELF文件的结构,能够提取出文件中的符号、节头和程序头等信息。这些信息是进一步分析和处理地址映射的基础。
   - **符号地址映射**:使用addressline工具时,可以通过提供的符号名查找其在ELF文件中的位置。工具内部会解析符号表,并将符号名映射到相应的地址。
   - **地址转换机制**:addressline工具还能够解析程序链接表,从而理解程序加载到内存时的地址转换机制。这对于动态链接的符号尤为重要,因为其地址可能在程序加载时才确定。

**指定选项的作用**
   - **`-e`选项**:这个选项允许用户指定要查询的特定节。通过这种方式,用户可以针对ELF文件中的任意部分进行地址查询,而不仅限于默认的文本段或数据段。
   - **`-f`选项**:这个选项用于指定输出的格式。用户可以根据需要选择不同的输出格式,以便更好地分析和使用查询结果。
   - **组合使用**:当`-e`和`-f`选项组合使用时,它们可以提供更灵活的控制方式,使用户能够以自定义的方式查看ELF文件中特定节的地址信息,并以所需的格式呈现。

**实际应用场景**
   - **故障诊断**:在软件开发和故障诊断过程中,开发者可能需要查看特定函数或数据的地址。addressline工具可以帮助快速定位问题所在的代码段。
   - **性能优化**:性能优化时常需查看特定函数的地址和大小,以分析其性能瓶颈。addressline工具提供的详细信息有助于性能调优。
   - **安全分析**:在进行安全分析时,了解程序的内存布局和函数地址是关键。addressline工具能够帮助安全研究人员快速获取这些信息。

综上所述,addressline -e -f的原理基于对ELF文件结构的深入理解,通过解析文件中的节头表、符号表和程序链接表等信息,实现对特定符号地址的查询和格式化输出。这种机制不仅对于程序的加载和执行分析至关重要,也对于软件的开发、调试和安全分析等领域有着广泛的应用。

4、串口通信一帧数据发送8个bit数据位,每帧数据都有开始位和停止位。

5、当使用fseek函数在文件中偏移100字节而文件长度不足100字节时,fseek会将文件指针定位到文件末尾,并返回成功状态。通过fseek和ftell组合,可以获取文件大小。如果fseek的超过了文件大小,会扩展文件。

6、LittleFS采用日志结构来存储元数据,这意味着它会在块中顺序写入数据,并在必要时进行合并和压缩,以减少存储空间的浪费。

7、ARM寄存器

### 特殊寄存器
- **零寄存器**:当用作目标寄存器时,写操作被忽略,读操作返回0。在很多指令中可以使用,但不是全部
- **栈指针(SP)**:ARMv8体系结构中,栈指针的选择与异常级别有关。每个异常级别都有自己的栈指针,如SP_EL0、SP_EL1等。在AArch64状态下,EL0只能访问SP_EL0,而其他异常级别可以使用专用的64位栈指针或SP_EL0
- **程序计数器(PC)**:在ARMv8中,PC寄存器不再作为直接访问的寄存器,而是隐式地用于某些指令中,如PC相对加载和地址生成。PC不能被指定为数据处理或加载指令的目的操作数
- **异常链接寄存器(ELR)**:保存异常返回地址
- **程序状态保存寄存器(SPSR)**:保存异常发生前的PSTATE值,用于异常返回时恢复PSTATE的值

### 系统控制寄存器
系统控制寄存器(SCTLR)用于控制内存、配置系统能力以及提供处理器核状态信息。不同的异常级别可能拥有独立的SCTLR副本,例如ACTLR_EL1、ACTLR_EL2和ACTLR_EL3

### 影子寄存器(Banked Registers)
ARM体系结构通过影子寄存器的设计,允许在不同工作模式下重复使用相同的寄存器编码,但对应不同的物理寄存器。例如,Abort模式下的R13与用户模式下的R13不同,尽管它们编码相同,实际上却对应不同的物理寄存器

### CPSR和SPSR
CPSR(当前程序状态寄存器)可以在任何处理器模式下访问,包含条件码标志、中断禁止位、当前处理器模式以及其他状态和控制信息。每种异常模式下都有一个对应的SPSR(备份程序状态寄存器),用于保存CPSR的状态,以便在异常返回后恢复

### 寄存器的用途
- R0-R3:通常用于子程序间传递参数或作为返回值。
- R4-R11:主要用于保存局部变量。
- R12:用作子程序间的临时寄存器(scratch register),也称为IP。
- R13:通常用作栈指针(sp)。
- R14:链接寄存器(lr),用于保存子程序和中断的返回地址。
- R15:程序计数器(PC),指向当前执行的指令

8、在嵌入式系统中,同步通信和异步通信是两种基本的数据传输方式,它们各自具有不同的特性和应用场景。下面是这两种通信方式的优缺点:

### 同步通信(Synchronous Communication)

比如IIC,SPI,USB
**优点:**
**高效率**:由于数据传输是连续的,没有额外的同步开销,因此传输效率高。
**高数据速率**:适合高速数据传输,因为可以在短时间内传输大量数据。
**简单性**:在发送和接收端使用相同的时钟,简化了数据同步的复杂性。

**缺点:**
**时钟依赖性**:需要发送和接收设备共享相同的时钟信号,这可能限制了系统的灵活性。
**时钟偏差**:时钟信号的不稳定或偏差可能导致数据同步问题。
**功耗**:在某些情况下,维持时钟信号可能需要较高的功耗。

### 异步通信(Asynchronous Communication)

比如串口通信
**优点:**
**灵活性**:不需要共享时钟信号,适用于不同速率的设备或长距离通信。
**独立性**:每个数据包都有起始位和停止位,使得数据包可以独立传输。
**容错性**:由于数据包独立,即使数据传输中断,也可以重新同步。

**缺点:**
**效率较低**:每个数据包都需要额外的起始位和停止位,增加了数据传输的开销。
**数据速率受限**:由于需要处理每个数据包的同步位,数据传输速率相对较低。
**复杂性**:发送和接收端需要更复杂的逻辑来处理数据包的同步。

9、GPIO(通用输入输出)是一种常见的硬件接口,用于嵌入式系统中的数字信号处理。GPIO端口可以配置为不同的模式,以适应不同的应用需求。以下是一些常见的GPIO模式及其详解:

**输入模式(Input Mode)**:
   - GPIO端口被配置为接收外部信号。
   - 可以进一步细分为上拉输入、下拉输入等。

**输出模式(Output Mode)**:
   - GPIO端口被配置为输出信号到外部设备。
   - 可以控制LED、继电器等设备的开关状态。

**上拉输入模式(Pull-Up Input Mode)**:
   - 当GPIO端口配置为输入模式时,内部上拉电阻被激活,将输入信号拉高到高电平。
   - 适用于外部设备通过下拉电阻将信号拉低的情况。

**下拉输入模式(Pull-Down Input Mode)**:
   - 类似于上拉输入,但内部激活的是下拉电阻,将输入信号拉低到低电平。
   - 适用于外部设备通过上拉电阻将信号拉高的情况。

**开漏输出模式(Open-Drain Output Mode)**:
   - GPIO端口可以输出低电平,但高电平由外部上拉电阻决定。
   - 常用于多个设备共享同一信号线的情况,如I2C通信。

**开集输出模式(Open-Collector Output Mode)**:
   - 类似于开漏输出,但通常用于双极性晶体管,而不是MOSFET。
   - 同样适用于多个设备共享信号线的情况。

**模拟输入模式(Analog Input Mode)**:
   - GPIO端口被配置为模拟信号输入,可以读取模拟信号的电压值。
   - 通常需要ADC(模拟数字转换器)来转换模拟信号为数字信号。

**特殊功能模式(Alternate Function Mode)**:
   - GPIO端口可以配置为特定的特殊功能,如PWM(脉冲宽度调制)、定时器输入/输出等。
   - 这通常需要根据微控制器的特定功能来设置。

**中断模式(Interrupt Mode)**:
   - GPIO端口可以配置为中断输入,当外部信号变化时,可以触发中断请求。
   - 适用于需要快速响应外部事件的应用。

**三态逻辑模式(Tri-State Logic Mode)**:
    - GPIO端口可以被配置为高阻态,既不输出也不输入,常用于总线通信。

10、推挽模式(Push-Pull Mode)是一种常见的GPIO(通用输入输出)配置方式,主要用于微控制器或数字逻辑电路中。在推挽模式下,GPIO端口既可以作为输出,也可以作为输入,具有以下特点:

**双向驱动能力**:
   - 推挽模式允许GPIO端口在输出时具有较强的驱动能力,可以驱动外部负载。

**输出状态清晰**:
   - 在推挽模式下,GPIO端口可以清晰地输出高电平或低电平信号,没有中间状态。

**无需外部上拉或下拉电阻**:
   - 与开漏或开集模式不同,推挽模式不需要外部上拉或下拉电阻来确定输出电平。

 **内部结构**:
   - 推挽模式的GPIO端口内部通常包含两个互补的晶体管或MOSFET,一个用于输出高电平,另一个用于输出低电平。

 **应用场景**:
   - 适用于需要直接驱动LED、继电器、小型电机等负载的场景。
   - 也适用于简单的数字信号传输,如控制其他数字电路的输入。

**功耗**:
   - 在推挽模式下,当GPIO端口输出高电平时,内部的低电平输出晶体管关闭,减少了功耗。
   - 同样,当输出低电平时,高电平输出晶体管关闭。

 **噪声抑制**:
   - 由于推挽模式具有较好的驱动能力,它可以减少信号线上的噪声和抖动。

**冲突保护**:
   - 在某些微控制器中,推挽模式的GPIO端口可能具有内部保护机制,以防止在输出和输入之间发生冲突。

**配置方式**:
   - 推挽模式通常可以通过编程配置,设置GPIO端口的控制寄存器来实现。

**与开漏模式的比较**:
    - 与开漏模式相比,推挽模式不需要外部上拉电阻来确定高电平,因此在设计上更为简单。

推挽模式是GPIO端口最基本和最常用的配置之一,适用于大多数需要直接输出数字信号的场景。然而,在设计时,仍需考虑GPIO端口的最大输出电流和电压,以确保不会超出其规格限制。

11、编译优化是编译器在编译过程中对源代码进行的改进,以提高程序的执行效率、减少资源消耗或缩短编译时间等。不同的编译优化等级对应不同的优化策略和强度。以下是一些常见的编译优化等级及其区别:

**-O0**(无优化):
   - 不进行任何优化,编译速度最快,生成的代码体积小,但执行效率最低。
   - 适用于调试阶段,便于分析程序行为和性能问题。

**-O1**(启用基本优化):
   - 启用基本的优化措施,如循环展开、公共子表达式消除等。
   - 优化程度适中,编译速度和执行效率之间取得平衡。

**-O2**(优化速度):
   - 进一步优化程序的执行速度,可能包括更激进的优化措施。
   - 编译时间可能增加,但生成的代码执行效率更高。

**-O3**(优化速度和空间):
   - 在-O2的基础上,进一步优化内存使用和执行速度。
   - 可能包括更激进的优化,如内联函数、更深层次的循环优化等。

**-Os**(优化大小):
   - 优化生成代码的体积,适用于对存储空间有限制的环境。
   - 可能牺牲一些执行速度以减少代码大小。

**-Ofast**:
   - 启用更多的优化选项,包括那些可能违反严格标准的优化。
   - 生成的代码可能执行更快,但可能不符合某些语言标准。

**-Og**:
   - 优化的同时尽量保持调试信息的完整性,便于调试优化后的程序。
   - 适用于需要优化但又需要保持调试信息的情况。

**-flto**(Link Time Optimization,链接时优化):
   - 在链接阶段进行优化,可以跨编译单元进行优化。
   - 可以提高程序的执行效率,但会增加编译和链接的时间。

**-finline-functions**:
   - 内联所有的函数,包括递归函数。
   - 可以减少函数调用的开销,但可能导致生成的代码体积增大。

**-fno-omit-frame-pointer**:
    - 保留帧指针,便于调试,但可能会略微影响性能。

不同的编译优化等级会影响程序的性能、大小和调试的便利性。开发者应根据项目的具体需求选择合适的优化等级。例如,开发阶段可能使用-O0或-Og以便于调试,而在发布产品时使用-O2或-O3以提高性能。使用链接时优化(LTO)可以在不牺牲太多编译时间的情况下进一步提高性能。

12、核间通信

共享物理内存方式:

避免竞态的方式:同一个核,可以通过互斥锁,自旋锁的方式,防止同时访问;不同的核,可以通过硬件信号中断来同步,或者硬件消息机制。内存屏障可以解决内存一致性问题。

13、具体来说,当IO口配置为低电平时,IO口通过内部或外部的下拉电阻连接到地,使得IO口输出低电平信号,此时IO口不会向外部电路提供电流,因此不会漏电。同样地,当IO口配置为高电平时,IO口通过内部或外部的上拉电阻连接到电源,使得IO口输出高电平信号,此时虽然IO口与电源相连,但由于上拉电阻的存在,电流被限制在很小的范围内,因此也不会造成显著的漏电。
        相比之下,浮空模式(Floating Mode)是容易漏电的一种模式。在浮空模式下,IO口既不上拉也不下拉,其电平状态完全由外部电路决定。由于外部电路可能受到各种干扰和噪声的影响,因此IO口的电平状态可能会频繁变化,导致电流在IO口与外部电路之间来回流动,从而造成漏电。此外,如果外部电路中存在高阻抗路径或漏电通道,也可能导致IO口在浮空模式下漏电。

14、malloc(0)官方解释,可能返回NULL,也有可能返回非NULL。返回的地址是不可存储的。常见的一般返回非NULL。

15、编译构建工具

嵌入式编译构建工具的选择非常多样,它们各自具有不同的特点和优势。以下是一些常见的嵌入式编译构建工具及其区别:
1)  Keil MDK:Keil MDK 是一款集成开发环境(IDE),广泛用于ARM Cortex微控制器的开发。它提供了全面的开发工具,包括编辑器、编译器、调试器和仿真器 
2)  IAR Embedded Workbench:IAR 是一款跨平台的IDE,支持多种编程语言和多种仿真器及调试器。它以其优化编译器和丰富的库支持而闻名 
3) STM32CubeIDE:这是STMicroelectronics提供的一款基于Eclipse的IDE,专门用于STM32微控制器的开发。它集成了STM32CubeMX,一个图形化配置工具,用于快速生成STM32的初始化代码和配置文件 
4) LLVM/Clang:LLVM是一个编译器基础设施项目,提供了丰富的库,用于构建编译器和工具链。Clang是LLVM项目的一部分,作为前端处理C、C++和Objective-C等语言的编译,而LLVM作为后端进行代码优化和生成 
5)  GCC:GNU Compiler Collection是一个开源编译器套装,支持多种编程语言和平台。它以广泛的社区支持和平台兼容性著称 
6) CMake:CMake是一个跨平台的自动化构建系统,它使用配置文件来生成标准的构建文件,如Makefile或IDE工程文件。CMake广泛用于项目中,因为它可以简化编译过程,并且可以很好地与多种编译器和构建工具集成 

7)还有MinGW
每种工具都有其特定的应用场景和优势。例如,Keil和IAR提供了针对特定微控制器的优化和支持,而LLVM/Clang和GCC则提供了更广泛的语言和平台支持。CMake作为一个构建系统,可以与这些编译器配合使用,简化构建过程。开发者可以根据项目需求、目标平台和个人偏好来选择最合适的工具。

16、a++和a--是被拆分成3条汇编指令(1--从内存中读a的值保存在CPU的R0(假设是R0),2--计算a的新值,3--把a的新值写在内存中变量a的位置):加载-计算-保存

17、SPI,IIC

1)SPI是全双工,IIC是半双工,SPI支持更高的传输速率;

2)IIC是两线,通常SPI四线;

3)IIC支持多个主从机,IIC也可以支持,需要通过片选来操作,支持的数量很有限。

18、fatfs32有MBR区,FAT表区,数据区。

BR区用于引导,记录磁盘参数,剩余容量,簇大小等,FAT表区记录数据区存储情况,文件信息,也可以通过遍历fat表区查询剩余容量信息。数据区存储文件数据,以簇的方式管理

19、gcc的目标文件的依赖的.h文件也要加上,不然头文件的更改检测不到,依然是最新的:

main.o:main.c  hello.h

 如果目标文件和gcc编译后的文件名不一样,生成的文件名是gcc的,但是makefile检查的是目标文件main,如果文件有改动也检查不到

20、malloc不能在中断中调用:分配时间不确定,会调用到互斥锁,互斥锁基于任务调度器和优先级反转。有可能造成任务获取到了锁,中断获取不到,会卡死。

21、printf:数据一般放到缓冲区,不建议中断使用,执行时间较长。线程不安全,一般是没有锁机制,(sprintf等接口是有锁机制,线程安全)中断调用可能输出发生错误。

22、C语言中,int a[10] = {1};数组的第一个元素初始化为1,如果是全局变量或者静态变量,其余元素(a[1] 到 a[9])则肯定是初始化为0,如果是局部变量,一般也会初始化为0(也有少数编译器不会对后面9个元素做初始化)。如果定义局部变量数组,不初始化,栈空间可能会是随机值。

23、32位的CPU,数据总线也是32位,每次读取四个字节。因为读取效率的原因,CPU一般都会四字节对齐。数据总线读取时,地址一般都是4的倍数。如果全局变量定义的是1字节,实际占用的内存大小可能是1~4字节。编译器可能会进行优化,例如将多个小的全局变量打包到一个更大的内存块中,以减少内存碎片和提高访问效率。

24、文件打开
1)读模式:在大多数情况下,如果一个文件以读模式被打开且未被关闭,再次以读模式打开该文件通常是允许的。每次打开都会获得一个新的文件描述符(file descriptor),这些描述符各自独立,维护着各自的文件状态信息(如文件偏移量)。
2)写模式:写模式通常是独占的,这意味着如果一个文件以写模式被打开且未被关闭,再次尝试以写模式(或读写模式)打开该文件可能会失败,具体取决于操作系统的实现。然而,在某些操作系统和配置下,可能允许以追加模式(append mode)同时打开文件进行写入,而不会相互干扰。
3)其中一个地方关闭close文件,不影响其他地方的打开,文件描述符都是独立的。

25、ARM 架构的中断处理流程

当中断请求(IRQ)发生时,会首先停止当前任务,执行中断,ARM 架构的中断处理流程如下:
        1)硬件中断请求:外设(如网卡、定时器等)向中断控制器(如 GIC)发送中断信号(可能是高低电平或者下降沿等信号);
        2)中断控制器处理:GIC 接收中断信号,进行优先级仲裁,并将中断信号路由到目标 CPU;
        3)CPU 响应中断:CPU 收到中断信号后,保存当前程序状态(如 PC、PSTATE 等),并将处理器状态切换到中断模式(如 IRQ 模式);
        4)跳转到中断向量表:CPU 根据中断向量表(存储在 VBAR_EL1 指定的地址)找到对应的中断处理入口地址;
        5)执行中断处理程序:中断处理程序(ISR)开始执行,通常由内核提供的通用中断处理框架(如gic_handle_irq)读取中断号,并调用具体的设备驱动中断处理函数;
        6)中断处理完成:中断处理程序执行完毕后,通过 ERET 指令恢复中断前的状态,继续执行被中断的任务;

示例:网卡中断处理
以下是一个典型的网卡中断处理流程:
        1)硬件触发:网卡接收数据包后,向 GIC 发送中断信号。
        2)中断处理:GIC 路由中断到 CPU,CPU 跳转到中断处理程序,执行网卡驱动的 ISR。
        3)下半部处理:ISR 读取网卡状态,清除中断标志,并触发 SoftIRQ 或 Tasklet。
        4)数据传递:SoftIRQ 或 Tasklet 处理数据包,并通过 sk_buff 将数据传递到网络协议栈。
        5)用户空间回调:协议栈将数据包传递到用户空间,应用层通过套接字接口接收数据

26、在单CPU上,多线程执行不存在运行时内存乱序访问,但是可能存在缓存一致问题;

内存屏障是一种硬件指令,用于确保特定的内存操作在执行时的顺序性和可见性。它用于防止编译器和处理器对内存访问指令进行重排序,确保某些操作在内存屏障之前完成,之后的操作不会被提前执行。
volatile是C语言关键字,用于告诉编译器,被修饰的变量可能会被程序之外的其他因素(如硬件、中断、其他线程等)修改。因此,编译器在优化时不能假设该变量的值不会改变,必须每次直接从内存中读取或写入该变量。

27、AMP与SMP的区别

AMP(Asymmetric Multi-Processing,非对称多处理)

SMP(Symmetric Multi-Processing,对称多处理)

AMP的各处理器可能是不同的架构,比如ARM+RISC-V,一般每个核有自己的操作系统。SMP一般是一个操作系统来调度。

28、文件系统元数据

元数据的组成
 • 文件属性:包括文件名、大小、类型、创建时间、修改时间等基本信息。
 • 文件位置信息:记录文件在存储设备上的物理位置,如文件起始块号、块分布等。
 • 文件系统结构信息:包括文件系统的超级块、inode表、块位图等关键数据结构。
 • 访问权限和所有权信息:文件和目录的访问权限、所属用户和用户组等。
 • 其他相关信息:如文件的扩展属性、安全标签等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星辰&流星

感谢支持,创作不易

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值