
FreeRTOS实时操作系统
文章平均质量分 96
FreeRTOS学习
时光の尘
这个作者很懒,什么都没留下…
展开
-
FreeRTOS实战(四)·USART串口实现DMA数据转运(江协/江科大代码移植)
内含源码可直接移植,内容基于STM32F1系列移植FreeRTOS实现DMA转运串口接收数据,详细过程介绍,其中包含调用二值信号量释放函数xSemaphoreGiveFromISR(),接收函数xSemaphoreTake()原创 2025-05-17 20:21:27 · 423 阅读 · 0 评论 -
FreeRTOS实战(三)·外部中断实现消息队列的发送与接收
在 FreeRTOS 中创建了两个任务获取消息队列,并且定义了两个按键 KEY1 与 KEY2 的触发方式为中断触发,其触发的中断服务函数则跟裸机一样,在中断触发的时候通过消息队列将消息传递给任务,任务接收到消息就将信息通过串口调试助手显示出来。原创 2025-05-17 04:00:00 · 1196 阅读 · 0 评论 -
FreeRTOS实战(二)·按键实现任务的挂起和恢复(STM32移植模版)
主要完成功能:按键实现任务的挂起和恢复,内含STM32F1系列移植模版,可直接使用,含源码可自行移植原创 2025-05-16 05:00:00 · 1586 阅读 · 0 评论 -
FreeRTOS实战(一)·电亮一颗LED
裸机江协/江科大STM32移植FreeRTOS工程原创 2025-05-16 04:00:00 · 1053 阅读 · 0 评论 -
FreeRTOS菜鸟入门(十九)·CPU 使用率统计
CPU利用率概念介绍,并且举例更直观的观察,内含源码可直接移植原创 2025-05-15 05:00:00 · 751 阅读 · 0 评论 -
FreeRTOS菜鸟入门(十八)·中断管理
中断管理相关介绍,内含测试程序,可直接移植。原创 2025-05-15 04:00:00 · 3590 阅读 · 3 评论 -
FreeRTOS菜鸟入门(十七)·内存管理·heap_x.c的区别详解
内含源码可直接移植,详细介绍heap_x.c的优缺点,以及pvPortMalloc( ); 内存申请函数、vPortFree(); 内存释放函数、vPortInitialiseBlocks( void ); 初始化内存堆函数、xPortGetFreeHeapSize( ); 获取当前未分配的内存堆大小、xPortGetMinimumEverFreeHeapSize(); 获取未分配的内存堆历史最小值的调用详解原创 2025-05-14 04:00:00 · 661 阅读 · 0 评论 -
FreeRTOS菜鸟入门(十六)·任务通知·八万字通过详细举例解析任务通知
内含详细源码解析,可直接移植,常用API函数:xTaskNotifyGive()与ulTaskNotifyTake()主要适用于替换二值和计数信号量,xTaskNotify()、xTaskNotifyAndQuery()与xTaskNotifyWait()比较通用。原创 2025-05-14 03:00:00 · 1541 阅读 · 0 评论 -
FreeRTOS菜鸟入门(十五)·软件定时器
本文详细介绍了软件定时器相关API函数,并进行了实例演示,附上源码,可直接移植使用。常用API:xTimerCreate()、xTimerStart()、xTimerStop()、xTimerDelete()等。原创 2025-05-11 04:00:00 · 640 阅读 · 0 评论 -
FreeRTOS菜鸟入门(十四)·事件
文章详细介绍了事件先关API,并进行实例演示,可直接移植。常用API:xEventGroupCreate()、vEventGroupDelete()、xEventGroupSetBits()、xEventGroupWaitBits()等原创 2025-05-09 21:43:45 · 724 阅读 · 0 评论 -
FreeRTOS菜鸟入门(十三)·信号量·互斥量与递归互斥量·优先级翻转与继承实验
文章详细介绍了互斥量与递归互斥量的常用API函数,并且附上源码以及实例演示,源码可直接移植,常用API:xSemaphoreCreateMutex()、 xSemaphoreCreateRecursiveMutex()、xSemaphoreTake()等,并且通过代码模拟了优先级的翻转和优先级的继承,比较直观的看到二者的现象。原创 2025-05-09 04:00:00 · 911 阅读 · 0 评论 -
FreeRTOS菜鸟入门(十二)·信号量·二值信号量与计数信号量
文章详细介绍了二值信号量和计数信号量常用的API函数,并附上源码解析以及实例演示,附上源码可直接移植使用。常用API函数:xSemaphoreCreateBinary()、xSemaphoreCreateCounting()、vSemaphoreDelete()、xSemaphoreGive()、xSemaphoreTake()等。原创 2025-05-06 16:56:27 · 991 阅读 · 0 评论 -
FreeRTOS菜鸟入门(十一)·信号量·二值、计数、递归以及互斥信号量的区别·优先级翻转以及继承机制详解
详解信号量的基本概念,分别对二值信号量、计数信号量、互斥信号量以及递归信号量,进行详细介绍,并且对别其相互间的区别进行介绍,同时对互斥信号量的优先级翻转以及优先级继承机制进行详细描述原创 2025-05-05 23:06:02 · 1514 阅读 · 0 评论 -
FreeRTOS学习系列·二值信号量
同理,二值信号量在任务与中断同步的应用场景:我们在串口接收中,我们不知道啥时候有数据发送过来,有一个任务是做接收这些数据处理,总不能在任务中每时每刻都在任务查询有没有数据到来,那样会浪费 CPU 资源,所以在这种情况下使用二值信号量是很好的办法,当没有数据到来的时候,任务就进入阻塞态,不参与任务的调度,等到数据到来了,释放一个二值信号量,任务就立即从阻塞态中解除,进入就绪态,然后运行的时候处理数据,这样子系统的资源就会很好的被利用起来。可能很多人会问了,创建一个没有消息存储空间的队列,信号量用什么表示?原创 2025-05-05 16:09:08 · 641 阅读 · 0 评论 -
FreeRTOS菜鸟入门(十)·消息队列
消息队列的使用详解,逐个API分析,并附上运行工程源码,可直接移植使用。原创 2025-05-04 23:27:17 · 798 阅读 · 0 评论 -
FreeRTOS入门基础了解(持续更新)
FreeRTOS基础了解,对FreeRTOS又一个基础的理解原创 2025-04-29 05:00:00 · 984 阅读 · 0 评论 -
FreeRTOS菜鸟入门(九)·任务管理·超详细逐步解析
四万字超详细解析任务管理相关,逐个工程编写验证API函数,详细了解基本概念原创 2025-04-28 15:55:10 · 1195 阅读 · 0 评论 -
FreeRTOS菜鸟入门(八)·创建任务·动态任务创建
基于STM32F1103ZET6移植FreeRTOS,动态创建任务函数详细解析,内含源码可直接移植原创 2025-04-19 14:22:30 · 832 阅读 · 0 评论 -
FreeRTOS菜鸟入门(七)·创建任务·静态任务创建
完整的静态任务创建移植过程,内附详细解析以及源码原创 2025-04-18 09:43:30 · 1091 阅读 · 1 评论 -
FreeRTOS菜鸟入门(六)·移植FreeRTOS到STM32(逐步超详细移植)
裸机移植详细过程,内含源码,可直接使用。原创 2025-04-18 04:00:00 · 1867 阅读 · 0 评论 -
FreeRTOS菜鸟入门(五)·空闲任务与阻塞延时的实现
在 FreeRTOS 中,空闲任务是系统在启动调度器的时候创建的优先级最低的任务,空闲任务主体主要是做一些系统内存的清理工作。 在实际应用中,当系统进入空闲任务的时候,可在空闲任务中让单片机进入休眠或者低功耗等操作。原创 2025-04-15 10:20:15 · 983 阅读 · 0 评论 -
FreeRTOS菜鸟入门(四)·临界段的保护
简单来说,FreeRTOS 的临界段保护是一种在多任务系统中防止共享资源被并发访问的机制,通过暂时关闭中断或调度器来确保代码段的原子性执行。原创 2025-04-15 04:00:00 · 1174 阅读 · 0 评论 -
FreeRTOS菜鸟入门(三)·任务的定义与任务的切换实现
先简单了解一下什么是任务原创 2025-04-14 10:49:13 · 686 阅读 · 0 评论 -
FreeRTOS菜鸟入门(二)·数据结构·列表与列表项讲解
通过C语言的链表简单了解一下FreeRTOS中链表的实现原创 2025-04-14 04:00:00 · 1908 阅读 · 0 评论 -
FreeRTOS菜鸟入门(一)·裸机系统与多任务系统
初步了解裸机开发和多任务系统的区别原创 2025-04-02 10:07:47 · 871 阅读 · 0 评论 -
基于STM32F103的FreeRTOS系列(十五)·中断管理相关
用户可以自定义配置系统可管理的最高中断优先级的宏定义configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY,它是用于配置内核中的basepri 寄存器的,当 basepri 设置为某个值的时候,NVIC 不会响应比该优先级低的中断,而优先级比之更高的中断则不受影响。原创 2024-11-27 21:00:00 · 1663 阅读 · 0 评论 -
基于STM32F103的FreeRTOS系列(十四)·软件定时器
定时器,是指从指定的时刻开始,经过一个指定时间,然后触发一个超时事件,用户可以自定义定时器的周期与频率。相当于一个闹钟,到点干什么。软件定时器并不依赖于硬件定时器的中断信号,而是通过系统定期的时间片或任务调度机制来检查定时器是否到期。当软件定时器到期时,会触发预定的回调函数或执行相应的任务。注意,回调函数不要使用带有阻塞状态的函数。FreeRTOS操作系统提供软件定时器功能,软件定时器的使用相当于扩展了定时器的数量,允许创建更多的定时业务。裁剪:能通过宏关闭软件定时器功能。软件定时器创建。原创 2024-11-20 04:00:00 · 1784 阅读 · 0 评论 -
基于STM32F103的FreeRTOS系列(十三)·事件
事件是一种实现任务间通信的机制,主要用于实现多任务间的同步,但事件通信只能是事件类型的通信,无数据传输。与信号量不同的是,它可以实现一对多,多对多的同步。configUSE_16_BIT_TICKS定义为0,那么uxEventBits是32位的,有24 个位用来实现事件标志组。一对多同步模型:一个任务等待多个事件的触发,这种情况是比较常见的;多对多同步模型:多个任务等待多个事件的触发。原创 2024-11-19 09:17:37 · 872 阅读 · 0 评论 -
基于STM32F103的FreeRTOS系列拓展·任务管理
这个函数不能返回同一个函数,可以用来创建多个任务;换句话说,多个任务可以运行同一个函数函数内部,尽量使用局部变量:每个任务都有自己的栈每个任务运行这个函数时任务A的局部变量放在任务A的栈里、任务B的局部变量放在任务B的栈里不同任务的局部变量,有自己的副本函数使用全局变量、静态变量的话只有一个副本:多个任务使用的是同一个副本要防止冲突(后续会讲) 下面是一个示例:/* 对于不同的任务,局部变量放在任务的栈里,有各自的副本 */原创 2024-10-27 11:16:17 · 873 阅读 · 0 评论 -
基于STM32F103的FreeRTOS系列拓展·内存管理
使用内存的动态管理功能,简化了程序设计:不再需要小心翼翼地提前规划各类对象,简化API函数的涉及,甚至可以减少内存的使用。Heap_3使用标准C库里的malloc、free函数,所以堆大小由链接器的配置决定,配置项configTOTAL_HEAP_SIZE不再起作用。C库里的malloc、free函数并非线程安全的,Heap_3中先暂停FreeRTOS的调度器,再去调用这些函数,使用这种方法实现了线程安全。与Heap_4相比,Heap_2不会合并相邻的空闲内存,所以Heap_2会导致严重的"碎片化"问题。原创 2024-10-27 10:48:09 · 1138 阅读 · 0 评论 -
基于STM32F103的FreeRTOS系列(十二)·信号量·互斥信号量
互斥信号量其实就是一个拥有优先级继承的二值信号量,在同步的应用中(任务与任务或中断与任务之间的同步)二值信号量最适合。互斥信号量适合用于那些需要互斥访问的应用中。在互斥访问中互斥信号量相当于一个钥匙,当任务想要使用资源的时候就必须先获得这个钥匙,当使用完资源以后就必须归还这个钥匙,这样其他的任务就可以拿着这个钥匙去使用资源。原创 2024-08-25 11:59:22 · 1035 阅读 · 0 评论 -
基于STM32F103的FreeRTOS系列(十一)·信号量·二值信号量与计数信号量详细使用以及移植教程
信号量(Semaphore)是一种实现任务间通信的机制,可以实现任务之间同步或临界资源的互斥访问,常用于协助一组相互竞争的任务来访问临界资源。在多任务系统中,各任务之间需要同步或互斥实现临界资源的保护,信号量功能可以为用户提供这方面的支持。1.1 同步和互斥1.1.1 同步同步是指在执行任务时,通过某种机制来协调不同任务的行为,确保它们以正确的顺序和条件进行。简单来说,就是使得一个任务的执行进度能够与另一个任务的状态保持一致。原创 2024-08-22 05:00:00 · 1424 阅读 · 0 评论 -
基于STM32F103的FreeRTOS系列(十)·消息队列的使用详细介绍以及代码编写
队列又称消息队列,是一种常用于任务间通信的数据结构,队列可以在任务与任务间、中断和任务间传递信息,实现了任务接收来自其他任务或中断的不固定长度的消息。FreeRTOS 中使用队列数据结构实现任务异步通信工作,具有如下特性:① 消息支持先进先出方式排队,支持异步读写工作方式。② 读写队列均支持超时机制。③ 消息支持后进先出方式排队,往队首发送消息(LIFO)。④ 可以允许不同长度(不超过队列节点最大值)的任意类型消息。⑤ 一个任务能够从任意一个消息队列接收和发送消息。原创 2024-08-20 06:00:00 · 2403 阅读 · 2 评论 -
基于STM32F103的FreeRTOS系列(九)·任务创建函数的使用·静态方法和动态方法
来实现的,这个值可以随意设置,但是设置完后需要根据这个值来初始化系统滴答定时器,在这里,我们使用的是STM32F1系列的,其SysTick 有两种模式:一种是 8 分频模式(AHB/8),一种是 FCLK 模式(AHB)。对于任务函数“start_task”,为了确保在创建任务的过程中,任务调度不会被中断,可以调用taskENTER_CRITICAL();进行进入和退出临界区,先进行任务的创建,防止中断服务例程调用调度函数,导致任务调度在任务创建过程中进行,从而导致潜在的错误或资源争用。原创 2024-08-20 05:00:00 · 1002 阅读 · 0 评论 -
江协科技/江科大STM32代码移植FreeRTOS实时操作系统
来实现的,这个值可以随意设置,但是设置完后需要根据这个值来初始化系统滴答定时器,在这里,我们使用的是STM32F1系列的,其SysTick 有两种模式:一种是 8 分频模式(AHB/8),一种是 FCLK 模式(AHB)。详细参看《STM32F10x 参考手册》。末尾讲了原因,文件太多了,上传和下载特别慢,并且下载完解压也不好解压,要解压的话可能要喜提360全家桶了,我们这里主要学习FreeRTOS的编程思路,以STM32为例,可以先将不需要的文件移除出去,文末会放一个移植好的链接。原创 2024-08-19 05:00:00 · 1714 阅读 · 3 评论 -
基于STM32F103的FreeRTOS系列(八)·任务管理API详细解析
在裸机系统中,系统的主体就是main函数里面顺序执行的无限循环,这个无限循环里面 CPU 按照顺序完成各种事情。在FreeRTOS中,根据功能的不同,把整个系统分割成一个个独立且无限循环无法返回的函数,这个函数就称为任务。原创 2024-08-12 04:00:00 · 1466 阅读 · 3 评论 -
基于STM32F103的FreeRTOS系列(七)·任务创建·列表的使用超详细解析
列表是 FreeRTOS 中的一个数据结构,概念上和链表有点类似,列表被用来跟踪 FreeRTOS中的任务。每个列表项有前驱结点指针prev,同时又有后继结点指针next,这样,双向循环链表的增删改查非常方便,动态改变,节省内存!C语言菜鸟入门·数据结构·链表超详细解析-CSDN博客listFIRST_LIST_INTEGRITY_CHECK_VALUE //①校验值//②列表中的列表项数量。原创 2024-08-07 06:00:00 · 1321 阅读 · 0 评论 -
基于STM32F103的FreeRTOS系列(六)·如何进行FreeRTOS任务创建·逐行代码解析
在STM32F103微控制器中,栈(Stack)的概念与一般的嵌入式系统和计算机系统中的栈类似,它是用来存储函数调用过程中的局部变量、函数参数、返回地址等信息的一种数据结构。STM32F103微控制器中的每个线程(通常是每个任务或者每个中断服务程序)都有自己的堆栈空间。这些堆栈空间是在内存中预先分配好的,大小一般由编译器根据程序的需要决定。#define TASK1_STACK_SIZE 128//字//由于STM32是32位控制器,因此Task1_STACK_SIZE定义的为512字节。原创 2024-08-07 03:00:00 · 1153 阅读 · 2 评论 -
基于STM32F103的FreeRTOS系列(五)·STM32F103移植FreeRTOS完整过程
目录1. FreeRTOS文件简介2. 移植FreeRTOS2.1 模版准备2.2 复制粘贴Source文件2.3 内核文件选择2.4 添加文件组2.5 添加源码文件2.6 添加接口文件2.7 添加路径2.8 复制头文件 上一章我们了解了如何下载FreeRTOS文件,但是发现下载完后无法正常解压,那是因为文件夹内不仅仅只有STM32的工程文件,还有许多别的工程文件,我们这里主要学习FreeRTOS的编程思路,以STM32为例,可以先将不需要的文件移除出去,下面对FreeRT原创 2024-07-28 09:58:09 · 1407 阅读 · 4 评论 -
基于STM32F103的FreeRTOS系列(四)·FreeRTOS资料获取以及简介
FreeRTOS是一个可裁剪的小型RTOS系统,其特点包括:① FreeRTOS 的内核支持抢占式,合作式和时间片调度。② SafeRTOS 衍生自 FreeRTOS,SafeRTOS 在代码完整性上相比 FreeRTOS更胜一筹。③ 提供了一个用于低功耗的 Tickless 模式。④ 系统的组件在创建时可以选择动态或者静态的 RAM,比如任务、消息队列、信号量、软件定时器等等。⑤ 已经在超过 30 种架构的芯片上进行了移植。原创 2024-07-27 14:20:56 · 1080 阅读 · 4 评论