【嵌入式软件工程师面经】STM32单片机

一、STM32的内核型号有哪些?     

STM32系列是STMicroelectronics(意法半导体)生产的基于ARM Cortex-M内核的微控制器产品线。这些产品按照不同的内核架构和性能特点分为了主流产品、超低功耗产品和高性能产品。

1.1 主流产品:

        STM32F0 系列搭载的是 ARM Cortex-M0 内核。

        STM32F1 系列搭载的是 ARM Cortex-M3 内核。

        STM32F3 系列搭载的是 ARM Cortex-M4 内核,带有FPU和DSP指令。

1.2 超低功耗产品:

        STM32L0 系列搭载的是 ARM Cortex-M0+ 内核。

        STM32L1 系列搭载的是 ARM Cortex-M3 内核。

        STM32L4 和 STM32L4+ 系列搭载的是 ARM Cortex-M4 内核。

1.3 高性能产品:

         STM32F2 系列搭载的是 ARM Cortex-M3 内核。

        STM32F4 系列搭载的是 ARM Cortex-M4 内核。

        STM32F7 系列搭载的是 ARM Cortex-M7 内核,提供更高的性能和更多的功能。

        STM32H7 系列搭载的是 ARM Cortex-M7 内核或双核架构(Cortex-M7与Cortex-M4)。

        每个系列都有其独特的功能和优势,比如STM32L系列的超低功耗设计适用于电池供电的应用,而STM32F7和STM32H7系列则提供了高性能选项,适用于要求较高的应用场合。

系列内核类型产品定位
STM32F0Cortex-M0主流产品
STM32F1Cortex-M3主流产品
STM32F3Cortex-M4主流产品
STM32L0Cortex-M0+超低功耗产品
STM32L1Cortex-M3超低功耗产品
STM32L4Cortex-M4超低功耗产品
STM32L4+Cortex-M4超低功耗产品
STM32F2Cortex-M3高性能产品
STM32F4Cortex-M4高性能产品
STM32F7Cortex-M7高性能产品
STM32H7Cortex-M7 或双核高性能产品

二、stm32主频是多少,传感器和单片机总线类型有哪些?     

        对于STM32微控制器来说,其主频由硬件和软件编程决定硬件部分主要由外部晶振提供时钟信号,而软件编程则可以通过配置时钟树和时钟分频器来调整主频。通常,外部晶振的频率可以通过倍频器来提高到所需的主频水平。

        关于串行通信接口,STM32微控制器通常支持多种标准和协议,包括单总线、I2C(IIC)、SPI、RS485和RS232。这些接口可以通过硬件引脚和软件编程来配置和使用。例如,通过配置相应的寄存器和引脚,可以使STM32微控制器实现与其他设备的通信,如传感器、存储器、外围设备等。

三、STM32F1和F4的区别?

对于STM32系列中的F1和F4系列,有一些重要的区别:

3.1 内核类型:

        F1系列采用了Cortex-M3内核。

        F4系列采用了Cortex-M4内核。

3.2 主频:

        F1系列的主频通常为最高72MHz。

        F4系列的主频通常为最高168MHz。

3.3 浮点运算:

         F1系列通常没有专门的浮点运算单元(FPU)。

         F4系列通常具有浮点运算单元(FPU),可加速浮点数运算。

3.4 功能性能:

        F4系列的外设相比F1系列更加丰富和功能更强大。例如,GPIO翻转速率、上下拉电阻配置、ADC精度等方面的性能可能更好。

3.5 内存大小:

         F1系列的内部SRAM最大为64KB。

         F4系列的内部SRAM较大,通常为192KB(112KB + 64KB + 16KB)。

特性STM32F1系列STM32F4系列
内核类型Cortex-M3Cortex-M4
主频最高72MHz最高168MHz
浮点运算无浮点运算单元(FPU)通常具有浮点运算单元(FPU)
功能性能外设功能相对较简单外设更丰富、功能更强大
内存大小内部SRAM最大64KB内部SRAM通常为192KB(112+64+16)

四、介绍以下STM32启动过程?

        在STM32微控制器中,启动过程通常涉及以下步骤,其中Boot引脚的设定决定了设备从哪个内存空间启动

4.1 通过Boot引脚设置初始启动地址:

        STM32的Boot引脚用于选择启动模式。这些模式可以是系统内存、主闪存内存或嵌入式SRAM。引脚的状态(通常是Boot0和Boot1)决定设备在上电或复位后从哪个内存开始执行。

4.2 初始化栈指针 (__initial_sp):

        在启动时,微控制器首先初始化栈指针。栈指针的初始值通常位于启动时代码的起始部分,这个值是程序编译时在链接脚本中定义的。

4.3 指向复位处理程序 (Reset_Handler):

        之后,微控制器会跳转到Reset_Handler,这是一个特殊的启动函数,通常完成一些基本的硬件设置工作

4.4 设置异常和中断处理程序:

         例如,HardFault_Handler是异常处理函数,STM32在遇到硬件失败异常时会调用这个函数。

4.5 设置系统时钟 (SystemInit):

        在Reset_Handler中,通常会调用SystemInit函数,来配置微控制器的系统时钟。这可能包括设置时钟源、配置PLL(相位锁定环)和分频器来达到所需的系统时钟频率。

4.6 调用C库启动例程 (_main 或 main):

         最后,启动代码会调用C库的初始化代码,然后进入_main或main函数,这是用户程序的入口点。C库的初始化包括设置和初始化C环境,如初始化全局变量,设置堆栈等。

        在启动过程中,这些步骤通常由启动代码(通常是汇编语言编写的)和C库的一部分来执行,它们在程序的最终二进制文件中是预先编码好的。开发者需要确保正确的链接脚本和启动文件被包含在项目中,以便这个过程可以正确执行。

五、介绍一下GPIO?

        STM32微控制器的GPIO(通用输入/输出)引脚可以配置为不同的工作模式,以便于它们可以用于不同的应用。下面是STM32 GPIO的8种基本工作模式的说明:

5.1 GPIO_Mode_AIN (模拟输入):

        该模式下,GPIO引脚被配置为模拟输入。常用于读取模拟信号,如传感器输出。

5.2 GPIO_Mode_IN_FLOATING (浮空输入):

        这个模式将GPIO配置为浮空输入,即它既不是上拉也不是下拉。用于需要高阻抗状态的输入。

5.3 GPIO_Mode_IPD (下拉输入):

        在这种模式下,GPIO引脚内部连接有下拉电阻,如果外部没有提供高电平信号,引脚将被拉低至逻辑“0”。

5.4 GPIO_Mode_IPU (上拉输入):

        GPIO引脚被配置为上拉输入,内部连接有上拉电阻。如果外部没有提供低电平信号,引脚将被拉高至逻辑“1”。

5.5 GPIO_Mode_Out_OD (开漏输出):

        将GPIO配置为开漏输出。在这种模式下,GPIO引脚可以提供低电平,但不能提供高电平。高电平需要外部上拉电阻来提供。

5.6 GPIO_Mode_Out_PP (推挽输出):

        推挽输出模式的GPIO可以输出高电平和低电平。它是数字输出模式中最常见的一种

5.7 GPIO_Mode_AF_OD (复用开漏输出):

         这是开漏输出的特殊情况,用于GPIO引脚被配置为特定的外设复用功能,如I2C通讯。

5.8 GPIO_Mode_AF_PP (复用推挽输出):

         这种模式类似于推挽输出,但是用于GPIO引脚配置为特定的外设复用功能,如USART、TIM等。

        这些模式的选择取决于外部电路和所需功能。例如,如果你的电路中有一个外部上拉电阻,你可能会选择开漏输出;如果你需要GPIO引脚来读取一个模拟信号,比如来自温度传感器的信号,你会选择模拟输入模式。

序号模式名称描述
1GPIO_Mode_AIN模拟输入,用于读取模拟信号,如传感器输出。
2GPIO_Mode_IN_FLOATING浮空输入,高阻抗状态,不连接上拉或下拉电阻。
3GPIO_Mode_IPD下拉输入,内部连接下拉电阻,无高电平信号时输出低电平。
4GPIO_Mode_IPU上拉输入,内部连接上拉电阻,无低电平信号时输出高电平。
5GPIO_Mode_Out_OD开漏输出,可输出低电平,高电平需要外部上拉。
6GPIO_Mode_Out_PP推挽输出,可以输出高电平和低电平。
7GPIO_Mode_AF_OD复用开漏输出,用于特定的外设复用功能,如I2C通讯。
8GPIO_Mode_AF_PP复用推挽输出,用于特定的外设复用功能,如USART、TIM等。

详细的可参照数据手册

e43220c30af74bed9f9efc8c8f6ddbf2.png

六、UART串行通信方式介绍?

6.1同步通信:

        1. I2C (Inter-Integrated Circuit) 半双工:

        I2C是一种串行通信总线,用于连接微控制器和外部设备。它使用两根线(串行数据线SDA和串行时钟线SCL)进行通信。在I2C通信中,设备之间可以进行双向通信,但不是同时进行的,因此它被称为半双工通信

        2. SPI (Serial Peripheral Interface) 全双工:

        SPI也是一种串行通信协议,用于连接微控制器和外部设备。它通常使用四根线(主设备输出(MOSI)、主设备输入(MISO)、时钟线(SCK)和片选线(SS))。SPI是全双工通信,意味着数据可以在主设备和从设备之间双向传输,而且可以同时进行。

6.2 异步通信:

        1. RS485 半双工:

        RS485是一种串行通信标准,通常用于长距离通信和多点通信。在RS485通信中,数据在发送和接收之间是单向的,因此它是半双工通信。不同设备在不同时间段发送或接收数据。

        2. RS232 全双工:

        RS232是一种常见的串行通信标准,也被称为串口通信。它通常用于连接计算机和外部设备,如调制解调器、打印机等。RS232是全双工通信,意味着数据可以同时双向传输,计算机可以发送和接收数据。

6.3 波特率:

        UART(通用异步收发传输器)协议中的波特率(Baud Rate)是指数据传输的速率,即每秒钟传输的比特数(bit/s)。波特率115200表示每秒钟传输115200个比特。

        在UART通信中,波特率是一个非常重要的参数,因为它决定了数据传输的速度。发送端和接收端必须使用相同的波特率,以确保数据能够正确地传输和接收。如果波特率不匹配,接收端可能会错误地解释传输的数据,导致通信失败。

        波特率115200是一个相对较高的速率,通常用于需要快速数据传输的应用,例如在嵌入式系统中与外部设备进行通信。需要注意的是,波特率越高,对硬件的要求也越高,因为需要更快的时钟和更精确的定时来确保数据的准确传输。

        UART协议的波特率115200表示每秒钟可以传输115200比特(bit)。要将其转换为千字节(KB)每秒,我们需要使用以下转换:

1 字节(Byte)= 8 比特(bit)
1 千字节(KB)= 1024 字节(Byte)

首先,将波特率从比特转换为字节每秒:

        115200 比特/秒 ÷ 8 = 14400 字节/秒

然后,将字节每秒转换为千字节每秒:

        14400 字节/秒 ÷ 1024 ≈ 14.06 KB/秒

        所以,波特率为115200时,理论上的最大数据传输速度大约是14.06 KB/秒。然而,实际的数据吞吐量可能会小于这个值,因为UART传输通常还包括起始位、停止位和可能的奇偶校验位。这些额外的位在每个发送的字节中占据空间,但不携带有效的数据负载,因此它们会稍微降低有效的数据传输速率。

七、串口如何配置?

7.1 串口时钟使能,GPIO时钟使能:

        首先需要使能串口和GPIO的时钟,确保它们可以正常工作。这可以通过配置相应的时钟控制寄存器来实现。

7.2 串口复位:

        在初始化之前,对串口进行复位操作,以确保其处于初始状态。

7.3 GPIO端口模式设置:

        配置用于串口通信的GPIO引脚的工作模式。通常,TX引脚设置为复用推挽输出模式,而RX引脚设置为浮空输入模式

7.4 串口参数初始化:

        初始化串口的参数,包括波特率、数据位、停止位、奇偶校验位和数据流控制等。这些参数应该与通信另一端的设置相匹配,以确保正确的数据传输。

7.5 开启中断并且初始化NVIC:

        如果需要使用中断来处理串口接收或发送事件,则需要开启中断并初始化相应的中断向量控制器(NVIC)。

7.6 使能串口:

        启用串口,使其可以开始工作。这通常涉及设置相应的使能位或控制寄存器。

7.7 编写中断处理函数:

        如果使用了中断,需要编写相应的中断处理函数来处理串口接收或发送中断事件。

八、USART主要特点都有哪些?

8.1 全双工操作:

        支持相互独立的接收数据和发送数据,这意味着可以同时进行收发操作而不会相互干扰。

8.2 同步操作:

        在同步操作时,可以选择主机时钟同步或从机时钟同步,这取决于通信的具体需求和配置

8.3 独立的高精度波特率发生器:

        提供了独立的波特率发生器,不需要占用定时/计数器资源,可以实现高精度的波特率设置。

8.4 支持不同数据帧结构:

        支持不同数据位数(5、6、7、8、9位)、1或2位停止位的串行数据帧结构,以满足不同通信协议的要求。

8.5 硬件支持的奇偶校验位:

        可以由硬件支持奇偶校验位的发生和检验,提供了数据传输的可靠性和完整性

8.6 数据溢出检测和帧错误检测:

        提供了数据溢出检测和帧错误检测功能,以确保数据的准确性和可靠性。

8.7 噪声滤波器和数字低通滤波器:

        包括检测错误起始位的噪声滤波器和数字低通滤波器,有助于减少由于噪声引起的错误。

8.8 独立的中断:

        提供了三个完全独立的中断源,分别是TX发送完成、TX发送数据寄存器空和RX接收完成,可以更灵活地处理串口事件。

8.9 支持多机通信模式和倍速异步通信模式:

        支持多机通信模式,允许多个设备之间进行通信;同时也支持倍速异步通信模式,提供了更高的通信速率。

九、I2C 总线在传送数据过程中共有三种类型信号?

9.1 开始信号:

        在 I2C 总线通信中,开始信号表示数据传输的开始。它由 SCL(时钟线)为高电平时,SDA(数据线)由高电平向低电平跳变而产生。开始信号告诉接收器即将开始传输数据。

9.2 结束信号:

        结束信号表示数据传输的结束。它由 SCL 为高电平时,SDA 由低电平向高电平跳变而产生。结束信号告诉接收器数据传输已经完成。

9.3 应答信号:

        在 I2C 通信中,接收器在接收到 8 位数据后,需要向发送器发送应答信号,表示已经成功接收数据。应答信号是一个特定的低电平脉冲。CPU 在向受控单元发送信号后,等待受控单元发送应答信号。如果未收到应答信号,则可能表示受控单元出现故障或未正确连接。

十、I2C配置主机模式端口该怎么配置?

10.1 硬件模式:

        在硬件模式下,使用了复用开漏输出,这意味着输出引脚既不上拉也不下拉,而是由外部电路控制。这种模式适用于快速模式,即 400 Kbit/s 的数据传输速率。

10.2 软件模拟:

        在软件模拟模式下,使用了推挽输出,并配置了上拉电阻。推挽输出表示输出引脚可以提供高电平或低电平的输出,并且不受外部电路的控制。配置上拉电阻可以确保在不输出信号时,引脚保持在高电平状态。

十一、什么是I2C仲裁机制?

        I2C(Inter-Integrated Circuit)总线的仲裁机制遵循了“低电平优先”的原则。这意味着在多个设备同时尝试发送数据时,总线上出现低电平的设备会获得对总线的控制权

        这种机制可以通过“线与”(Wired-AND)的方式实现。在总线上,如果有多个设备同时尝试发送低电平,则总线上会出现低电平;而如果有任何一个设备发送高电平,则总线上会保持高电平。因此,总线上出现低电平的设备将获得对总线的控制权。

        这种仲裁机制确保了总线上只有一个设备在任何时候掌握控制权,从而有效地避免了冲突和数据损坏。

十二、SPI需要几根线?

SPI(Serial Peripheral Interface)接口通常使用四条线进行通信,每条线的作用如下:

12.1 MISO(Master In Slave Out):

        MISO 是主设备到从设备的数据传输线路,即主设备向从设备传输数据时,数据从从设备输出到主设备。因此,MISO 是主设备数据输入,从设备数据输出

12.2 MOSI(Master Out Slave In):

        MOSI 是从设备到主设备的数据传输线路,即从设备向主设备传输数据时,数据从主设备输入到从设备。因此,MOSI 是主设备数据输出,从设备数据输入。

12.3 SCLK(Serial Clock):

        SCLK 是串行时钟信号线,由主设备产生并控制。它定义了数据传输的时序,驱动数据在 MISO 和 MOSI 之间的传输。

12.4 CS(Chip Select):

        CS 是从设备的片选信号线,由主设备控制。当主设备想要与特定的从设备通信时,它会将 CS 线置为低电平,选中对应的从设备,从而与该从设备建立通信连接。

十三、SPI通信的四种模式?

13.1 CPOL (Clock Polarity - 时钟极性):

        SPI有四种工作模式,它们的不同取决于时钟信号(SCLK)的极性(CPOL)和相位(CPHA)设置。

        CPOL (Clock Polarity - 时钟极性):

        CPOL 决定了当 SCLK 处于空闲状态(idle)时,其电平是低电平(0)还是高电平(1):
                CPOL=0 表示时钟空闲时电平为低电平,因此在有效时钟周期内,SCLK的电平为高电平,即所谓的“高有效”(active-high)。

                CPOL=1 表示时钟空闲时电平为高电平,因此在有效时钟周期内,SCLK的电平为低电平,即所谓的“低有效”(active-low)。

5d46ef28d4ba4f54a4dafd303462cebc.png

        CPHA (Clock Phase - 时钟相位):

                CPHA 决定了数据采样发生在时钟信号的哪个边沿(edge):
                        CPHA=0 表示数据在第一个时钟边沿上采样
                                对于 CPOL=0,时钟空闲时为低电平,第一个时钟边沿是从低到高的上升沿。
                                对于 CPOL=1,时钟空闲时为高电平,第一个时钟边沿是从高到低的下降沿。
                        CPHA=1 表示数据在第二个时钟边沿上采样
                                对于 CPOL=0,时钟空闲时为低电平,第二个时钟边沿是从高到低的下降沿。
                                对于 CPOL=1,时钟空闲时为高电平,第二个时钟边沿是从低到高的上升沿。

        这些参数的组合形成了四种不同的SPI工作模式,它们在时钟极性和相位上的不同设置使得SPI接口在不同应用场景下具有更大的灵活性和适用性。

十四、该如何确定使用哪种模式?

        首先需要确认从机(slave)的需求,即从机在空闲状态时 SCLK 是处于低电平还是高电平。由于你确认了从机芯片的时序图将 SCLK 的空闲状态设为高电平,因此 CPOL 应该设置为 1。

        接下来,根据从机芯片的时序图确定 CPHA,即确定数据在 SCLK 的下降沿还是上升沿采集。这一信息应该从从机芯片的 datasheet 中可以找到,一般会在时序图或者通信协议的描述中给出。

        一旦确定了 CPOL 和 CPHA 的设置,就可以准确配置 SPI 接口以满足从机芯片的要求,确保主设备和从设备之间的正确通信。

十五、描述一下中断的处理流程?

15.1 初始化中断:

        首先,需要确定你使用的是哪种类型的微控制器或处理器,因为不同的硬件平台有不同的中断控制器和中断配置方式。

        在初始化代码中,你需要调用相应的库函数或配置寄存器来启用中断,并且可能需要指定中断服务函数的地址或处理程序。

15.2 设置触发方式:

        触发方式包括上升沿触发、下降沿触发或双沿触发(即上升沿和下降沿都触发中断)。

        在初始化中断的代码中,你需要指定所需的触发方式。这可能涉及设置中断控制器的相关寄存器或调用特定的库函数。

15.3 触发中断:

        一旦中断被使能,并且触发方式被设置,中断可以在满足触发条件时被触发。这可能是由硬件引脚状态的变化(如上升沿或下降沿)或特定的软件条件满足触发的。

        当中断被触发时,控制会转移到预先指定的中断服务函数。

        针对你提到的进入中断服务函数的步骤,一旦中断被触发,控制就会转移到预先指定的中断服务函数中。在中断服务函数中,你可以执行特定的操作来响应中断事件,比如处理接收到的数据、更新状态或执行其他必要的任务。

十六、STM32的中断控制器支持多少个外部中断?

16.1 STM32的中断控制器支持19个外部中断/事件请求:

GPIO 的管脚 GPIOx.0~GPIOx.15(x=A,B,C,D,E,F,G)分别对应中断线 0 ~ 15。
另外四个EXTI线的连接方式如下:
        ● EXTI线16连接到PVD输出
        ● EXTI线17连接到RTC闹钟事件
        ● EXTI线18连接到USB唤醒事件
        ● EXTI线19连接到以太网唤醒事件(只适用于互联型产品)

16.2 中断服务函数列表:

IO口外部中断在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数。

        EXTI0_IRQHandler
        EXTI1_IRQHandler
        EXTI2_IRQHandler
        EXTI3_IRQHandler
        EXTI4_IRQHandler
        EXTI9_5_IRQHandler
        EXTI15_10_IRQHandler

十七、STM32有几个时钟源?

        HSI(High-Speed Internal):高速内部时钟,使用RC振荡器,频率为8MHz,但精度不高。通常用于在系统启动时提供基本时钟。

        HSE(High-Speed External):高速外部时钟,可以接石英/陶瓷谐振器或外部时钟源。其频率范围为4MHz~16MHz,提供高精度的时钟信号。

        LSI(Low-Speed Internal):低速内部时钟,使用RC振荡器,频率为40kHz。主要用于低功耗时钟模式,如待机模式下的时钟提供。

        LSE(Low-Speed External):低速外部时钟,连接32.768kHz的石英晶体。通常用于实时时钟(RTC)等需要高精度时钟的应用。

        PLL(Phase-Locked Loop):锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但输出频率最大不得超过72MHz。PLL可以提供高频率的时钟信号,用于驱动系统的主时钟。

时钟源类型频率范围精度用途
HSI内部8MHz启动时基本时钟
HSE外部4MHz~16MHz高精度外部时钟
LSI内部40kHz低功耗时钟
LSE外部32.768kHzRTC时钟等高精度应用
PLL内部最大72MHz取决于输入提供高频率时钟

十八、RTOS的任务是怎么写的?如何切出这个任务?

        UCOS的任务调度机制采用基于优先级的调度策略。这意味着高优先级任务可以独占CPU执行,直到它主动放弃执行或者发生某些事件(如硬件中断),才会切换到其他任务。

        任务间切换:UCOS使用任务调度器来管理多个任务,每个任务有自己的优先级。当系统空闲或者当前任务主动放弃CPU执行权时,任务调度器会根据任务的优先级决定下一个要执行的任务。高优先级任务会优先执行,低优先级任务只有在没有更高优先级任务要执行时才能获得CPU执行权。

        硬件中断:当硬件中断发生时,系统会保存当前任务相关的变量(通常是通过将这些变量入栈),然后执行中断服务程序。中断服务程序执行完成后,系统会将之前保存的任务相关变量出栈并返回到原来的任务执行点。

        任务间切换的触发:为了确保低优先级任务有机会执行,高优先级任务在一定条件下需要放弃CPU执行权,让任务调度器选择其他任务执行。这可以通过插入等待延时、阻塞等待事件等方式来实现。

        UCOS的任务调度器会根据任务的优先级和任务间的协作情况来决定任务的执行顺序,从而保证系统的稳定性和实时性。

十九、UCOSII中任务间的通信方式有哪几种?

        在uC/OS-II中,使用信号量、邮箱和消息队列这些事件来实现任务间的通信是非常常见的。这些事件可以用于实现资源共享、任务同步和消息传递等功能。

19.1 信号量:

        用途:控制共享资源的使用权,标志某事件的发生,使两个任务的行为同步。

        应用实例:互斥信号量。初始化为1,用于保护共享资源,确保只有一个任务可以访问该资源,从而避免冲突。

19.2 邮箱(消息邮箱):

        概念:邮箱用于在任务之间传递消息,类似于一个缓冲区,任务可以将消息放入邮箱中,其他任务则可以从邮箱中获取消息。

        应用场景:用于存储外部事件、串口接收程序中的接收缓冲区等场景

19.3 消息队列:

        概念:消息队列是多个邮箱的集合,任务和中断可以将消息放入队列中,任务可以按照先进先出的顺序获取消息。

        应用场景:用于存储多个任务产生的消息,确保消息按照先进先出的顺序被处理

        这些事件在uC/OS-II中扮演着重要的角色,帮助实现任务间的通信和协作,从而构建出复杂的实时系统。通过合理地使用这些事件,可以提高系统的可靠性和实时性。

二十、uCOSII和Linux的差异?

        μC/OS-II和Linux都适用于嵌入式系统,但它们有各自的特点和适用场景。

21.1 μC/OS-II:

        设计定位:专为嵌入式系统而设计,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点。

        特点:最小内核可编译至2KB,适用于资源受限的嵌入式环境,可以在几乎所有知名的CPU上进行移植。

        优势:针对嵌入式系统的需求进行了优化,运行效率更高,占用资源更少。

21.2 Linux:

        适用范围:广泛应用于服务器、嵌入式系统以及家用机等各种场景

        特点:免费、安全、稳定,具有开放源代码的特性,可以灵活定制和修改。

        优势:在服务器领域有广泛的应用,如Red Hat Linux等发行版在服务器上使用广泛,具有强大的社区支持和丰富的生态系统。

        μC/OS-II更适用于对执行效率和资源占用有严格要求的嵌入式系统,而Linux则更适用于需要广泛应用、灵活定制以及在服务器领域有较大市场份额的场景。

特点μC/OS-IILinux
设计定位专为嵌入式系统设计广泛应用于服务器、嵌入式系统等
内核大小最小内核可编译至2KB内核较大,常规内核大小较大
运行效率执行效率高,占用空间小在资源充足的系统上通常具有良好的性能
实时性能实时性能优良实时性能取决于硬件和内核配置
可扩展性可扩展性强具有较好的可扩展性
适用场景资源受限的嵌入式系统服务器、嵌入式系统、家用机等
社区支持和生态社区支持较小,但有专门的嵌入式社区强大的社区支持和丰富的生态系统

二一、ucosii和ucosiii和freeRTOS比较

21.1 uC/OS-II vs. FreeRTOS:

  1. 外延支持:uC/OS-II具有大量外延支持,如FS、USB、GUI、CAN等,而FreeRTOS只支持TCP/IP。
  2. 商业应用费用:在商业上,FreeRTOS是免费应用的,而uC/OS-II在商业上的应用是需要付费的。
  3. 任务间通讯:FreeRTOS只支持队列、信号量、互斥量,而uC/OS-II除此外还支持事件标志组、邮箱。
  4. 任务管理数量:理论上讲,FreeRTOS可以管理超过64个任务,而uC/OS-II只能管理64个。

21.2 uC/OS-II vs. μC/OS-III:

  1. 优先级管理:μC/OS-III允许几个任务使用同一个优先级,并且在同一个优先级中支持时间片调度。
  2. 动态配置内核资源:μC/OS-III允许在程序运行中动态配置实时操作系统内核资源,避免了编译过程中资源不够分配的问题。
  3. 资源复用:μC/OS-III对资源复用做了改进,不再受限于最大任务数,而是受限于RAM的可用量。
  4. 功能增加:μC/OS-III增加了许多功能,包括更多的任务管理、信号量、互斥型信号量、事件标志、消息队列、定时器等,这些功能在uC/OS-II中是没有的。
特点uC/OS-IIFreeRTOSμC/OS-III
外延支持支持大量外延,如FS、USB、GUI、CAN等仅支持TCP/IP同样支持大量外延,如FS、USB、GUI、CAN等
商业应用费用商业上需付费商业上免费应用商业上需付费
任务间通讯支持队列、信号量、互斥量、事件标志组、邮箱仅支持队列、信号量、互斥量支持队列、信号量、互斥量、事件标志组、邮箱
任务管理数量最多管理64个任务理论上支持超过64个任务理论上支持超过64个任务
优先级管理任务优先级不能重复,不支持时间片调度支持任务共享同一优先级,支持时间片调度支持任务共享同一优先级,支持时间片调度
动态配置内核资源不支持不支持可在程序运行中动态配置内核资源
资源复用有限于最大任务数不受限于最大任务数不再受限于最大任务数
功能增加功能相对较少功能相对较少增加了许多功能

  • 35
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 34
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

妄北y

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值