百问网FreeRTOS复习笔记第15到21讲

/*

源代码以及其他一切形式的知识转述均出自百问网课程,仅供参考,请勿用作商业用途。

  【FreeRTOS入门与工程实践 --由浅入深带你学习FreeRTOS(FreeRTOS教程 基于STM32,以实际项目为导向)】 https://www.bilibili.com/video/BV1Jw411i7Fz/?p=8&share_source=copy_web&vd_source=bab35cd72a6b7a3ffd3c77e664d802f1 

*/

第15讲     内存管理

内存管理即是如何使用FreeRTOS中的堆。对于堆中的内存,CubeMX做出如下图管理,首先内存分配既可以是静态的也可以是动态的,其次堆的总容量大约为3072字节,最后使用的内存调度算法是heap_4 。

不同内存调度算法对比:

一般使用heap_4,有多块内存使用heap_5。有关heap的函数,大家可以参考韦老师编撰的手册。

第16讲 创建任务_声光色影

这一讲的目的是分别用静态、动态的方式创建多个任务。

一个任务至少需要三个要素:函数、栈空间和任务优先级。当它被挂起之后我们又应该如何寻找它呢?FreeRTOS对于被被挂起的任务提供了查询链表,找到头节点之后就可以顺藤摸瓜,这个链表中存放着任务结构体(TCB:TaskControlBlock)。

主要学习任务就是学会使用这两个API,xTaskCreate与xTaskCreateStatic的用法。我按照老师思路编程并且改掉了所有的error和warning,不然后面越积越多。贴一下代码:

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * File Name          : freertos.c
  * Description        : Code for freertos applications
  ******************************************************************************
  * @attention
  *
  * Copyright (c) 2024 STMicroelectronics.
  * All rights reserved.
  *
  * This software is licensed under terms that can be found in the LICENSE file
  * in the root directory of this software component.
  * If no LICENSE file comes with this software, it is provided AS-IS.
  *
  ******************************************************************************
  */
/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/
#include "FreeRTOS.h"
#include "task.h"
#include "main.h"
#include "cmsis_os.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "Music.h"
#include "driver_led.h"
#include "driver_lcd.h"
#include "driver_mpu6050.h"
#include "driver_timer.h"
#include "driver_ds18b20.h"
#include "driver_dht11.h"
#include "driver_active_buzzer.h"
#include "driver_passive_buzzer.h"
#include "driver_color_led.h"
#include "driver_ir_receiver.h"
#include "driver_ir_sender.h"
#include "driver_light_sensor.h"
#include "driver_ir_obstacle.h"
#include "driver_ultrasonic_sr04.h"
#include "driver_spiflash_w25q64.h"
#include "driver_rotary_encoder.h"
#include "driver_motor.h"
#include "driver_key.h"
#include "driver_uart.h"
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN Variables */
StackType_t g_pucStackofLightTask[128];
StaticTask_t g_TCBofLightTask;

StackType_t g_pucStackofColourTask[128];
StaticTask_t g_TCBofColourTask;
/* USER CODE END Variables */
/* Definitions for defaultTask */
osThreadId_t defaultTaskHandle;
const osThreadAttr_t defaultTask_attributes = {
  .name = "defaultTask",
  .stack_size = 128 * 4,
  .priority = (osPriority_t) osPriorityNormal,
};

/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes */

/* USER CODE END FunctionPrototypes */

void StartDefaultTask(void 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值