- 博客(64)
- 收藏
- 关注
原创 FreeRTOS—优先级翻转问题
优先级翻转顾名思义就是:高优先级的任务变成最后执行,低优先级的任务反而优先执行。优先级翻转在抢占式内核中是很常见的问题,但是在实时操作系统中是不允许出现优先级翻转的,因为优先级翻转会破环任务的预期顺序,可能会导致未知的严重后果。在使用二值信号量的时候,经常会遇到优先级翻转问题。
2025-07-25 16:47:49
322
原创 FreeRTOS—计数型信号量
计数型信号量相当于队列长度大于 1 的队列,因此计数型信号量能够容纳多个资源,这在计数型信号量被创建的时候确定的。事件计数:当每次事件发生后,在事件处理函数中释放计数型信号量(计数值+1),其他任务会获取计数型信号量(计数值-1),这种场合一般在创建时将初始计数值设置为 0资源管理:信号量表示有效的资源数目,任务必须先获取信号量(信号量计数值-1)才能获取资源控制权,当计数值减为零时表示没有的资源。当任务使用完资源后,必须释放信号量(信号量计数值+1),信号量创建时计数值应等于最大资源数目。
2025-07-24 23:23:22
1001
原创 FreeRTOS—二值信号量
二值信号量的本质是一个队列长度为 1 的队列,该队列就只有空和满两种情况,也就是 0 和 1。通常用于互斥访问或任务同步,与互斥信号量比较类似,但是二值信号量有可能会导致优先级反转问题,所以二值信号量更适用于同步。
2025-07-24 21:50:50
507
原创 FreeRTOS—信号量
在 FreeRTOS 中,信号量(Semaphore)是一种用于任务间同步和资源管理的核心机制,主要用于控制对共享资源的访问、任务间的通信以及事件通知。信号量是队列的衍生,队列是传输数据,信号量是传输状态。FreeRTOS 提供了多种信号量类型,每种适用于不同的场景。下面详细介绍 FreeRTOS 信号量的类型、使用方法和典型应用。
2025-07-24 15:19:31
224
原创 FreeRTOS—队列
队列(Queue)是 FreeRTOS 中一种 任务间通信(IPC, Inter-Process Communication) 机制,用于安全地在任务之间传递数据,也可以用于任务与中断服务程序之间的通信。FreeRTOS基于队列,实现了多种功能,其中包括队列集、互斥信号量、计数型信号量、二值信号量、递归互斥信号量。
2025-07-23 16:28:42
1373
原创 FreeRTOS—每个函数名的前缀
这种命名风格提高了代码的可读性,开发者可以通过函数名快速判断其用途和返回值类型。在 FreeRTOS 中,函数名的前缀(如 v、ux、x 等)是一种命名约定,用于表示函数的。2.其他常见前缀(行为或模块)1.前缀与返回类型的对应关系。
2025-07-21 16:42:50
132
原创 FreeRTOS—时间片调度
当多个任务的任务优先级相同时,CPU 会轮流的处理每一个任务,每个任务享有 CPU 处理的时间都是相同的,这个时间被称为时间片,一个时间片就等于 SysTick 中断周期(可以由用户自行设置),CPU 给与了一个时间片运行一个任务,不管这个任务是否运行完成,CPU 都会跑到下一个任务。例如:创建三个任务:task1、task2、task3,它们的任务优先级均为 1,如下图所示:首先 task1 运行完一个时间片之后,切换到 task2 运行task2 运行完一个时间片之后,切换至 task3 运行。
2025-07-21 16:05:22
693
原创 FreeRTOS—列表和列表项
列表是 FreeRTOS 中的一个数据结构,概念上和链表有点类似,列表被用来追踪 FreeRTOS 中的任务,列表项就是存放在列表中的项目;列表相当于链表,列表项相当于节点,FreeRTOS 中的列表是一个双向环形链表,列表和列表项的关系和下图所示:列表的特点:列表项间的地址非连续,是人为的连接到一起的,列表项的数目是由后期添加的个数决定的,随时可以改变。数组的特点:数组成员地址是连续的,数组在最初确定了成员数量后期无法改变。
2025-07-19 16:55:30
1133
原创 FreeRTOS—临界段代码保护及调度器挂起与恢复
临界段代码也叫做临界区,是指那些必须完整运行,不能被中断、任务调度所打断的代码段,适用的场景如:临界段代码保护的特点:FreeRTOS 在进入临界段代码的时候需要关闭中断,当处理完临界段代码以后再打开中断,下表是有关临界段代码保护的函数:中断级临界区调用格式示例:二、任务调度器的挂起与恢复2.1.任务调度器的挂起与恢复函数介绍挂起任务调度器,调用此函数不需要关闭中断,下表是相关函数:任务调度器的挂起与恢复的作用:下面代码是使用格式:2.2.源码解析找到函数,右键进入定义它的地方,查看它的
2025-07-18 11:21:32
861
原创 FreeRTOS—中断管理
中断就是让 CPU 打断正常运行的程序,转而去处理紧急的事件;中断请求:外设产生中断(GPIO 外部中断、定时器中断等等)响应中断:CPU 停止执行当前程序,转而去执行中断处理程序( ISR )执行完毕,返回被打断的程序处,继续往下执行。
2025-07-17 20:45:18
711
原创 FreeRTOS—任务的挂起与恢复的API函数
API函数描述挂起任务恢复被挂起的任务在中断中恢复被挂起的任务挂起:挂起任务类似暂停,可恢复;删除任务,无法恢复恢复:恢复被挂起的任务“ FromISR ”:带 FromISR 后缀是在中断函数中专用的API函数。
2025-07-16 22:25:04
1208
原创 FreeRTOS—任务创建和删除的API函数和方法
下面代码是任务控制块结构体的各个成员介绍,其中任务栈栈顶与任务切换时的任务上下文保存、任务恢复息息相关,每个任务都有属于自己的任务控制块,就像每个人有自己的身份证。//指向任务栈栈顶的指针,必须是TCB的第一个成员//任务状态列表项//任务等待事件列表项//任务的任务优先级//任务栈的起始地址//任务的任务名//以下还有很多条件编译的成员......} tskTCB;任务删除的函数是它的形参是,是待删除任务的任务句柄,该删除函数必须用于已被创建的任务,被删除的任务将从就绪。
2025-07-10 16:33:33
1145
原创 FreeRTOS—初识RTOS、移植
本专栏基于正点原子的《FreeRTOS开发指南_V1.10》所编写,使用的开发板型号是精英型STM32f103zet6。“RTOS”全称是 Real Time Operating System,中文名就是实时操作系统,RTOS 并不是值某一特定的操作系统,而是指一类操作系统,例如,µC/OS,FreeRTOS,RTX,RT-Thread 等这些都是 RTOS 类的操作系统。因此,从 FreeRTOS 的名字中就能看出,FreeROTS 是一款免费的实时操作系统,也正因FreeRTOS开源免费。
2025-07-09 20:32:53
1181
原创 贪吃蛇小游戏
ncurses(“new curses”)是一套用于在类UNIX系统(如Linux、BSD等)上创建字符终端界面的函数库。它提供了一系列丰富的函数,可用于处理屏幕输出、键盘输入、窗口管理等操作。借助ncurses,开发者能够方便地开发出文本模式下的交互式应用程序,像文本编辑器、文件管理器、菜单驱动的工具等。它兼容传统的curses库,具备良好的可移植性,能在多种不同的终端环境下正常工作,极大地简化了在字符终端上构建复杂用户界面的过程。int lie。
2025-07-08 13:41:45
711
原创 STM32 Hal库版—串口、USART(通用同步异步收发器)
USART的全称是Universal synchronous asynchronous receiver transmitter,通用同步异步收发器;UART是裁剪了同步功能,所以叫通用异步收发器,它们都可以与外部设备进行全双工通信。//标志为1,收到信息。
2025-07-06 12:36:50
1237
原创 STM32 Hal库版—NVIC、外部中断(EXTI)、AFIO
STM32中的中断是指在程序正常运行时,外部事件或内部异常强行打断当前执行流程,转而执行相应处理程序,完成后再返回原流程的机制。在STM32中,中断是指当外设或处理器内部发生某些事件时,处理器暂停当前执行的程序,转而执行预定义的中断服务程序,处理完毕后再返回原程序继续执行的机制。
2025-06-30 00:31:23
1030
原创 STM32 Hal库版—GPIO
GPIO的全称是General Purpose Input Output,即通用输入输出端口,它和51单片机里的IO口一样,只是一个输入输出的端口,负责采集外部器件的信息或者控制外部期间工作。CRL、CRHIDRODRBSRRLCK配置工作模式,输出速度输入数据输出数据设置ODR寄存器的值配置锁定。
2025-06-27 16:28:37
1323
原创 STM32 Hal库版—STM32CubeMX软件和创建一个工程
STM32CubeMX是ST开发的一款图形配置工具,可通过配置自动生成初始化代码,不会生成逻辑代码,因此该软件只是一个辅助工具,想要配置一个外设的初始化,看手册也难以理解的时候,这个软件是个不错的选择。一个图形配置工具,搭配不同系列的STM32Cube固件包,即可支持不同系列的STM32芯片。
2025-06-26 23:48:03
932
原创 STM32 Hal库版—介绍STM32和新建Hal库工程
STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器,常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等。STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器。
2025-06-26 16:51:20
335
原创 51单片机—红外遥控器和NEC协议
人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫。其中红光的波长范围为 0.62~0.76μm;紫光的波长范围为 0.38~0.46μm。比紫光波长还短的光叫紫外线,比红光波长还长的光叫红外线。红外线遥 控就是利用波长为 0.76~1.5μm 之间的近红外线来传送控制信号的。红外遥控是利用红外光进行通信的设备,由红外LED将调制后的信号发出,由专用的红外接收头进行解调输出。通信方式:单工,异步红外LED波长:940nm通信协议标准:NEC标准。
2025-06-26 15:48:58
735
原创 51单片机—AD和DA的转换
运算放大器(简称“运放”)是具有很高放大倍数的放大电路单元。内部集成了差分放大器、电压放大器、功率放大器三级放大电路,是一个性能完备、功能强大的通用放大电路单元,由于其应用十分广泛,现已作为基本的电路元件出现在电路图中。ADC(analog to digital converter)也称为模数转换器,是指一个将模拟信号转变为数字信号。单片机在采集模拟信号时,通常都需要在前端加上 A/D 芯片。DAC(Digital to analog converter)即数字模拟转换器,它可以将数字信。
2025-06-26 11:08:50
1057
原创 51单片机—脉冲宽度调制(PWM)实现直流电机的调速和呼吸灯
PWM 是 Pulse Width Modulation 的缩写,中文意思就是脉冲宽度调制,简称脉宽调制。在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速、开关电源等领域。频率 = 1 / T(S)占空比 = T(ON) / T(S)精度 = 占空比变化步距直流电机是指能将直流电能转换成机械能(直流电动机)或将机械能转换成直流电能(直流发电机)的旋转电机。它是能实现直流电能和机械能互相转换的电机。
2025-06-25 16:02:24
588
原创 51单片机—单总线和DS18B20
单总线是美国DALLAS公司推出的外围串行扩展总线技术。与SPI、IIC串行数据通信方式不同.它采用单根信号线,既传输时钟又传输数据,而且数据传输是双向的,具有节省I/O口线、资源结构简单、成本低廉、便于总线扩展和维护等诸多优点。单总线(1-Wire BUS)是由Dallas公司开发的一种通用数据总线一根通信线:DQ异步、半双工单总线只需要一根通信线即可实现数据的双向传输,当采用寄生供电时,还可以省去设备的VDD线路,此时,供电加通信只需要DQ和GND两根线。
2025-06-25 11:32:31
1410
原创 链表的插入、删除、修改与创建
每来一次新的数据,就放在链表的头里,先到后出,类似栈,也类似弹匣压子弹的方式。尾插法讲究先来后出,按顺序输入,按顺序输出。在查找的基础上只是添加了这一行代码即可实现。尾插法指在链表中特定节点的。把原来的链表首地址传过来,函数有三个参数,分别是。插入这一个新的节点。
2025-06-22 17:28:12
870
原创 链表的引入
链表是一种数据结构,用于存放数据的数据结构思想。链表通过将数据串联起来,使得节点更加灵活高效,适用于需要频繁修改数据结构的场景。与数组相比,链表可以更高效地处理动态数据结构,因为其大小可以在运行时动态调整。此外,链表还具有更好的空间利用率,因为每个节点只包含必要的数据和指针,而数组则需要为所有元素分配内存,即使某些元素未被使用。
2025-06-21 21:18:37
154
原创 Linux简介
Linux,一般指GNU/Linux(单独的Linux内核并不可直接使用,一般搭配GNU套件,故得此称呼),是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds)于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它支持32位和64位硬件,能运行主要的Unix工具软件、应用程序和网络协议。
2025-06-21 11:12:04
1031
原创 51单片机—IIC总线和AT24C02
AT24C02是一种可以实现掉电不丢失的存储器,可用于保存单片机运行时想要永久保存的数据信息。存储介质:E2PROM(电可擦除可编程ROM)通讯接口:I2C总线容量:256字节。
2025-06-18 23:46:39
984
原创 51单片机—DS1302实时时钟
S1302 是 DALLAS 公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和 31 字节静态 RAM,通过简单的串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、周、月、年的信息,每月的天数和闰年的天数可自动调整。时钟操作可通过 AM/PM 指示决定采用 24 或 12 小时格式。RES复位I/O数据线SCLK串行时钟S1302 由 DS1202 改进而来增加了以下的特性:双电源管脚用于主电源和备份电源供应,Vcc1 为可编程涓流充电电源,附加七个字节存储器。
2025-06-18 22:04:30
511
原创 51单片机—定时器和中断系统
如果CPU能够暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,这样的过程称为。定时器在单片机内部就像一个小闹钟一样,根据时钟的输出信号,每隔“一秒”,计数单元的数值就增加一,当计数单元数值增加到“设定的闹钟提醒时间”时,计数单元就会向中断系统发出中断申请,产生“响铃提醒”,使程序跳转到中断服务函数中执行。微型机的中断系统一般允许多个中断源,当几个中断源同时向 CPU 请求中断,要求为它服务的时候,这就存在CPU 优先响应哪一个中断源请求的问题。
2025-06-18 17:15:22
666
原创 51单片机—按键
按键是一种电子开关,使用时轻轻按开关按钮就可使开关接通,当松开手时, 开关断开。我们开发板上使用的按键及内部简易图如下图所示:按键管脚两端距离长的(1和3)表示默认是导通状态,距离短的(1和2)默认是断开状态, 如果按键按下,初始导通状态变为断开,初始断开状态变为导通。
2025-06-18 16:03:36
206
原创 51单片机—LED流水灯
LED 即发光二极管。它具有单向导电性,通过 5mA 左右电流即可发光,电流越大,其亮度越强,但若电流过大, 会烧毁二极管,一般我们控制在 3mA-20mA之间,通常我们会在 LED 管脚上串联一个电阻,目的就是为了限制通过发光二极管的电流不要太大,因此这些电阻又可以称为“限流电阻”。当发光二极管发光时,测量它两端电压约为 1.7V,这个电压又叫做发光二极管的“导通压降”。下图左右分别为直插式发光二极管和贴片式发光二极管实物图。发光二极管正极又称阳极,负极又称阴极,电流只能从阳极流向阴极。
2025-06-18 15:28:11
183
原创 联合体(共用体)的引入
联合体也叫共用体,它是C语言中与结构体类似的数据结构,不同之处在于,联合体共享同一块内存空间,存放不同类型的变量。,而结构体每个元素拥有独立空间。
2025-06-18 11:32:41
131
原创 结构体指针数组函数或结构体二级指针的综合应用,选票系统
提示有多少人参选,并输入各自的名字,有5次投票机会,输出每一位的票数和当选人一多少票当选,多少人弃票。
2025-06-15 16:30:10
112
原创 结构体数组,结构体指针
定义一个结构体数组和定义一个普通的数组差不多,表示有括号里面这么多个相同的结构体,只不过里面的成员各不相同。遍历结构体数组的方式也是使用变量i和for。
2025-06-15 16:15:04
399
原创 几个常用的API
malloc是在堆上面动态开辟内存,它的函数原型,意思是分配所需的内存空间,并返回一个指向它的指针。使用malloc前,需要在程序开始包含它的头文件。
2025-06-14 16:15:46
519
原创 字符串的引入
中括号里的数,当等于号后面有具体字符串的时候可以不填,这个数是用来说明需要多少空间内存。当使用指针来定义字符串的时候,指针里面的字符串不允许改动,而使用数组的可以改动。遍历一个字符串也和遍历整型数组一样,定义一个变量。字符串和整型数组一样,先定义一个字符串。循环来遍历整个字符串,也可以通过。
2025-06-14 12:41:56
259
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人