(4)QSPI固化(Dual Quad SPI Parallel 8 bit模式)。
1. 基础知识 注意:在RTOS中是优先值越高则优先级越高(和ucos/linux的相反) 在移植的时候,主要裁剪FreeRTOS/Source/portable文件夹,该文件夹用来针对不同MCU做的一些处理,如下图所示,我们只需要使用:
FreeRTOS内核是高度可定制的,使用配置文件FreeRTOSConfig.h进行定制。每个FreeRTOS应用都必须包含这个头文件,用户根据实际应用来裁剪定制FreeRTOS内核。
---- 1. 本次作业的考察要点: 作业地址:https://github.com/HustWolfzzb/STM32F429DiscoveryFreeRTOS_9Git/GCC/GDB/QEMU等工具的使用。 FreeRTOS多任务同步和通信机制的掌握。 ---- 2. 编程作业: 在github上,Fork例程项目(https://github.com/cbhust/STM32F429DiscoveryFreeRTOS_9.git) 到自己的个人账号。 clone项目到本地电脑的Ubuntu虚拟机
在多任务系统中,任务A正在使用某个资源,还没用完的情况下任务B也来使用的话,就可能导致问题。
高优先级的任务,他只会跟同级的任务轮流执行,如果高优先级的任务只有他一个,他会一直独霸CPU。
写队列任务在每次循环中都调用taskYIELD()。taskYIELD()通知调度器立即进行任务切换,而不必等到当前任务的时间片耗尽。某个任务调用taskYIELD()等效于其自愿放弃运行态。由于本例中两个写队列任务具有相同的任务优先级,所以一旦其中一个任务调用了taskYIELD(),另一个任务将会得到执行 — 调用taskYIELD()的任务转移到就绪态,同时另一个任务进入运行态。这样就可以使得这两个任务轮翻地往队列发送数据。
说明 nvs是底层封装的一套把数据存储到flash里面的函数; 数据是以键值对的形式存储数据(就是标识符+数据的形式) 不如直接看代码 #include <stdio.h> #include <string.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "freertos/queue.h" #include "freertos/event_groups.h" #include "esp_system.h" #in
说明 模块有3个串口,每个串口管脚可以设置到任意的gpio上 模组出厂默认使用GPIO1,GPIO3作为串口0引脚(日志打印); GPIO17,GPIO16作为串口1引脚(AT指令) 📷 开发板上也把串口1连接了485上. 📷 说明2 每个串口都有一个128字节的FIFO缓存区,知道这个就可以. 📷 设置串口1,带接收缓存,不带发送缓存区的方式(最简洁的方式) 设置GPIO17,GPIO16作为串口1引脚. 没有设置发送缓存,调用 uart_write_bytes 发送数据的时候是阻塞的. 📷 #in
串口中断属于STM32本身的资源,不涉及到FreeRTOS,但可与FreeRTOS配合使用。
应用程序可以使用任务也可以使用协程,或者两者混合使用,但是任务和协程使用不同的API函数,因此在任务和协程之间不能使用同一个队列或信号量传递数据。
队列(queue)可以用于"任务到任务"、“任务到中断”、"中断到任务"直接传输信息。
考虑平台硬件定时器个数限制的, FreeRTOS 通过一个 Daemon 任务(启动调度器时自动创建)管理软定时器, 满足用户定时需求. Daemon 任务会在其执行期间检查用户启动的时间周期溢出的定时器,并调用其回调函数。
定时器可以说是每个 MCU 都有的外设,有的 MCU 其定时器功能异常强大,比如提供 PWM、输入捕获等功能。但是最常用的还是定时器最基础的功能——定时,通过定时器来完成需要周期性处理的事务。
上面这几中方式中, 除了消息通知, 其他几种实现都是基于消息队列。消息队列作为主要的通信方式, 支持在任务间, 任务和中断间传递消息内容。 这一章介绍 FreeRtos 消息队列的基本使用, 重点分析其实现的方式。
在实际的应用中,常常会遇到一个任务或者中断服务需要和另外一个任务进行“沟通交流”, 这个“沟通交流”的过程其实就是消息传递的过程。在没有操作系统的时候两个应用程序进行消息传递一般使用全局变量的方式,但是如果在使用操作系统的应用中用全局变量来传递消息就会涉及到“资源管理”的问题。FreeRTOS 对此提供了一个叫做“队列”的机制来完成任务与任务、任务与中断之间的消息传递,由于队列用来传递消息的,所以也称为消息队列。
从 v8.2.0 版本开始,FreeRTOS 新增了任务通知(Task Notifictions)这个功能,可以使用任务通知来代替信号量、消息队列、事件标志组等这些东西。使用任务通知的话效率会更高,我们来学习一下 FreeRTOS 的任务通知功能。
我们使用队列、信号量、事件组等等方法时,并不知道对方是谁。使用任务通知时,可以明确指定:通知哪个任务。
用数学表达式就这样:w = (w+1) % len,即w = (6+1) %7 = 0
在RTOS中,需要应对各类事件。这些事件很多时候是通过硬件中断产生,怎么处理中断呢?
在我们移植的基于freeRTOS的webserver源码里,有很多的字符串处理函数,相信仔细研读过的人应该都注意到,那么你对这些字符处理函数都清楚吗?今天我们就来总结下: 这些函数的原型声明其实都在
我这里还是希望dji可以把这个mpy的一些源码放出来,因为我觉得是无关紧要的东西,然后去学习一下。而不是这样盲目的去猜。
FreeRTOS内核应用开发学习手记移植任务状态迁移任务创建与删除任务挂起与恢复任务延时消息队列信号量事件软件定时器任务通知内存管理
今天来分享一下,之前项目中使用FreeRTOS搭建的Event-Driven事件驱动框架。
FreeRTOS 信号量和互斥锁是基于队列实现的, 队列介绍见 << FreeRTOS 消息队列 >>。 使用信号量需要在源文件中包含头文件 semphr.h , 该文件定义了信号量的 API, 实际我们使用的信号量 API 都是宏定义, 宏的实际是队列提供的函数。
队列是任务间通信的最基础形式,也是最灵活的方式。操作系统中队列是以项(item)为基本单元。
RTOS 系统的核心就是任务管理,FreeRTOS 也不例外,而且大多数学习 RTOS 系统的工程师或者学生主要就是为了使用 RTOS 的多任务处理功能,初步上手 RTOS 系统首先必须掌握的也是任务的创建、删除、挂起和恢复等操作,由此可见任务管理的重要性。本文学习一下 FreeRTOS的任务基础知识,分为如下几部分:
而且在中断中发送信号量或队列的时候,务必把使能中断的语句放在初始化freertos之后,尤其是cubemx生成的代码,默认是把中断初始化放在freertos初始化之前,如果这个时候,外部有中断触发,就立刻发送信号量,但是此时却未初始化信号量,导致系统死机在configASSERT( xQueue );
之前分享了很多关于freeRTOS的知识,那么我们怎么在实战中去写代码呢?本篇文章重在对基于freeRTOS的架构代码的解析。整个功能如下图:
InterSystems IRIS为IBM WebSphere MQ提供了一个接口,可以使用该接口在InterSystems IRIS和IBM WebSphere MQ的消息队列之间交换消息。要使用此接口,必须能够访问IBM WebSphere MQ服务器,并且IBM WebSphere MQ客户端必须与InterSystems IRIS在同一台计算机上运行。
由于协程是非常轻量的,所以可以在一个进程中大量的创建,runtime 会实际创建系统线程(一般为恰好的物理CPU数),并将协程映射到实际的物理线程上执行,这个有时候称为 M:N模型。好的 runtime 会使得系统整体的性能随着物理CPU的增加而线性增加。
我们在裸机开发中,每个函数之间进行数据通信往往采用全局变量。而在嵌入式开发中。我们在进行进程间通信的时候,往往采用消息队列。对于操作系统来说,消息队列是非常重要的一个数据结构。本文将介绍一下,如何使用消息队列进行通信。
<iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/LearnESP32" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe>
这个月20号准备去参加RT-Thread一年一度的RDC开发者大会,顺便会带上我们公司的产品,这个产品就用到了大彩串口屏,所以昨天我也写了一篇表驱动法在大彩串口屏上的应用,文章如下:
这里是IEEE,电气电子工程师学会,这里会指定许多的标准,我们的头文件就是这里定义的。
说明 esp32是跑的freertos, 如果没有学过操作系统的朋友把此节当做esp32的内部api使用就可以. 创建任务,每隔一段时间打印 Hello world 📷 #include <stdio.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" //任务函数 static void function(void *pvParameters) { while(1) { vTaskDelay(1
DMA(Direct Memory Access),即直接内存存储,在一些数据的传输中,如串口、SPI等,采用DMA方式,传输过程不需要CPU参与,可用让CPU有更多的时间处理其他的事情。
创建消息队列时FreeRTOS会先给消息队列分配一块内存空间,这块内存的大小等于消息队列控制块大小加上(单个消息空间大小与消息队列长度的乘积),接着再初始化消息队列,此时消息队列为空。
WebSocket 对象提供了用于创建和管理 WebSocket 连接,以及可以通过该连接发送和接收数据的 API。
博主最近在搞 Sensor hub,跑的是 FreeRTOS,所以来学一学 FreeRTOS。
软件定时器是FreeRTOS中的一个重要模块,使用软件定时器可以方便的实现一些与超时或周期性相关的功能,本篇从FreeRTOS的源码入手,来分析FreeRTOS软件定时器的运行机理。
锦华,携程高级技术专家,超过 10 年互联网研发经验,2011 年至今一直从事框架和中间件相关产品研发,对高并发、分布式中间件以及应用性能优化等有浓厚兴趣。
信号量的计数值都有限制:限定了最大值。如果最大值被限定为1,那么它就是二进制信号量;如果最大值不是1,它就是计数型信号量。
前面我们学习了使用信号量来完成同步,但是使用信号量来同步的话任务只能与单个的事件或任务进行同步。有时候某个任务可能会需要与多个事件或任务进行同步,此时信号量就无能为力了。
我们曾经在公众号里给大家推送过关于freeRTOS在NXP kinetis KV4x上的移植,得到了猿友大量的反馈,很多猿友还是感觉对基础的一些东西不懂,今天我们就从基础的任务创建讲起,任务创建是RTOS学习中很重要的一步,因为你的应用就是基于大量的任务来实现的,那么在freeRTOS下如何来创建任务呢,首先打开任意一个移植好的例程或者我们移植的demo,找到task.h和tasks.c这两个文件里面定义声明了许多与任务相关的类型和函数。我们今天要讲的任务创建就来自这里。任务的创建主要有两个函数,先来看第一
滑动窗口协议(Sliding Window Protocol),属于TCP协议的一种应用,用于网络数据传输时的流量控制,以避免拥塞的发生。该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输,提高网络吞吐量。
1.每年的5月17日,美团点评都会在全国各大城市举办517吃货节优惠活动,如果你来负责手机端517某一个活动的测试任务,你会想到从哪些方面测试,来保证517活动的质量?此次活动投放首页上”全城好券”活动中的每日优惠页面,规则如下:
FreeRTOS 从版本 V8.2.0开始提供任务通知这个功能,每个任务都有一个32位的通知值。按照 FreeRTOS 官方的说法,使用消息通知比通过二进制信号量方式解除阻塞任务快 45%, 并且更加省内存(无需创建队列)。
内存管理是一个系统基本组成部分,FreeRTOS 中大量使用到了内存管理,比如创建任务、信号量、队列等会自动从堆中申请内存。用户应用层代码也可以 FreeRTOS 提供的内存管理函数来申请和释放内存,本文学习一下 FreeRTOS 自带的内存管理。
这学期要交一个作品,我同学打算做一个聊天软件,一个聊天软件无非就是两个程序:一个客户端,一个服务器。服务器我之前写出来了,不清楚的可以参考一下这篇文章:虚拟茶话会(2):再次实现
领取专属 10元无门槛券
手把手带您无忧上云