通过51单片机定时中断实现的非抢占式实时多任务

本文介绍如何利用51单片机的定时中断实现非抢占式实时多任务操作系统(NerveOS),涵盖定时器配置、任务调度、队列管理、任务创建等核心模块。

以本人开发的NerveOS为例,介绍通过51单片机定时中断实现的非抢占式实时多任务操作系统。

注意:本次只写非抢占式实时多任务操作系统的核心,并非完整的系统。

多任务大概运行流程,如下图:

/******************开发环境***************/

[IDE]:Keil μVisio5                                                                        

[主控芯片]:STC8A8K64S4A12@22.1184MHz

/******************声明定义***************/

数据类型定义:

typedef unsigned int u16;//无符号整型
typedef unsigned int uint;//无符号整型
typedef signed int s16;//有符号整型
typedef unsigned char u8;//无符号字符型
typedef unsigned char uchar;//无符号字符型
typedef signed char s8;//有符号字符型
typedef bit u2;//位型
typedef unsigned long int u32;//无符号长整型
typedef signed long int s32;//有符号长整型

第一步:启动单片机内设定时器

源码:

/********************************
函数名称:timer0Init
函数功能:定时器0初始化
输入参数:
输入:
输出参数:
输出:
********************************/
void timer0Init()//任务调度使用
{
	TMOD |= 0x01;//定时器0工作方式2,TH0是重装值,TL0是初值
	TH0 = T0VH;//初值(高8位)
    TL0 = T0VL;//初值(低8位)
	ET0 = 1;//开启定时器0中断
	EA = 1;//开启总中断
	TR0 = 1;//开启定时器0
}

第二步:完善定时器0中断响应程序

在写这部分代码,我们先明白两个概念:

1.任务队列

 2.任务系统

源码:

/******************声明定义***************/
#define TaskQueueMax 32//任务队列长度
#define IAIMax 32//条件任务信息最大数量
#define TAIMax 32//定时任务信息最大量
#define TaskSwitchMax 32//任务调度等待时间
u8 xdata AQSP = 0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值