IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32移植FreeRTOS(图文实操) -> 正文阅读

[嵌入式]STM32移植FreeRTOS(图文实操)

一、Freertos

首先附上移植包,里面包含了文章的完整工程以及FreeRTOS官方资料及源码

点击下载:链接

1、前后台系统

早期嵌入式开发没有嵌入式操作系统概念,直接操作裸机,直接在逻辑上写程序,比如51单片机没有操作系统的概念。通常把程序分为前台系统和后台系统。
签单的小系统通常是前后台系统。这样的程序包括一个死循环和若干个中断服务程序:应用程序是一个无限循环,循环中调用API库函数完成作需的操作,大循环叫做后台系统。中断服务程序用于处理系统的异步事件,也就是前台系统。前台是中断级,后台是任务级。
在这里插入图片描述
RTOS全称为:Real time OS ,就是实时操作系统,强调的是:实时性。实时操作系统又分为软实时和硬实时。硬实时要求在规定的时间内必须完成操作,硬实时不允许超时,软实时里面处理过程超时的后果就没有那么严格。在实时操作系统种,我们可以把要实现的功能划分为多个任务,每个任务负责实现其中的一部分,每个任务都是一个很简单的程序,通常是一个死循环。

RTOS操作系统: Freertos, UCOS,RTX,RT-THread,DJYOS等
RTOS操作系统的核心内容在于: 实时内核。

2、可剥夺型内核

RTOS的内核负责管理所有的任务,内核决定了运行哪个任务,何时停止当前任务切换到其他任务,这个是内核的多任务管理能力。多任务管理给人的感觉就是芯片有多个CPU,多任务管理实现了CPU资源的最大化利用,多任务管理有助于实现程序的模块化开发,能够实现复杂的实时利用。
可剥夺型内核顾名思义就是可以剥夺其他任务的CPU使用权,他总是运行就绪任务中优先级最高的任务。
在这里插入图片描述

3、Freertos系统简介

Freertos是一个可剪裁,可剥夺型的多任务内核,而且没有任务数限制。Freertos提供了实时操作系统所需的所有功能,包括资源管理、同步、任务通信等。
Freertos是用C和汇编来写的,其中绝大部分都是用C语言编写的,只有极少数的与处理器密切相关的部分代码才是用汇编写的,Freertos结构简洁,可读性很强!最主要的是非常适合初次接触嵌入式实时操作系统开发者。

为什么要学习Freertos?

1.因为FreeRTOS开源
2.FreeRTOS免费
3.FreeRTOS是很多第三方组件钦定的系统

内核源码下载—> www.freertos.org

二、FreeRTOS移植

1.在基础工程种新建Freertos文件夹,并且将源码添加到这个文件夹中。

在这里插入图片描述
将官方文件中FreeRTOS的source复制在这里插入图片描述
粘贴到我们模板工程的FreeRTOS文件夹中
在这里插入图片描述

2.在poertable文件夹中保留keil 、MemMang 、和 RVDS,其他删除

在poertable文件夹中保留这三个其他删除
在这里插入图片描述
如图
在这里插入图片描述

3.在基础工程中新建分组 FreeRTOS_CODE 和 FreeRTOS_PORTTABLE,并且添加.c文件添加头文件.h路径。

建立FreeRTOS_CODE 和 FreeRTOS_PORTTABLE两个分组
在这里插入图片描述
在这里插入图片描述
FreeRTOS_CODE分组里添加除了stream_buffer.c的剩下六个文件
在这里插入图片描述

FreeRTOS_PORTTABLE分组里添加heap4.c的内存管理方式和我们单片机的m3内核
在这里插入图片描述
在这里插入图片描述
总的添加文件如下图
在这里插入图片描述
添加FreeRTOS_CODE里文件的头文件
在这里插入图片描述
FreeRTOS_PORTTABLE的头文件
在这里插入图片描述

4.从demo中复制FreeRTOSConfig.h文件

在这里插入图片描述
粘贴到我们工程的include文件夹里
在这里插入图片描述

5.移植SYSTEM文件,里面包括sys.c usart.c delay.c

在这里插入图片描述
添加它们的头文件
在这里插入图片描述
进入stm32f10x_it.c把这些函数屏蔽
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再进入到FreeRTOS.h文件把如图宏定义0改成1
在这里插入图片描述
添加LED的c文件和头文件以及配置头文件路径
在这里插入图片描述
在这里插入图片描述

三、FreeRTOS移植验证

复制main.c中内容 并且运行测试。可看到LED灯闪烁,可以更改引脚配置等实现其他功能

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "FreeRTOS.h"
#include "task.h"

//è???ó??è??
#define START_TASK_PRIO		1
//è???????′óD?	
#define START_STK_SIZE 		128  
//è?????±ú
TaskHandle_t StartTask_Handler;
//è???oˉêy
void start_task(void *pvParameters);

//è???ó??è??
#define LED0_TASK_PRIO		2
//è???????′óD?	
#define LED0_STK_SIZE 		50  
//è?????±ú
TaskHandle_t LED0Task_Handler;
//è???oˉêy
void led0_task(void *pvParameters);

//è???ó??è??
#define LED1_TASK_PRIO		3
//è???????′óD?	
#define LED1_STK_SIZE 		50  
//è?????±ú
TaskHandle_t LED1Task_Handler;
//è???oˉêy
void led1_task(void *pvParameters);

int main(void)
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//éè???μí3?D??ó??è??·?×é4	 
	delay_init();	    				//?óê±oˉêy3?ê??ˉ	  
	uart_init(115200);					//3?ê??ˉ′??ú
	LED_Init();		  					//3?ê??ˉLED
	 
	//′′?¨?aê?è???
    xTaskCreate((TaskFunction_t )start_task,            //è???oˉêy
                (const char*    )"start_task",          //è?????3?
                (uint16_t       )START_STK_SIZE,        //è???????′óD?
                (void*          )NULL,                  //′?μY??è???oˉêyμ?2?êy
                (UBaseType_t    )START_TASK_PRIO,       //è???ó??è??
                (TaskHandle_t*  )&StartTask_Handler);   //è?????±ú              
    vTaskStartScheduler();          //?a??è???μ÷?è
}

//?aê?è???è???oˉêy
void start_task(void *pvParameters)
{
    taskENTER_CRITICAL();           //??è?áù????
    //′′?¨LED0è???
    xTaskCreate((TaskFunction_t )led0_task,     	
                (const char*    )"led0_task",   	
                (uint16_t       )LED0_STK_SIZE, 
                (void*          )NULL,				
                (UBaseType_t    )LED0_TASK_PRIO,	
                (TaskHandle_t*  )&LED0Task_Handler);   
    //′′?¨LED1è???
    xTaskCreate((TaskFunction_t )led1_task,     
                (const char*    )"led1_task",   
                (uint16_t       )LED1_STK_SIZE, 
                (void*          )NULL,
                (UBaseType_t    )LED1_TASK_PRIO,
                (TaskHandle_t*  )&LED1Task_Handler);         
    vTaskDelete(StartTask_Handler); //é?3y?aê?è???
    taskEXIT_CRITICAL();            //í?3?áù????
}

//LED0è???oˉêy 
void led0_task(void *pvParameters)
{
    while(1)
    {
        LED0=~LED0;
        vTaskDelay(500);
    }
}   

//LED1è???oˉêy
void led1_task(void *pvParameters)
{
    while(1)
    {
        LED1=0;
        vTaskDelay(200);
        LED1=1;
        vTaskDelay(800);
    }
}
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-26 12:16:06  更:2021-08-26 12:16:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:35:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码