---- 1. 本次作业的考察要点: 作业地址:https://github.com/HustWolfzzb/STM32F429DiscoveryFreeRTOS_9Git/GCC/GDB/QEMU等工具的使用。 FreeRTOS多任务同步和通信机制的掌握。 ---- 2. 编程作业: 在github上,Fork例程项目(https://github.com/cbhust/STM32F429DiscoveryFreeRTOS_9.git) 到自己的个人账号。 clone项目到本地电脑的Ubuntu虚拟机
回顾下之前的章节:我们在一个简单的定时器 OS 基础上实现了 cortex-M 系列架构的兼容,并基于单片机的基本资源实现了很多实例。
这里是IEEE,电气电子工程师学会,这里会指定许多的标准,我们的头文件就是这里定义的。
首先新建或找一个基于Keil的STM32基础工程,这里我已经创建好了一个STM32F407VET6的工程模板,工程结构如下图的第1步的矩形框内所示。
1. 基础知识 注意:在RTOS中是优先值越高则优先级越高(和ucos/linux的相反) 在移植的时候,主要裁剪FreeRTOS/Source/portable文件夹,该文件夹用来针对不同MCU做的一些处理,如下图所示,我们只需要使用:
FreeRTOS 的中断配置是一个很重要的内容,需要根据所使用的 MCU 来具体配置。这需要 了解 MCU 架构中有关中断的知识,本文结合 Cortex-M 的 NVIC 来讲解 STM32 平台下的 FreeRTOS 中断配置,分为如下几部分:
回顾下之前的章节:我们在一个简单的定时器OS基础上实现了cortex-M系列架构的兼容,并基于单片机的基本资源实现了很多实例。
任务挂起简单点理解就是现在不需要执行这个任务,让它先暂停,就是挂起。恢复就是从刚才挂起的状态下继续运行。
FreeRTOS源码分为两种,一种是FreeRTOS包,另一种是FreeRTOS LTS Release包。
本章教程为大家讲解FreeRTOS操作系统版本的二代示波器实现。主要讲解RTOS设计框架,即各个任务实现的功能,任务间的通信方案选择,任务栈,系统栈以及全局变量共享问题。同时,工程调试方法也专门做了说明。
STM32CubeIDE在stm32开发者起着最基础的作用,在STM32CubeIDE中配置FreeRTOS中间层时需要选择interface,其中有三个选项:Disable、CMSIS_V1和CMSIS_V2
本章教程为大家讲解RL-TCPnet网络协议栈的FreeRTOS操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移植就比较容易了,主要是添加库文件、配置文件和驱动文件即可。另外,RL-TCPnet移植到FreeRTOS要重新配置RL-TCPnet的接口函数,以此来支持RL-TCPnet多任务运行。使用RTX无需重新配置,因为默认情况下就是采用RTX的API函数配置的。
这里的返回值是BaseType_t,实际它是long类型,可以在portmacro.h文件中看到其定义:
RTOS 系统的核心就是任务管理,FreeRTOS 也不例外,而且大多数学习 RTOS 系统的工程师或者学生主要就是为了使用 RTOS 的多任务处理功能,初步上手 RTOS 系统首先必须掌握的也是任务的创建、删除、挂起和恢复等操作,由此可见任务管理的重要性。本文学习一下 FreeRTOS的任务基础知识,分为如下几部分:
应用程序可以使用任务也可以使用协程,或者两者混合使用,但是任务和协程使用不同的API函数,因此在任务和协程之间不能使用同一个队列或信号量传递数据。
首先上一段cubemx导出的freertos的配置文件,这个配置文件是cubemx导出生成的。芯片是stm32f103zet6,(freertos代码风格是在是比较差,尤其是名称,看ucos爽多了)
使用FreeRTOS时,我们可以在application中创建多个任务(task),有些文档把任务也称为线程(thread)。
之前在M-Arch中弄过STM32的M3,GD32的M4和M23,搭环境就顺风顺水了。
说明 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
本来是想写个源码分析的,结果分析了半道发现和我想的不一样,就当一个STM32的学习指南了。
FreeRTOS内核应用开发学习手记移植任务状态迁移任务创建与删除任务挂起与恢复任务延时消息队列信号量事件软件定时器任务通知内存管理
因为它的创新,单片机的使用变得越来越简单了,甚至没接触过硬件的看手册也能很快掌握。它首创的提供了库函数操作所有的寄存器。是NXP,飞思卡尔,51单片机,msp430单片机,Atemel的AVR单片机,MICROCHIP的PIC单片机无法比拟的。
嵌入式系统已经成为我们日常生活中的不可或缺的一部分,从智能手机到汽车控制系统,从家用电器到医疗设备,嵌入式系统无处不在。这些系统通常需要满足严格的时间限制,以便实时响应事件和传感器输入。为了满足这些要求,嵌入式开发者经常依赖于实时操作系统(RTOS),这些系统提供了一种有效的方式来管理系统资源和处理多任务。
正文之前 上周因为忙着忙那儿的,所以作业迟交了!助教真是不好意思,不过以后我都会是最前面交作业的那一个!现在第二次作业我卡在那个编译二进制文件那儿了。改天问吧,现在还是写作业了! 正文 # sudo apt-get update # sudo apt-get upgrade # sudo apt-get install build-essential git # sudo apt-get install gcc-arm-none-eabi 1)把FreeRTOS例程clone到虚拟机并编译例程
为了这个移植,国庆都没有好好出去玩,在公司里弄这个移植,因为公司开发的工具是IAR(32K限制版的,没有版权的,编译FreeRTOS还是搓搓有余的~),在网上下载了移植实例,但都是用Keil编译的,我也是无奈,要是这样的话,我也就不用费心了,本想把Keil的文件一直到IAR当中,可是编译是通过了,可是怎么就是不行,我估计就是两个编译器软件里面有很多集成的功能的不同把,于是我放弃了这条路,试试官网的Demo,在Demo的基础上改改,应该可以吧,弄了好久,今天终于移植成功,特此记录一下。
本教程展示了如何使用新的Keil项目导入器将Keil ARM项目自动转换为使用MSBuild和GCC构建的VisualGDB项目。在开始之前,安装VisualGDB 5.3或更高版本。
本教程连载中,篇章会比较多,为方便同学们阅读,点击这里可以查看文章的 目录列表,目录列表页面地址:https://blog.csdn.net/thisway_diy/article/details/121399484
说明 esp32里面跑的是freertos,如果需要传递数据需要使用内部的缓存管理. 代码 📷 #include <stdio.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "freertos/queue.h" #include "driver/gpio.h" char data[10]="01234567"; static xQueueHandle xQueueHandle1 = NULL; //任务函数
在嵌入式系统中,实时任务调度是确保系统响应性和稳定性的关键方面之一。不同的任务调度策略可以影响系统的性能和实时性。本文将深入探讨两种常见的实时任务调度策略:固定优先级调度和循环时间片调度,并提供相应的代码示例。
RTOS 系统的核心是任务管理,而在实时操作系统中,任务和线程在概念上其实是一样的。所以任务管理也可以叫做线程管理。初步上手 RTOS 系统首先必须掌握的也是任务的创建、删除、挂起和恢复等操作,由此可见任务管理的重要性。在日常生活中,我们要完成一个大任务,一般会将它分解成多个简单、容易解决的小问题,小问题逐个被解决,大问题也就随之解决了。在多线程操作系统中,也同样需要开发人员把一个复杂的应用分解成多个小的、可调度的、序列化的程序单元,当合理地划分任务并正确地执行时,这种设计能够让系统满足实时系统的性能及时间的要求。本文中使用的例子,多是参考与FreeRTOS和RT-Thread。
STM32F103C8T6是一款由意法半导体公司(ST)推出的基于Cortex-M3内核的32位微控制器,硬件采用LQFP48封装,属于ST公司微控制器中的STM32系列。除了被我们熟知的STM32,ST公司还有SPC5X系列、STM8系列等,具体参数如下:
很多应用场合对于功耗的要求很严格,比如长期无人照看的数据采集仪器,可穿戴设备等。其实很多 MCU 都有相应的低功耗模式,以此来降低设备运行时的功耗,进行裸机开发的时候就可以使用这些低功耗模式。但是现在我们要使用操作系统,因此操作系统对于低功耗的支持也显得尤为重要,这样硬件与软件相结合,可以进一步降低系统的功耗。这样开发也会方便很多,毕竟系统已经原生支持低功耗了,我们只需要按照系统的要求来做编写相应的应用层代码即可。FreeRTOS 提供了一个叫做 Tickless 的低功耗模式。
我们在平常使用STM32单片机的时候,往往会碰到程序跑飞的情况,出现hard_fulat等错误,而我们在定位错误的时候,采用的方法往往是连上仿真器,一步一步单步调试,定位到具体的错误代码,再去猜测、排除、推敲错误原因,这样一个过程很是痛苦,而且在实际情况中,很多产品真机调试时必须断开仿真器或者说,问题确实存在,但是极难出现,所以在基于这样一个问题背景下,RTT 的大佬armink开发了一个基于 ARM Cortex-M系列的 MCU错误追踪库,用于帮助开发者解决上述问题。
学习初期最难找的就是找学习资料了,本贴精心汇总了一些嵌入式相关资源,包括但不限于编程语言、单片机、开源项目、物联网、操作系统、Linux等资源,并且在不断地更新中,致力于打造全网最全的嵌入式资料库。
任何调用中断安全FreeRTOS API函数的中断服务例程都可以使用的最高中断优先级。不要从任何优先级高于此的中断调用中断安全FREERTOS API函数!(优先级越高,数值越低。)
stm32F1系列是来自ARM公司具有突破性的以ARM Cortex-M3为内核的32为微处理器,内核为ARM公司为要求高性能,低功耗,低成本,性价比高的嵌入式应用专门设计的Cortex-M内核。
控制GPIO25输出高低电平 1.原理图 📷 2.参考官方例程 📷 3.程序 📷 #include <stdio.h> #include <string.h> #include <stdlib.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "freertos/queue.h" #include "driver/gpio.h" #define gpio_pin 25 void app_main(void) {
MDK5的组成如下(核心包括4个部分:uVision IDE with Editor(编辑器),ARM C/C++ Compiler(编译器),Pack Installer(包安装器),uVision Debugger with Trace(调试跟踪器)。Software Packs(包安装器)又分为:Device(芯片支持),CMSIS(ARM Cortex 微控制器软件接口标准)和 Mdidleware(中间库)三个小部分):
嵌入式系统在现代科技中发挥着越来越重要的作用,从智能家居到工业自动化,嵌入式设备已经无处不在。在开发嵌入式系统时,选择合适的操作系统是至关重要的一步。本文将深入探讨几种常见的嵌入式操作系统,并通过代码示例来比较它们的特性,以帮助开发者选择适合其项目的操作系统。
将获取信号量函数xSemaphoreTake的阻塞时间改为0,也就是没获取到信号量,立即返回。
在嵌入式领域有多重不同的 CPU 架构,我们知道 RT-Thread 是支持不同架构的嵌入式操作系统,我们先来大概看一下 RT-Thread 的架构。
博主手里有一个正点原子 STM32F103ZET6,行情最贵的时候买的,得好好利用。
4.因为项目中用到FreeRTOS,讲讲FreeRTOS的调度原理; 答:FreeRTOS从OS 操作系统支持三种调度方式:抢占式调度,时间片调度和合作式调度。 实际应用主要是抢占式调度和时间片调度
STM32 F2系列高性能MCU 基于ARM® Cortex™-M3的STM32 F2系列采用意法半导体先进的90 nm NVM制程制造而成,具有创新型自适应实时存储器加速器(ART加速器™)和多层总线矩阵, 实现了前所未有的高性价比。 该系列具有集成度高的特点:整合了1MB Flash存储器、128KBSRAM、以太网MAC、USB 2.0 HS OTG、照相机接口、硬件加密支持和外部存储器接口。 意法半导体的加速技术使这些MCU能够在主频为120 MHz 下实现高达150 DMIPS/398 CoreMark的性能,这相当于零等待状态执行,同时还能保持极低的动态电流消耗水平( 175 μA/MHz)。 带有DSP和FPU指令的STM32 F3系列混合信号MCU STM32 F3系列具有运行于72 MHz的32位ARM Cortex-M4内核(DSP、FPU)并集成多种模拟外设,从而降低应用成本并简化应用设计,它包括:
同时,github上面有很多项目用于stm32等cortex 内核的HardFault_Handler故障查找,可以到硬汉电子论坛去看看,我这里记得segger有SEGGER_HardFaultHandler.c和HardFaultHandler.S,硬汉哥已经将做了stm32的移植修改工作。
STM32系列专为要求高性能、低成本、低功耗的嵌入式应用设计的ARM Cortex®-M0,M0+,M3, M4和M7内核,按内核架构分为不同产品:主流产品(STM32F0、STM32F1、STM32F3)、超低功耗产品(STM32L0、STM32L1、STM32L4、STM32L4+)、高性能产品(STM32F2、STM32F4、STM32F7、STM32H7)。
因为基于Cortex 系列芯片采用的内核都是相同的,区别主要为核外的片上外设的差异,这些差异却导致软件在同内核,不同外设的芯片上移植困难。为了解决不同的芯片厂商生产的Cortex 微控制器软件 的兼容性问题,ARM 与芯片厂商建立了CMSIS 标准(CortexMicroController Software Interface Standard)。
领取专属 10元无门槛券
手把手带您无忧上云