AVR 328pb定时器0基本介绍和使用

AVR 328pb定时器0基本介绍和使用


  • 📌参考ATmega328PB文档.
  • 📍结合参考同架构lgt8f328p中文文档:http://www.prodesign.com.cn/wp-content/uploads/2023/03/LGT8FX8P_databook_v1.0.4.pdf

📗定时器0基本功能描述

  • 两个独立的输出比较单元
  • 双缓冲输出比较寄存器
  • 比较匹配发生时自动清零计数器并自动加载
  • 无干扰脉冲的相位修正的PWM输出
  • 三个独立的中断源:溢出和比较匹配中断 (TOV0、OCF0A和OCF0B)

📑TC0寄存器列表

在这里插入图片描述

  • TC0控制寄存器A- TCCR0A
    在这里插入图片描述
    在这里插入图片描述
  • TC0控制寄存器B- TCCR0B
    在这里插入图片描述
    在这里插入图片描述
  • 波形生成模式位(WGM0[1:0])描述:
    在这里插入图片描述

📘定时器0工作模式

定时计数器0有四种不同的工作模式,包括普通模式(Normal),比较匹配时清零(CTC)模式,快速脉冲宽度调制(FPWM)模式和相位修正脉冲宽度调制(PCPWM)模式,由波形产生模式控制位WGM0[2:0]来选择。

  • 🌿328PB定时器0架构
    在这里插入图片描述
🌿相位修正PWM模式
  • 时序图:
    在这里插入图片描述

当设置WGM0[2:0]=1 或 5 时,定时计数器 0 进入相位修正PWM模式,计数的最大值TOP 分别为MAX(0xFF)或OCR0A。计数器采用双向操作,由BOTTOM递增到TOP,然后又递减到BOTTOM,再重复此操作。计数到达TOP和BOTTOM时均改变计数方向,计数值在TOP或BOTTOM 上均只停留一个计数时钟。在递增或递减过程中,计数值TCNT0与OCR0x匹配时,输出比较信号OC0x将会被清零或置位,取决于比较输出模式COM0x的设置。与单向操作相比,双向操作可获得的最大频率要小,但其极好的对称性更适合于电机控制。

  • 相位修正PWM模式下,当计数到达BOTTOM时置位TOV0标志,当计数到达TOP时把比较缓冲器的值更新到比较值。如果中断使能,在中断服务程序中可以更新比较缓冲器OCR0x寄存器。
    设置OC0x 引脚的数据方向寄存器为输出时才能得到输出比较信号OC0x的波形。波形的频率可用下面的公式来计算:
FOCnxPCPWM = Fclk /N*510 (N由CS0[2:0] 决定)

其中,N表示的是预分频因子(1,8,64,256或者1024)。
在这里插入图片描述

在递增计数过程中,当TCNT0与OCR0x匹配时,波形产生器就清零(置位)OC0x信号。在
递减计数过程中,当TCNT0与OCR0x匹配时,波形产生器就置位(清零)OC0x信号。由此OCR0x 的极值会产生特殊的PWM波。当OCR0x设置为最大值或最小值时,OC0x信号输出会一直保持低电平或高电平。
为了保证输出PWM波在最小值两侧的对称性,在没有发生比较匹配时,有两种情况下也会翻转OC0x信号。第一种情况是,当OCR0x的值由最大值0xFF改变为其他数据时。当OCR0x为最大值,计数值达到最大时,OC0x 的输出与前面降序计数时比较匹配的结果相同,即保持OC0x不变。此时会更新比较值为新的OCR0x的值(非0xFF), OC0x的值会一直保持,直
到升序计数时发生比较匹配而翻转。此时OC0x信号并不以最小值为中心对称,因此需要在TCNT0 到达最大值时翻转 OC0x 信号,此即没有发生比较匹配时翻转 OC0x 信号的第一种情况。第二种情况是,当TCNT0从比OCR0x 高的值开始计数时,因而会丢失一次比较匹配,从而引起不对称情形的产生。同样需要翻转OC0x信号去实现最小值两侧的对称性。

  • 📝相位修正PWM模式测试例程:
/*
 * Timer0_ OC0A_PWM_Pulse.c
 *
 * Created: 2024/2/1 10:45:11
 * Author : Administrator
 */

#include <avr/io.h>



void Sys_Clock_Init(void)
{

// Crystal Oscillator division factor: 1 PSC  16MHz HSE
    CLKPR=(1<<CLKPCE);
    CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);

}

void Gpio_Init(void)
{

    // Port D initialization  PD6 PD5 OutPut
    // Function: Bit7=In Bit6=Out Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
    DDRD=(0<<DDD7) | (1<<DDD6) | (1<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
    // State: Bit7=T Bit6=0 Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
    PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

}

void Timer0_PWM_Init(void)
{
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 250.000 kHz、
// Mode: Phase correct PWM top=0xFF
// OC0A output: Non-Inverted PWM
// OC0B output: Disconnected
// Timer Period: 2.04 ms
// Output Pulse(s):
//Phase Correct PWM Mode PWM频率
// OC0A Period: 2.04 ms Width: 1.024 ms
//N represents the prescale divider (1, 8, 64, 256, or 1024)
//1 PSC->62.5khZ
//FOCnxPWM = Fclk /N*510 (N由CS0[2:0] 决定)
    /*
        TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (1<<WGM00);//250KHz
        TCCR0B=(0<<WGM02) | (0<<CS02) | (1<<CS01) | (1<<CS00);//64PSC :PWM频率= 1600 000/64*510
    */
    TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (1<<WGM00);
    TCCR0B=(0<<WGM02) | (0<<CS02) | (1<<CS01) | (0<<CS00);//CS0-CS2:0-7 prescale divider (1, 8, 64, 256, or 1024) 8PSC :PWM频率= 1600 000/8*510=3921Hz
    TCNT0=0x06;
    OCR0A=0x40;//使能比较器A输出值:0 - 255占空比
    OCR0B=0x40;//使能比较器B输出值:0 - 255占空比

// Ensure that the Timer/Counter 0 is enabled
    PRR0&= ~(1<<PRTIM0);

// Timer/Counter 0 Interrupt(s) initialization
    TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0);

}


int main(void)
{
    /* Replace with your application code */
    Sys_Clock_Init();
    Gpio_Init();
    Timer0_PWM_Init();
    while (1)
    {
    }
}
  • 🔖TCCR0B=(0<<WGM02) | (0<<CS02) | (1<<CS01) | (0<<CS00);:8分频,频率计算:
    在这里插入图片描述

  • 📏PD5和PD6输出波形图:
    在这里插入图片描述

🌿CTC 模式

设置WGM0[2:0]=2 时,定时计数器0进入CTC模式,计数的最大值TOP为OCR0A。在这个模式下,计数方式为每一个计数时钟加一递增,当计数器的数值TCNT0等于TOP时计数器清零。OCR0A定义了计数的最大值,亦即计数器的分辨率。这个模式使得用户可以很容易的控制比较匹配输出的频率,也简化了外部事件计数的操作。
当计数器到达计数的最大值时,输出比较匹配标志OCF0被置位,相应的中断使能置位时将会产生中断。在中断服务程序里可以更新 OCR0A 寄存器即计数的最大值。在这个模式下OCR0A 没有使用双缓冲,在计数器以无预分频器或很低的预分频器工作下将最大值更新为接近最小值的时候要小心。如果写入OCR0A的数值小于当时的TCNT0值时,计数器将丢失一次比较匹配。在下一次比较匹配发生之前,计数器不得不先计数到TOP,然后再从BOTTOM开始计数到OCR0A值。和普通模式一样,计数值回到BOTTOM的计数时钟里置位TOV0标志。
设置OC0x引脚的数据方向寄存器为输出时才能得到输出比较信号OC0x的波形。当COM0x=1时,发生比较匹配时会翻转 OC0x 信号,这种情况下波形的频率可以用下面的公式来计算:
foc0xctc = fsys/(2N(1+OCR0x))
其中,N表示的是预分频因子(1,8,64,256或者1024)。
在这里插入图片描述

从公式可以看出,当设置OCR0A为0x0且无预分频器时,可以获得最大频率为fsys/2的输出波形。
-🔧 使用CodeVisionAVR软件配置CTC模式参数:
在这里插入图片描述

  • 📝定时器0 CTC模式下,使用示例:
/*
 * Timer0_1ms.c
 *
 * Created: 2024/1/31 20:40:22
 * Author : Administrator
 */

#include <avr/io.h>
#include "avr//interrupt.h"


ISR(TIMER0_OVF_vect)
{
    static volatile int iTimes = 0;
    // Reinitialize Timer 0 value
    TCNT0=0x06;
    // Place your code here
    if (++iTimes == 1000)
    {
        PORTB ^= (1 << PINB5);//1秒钟闪烁一次
        iTimes = 0;
    }

}

void Timer0_Init()
{
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: 250.000 kHz
    // Mode: Normal top=0xFF
    // OC0A output: Disconnected
    // OC0B output: Disconnected
    // Timer Period: 1 ms
    TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00);
    TCCR0B=(0<<WGM02) | (0<<CS02) | (1<<CS01) | (1<<CS00);
    TCNT0=0x06;
    OCR0A=0x00;
    OCR0B=0x00;

    // Timer/Counter 0 Interrupt(s) initialization
    TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (1<<TOIE0);//溢出中断启用当TOIE0位写入1,并设置状态寄存器中的I位时,启用定时器/计数器0溢出中断。
    // Ensure that the Timer/Counter 0 is enabled
    PRR0&= ~(1<<PRTIM0);
}


int main(void)
{
    /* Replace with your application code */
    // Crystal Oscillator division factor: 1

    CLKPR =(1<<CLKPCE);
    CLKPR =(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);

    cli();//关中断
    Timer0_Init();//定时器0初始化,配置1ms中断
   DDRB = PINB5;//配置PB5为输出模式
    // Globally enable interrupts
    sei();//开中断
    while (1)
    {
    }
}


🌿快速PWM模式

设置WGM0[2:0]=3 或 7 时,定时计数器 0 进入快速PWM模式,可以用来产生高频的PWM波形,计数最大值TOP分别为MAX(0xFF)或OCR0x。快速PWM模式和其他PWM模式不同在于它是单向操作。计数器从最小值0x00累加到TOP后又回到BOTTOM重新计数。
当计数值TCNT0到达OCR0x或BOTTOM时,输出比较信号OC0x会被置位或清零,取决于比较输出模式COM0x的设置,详情见寄存器描述。由于采用单向操作,快速PWM模式的操作
频率是采用双向操作的相位修正PWM模式的两倍。高频特性使得快速PWM模式适用于功率调节,整流以及DAC应用。高频信号可以减小外部元器件(电感电容等)的尺寸,从而降低系统成本。
当计数值到达最大值时,定时计数器溢出标志TOV0将会被置位,并把比较缓冲器的值更新
在这里插入图片描述

  • Fast PWM mode频率计算公式:
    在这里插入图片描述

  • 📑快速PWM例程,使用CodeVisionAVR配置参数:
    在这里插入图片描述

/*
 * Timer0_ OC0A、B_PWM_Pulse.c
 *
 * Created: 2024/2/1 10:45:11
 * Author : Administrator
 */

#include <avr/io.h>



void Sys_Clock_Init(void)
{

// Crystal Oscillator division factor: 1 PSC  16MHz HSE
    CLKPR=(1<<CLKPCE);
    CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);

}

void Gpio_Init(void)
{

    // Port D initialization  PD6 PD5 OutPut
    // Function: Bit7=In Bit6=Out Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
    DDRD=(0<<DDD7) | (1<<DDD6) | (1<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
    // State: Bit7=T Bit6=0 Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
    PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

}

void Timer0_PWM_Init(void)
{
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: 250.000 kHz
    // Mode: Fast PWM top=0xFF
    // OC0A output: Non-Inverted PWM
    // OC0B output: Non-Inverted PWM
    // Timer Period: 1.024 ms
    // Output Pulse(s):
    // OC0A Period: 1.024 ms Width: 0.257 ms
    // OC0B Period: 1.024 ms Width: 0.6666 ms
    TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (1<<WGM01) | (1<<WGM00);
    TCCR0B=(0<<WGM02) | (0<<CS02) | (1<<CS01) | (1<<CS00);
    TCNT0=0x06;
    OCR0A=0x40;
    OCR0B=0xA6;
// Ensure that the Timer/Counter 0 is enabled
    PRR0&= ~(1<<PRTIM0);

// Timer/Counter 0 Interrupt(s) initialization
    TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0);

}


int main(void)
{
    /* Replace with your application code */
    Sys_Clock_Init();
    Gpio_Init();
    Timer0_PWM_Init();
    while (1)
    {
    }
}


  • 🎞定时器0快速PWM模式下,比较器A:PD5和比较器B:PD6输出波形:
    在这里插入图片描述
    在这里插入图片描述
  • 🪓快速模式下Fast PWM top=OCR0A
    在这里插入图片描述
/*Fast PWM top=OCR0A
 * Timer0_ OC0A_PWM_Pulse.c
 *
 * Created: 2024/2/1 10:45:11
 * Author : Administrator
 */

#include <avr/io.h>



void Sys_Clock_Init(void)
{

// Crystal Oscillator division factor: 1 PSC  16MHz HSE
    CLKPR=(1<<CLKPCE);
    CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);

}

void Gpio_Init(void)
{

    // Port D initialization  PD6 PD5 OutPut
    // Function: Bit7=In Bit6=Out Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
    DDRD=(0<<DDD7) | (1<<DDD6) | (1<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
    // State: Bit7=T Bit6=0 Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
    PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);



}

void Timer0_PWM_Init(void)
{

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: 250.000 kHz
    // Mode: Fast PWM top=OCR0A
    // OC0A output: Disconnected
    // OC0B output: Non-Inverted PWM
    // Timer Period: 1 ms
    // Output Pulse(s):
    // OC0B Period: 1 ms Width: 0.7992 ms
    TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (1<<WGM01) | (1<<WGM00);
    TCCR0B=(1<<WGM02) | (0<<CS02) | (1<<CS01) | (1<<CS00);
    TCNT0=0x06;
    OCR0A=0xF9;
    OCR0B=0xC7;
// Ensure that the Timer/Counter 0 is enabled
    PRR0&= ~(1<<PRTIM0);

// Timer/Counter 0 Interrupt(s) initialization
    TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0);

}


int main(void)
{
    /* Replace with your application code */
    Sys_Clock_Init();
    Gpio_Init();
    Timer0_PWM_Init();
    while (1)
    {
    }
}


  • 🔖Fast PWM top=OCR0A模式下,由于占用了OCR0A所以只有输出比较器B才有输出。PD6输出:
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/362893.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Web前端实操21】商城官网_白色导航

今日份实现白色导航栏部分&#xff0c;也就是第三部分&#xff0c;效果如图中划线所示&#xff1a; 本次实现代码如之前的全局样式不再赘述&#xff0c;如有需要可以去我博客的Web前端实操19或者20自行查看。 本次主要更新mi.css和index.htm。 实现导航栏所需要的CSS样…

Handler 消息机制

1. 概述 Android 的消息机制主要是指 Handler 的运行机制&#xff0c;以及 Handler 所附带的 MessageQueue 和 Looper 的工作过程。 Handler、MessageQueue、Looper 这三者实际上是一个整体&#xff0c;只不过在开发过程中比较多地接触 Handler 而已。 Handler 的主要作用是将…

Redis单机-主从集群-哨兵集群-分片集群 搭建教程

Redis集群 本章是基于CentOS7下的Redis集群教程&#xff0c;包括&#xff1a; 单机安装RedisRedis主从Redis分片集群 1.单机安装Redis 首先需要安装Redis所需要的依赖&#xff1a; yum install -y gcc tclredis-6.2.4.tar.gz 然后将Redis安装包上传到虚拟机的任意目录&am…

Python编程实验一:流程控制结构

目录 一、实验目的与要求 二、实验内容 三、主要程序清单和程序运行结果 第1题 第2题 第3题 第4题 四、实验结果分析与体会 一、实验目的与要求 &#xff08;1&#xff09;通过本次实验&#xff0c;学生应掌握多分支语句 if …elif…else结构的用法&#xff1b; &…

丰富福利等你来拿!第七届世界智能大会·中国华录杯数据湖算法大赛开启招募!

由天津市委网信办、天津市工业和信息化局、天津市津南区人民政府主办&#xff0c;北京易华录信息技术股份有限公司、天津华易智诚科技发展有限公司承办的“第七届世界智能大会中国华录杯数据湖算法大赛”开启招募。 本次大赛紧紧围绕数据“收、存、治、用、易”为理念&#xf…

低码大前端 - 混合云集群部署 PagePlug

前情提要 老师之前布置了什么作业&#xff0c;完全忘了&#xff0c;本来觉得写作业可能也就一两个小时的事情&#xff0c;结果搞了半天&#xff0c;有一半的作业题目都没找到&#xff0c;mmp, 之前拖延症&#xff0c;搞到心态都炸了&#xff0c;今天不管怎么说都要搞定&#x…

Redis核心技术与实战【学习笔记】 - 9.如何避免单线程模型的阻塞

概述 Redis 被广泛应用的原因是因为它支持高性能访问。所以&#xff0c;我们要重视所有可能影响 Redis 性能的因素&#xff08;如命令操作、系统配置、关键机制、硬件配置等&#xff09;。 影响 Redis 性能的 5 大方面的潜在因素分别是&#xff1a; Redis 内部的阻塞式操作C…

测试大佬是怎么看待测试用例设计的

前言 最近干的最多的事情就是设计测试用例、评审测试用例了&#xff0c;于是我不禁又想到了一个经典的问题&#xff1a;如何设计出优秀的测试用例&#xff1f; 可能有些童鞋看到这个问题会有些不以为然&#xff0c;这有什么好想的&#xff1f;干个测试谁还不会设计测试用例&…

41、WEB攻防——通用漏洞XMLXXE无回显DTD实体伪协议代码审计

文章目录 XXE原理&探针&利用XXE读取文件XXE带外测试XXE实体引用XXE挖掘XXE修复 参考资料&#xff1a;CTF XXE XXE原理&探针&利用 XXE用到的重点知识是XML&#xff0c;XML被设计为传输和存储数据&#xff0c;XML文档结构包括XML声明、DTD文档类型定义&#xf…

XVC767AE102 3BHB007209R0102

XVC767AE102 3BHB007209R0102 XVC767AE102 3BHB007209R0102 GPS99808模块在汽车防盗系统中的应用 ... 详细介绍了 leadtek公司最新款oem模块gps9808在新型智能防盗系统中的 ... 定位模块、cpu控制模块、gps通信模块、传感器检测模块、声光报警模块、电源管理模块 ... 功能…

k8s之基础组件说明

前言 K8S&#xff0c;全称 Kubernetes&#xff0c;是一个用于管理容器的开源平台。它可以让用户更加方便地部署、扩展和管理容器化应用程序&#xff0c;并通过自动化的方式实现负载均衡、服务发现和自动弹性伸缩等功能。 具体来说&#xff0c;Kubernetes 可以将应用程序打包成…

sqli-labs-master靶场训练笔记(1-22|新手村)

2024.1.21 level-1 &#xff08;单引号装饰&#xff09; 先根据提示建立一个get请求 在尝试使用单个单引号测试&#xff0c;成功发现语句未闭合报错 然后反手一个 order by 得到数据库共3列&#xff0c;-- 后面加字母防止浏览器吃掉 -- 操作&#xff08;有些会&#xff09…

全链路压测的关键点是什么?

全链路压测是一种重要的性能测试方法&#xff0c;用于评估应用程序或系统在真实生产环境下的性能表现。通过模拟真实用户行为和流量&#xff0c;全链路压测能够全面评估系统在不同负载下的稳定性和性能表现。本文将介绍全链路压测的关键点&#xff0c;以帮助企业更好地理解和应…

IT行业证书大揭秘:哪些证书含金量最高?

文章目录 &#x1f4d6; 介绍 &#x1f4d6;&#x1f4d2; 证书 &#x1f4d2; &#x1f4d6; 介绍 &#x1f4d6; 在IT行业&#xff0c;有许多证书被认为是含金量高的&#xff0c;可以帮助个人在职业发展中取得重要的竞争优势。以下是一些IT行业中被认为含金量高的证书&#x…

Docker基础知识

1、什么是Docker&#xff1f;Docker解决了什么问题 一个项目中&#xff0c;部署时需要依赖于node.js、Redis、RabbitMQ、MySQL等&#xff0c;这些服务部署时所需要的函数库、依赖项各不相同&#xff0c;甚至会有冲突。给部署带来了极大的困难。 所以引入了Docker Docker为了…

系统架构设计师-21年-下午答案

系统架构设计师-21年-下午答案 更多软考知识请访问 https://ruankao.blog.csdn.net/ 试题一必答&#xff0c;二、三、四、五题中任选两题作答 试题一 (25分) 说明 某公司拟开发一套机器学习应用开发平台&#xff0c;支持用户使用浏览器在线进行基于机器学习的智能应用开发…

ThreadX系列note-前言

什么是 Azure RTOS ThreadX Azure RTOS ThreadX 是 Microsoft 提供的高级工业级实时操作系统 (RTOS)。它是专门为深度嵌入式实时 IoT 应用程序设计的。 Azure RTOS ThreadX 的特性 Azure RTOS ThreadX 提供高级计划、通信、同步、计时器、内存管理和中断管理功能。此外&#…

【SpringBoot】SpringBoot的自动配置原理

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;SpringBoot ⛺️稳重求进&#xff0c;晒太阳 自动配置 啥叫自动配置呢&#xff1f;简单说就是springboot根据我们开发者的行为猜测你要做什么事情&#xff0c;然后把你要用的bean都给你准备…

tcpdump 抓包无法落盘

文章目录 问题背景解决办法 问题背景 在嵌入式设备中(Linux系统)&#xff0c;为了分析两个网络节点的通讯问题&#xff0c;往往需要用到tcpdump&#xff0c;抓一个.pcap的包在PC端进行分析。博主在实际操作中发现&#xff0c;抓包无法实时落盘。 解决办法 # 下面的命令是写在…

集线器、交换机、路由器工作原理区别

集线器、交换机、路由器这三种设备是相似的&#xff0c;但是他们处理数据的方式有所不同。 1 集线器 集线器的目的是将内部网络上所有网络设备连接在一起。它具有多个端口&#xff0c;可以接受来自网络设备的以太网连接。集线器不过滤任何数据、也不知道该将数据发到什么地方…