单片机不使用操作系统时的编程方法称为“裸机编程模式”,此时整个程序项目包括一个“后台任务”和由若干个中断服务程序组成的“前台任务”,这种编程模式也称为“前后台多任务实时操作系统”,只是前台多任务的调度管理是由单片机硬件中断机制来实现。
在使用uCx51-RTOS编程时,如果不定义任何实时任务,则系统自动进入“80x51编程模式”,这个编程模式类似裸机编程模式,不过这时单片机上的所有中断任务都被纳入操作系统管理了。
(1)STC8 uCx51-RTOS 简介
STC8 uCx51-RTOS是为STC8xxxxx系列单片机研发的微型8051架构计算机(Micro 8051 Architecture Computer)实时多任务操作系统,它使用Keil的C51编译器,以STC8H8K64U单片机为标准硬件核心单元,以LED发光二极管为最小外部设备,以此建立起整个操作系统的核心部分。
目前STC推出的“打狗棒-STC8H转STC89”开发板模块就是一个STC8 uCx51-RTOS的最佳学习和最小开发硬件平台,各种传统的51开发板上只需将原来的STC89C52RC单片机替换为打狗棒模块就可以升级为STC8 uCx51-RTOS的实验平台了。
uCx51-RTOS不仅仅是一个实时多任务管理系统,提供实时任务的调度管理功能,它更是一个类似历史上PC机上运行的DOS系统,通过用软件建立核心态和任务态的计算机任务管理方法,代替C51编译器全面接管了全部64个中断资源,使得整个系统的运行更可靠,用户扩展自己的驱动程序更安全、更方便。
uCx51-RTOS内核部分包含一组对传统8051的片上设备通用I/O端口、定时器和串口1进行设置管理的驱动程序。
对其他的片上设备比如ADC和PWM等以外加的可选择的“系统驱动程序”的方式提供管理接口,对于像数码管和矩阵按键等模块级设备以外加的可选择的“模块驱动程序”的方式提供管理接口,对于像STC实验箱这样的完整的设备则可以以外加的可选择的“设备驱动程序”的方式提供管理接口。
(2)80x51编程模式的设置方法
最早的8051单片机只包括了4个8位的通用I/O端口P0~P3、2个定时器和1个串口,现在的STC8系列单片机已经将其扩展到8个通用I/O端口P0~P7、5个定时器和4个串口,uCx51-RTOS内核部分包含了对这些通用I/O端口、定时器和串口1进行设置管理的驱动程序。
本文介绍uCx51-RTOS的“80x51编程模式”的编程方法,下图是主函数“main”中的设置程序:
图中第33行到第47行为uCx51-RTOS的系统设置。
uCx51-RTOS系统的缺省主频为33.1776MHz,使用定时器4中断作为系统中断,中断频率为1KHz,也就是基本任务调度的节拍为1毫秒。
uCx51-RTOS系统使用串口1作为控制台输入输出命令行设备,使用定时器2作为波特率发生器,缺省波特率为115200。
作为实时多任务系统控制台命令行输入的串口1工作在中断模式,采用一个64字节的内部缓冲区先行接收上位机的命令行字符串。
第43行程序的系统设置函数除了进行上面的硬件设置,还将8个通用I/O端口P0~P7预设为“准双向口”这个8051的端口模式,然后用户再根据硬件系统的配置进行二次配置。
本范例的第49行到第60行对剩余的3个定时器进行设置,由于系统主频已经设定了,所以每个设置函数只用一个中断频率作为参数就可以进行设置。
在硬件设置完成后,第64行启动RTOS开始运行。
系统开始运行时首先访问“用户主任务函数”,并且不会再返回了,具体内容的将在后面介绍。
(3)系统中断服务程序
下图是uCx51-RTOS的系统中断服务程序:
从中可以看到uCx51-RTOS的系统中断服务程序“uCx51_Syetem_ISR()”和命令行中断服务程序“uCx51_CMDL_UART1_ISR()”采用外挂到用户中断的方法。
首先采用将命令行中断服务程序外挂到UART1中断的方法,可以方便用户在调用它的前后添加自己的拦截程序,拦截处理自己特殊的字符串或者协议进行处理。
其次系统中断服务程序与具体采用哪个定时器中断无关,采用外挂的方式,可以方便用户根据情况进行选择。
比如某些型号的STC8单片机只有3个定时器,就可以将其挂到定时器1的中断下面。
(4)用户中断服务程序
下图是用户中断服务程序部分:
这3个作为演示的用户中断服务程序都是软件分频器结构,将高频率的中断分频到肉眼可见的低频,驱动LED产生闪烁的效果。
值得注意的是在uCx51-RTOS系统中,所有的64个中断都被系统接管了。
每个硬件中断发生时,首先进入系统的“核心态”,除了保存当前任务的现场,还进行了中断登记等系统操作,然后再回访对应用户中断函数,然后再返回系统进行中断撤销等操作。
所以在uCx51-RTOS系统中,每个中断只使用指定的中断函数名,不需要再加“interrupt”关键字了。
(5)定时前台多任务程序
为整个单片机运行提供一个统一的节拍是RTOS操作系统的必备功能。
uCx51-RTOS将1KHz的系统中断统一分频后为用户提供了1KHz、500Hz、40Hz和4Hz四个定时任务回访函数,用户可以用来进行各种定时操作,控制单片机系统的协调运行。
下图为本范例定时任务的部分:
同前面的定时器中断一样,这里也采用软件分频将每个定时任务以LED闪烁的方式展示出来。
下面是LED灯闪烁的效果。
视频加载中...
(6)用户主任务函数
在uCx51-RTOS程序中,用户主任务函数“uCx51_Task_Main_Func”在“80x51编程模式”相当于普通单片机的“裸机编程模式”中的后台任务“main”函数,在“实时多任务编程模式”中相当于普通RTOS中的“空闲任务”。
下图为本范例的用户主任务函数部分程序:
当用户主任务函数开始执行的时候,由于中断是关闭的,所以任务调度管理功能程序不会开始执行,只有当打开中断后实时任务才能被调度执行。
由于空闲任务的优先级最低,所以对于有实时任务的情况,在第41行打开中断后,用户主任务函数该行后面的程序不一定会立即得到执行,要等所有实时任务都空闲时才会被执行,而且执行可能随时被打断,不能连续执行。
用户主任务函数像后台任务一样有一个无限循环,用户程序不能也不应该退出函数。
本范例的无限循环包括两个部分程序,第一个部分向串口1输出当前系统的时间,第二个部分让LED7闪烁1秒钟。
串口1输出的效果见下面视频:
视频加载中...
(7)结论
uCx51-RTOS的“80x51编程模式”是 介于“裸机编程模式”与“实时多任务编程模式”之间的一种中间编程模式。
由于这种编程模式中没有实时任务堆栈,对系统XRAM的容量要求小,同时又可以使用系统时间和定时任务等操作系统功能,方便用户编写出高质量的前后台实时多任务程序。
STC8 uCx51-RTOS 实时多任务操作系统的80x51编程模式
下一篇:返回列表