草庐IT

Phytium-FreeRTOS

全部标签

【FreeRTOS】详细讲解FreeRTOS中事件(event)并通过具体示例讲述其用法

文章目录事件函数解析示例事件  事件,实际上是一种任务间通信的机制,主要用于实现多任务间的同步,其只能是事件类型的通信,无数据传输。与信号量不同的是,它可以实现一对多,多对多的同步。即可以是任意一个事件发生时唤醒任务进行事件处理;也可以是几个事件都发生后才唤醒任务进行事件处理;同样,也可以是多个任务同步多个事件。  FreeRTOS中任务可以通过设置事件位来实现事件的触发和等待操作。但FreeRTOS的事件仅用于同步,不提供数据传输功能,其具有如下特点:事件只与任务相关联,事件相互独立,一个32位的事件集合(EventBits_t类型的变量,实际可用与表示事件的只有24位),用于标识该任务发生

FreeRTOS小项目实战------基于FreeRTOS和stm32的门禁系统

目录收获系统总体框架程序框架具体程序实现工程文件网盘链接收获学习freertos的移植与裁剪,对任务间通信的认识更加深刻,加深了实时操作系统的理解,学习了as608指纹模块,rc522刷卡模块等模块的简单使用。系统总体框架该系统采用STM32F407ZGT6为主控芯片,在FreeRTOS下与分别通过as608指纹模块,RFID射频识别卡模块,LCD触屏模块以及esp8266WIFI模块完成解锁,配合显示模块,舵机,用蜂鸣器进行提示共同组成整个门禁系统,系统的整体框架图如下所示首先指纹模块提前采取好需要识别的指纹到模块内置的芯片里面,将手指放到指纹识别模块上,系统会检测到指纹按下并且会采取当前的

FreeRTOS小项目实战------基于FreeRTOS和stm32的门禁系统

目录收获系统总体框架程序框架具体程序实现工程文件网盘链接收获学习freertos的移植与裁剪,对任务间通信的认识更加深刻,加深了实时操作系统的理解,学习了as608指纹模块,rc522刷卡模块等模块的简单使用。系统总体框架该系统采用STM32F407ZGT6为主控芯片,在FreeRTOS下与分别通过as608指纹模块,RFID射频识别卡模块,LCD触屏模块以及esp8266WIFI模块完成解锁,配合显示模块,舵机,用蜂鸣器进行提示共同组成整个门禁系统,系统的整体框架图如下所示首先指纹模块提前采取好需要识别的指纹到模块内置的芯片里面,将手指放到指纹识别模块上,系统会检测到指纹按下并且会采取当前的

FreeRTOS任务调度原理

1.FreeRTOS的列表和列表项列表和列表项是FreeRTOS中一个非常重要的数据结构,是FreeRTOS的基石。要想看懂FreeRTOS的源码并学习其中的原理,我们必须先了解一下这个数据结构。这个数据结构也是和任务调度息息相关的。/*列表项*/structxLIST_ITEM{configLIST_VOLATILETickType_txItemValue;/*/*列表(本质上和双向链表一样)*/typedefstructxLIST{volatileUBaseType_tuxNumberOfItems; /*1.1有关函数有关列表操作的相关函数都在list.c文件中。下面介绍一下相关函数和

FreeRTOS任务调度原理

1.FreeRTOS的列表和列表项列表和列表项是FreeRTOS中一个非常重要的数据结构,是FreeRTOS的基石。要想看懂FreeRTOS的源码并学习其中的原理,我们必须先了解一下这个数据结构。这个数据结构也是和任务调度息息相关的。/*列表项*/structxLIST_ITEM{configLIST_VOLATILETickType_txItemValue;/*/*列表(本质上和双向链表一样)*/typedefstructxLIST{volatileUBaseType_tuxNumberOfItems; /*1.1有关函数有关列表操作的相关函数都在list.c文件中。下面介绍一下相关函数和

【FreeRTOS】Arduino开发STM32

0.开发环境(工具)Vscode、platformio、arduino、STM32F103C8T6、USB-TTL引脚连接:STM32直接设置为烧录模式即可,烧录完成后会自动运行程序。  1.点灯加串口输出调试注意事项:每次上传程序前,需要按一下复位键。#include#defineledPinPC13HardwareSerialSerial1(PA10,PA9);//将串口1的管脚指定到PA10(RX),PA9(TX)引脚上inti=0;voidsetup(){Serial1.begin(115200);pinMode(ledPin,OUTPUT);}voidloop(){digitalWr

stm32数据对齐、PRESERVE8、freertos堆栈

为什么需要数据对齐?避免数据在内存中跨边界存储,减少读取数据次数,提高效率,本质上是以空间换时间的做法下图中属于同一水平位置的为同一边界变量在同一边界里的一次存储周期就可以读取一旦跨了上下两个边界来存储就需要至少两个存储周期来读取根据存储器结构,如下图,参考链接:多体并行:高位/低位交叉编址CPU数据线有32位一次最多可以从内存读取32数据,这里的一次指一次存储周期LDRr1,[pc,#4],是从pc+#4地址处开始连续读取4个字节的数据到r1寄存器LDRHr1,[pc,#4],是从pc+#4地址处开始连续读取2个字节的数据到r1寄存器LDRBr1,[pc,#4]直接取pc+#4当前那个地址的

STM32用FreeRTOS串口中断接收卡死问题

现在意法半导体的配套软件做得很全面了,简直可以说是保姆式的服务。从芯片选型,引脚定义,到代码模板生成,一条龙服务,很方便。但是方便也有方便的坏处,那就是有些细节的规则会造成天然的bug。比如,在stm32cubeIDE里新建工程的时候,如果勾选了FREERTOS那么,程序后台会默认把RTOS可控的优先级范围设定成5-15(目前还看不见,生成后在FreeRTOSConfig.h中可以查到):接下来继续配置串口。可以看到,串口中断的优先级已经被锁定成5,且不可更改。实际上这样暂时还没有什么问题,生成代码后,做基本的串口收发一时半会儿也看不出有什么问题。但是,一旦让程序多跑跑,就会发现,串口中断早晚

Freertos查询剩余栈空间

最近才开始接触RTOS,使用cubemx直接创建,只简单测试了能否跑任务,但是不清楚到底该创建多少空间。后续内容再慢慢学习(磨洋工)记录备忘。#include"MyTask.h"TaskHandle_tLED_Handle;TaskHandle_tUSART_Handle; //存储计算未使用堆栈空间返回值UBaseType_tuxHighWaterMark_LED;UBaseType_tuxHighWaterMark_USART;voidCreateTask(){ //创建任务以字为单位,32位系统1字=4字节 //LED任务为100*4个字节 xTaskCreate(LED_Task,

基于STM32的CANopen通信项目(具备FreeRTOS)

基于STM32的CANopen通信项目(具备FreeRTOS)介绍移植流程功能设计功能介绍从站设计流程配置对象字典编写程序主站设计流程配置对象字典编写程序更多项目介绍本文档主要介绍如何使用STM32移植CANopen协议,实现正常的数据收发。硬件:STM32canopen库:Mongo-canfestival-3-asc源码MCU程序库:HAL库对象字典生成器环境相关优秀项目:两个STM32F103RCT6之间,通过SDO收发,主站通过按键控制从站的LED。