干货

FreeRTOS学习笔记 (6)实验:串口后台打印

分类名:经验日期:2018-09-26作者:cruelfox
分享到
微博
QQ
微信
LinkedIn

  现在来探讨一下如何利用 FreeRTOS 的服务来为单片机程序设计提供方便,也感受下引入 FreeRTOS 后系统处理效率的变化。我想了个简单的常用需求:串口的“后台”打印输出(单片机开发时常用于调试信息输出),来进行实验。

  串口(异步串行通讯口的简称, UART)相对于 CPU 是一个低速的设备,一般较高通信速率为 115200bit/s,在此速率下输出一个8-bit字符(假设用1个起始位,1个停止位,无校验)用的时间为87us. CPU将字符写入串口的发送数据寄存器需要的时间可以忽略,但是由于串口硬件FIFO很小,务必要等待发送数据寄存器允许写入时才可以进行写操作。于是,简单的程序设计中就不断查询标志位,等待寄存器可以写了就写一个字符,直到要发送的字符串写完。
  要照顾执行效率的时候一定不能这么做,特别是在多任务环境下,因为这种循环重复查询标志位的做法让其它任务也只能等待,没有利用CPU处理能力。于是我们需要一种“后台”输出的方法,让当前任务将要从串口输出的字符串提交到系统之后,程序往下执行,不用等待字符串从串口发送完;或者是当前任务等待字符串发送完,但是其它任务可以执行。

  以下我的实验代码在 ST Nucleo-L4R5ZI 板子上运行,也很容易改动一下以在其它 STM32 上运行