FreeRTOS第1天:freertos介绍及移植、任务的创建与删除、队列

1. 课程视频(375.1)

  • 此教程不会讲过多理论,以动手实操为主,解决大伙学了半天 FreeRTOS 操作系统不知道干什么的问题。

为什么要学 FreeRTOS ?

  • 更有钱途!!
    • 只会祼机开发的单片机工程师,薪资注定不会高于会 FreeRTOS 的工程师;
    • 有了 FreeRTOS 基础,对于将来学习 Linux 操作系统会更加有帮助;

如何学好 FreeRTOS ?

  • 无它,多写代码,多做项目!
  • 一定要把本课程里所有项目全部自己动手做一遍,加深理解。光看不练假把式!!

学习本课程前置要求

  • C 语言熟练;
  • 上官二号课程一定要好好学一遍,本课程依然基于上官二号。
    在这里插入图片描述

2. FreeRTOS介绍(376.2)

什么是 FreeRTOS ?

  • Free 即免费的,RTOS 的全称是 Real time operating system,中文就是实时操作系统。
  • 注意:RTOS 不是指某一个确定的系统,而是指一类操作系统。比如:uc/OS,FreeRTOS,RTX,RT-Thread 等这些都是 RTOS 类操作系统。

FreeRTOS 是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满
足较小系统的需要。 由于 RTOS 需占用一定的系统资源(尤其是 RAM 资源),只有 μC/OS-II、
embOS、salvo、FreeRTOS 等少数实时操作系统能在小 RAM 单片机上运行。相对 μC/OS-II、embOS 等商业操作系统,FreeRTOS 操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行,其最新版本为 10.4.4 版。

为什么选择 FreeRTOS ?

  • FreeRTOS 是免费的;
  • 很多半导体厂商产品的 SDK(Software Development Kit)软件开发工具包,就使用 FreeRTOS 作为其操作系统,尤其是 WIFI、蓝牙这些带有协议栈的芯片或模块。
  • 简单,因为 FreeRTOS 的文件数量很少。

FreeRTOS 资料与源码下载

祼机开发与 FreeRTOS

  • 众所周知,游戏与女朋友不可兼得!
  • 祼机开发:
    • 玩游戏,结果女朋友生气,分手!
    • 陪女朋友,无法玩游戏,抑郁症!
  • FreeRTOS:
    • 玩1秒游戏 – 陪1秒女朋友 – 玩1秒游戏 – 陪1秒女朋友 – 玩1秒游戏 – 陪1秒女朋友 …(累死……)
    • 但 CPU 是个无情的战斗机器,可以快速在两个乃至多个任务间快速切换,并且不觉得劳累,实现二者兼顾。
  • FreeRTOS 实现多任务的原理
    • 严格来说 FreeRTOS 并不是实时操作系统,因为它是分时复用的。
    • 系统将时间分割成很多时间片,然后轮流执行各个任务。
    • 每个任务都是独立运行的,互不影响,由于切换的频率很快,就感觉像是同时运行的一样。
      在这里插入图片描述

3. 移植FreeRTOS到上官一号平台(377.3)

手动移植

使用CubeMX快速移植

快速移植流程

  1. 在 SYS 选项里,将 Debug 设为 Serial Wire ,并且将 Timebase Source 设为 TIM2 (其它定时器也行)。为何要如此配置?下文解说。
    在这里插入图片描述
  2. 将 RCC 里的 HSE 设置为 Crystal/Ceramic Resonator 。
    在这里插入图片描述
  3. 时钟按下图配置
    在这里插入图片描述
  4. 选择 FREERTOS 选项,并将 Interface 改为 CMSIS_V1 。V1 和 V2 有啥区别?下文解释。
    在这里插入图片描述
  5. 配置项目信息,并导出代码。
    在这里插入图片描述
    在这里插入图片描述

一些常见问题

  1. Timebase Source 为什么不能设置为 SysTick ?
  • 裸机的时钟源默认是 SysTick,但是开启 FreeRTOS 后,FreeRTOS 会占用 SysTick (用来生成 1ms 定时,用于任务调度),所以需要需要为其他总线提供另外的时钟源。
  1. FreeRTOS 版本问题
  • V2 的内核版本更高,功能更多,在大多数情况下 V1 版本的内核完全够用。
  1. FreeRTOS 各配置选项卡的解释
  • Events:事件相关的创建
  • Task and Queues: 任务与队列的创建
  • Timers and Semaphores: 定时器和信号量的创建
  • Mutexes: 互斥量的创建
  • FreeRTOS Heap Usage: 用于查看堆使用情况
  • config parameters: 内核参数设置,用户根据自己的实际应用来裁剪定制 FreeRTOS 内核
  • Include parameters: FreeRTOS 部分函数的使能
  • User Constants: 相关宏的定义,可以自建一些常量在工程中使用
  • Advanced settings:高级设置
  1. 内核配置、函数使能的一些翻译

4. (补充)模板工程打开串口(378.3)

  • 打开串口1
    在这里插入图片描述
  • 打开 “Use MicroLIB”
    在这里插入图片描述
  • 添加代码(1.muban)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

5. 任务的创建与删除(理论)(379.4)

1. 什么是任务?

  • 任务可以理解为进程/线程,创建一个任务,就会在内存开辟一个空间。
  • 比如:
    • 玩游戏、陪女朋友,都可以视为任务
    • Windows 系统中的 MarkText 、谷歌浏览器、记事本,都是任务。
  • 任务通常都含有 while(1) 死循环。

2. 任务创建与删除相关函数

  • 任务创建与删除相关函数有如下三个:
    在这里插入图片描述
  • 任务动态创建与静态创建的区别:
    • 动态创建任务的堆栈由系统分配,而静态创建任务的堆栈由用户自己传递。
    • 通常情况下使用动态方式创建任务。
  • xTaskCreate 函数原型
    在这里插入图片描述
  1. pvTaskCode:指向任务函数的指针,任务必须实现为永不返回(即连续循环);
  2. pcName:任务的名字,主要是用来调试,默认情况下最大长度是16;
  3. pvParameters:指定的任务栈的大小;
  4. uxPriority:任务优先级,数值越大,优先级越大;
  5. pxCreatedTask:用于返回已创建任务的句柄可以被引用。
    在这里插入图片描述
  • 官方案例:
/* Task to be created. */
void vTaskCode( void * pvParameters )
{
   
	/* The parameter value is expected to be 1 as 1 is passed in the
	pvParameters value in the call to xTaskCreate() below.
	configASSERT( ( ( uint32_t ) pvParameters ) == 1 );
	for( ;; )
	{
		/* Task code goes here. */
	}
}
/* Function that creates a task. */
void vOtherFunction( void )
  • 10
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值