果果小师弟
微信公众号:果果小师弟,电子信息在读研究生
展开
-
RTOS中的任务句柄到底是什么意思?
摘要:学过用过FreeRTOS的人很多?在创建任务时候我们都要定义一个任务句柄,这个任务句柄有啥含义?书上的解释是任务创建成功以后会返回此任务的任务句柄,这个句柄就是任务的堆栈。此参数就用来保存这个任务句柄。其他API函数可能会使用到这个句柄。那么任务句柄是到底是怎么一回事,它保存的是任务控制块的首地址。那么它又是如何来保存任务的首地址呢?这就是我们今天要讨论的话题。1、创建一个任务动态创建一个任务#define TASK1_TASK_PRIO 1 //任务优先级#define TASK1原创 2022-03-29 20:54:32 · 5178 阅读 · 3 评论 -
【FreeRTOS】FreeRTOS学习笔记(14)— FreeRTOS的消息队列(原生API)
摘要:在裸机中我们使用全局变量来传递信息,在操作系统中,使用全局变量传递消息可能会不安全,容易被修改。于是就是用队列来传递消息。队列就是一个数据结构,用于任务间的数据的传递。一、消息队列的基本概念队列又称消息队列,是一种常用于任务间通信的数据结构,队列可以在任务与任务间、中断和任务间传递信息,实现了任务接收来自其他任务或中断的不固定长度的消息,任务能够从队列里面读取消息,当队列中的消息是空时,读取消息的任务将被阻塞,用户还可以指定阻塞的任务时间 xTicksToWait,在这段时间中,如果队列为空,该任原创 2021-09-19 20:25:36 · 1441 阅读 · 0 评论 -
【FreeRTOS】FreeRTOS学习笔记(13)— FreeRTOS创建任务和任务管理(原生API)
一、移植FreeRTOS到STM32使用HAL+ STM32F407ZGT6移植FreeRTOS(原生API)二、创建第一个FreeRTOS上面已经基于 STM32 F407创建好了 FreeRTOS 的工程模板,这章开始我们将真正进入如何使用 FreeRTOS 的征程,先从最简单的创建任务开始,点亮一个LED,以慰藉下尔等初学者弱小的心灵。由于前面已经讲过了,所以这里就不过多展示,代码链接如下:三、FreeRTOS的启动流程在目前的 RTOS 中,主要有两种比较流行的启动方式,暂时还没有看到原创 2021-09-19 12:49:05 · 446 阅读 · 0 评论 -
【FreeRTOS】FreeRTOS学习笔记(12)— FreeRTOS的线程间通信(CMSIS_API)
FreeRTOS的线程间通信线程间通信1、什么是线程间通信2、最简单的通信方式3、线程间的专用通信方式4、专用通信方式的通信原理一、信号(Signal Events)1.1、什么是信号通信1.2、信号这个整形数的范围1.3、宏osFeature_Signals1.4、APIosSignalClear(清除信号)osSignalSet(发送信号)osSignalWait(接收信号)4.5、例子1.6、案例二、消息队列2.1、回顾信号2.2、消息队列的实现原理2.3、宏osFeature_MessageQ(打.原创 2021-09-05 19:31:39 · 1825 阅读 · 0 评论 -
【FreeRTOS】FreeRTOS学习笔记(11)— FreeRTOS的线程管理、定时器管理(CMSIS_API)
osThreadCreate函数原型osThreadId osThreadCreate (const osThreadDef_t *thread_def, void *argument)功能:使用 osThreadDef 宏所定义的结构体变量来创建一个线程。创建好线程后,然后进入 READY 状态,等待任务管理来调度运行。参数参数 1:指定osThreadDef所定义结构体变量的指针,通过该指针即可访问结构体变量,然后使用里面的信息来创建线程。由于结构体变量名字的前面有一个os_thread原创 2021-09-05 08:23:50 · 1604 阅读 · 0 评论 -
【FreeRTOS】FreeRTOS学习笔记(10)— FreeRTOS的osThreadDef创建任务(CMSIS_API)
一、osThreadDef是一个宏定义#define osThreadDef(name, thread, priority, instances, stacksz) \const osThreadDef_t os_thread_def_##name = \{ #name, (thread), (priority), (instances), (stacksz), NULL, NULL }所以osThreadDef(defaultTask, StartDefaultTask, osPriori.原创 2021-09-04 14:02:30 · 2280 阅读 · 0 评论 -
【FreeRTOS】FreeRTOS学习笔记(9)— 对F407ZGT6移植FreeRTOS _CMSIS API_实例
接着上一章的继续FreeRTOS.h#include "FreeRTOS.h"#include "task.h"#include "main.h"#include "cmsis_os.h"//存放 defaultTask 任务(线程)的线程 ID也就是句柄,ID(句柄) 为线程的唯一识别号osThreadId defaultTaskHandle;osThreadId myTask02Handle;//存放 myTask02 线程的线程 ID(句柄)void StartDefaultTa原创 2021-09-03 20:46:05 · 430 阅读 · 1 评论 -
【FreeRTOS】FreeRTOS学习笔记(8)— 使用STM32CubeMX对F407ZGT6移植FreeRTOS(CMSIS API)
如果我们自己移植代码就是使用的是FreeRTOS的原生API接口,如果使用STM32CubeMX来配置工程就是使用的CMSIS API接口,是对FreeRTOS的原生API接口进行了封装。为什么学习CMSIS 的 RTOS 接口?目前使用的是FreeRTOS,我们可以直接介绍FreeRTOS的原生接口(原生API),源码移植就是使用的是原生API接口。我们这里选择介绍CMSIS接口,实际上CMSIS接口和原生接口都是类似的,因此学会了CMSIS 的RTOS接口之后,大家自己也能自学对应的原生接口,当然毕原创 2021-09-03 20:22:07 · 1068 阅读 · 0 评论 -
【FreeRTOS】FreeRTOS学习笔记(7)— 手写FreeRTOS双向链表/源码分析
freertos双向链表分析原创 2022-06-20 18:00:55 · 683 阅读 · 0 评论 -
【FreeRTOS】FreeRTOS学习笔记(7)— 列表和列表项(链表和节点) 重要
1、什么是列表和列表项?在 FreeRTOS中存在着大量的基础数据结构列表和列表项的操作,要想读懂 FreeRTOS的源码或者从0到1开始实现FreeRTOS,就必须弄懂列表和列表项的操作,其实也没那么难列表和列表项是直接从FreeRTos源码的注释中的list和list_item翻译过来的,其实就是对应我们C语言当中的链表和节点。所以在FreeRTOS我们也可以认为链表就是列表,节点就是列表项。1.1、C语言链表简介链表作为 C 语言中一种基础的数据结构,在平时写程序的时候用的并不多,但在操作系统里原创 2021-08-21 21:07:04 · 640 阅读 · 2 评论 -
【FreeRTOS】FreeRTOS学习笔记(6)— 中断+临界区的保护
什么是临界段//开始任务任务函数void start_task(void *pvParameters){ taskENTER_CRITICAL(); //进入临界区 //创建TASK1任务 xTaskCreate((TaskFunction_t )task1_task, (const char* )"task1_task", (uint16_t )TASK1_STK_SIZE,原创 2021-08-18 19:40:24 · 641 阅读 · 1 评论 -
【FreeRTOS】FreeRTOS学习笔记(5)— 开始创建任务并测试任务代码
现在开始使用FreeRTOS,对于代码的编写很简单,FreeRTOS是可裁剪的,想要什么不想要什么直接在FreeRTOSConfig.h文件中取消和打开相关的宏定义就可以了。下面是小编的FreeRTOSConfig.h文件配置,你可以作为参考。FreeRTOSConfig.h/* * FreeRTOS V202107.00 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * http原创 2021-08-18 16:29:36 · 514 阅读 · 1 评论 -
【FreeRTOS】FreeRTOS学习笔记(4)— 任务创建、删除、挂起和恢复
上一章我们学习了FreeRTos的任务基础知识,本章就正式学习如何使用 FreeRTos中有关任务的AP函数。本来本章想讲解 FreeRToS的任务原理知识的,但是很多初学者还没使用过 FreeRTOS,甚至其他的RTOS系统都没有使用过,所以一上来就是苦涩的原理很可能会吓跑大批初学者。所以本章做了调整,先学习怎么用,先知其然,后面在知其所以然。使用过以后再学习原理、看源码就会轻松很多。本章分为如下几部分:1、任务创建动态创建任务#define TASK1_TASK_PRIO 1 //任务优原创 2021-08-18 14:43:34 · 573 阅读 · 0 评论 -
【FreeRTOS】FreeRTOS学习笔记(3)— FreeRTOS任务与协程
一、什么是任务在裸机系统中,系统的主体就是main函数里面顺序执行的无限循环,这个无限循环里面CPU按照顺序完成各种事情。在多任务系统中,我们根据功能的不同,把整个系统分割成一个个独立的且无法返回的函数,这个函数我们称为任务,也可以称之为线程。void task1(void *pvParameters){ /* 任务主体,无限循环且不能返回 */ for(;;) { /* 任务主体代码 */ vTaskDelay( 2000 ); }}二、任务状态FreeRTOS中的任务永原创 2021-08-18 13:11:55 · 902 阅读 · 3 评论 -
【FreeRTOS】FreeRTOS学习笔记(2)— 学习FreeRTOS的编程风格和本质
FreeRTOS的编程风格学习一个RTOS,搞懂它的编程的风格很重要,这可以大大提供我们阅读代码的效率。下面我们就以 FreeRTOS里面的数据类型、变量名、函数名和宏这几个方面做简单介绍。1、数据类型在FreeRTOS中,使用的数据类型虽然都是标准C里面的数据类型,但是针对不同的处理器,对标准C的数据类型又进行了重定义,给它们取了一个新的名字,比如char重新定义了一个名字 porCHAR,这里面的port表示接口的意思,就是FreeRTOS要移植到这些处理器上需要这些接口文件来把它们连接在一起。但原创 2021-08-18 10:39:24 · 768 阅读 · 1 评论 -
【FreeRTOS】FreeRTOS学习笔记(1)— 使用HAL+ STM32F407ZGT6移植FreeRTOS(原生API)
使用HAL对STM32F407ZGT6单片机移植FreeRTOSFreeRTOS源码下载include文件夹portable文件夹移植FreeRTOS源码1、添加 FreeRTOS源码2、向工程分组中添加文件3、添加相应的头文件路径4、修改SYSTEM文件1、修改sys.h文件2、修改 usart.c文件3、修改 delay.c文件总结我们既然要学习FreeRTOS,如果不是用STM32CubeMX来配置工程的话们就要去官网下载源码:https://www.freertos.org/FreeRTOS源码原创 2021-08-17 17:04:13 · 1124 阅读 · 1 评论