找回密码
 立即注册
查看: 686|回复: 1

STC32G FreeRTOS入门(9):搭建完整操作系统功能

[复制链接]

该用户从未签到

63

主题

703

回帖

1万

积分

荣誉版主

积分
10898
发表于 2023-8-7 01:13:42 | 显示全部楼层 |阅读模式
1)通常将RTOS读作“实时多任务操作系统”,这个名称包括了两个部分“实时多任务”和“操作系统”。FreeRTOS提供了对实时多任务的通用的调度管理功能,但对于具体到单片机应用的操作系统的功能提供的较少,如果要将单独的FreeRTOS应用到具体单片机的项目中,还需要用户自己编写一系列的程序。
2)操作系统(OS)走入百姓家从多年前的PC计算机的DOS开始,当今的STC32G/FSTC8H系列单片机内核性能指标已经达到或超过当年运行DOSPC机的水平了:
Fig_X01.jpg
同时STC32G/FSTC8H系列单片机包括了丰富的片上资源,数量和性能远超当年PC主板,而体积和功耗却小了几个量级。
因此是时候为STC32G/FSTC8H系列单片机配一个简单而完备的OS——操作系统了。
3)泰山x51 前后台实时多任务操作系统(TSx51-RTOS)是一款专门为STC系列单片机设计的基础操作系统,为各种RTOS的运行提供系统节拍、系统时间、临界区保护、适合多任务的串口命令行输入输出、8位数码管实时显示以及单片机初始化等操作系统功能。
TSx51-RTOS使用定时器4作为系统中断,提供1KHz的系统节拍,使用串口1作为命令行输入输出端口,使用定时器2作为波特率发生器,波特率为115200,单片机烧录主频使用24MHz
4)本文介绍在STC32G实验箱上运行的FreeRTOS + TSx51-RTOS的一个演示范例,由FreeRTOS提供实时任务管理功能,由TSx51-RTOS提供基本操作系统功能,组成了一个完整的实时多任务操作系统。

系统运行的效果见下视频:

1)从视频中可以看到数码管在显示当前的系统时间。TSx51-RTOS的系统时间中的小时不是24小时制,到24小时不清零,这是考虑那些长时间运行时的连续性专门设计的(比如按曲线设定温度烘干烟叶要连续几天)。
2)从串口助手的接收框可以看到实时任务1的循环计数输出和实时任务2的当前时间输出。
3)如果手动发送框向串口发送字符串,可以从接收框看到实时任务0给出的响应效果。
4)视频的最后是利用串口助手的“自动发送”功能,以10毫秒的周期自动发送字符串后,实时任务0的响应结果,可以观察到任务0的对于每秒100次命令的输入的响应效果。

5TSx51-RTOS的组成与用户程序。下图是本范例的项目组成图:
Fig_X02_项目.jpg
其中“TSx51_SYS_Core_24M_STC32G.OBJ”和“TSx51_SYS_Core.h”是TSx51-RTOS的系统核心程序,以“OBJ”模块文件的形式构成。使用OBJ模块的目的是为了避免用户编程时产生无意的改变(比如使用批量替换的程序编辑功能),造成程序运行时系统崩溃或者产生危险。TSx51-RTOS的原理和程序代码将另文介绍。
项目中“TSx51_DRV_V94_STC32G.c”和“TSx51_DRV_V94.h”是STC32G实验箱的8位数码管和LED(它们共用P6端口硬件连在一起了)的驱动程序,提供各种笔画、数值和时间的显示功能。
项目中“main.c”、“TTasks.c”和“uCx51_4Tasks.c”分别为用户的系统主程序、定时前台任务程序和实时多任务程序文件。

6)系统初始化程序。在FreeRTOS的“xTaskCreate”函数建立任务和“vTaskStartScheduler”函数启动任务前,TSx51-RTOS做了下面的单片机和操作系统初始化操作:
Fig_X03_初始化.jpg
其中每个初始化步骤都有注释,这里就不一一介绍了。

7TSx51-RTOS定时任务。TSx51-RTOS在定时器4的中断里面,用分频的方法访问4个回调函数,用户只要在这4个回调中编写自己程序,系统就会自动地执行这个4个定时任务。本范例的定时任务程序如下图所示:
Fig_X04_定时任务.jpg
11KHz定时任务,这里是空任务。设计这个任务的目的是让用户在这里实现自己的软件定时器功能,比如毫秒表,比如毫秒精度的倒计时器,实现精确的硬件延时。在多任务情况下,一个任务软件延时的时间长短不但依赖延时函数本身的循环次数,还依赖于RTOS分配给这个延时函数的CPU执行空循环的时间,所以在多任务环境中,软件延时函数不一定延时准确。而硬件延时就不一样了,由于硬件中断的优先级高于各个实时任务的优先级,所以其倒计时时间与哪个任务在执行无关了。
对于FreeRTOS的“休眠状态”时间是由系统硬件中断控制的,任务的休眠时间是准确的且与各个任务的谁在运行无关,只是唤醒后能不能立即得到响应,就要看其任务优先级和任务调度是否将控制权交给它了。
2500Hz定时任务是专门为数码管等实时显示设备刷新用。本范例中它调用STC32G实验箱的数码管驱动程序的中断刷新函数来实现数码管的动态刷新,每次刷新一位数码管的显示。
340Hz定时任务是设计为进行按键,开关等手动输入采样用的。比如使用40Hz定时任务的按键扫描程序,在多任务程序可以很容易的实现防抖动处理和长按短按识别,不像某些程序用软件延时的方法会阻塞整个程序的运行。
44Hz定时任务把一秒钟分为4拍。对于那些需要在整小时、整分钟和整秒钟对齐的操作,可以提前几个节拍做准备工作,实现设备同步运行。
本范例中利用STC32G实验箱上的两个LED实现每秒钟闪烁一次的生命灯。同时第54行程序实现每秒钟刷新4次的数码管时间显示,从视频中可以看到小数点的交替和秒数字进位等显示都很流畅。
8)串口输出。TSx51-RTOS内含了串口1的命令行输入输出中断驱动程序。其中串口输出函数是采用了函数可重入的无阻塞抢夺型输出方法,优先级高的任务可以剥夺正在使用串口输出的低优先级任务的控制权,优先输出自己的字符串。等低优先级任务获得任务执行权时,在从被抢夺点的下一个字符继续输出自己的字符串。采用抢夺型输出策略,就是不采用传统的优先级反转这类复杂的多任务串口输出控制方法,也不会产生阻塞。

下图是实时任务1和实时任务2进行串口信息输出的程序:
Fig_X05_串口输出时间.jpg
其中实时任务23秒在第145行输出当前的系统时间。第142行的将系统时间转换为字符串的转换函数“TSx51_SYS_Time_to_String”为TSx51-RTOS专门的系统函数。
图中实时任务11800毫秒在第124行输出任务的循环计数。减小1800毫秒这个休眠时间,将可以看到优先级高的实时任务1如何抢夺实时任务2的输出的。

9)命令行输入与处理流程。本范例实时任务0演示了最基本的无阻塞地从串口输入一个字符串,并将其再次输出到串口上供用户检查。实现这个功能的程序如下图:
Fig_X06_命令行.jpg
TSx51-RTOS的命令行字符串接收由UART1的中断服务程序处理,接收到的字符依次存在系统内部接收缓冲区中,内部接收缓冲区的长度为63个字节。当接收到回车(0x0D)、换行(0x0A)和C语言字符串结束符(0x00)之中任何一个字符,就回调用第101行的钩子函数“TSx51_SYS_UART1_RX_NewLine_Hook”。由于钩子函数的执行是在UART1中断服务程序中,因此命令行字符串的处理不适合放在钩子函数中。本范例收到字符串后,只是在钩子函数中设置收到命令行的信号量“RX_Flag”,由实时任务0处理。
10)命令行处理程序流程。实时任务0的开始设置部分第67行清除接收标志信号量“RX_Flag”,第69行让UART1中断服务程序开始接收新字符串。
1)在任务主循环部分,首先第74行检查是否收到命令行字符串,如果没有检测到输入字符串,则在第95行放弃任务的CPU控制权(任务0的优先级最高,如果不利用休眠函数放弃控制权,则任务1和任务2就没有执行的机会了),休眠10毫秒后,再跳转到主循环开始进行新一轮的检查。休眠时间这里为10毫秒,如果长了,任务0对命令行的响应慢,如果太短,则导致与各个任务切换太频繁,影响任务1和任务2的执行效率。因此具体取多少要根据具体项目来平衡。
2)如果收到,第77行程序将输入的字符串从系统缓冲区复制到用户自己的任务缓冲区进行处理,原始字符串仍然留着系统缓冲区中供多次处理用。
这里,第80行和第81行简单地接收到字符串回送输出到串口去。第84行程序输出一个命令行提示符,第87行清除信号量标志,第89行让UART1中断服务程序再次开始接收新字符串,开始新的一轮接收流程。
11)总结:将FreeRTOS实时多任务操作系统与TSx51-RTOS前后台实时多任务系统结合起来,就可以实现一个完整的人机交互的操作系统,实现任务调度、系统运行节拍控制、信息的实时显示与控制台输出以及控制台命令输入与处理等各种操作系统功能。

并且将控制台任务的优先级设置为最高,操作者可以通过上位机的串口输出命令接管单片机的CPU运行权,进行命令处理,操作整个单片机系统运行,就可以构建成一个名副其实的“操作系统”。
下面是本文范例的程序:
FreeRTOS_009_操作系统功能.rar (935.54 KB, 下载次数: 82)
回复 送花

使用道具 举报

  • TA的每日心情
    开心
    前天 21:19
  • 签到天数: 52 天

    [LV.5]常住居民I

    15

    主题

    222

    回帖

    1185

    积分

    金牌会员

    积分
    1185
    发表于 2023-8-7 20:24:22 | 显示全部楼层
    真的是入门级的讲解,很容易理解,持续学习中!
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-14 10:22 , Processed in 0.081464 second(s), 35 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表