以本人开发的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;

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

被折叠的 条评论
为什么被折叠?



