freertos学习笔记——环境搭建(代码片段)

haoaoooooo haoaoooooo     2022-11-18     157

关键词:

前言

在日常中,我平常都是直接裸机开发,去完成一些小玩意。直到最近,功能需求的不断增加,导致裸机开发的缺点就暴露出来了,中断内的处理变得复杂,处理时间变长,超级循环使得应用程序变得非常复杂,因此难以扩展、中断嵌套由于运行时长增加的原因,导致发生不可预估的问题等等…

为了解决以上痛点,我想到了FreeRTOS(一个开源的嵌入式实时操作系统),刚好ST官方的STM32CubeMX里面直接有FreeRTOS的中间件,使用非常方便。下来就来看看怎么搭建环境叭~

推荐去FreeRTOS官网学习相关API =>传送门.

CubeMx配置

MCU: STM32F103C8T6
CubeMX: STM32CubeMX 5.3.0

1.使能外部高速时钟源

2.时钟树配置(直接最大频率)

3.开启串口(用于调试)

4.开启今天的主角FreeRTOS

然后在Tasks and Queues选项中再添加一个Tasks,默认有一个,添加之后就是有两个了。Queues是消息队列,在FreeRTOS中是非常重要的功能,现在暂时用不到,后面再详谈。

5.填写项目名

配置项目生成单独的.c/.h文件

接着生成代码就ok了~ (点击后会出现警告,直接点yes即可)

修改工程文件

1.在usart.c文件下添加以下代码

/* USER CODE BEGIN 1 */
void Usart_SendString(uint8_t *str)

	unsigned int k=0;
  do 
  
      HAL_UART_Transmit(&huart1,(uint8_t *)(str + k) ,1,1000);
      k++;
   while(*(str + k)!='\\0');
  

//重定向c库函数printf到串口DEBUG_USART,重定向后可使用printf函数
int fputc(int ch, FILE *f)

	/* 发送一个字节数据到串口DEBUG_USART */
	HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000);	
	
	return (ch);


//重定向c库函数scanf到串口DEBUG_USART,重写向后可使用scanf、getchar等函数
int fgetc(FILE *f)
		
	int ch;
	HAL_UART_Receive(&huart1, (uint8_t *)&ch, 1, 1000);	
	return (ch);

/* USER CODE END 1 */

然后记得加上头文件 include <stdio.h> 不然会有黄色感叹号

2.去到freertos.c编写测试代码

/* USER CODE BEGIN Header_StartDefaultTask */
/**
  * @brief  Function implementing the defaultTask thread.
  * @param  argument: Not used 
  * @retval None
  */
/* USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void const * argument)

  /* USER CODE BEGIN StartDefaultTask */
  /* Infinite loop */
  for(;;)
  
	printf("任务1\\r\\n");
    osDelay(1);
  
  /* USER CODE END StartDefaultTask */


/* USER CODE BEGIN Header_StartTask02 */
/**
* @brief Function implementing the myTask02 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask02 */
void StartTask02(void const * argument)

  /* USER CODE BEGIN StartTask02 */
  /* Infinite loop */
  for(;;)
  
	printf("任务2\\r\\n");
    osDelay(1);
  
  /* USER CODE END StartTask02 */


编写完毕后,就可以烧写到板子上,然后用ttl转串口模块就可以看到效果了。

总结

根据上图很容易得知,在FreeRTOS下,同等优先级级别的Task,他们的执行顺序是从头开始,一直循环。

FreeRTOS最基本的环境到这里已经搭建完成了,关于FreeRTOS的内容还有很多,后续会补充~

以上内容记录下来,希望能帮助到有需要的伙伴。
该文章如有不对地地方,欢迎指出。

freertos学习笔记——环境搭建(代码片段)

...不可预估的问题等等…为了解决以上痛点,我想到了FreeRTOS(一个开源的嵌入式实时操作系统),刚好ST官方的STM32CubeMX里面直接有FreeRTOS的中间件,使用非常方便。下来就来看看怎么搭建环境叭~推荐去FreeRTOS官网学习相... 查看详情

stm32f103x/freertos系统学习笔记之环境搭建-cxm(代码片段)

...于while大循环里,能做的功能十分有限,至于为什么要选择FreeRTOS系统是因为这个系统目前比较成熟且使用的人很多,资源也比较多这一篇主要会记录我是如何搭建环境FreeRTOS系统是嵌入式的操作系统,它的特点在于它的实时性,其任务... 查看详情

freertos学习笔记——消息队列(代码片段)

前言学习完如何在STM32F1搭建FreeRTOS环境后,接下来学习FreeRTOS的消息队列。如果还不会搭建FreeRTOS环境的小伙伴可以先看我之前的文章->传送门.FreeRTOS消息队列先来了解什么是消息队列,通常情况下,队列被作为FIFO(... 查看详情

李沐《动手学深度学习》第二版pytorch笔记1环境搭建(代码片段)

李沐《动手学深度学习》第二版pytorch笔记1搭建环境文章目录李沐《动手学深度学习》第二版pytorch笔记1搭建环境此时尚有耐心虚拟环境搭建创建虚拟环境查看已有的虚拟环境激活虚拟环境安装深度学习框架和d2l软件包安装d2l安... 查看详情

freertos学习笔记1—freertos移植(代码片段)

1. 新建完整的可以点亮LED灯的工程2.添加FreeRTOS源码2.1.将FreeRTOS的源码拷贝到新建工程的FreeRTOS的文件加下 2.2.Protable文件下只保留Keil、MemMang、RVDS三个文件夹,其余的全部删除2.3.在keil工程新建FreeRTOS_CORE、FreeRTOS_PORTABLE两个... 查看详情

freertos学习笔记1—freertos移植(代码片段)

1. 新建完整的可以点亮LED灯的工程2.添加FreeRTOS源码2.1.将FreeRTOS的源码拷贝到新建工程的FreeRTOS的文件加下 2.2.Protable文件下只保留Keil、MemMang、RVDS三个文件夹,其余的全部删除2.3.在keil工程新建FreeRTOS_CORE、FreeRTOS_PORTABLE两个... 查看详情

esp8266学习笔记——搭建环境编译烧写(nonossdk)(代码片段)

RTOSSDK环境搭建参看 ESP8266学习笔记(17)——搭建环境、编译烧写(RTOSSDK)一、搭建环境1.1ESP8266SDK入门指南官网下载:https://www.espressif.com/zh-hans/support/download/overview?keys=%E5%85%A5%E9%97%A8% 查看详情

hadoop学习笔记二集群环境搭建(代码片段)

零、准备工作    准备三台Linux服务器。本文是在自己的台式机上安装了虚拟机工具(vmware和virtualbox都行),装3台CentOS7虚拟机。    集群规划:hadoop001192.168.164.10hadoop002192.168.164.20hadoop003192.168.164.30HDFS集群NameNo... 查看详情

立创eda学习笔记——搭建环境创建工程(代码片段)

一、搭建环境1.1Web端标准版:https://lceda.cn/editor专业版:https://pro.lceda.cn/editor1.2PC端立创EDA桌面客户端:https://lceda.cn/page/download二、工程管理方法一:#mermaid-svg-Y9eaYSOiCvcKPO3h.labelfont-fam 查看详情

spark开发环境搭建——spark开发学习笔记(代码片段)

...的自学,在此整理出自学笔记,主要是巩固一下学习的内容,如果本文内容能对各位读者有所启发,我将十分高兴。另外由于个人水平有限,所写内容难免有疏漏之处,欢迎各位批评指出。Spark开发环境搭... 查看详情

mybatis学习笔记-05(代码片段)

mybatis学习笔记-051、复杂环境搭建步骤2、多对一处理2.1、实体类2.2、按照查询嵌套处理2.3、按照结果嵌套处理3、一对多处理3.1、实体类3.2、按结果嵌套查询3.3、按查询嵌套处理4、区别这一篇来写一些相对复杂的SQL语句。1、复杂... 查看详情

mybatis学习笔记-05(代码片段)

mybatis学习笔记-051、复杂环境搭建步骤2、多对一处理2.1、实体类2.2、按照查询嵌套处理2.3、按照结果嵌套处理3、一对多处理3.1、实体类3.2、按结果嵌套查询3.3、按查询嵌套处理4、区别这一篇来写一些相对复杂的SQL语句。1、复杂... 查看详情

freertos学习笔记——二值信号量(代码片段)

前言上一个笔记学习完了FreeRTOS的消息队列,以及如何创建与使用,在本篇文章中,继续基于上一个工程来学习FreeRTOS的信号量,其中二值信号量是尤其重要的一点,比较常用,所以本篇会着重介绍二值信... 查看详情

freertosfreertos学习笔记—学习freertos的编程风格和本质(代码片段)

FreeRTOS的编程风格学习一个RTOS,搞懂它的编程的风格很重要,这可以大大提供我们阅读代码的效率。下面我们就以FreeRTOS里面的数据类型、变量名、函数名和宏这几个方面做简单介绍。1、数据类型在FreeRTOS中,使用的... 查看详情

谷粒商城学习笔记--环境搭建&项目结构创建(代码片段)

一、环境虚拟机ip192.168.174.128本地ip192.168.31.14本地和虚拟机要互相ping通二、Docker虚拟化容器技术。Docker基于镜像,可以秒级启动各种容器。每一种容器都是一个完整的运行环境,容器之间互相隔离。安装dockerDocker安装文... 查看详情

esp32学习笔记(50)——搭建环境编译烧写(windows+espressif-ide)(代码片段)

VSCode环境搭建参看ESP32学习笔记(1)——搭建环境、编译烧写(Windows+VSCode)一、搭建环境1.1官方资料ESP-IDF编程指南1.2下载Espressif-IDE安装器官网下载:https://dl.espressif.cn/dl/esp-idf/?idf=4.4百度网盘:h 查看详情

esp32学习笔记(50)——搭建环境编译烧写(windows+espressif-ide)(代码片段)

VSCode环境搭建参看ESP32学习笔记(1)——搭建环境、编译烧写(Windows+VSCode)一、搭建环境1.1官方资料ESP-IDF编程指南1.2下载Espressif-IDE安装器官网下载:https://dl.espressif.cn/dl/esp-idf/?idf=4.4百度网盘:h 查看详情

freertosfreertos学习笔记(13)—freertos创建任务和任务管理(原生api)(代码片段)

一、移植FreeRTOS到STM32使用HAL+STM32F407ZGT6移植FreeRTOS(原生API)二、创建第一个FreeRTOS上面已经基于STM32F407创建好了FreeRTOS的工程模板,这章开始我们将真正进入如何使用FreeRTOS的征程,先从最简单的创建任务开始,点亮一个LED,以慰... 查看详情