多任务 51单片机纯C语言内核V1.03
来源:互联网 发布:软件结构图 工具 编辑:程序博客网 时间:2024/04/30 02:49
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
/*
Task_creat(1),Task_creat(2),Task_creat(3)
[task1][task2][task3][idel]...
...
Task_destroy(2)
[task1][idel][task3][idel]...
...
Task_destroy(1)
[idel][idel][task3][idel]...
...
Task_creat(4)
[task4][idel][task3][idel]...
//----------------------------------------------
TaskOrder[i]<->TaskCounter[i]<->TaskCountValue[i]
*/
#define TASKNUM 10 //任务空间
#define TASKREALNUM 9
#define STACKLENGTH 10
//---------------------------------------
uchar TaskCharge = TASKNUM;
uchar TaskNowRuning = 0;
//函数调用原型
uchar TaskOrder [TASKNUM] = {0}; //任务表
uchar TaskCounter [TASKNUM] = {0};
uchar TaskCountValue [TASKNUM] = {0};
uchar TaskPriority [TASKNUM] = {0};
uchar TaskStack [STACKLENGTH] = {0}; //任务栈
uchar TaskStackHead;
uchar TaskStackEnd;
struct flag
{
uchar TaskFinish :1;
};
struct flag SysBit;
//-----------------调试用---------------------
uint Timerlengh;
uint Timerlenghhigh;
uint Timerlenghlow;
/*
ulong SysCounter;
ulong SysCountShow;
uint SysOnems;
*/
//---------------------------------------
void Core_ini (void);
void Idel (void);
void Task_creat (uchar task_id,uchar task_count,uchar task_pri);
void Task_destory (uchar task_id);
//---------------------------------------
void Idle (void)
{}
void Core_ini (void)
{
TaskLib[0] = &Idle;
TaskLib[1] = &f1;
TaskLib[2] = &f2;
TaskLib[3] = &f3;
TaskLib[4] = &f4;
TaskLib[5] = &f5;
TaskLib[6] = &f6;
TaskLib[7] = &f7;
TaskLib[8] = &f8;
TaskLib[9] = &f9;
TaskOrder [0] = 0; //生成系统任务task0
TaskStackHead = 0;
TaskStackEnd = 0;
SysBit.TaskFinish = 0;
//-----------------------------------------------
Timerlengh = 0;
Timerlenghhigh = 0;
Timerlenghlow = 0xffff;
/*
SysCounter = 0;
SysCountShow = 0;
SysOnems = 0;
*/
}
//-------------------------------------------------
void Task_creat (uchar task_id,uchar task_count,uchar task_pri)
{
uchar i;
uchar taskseat;
i = 1;
taskseat = 0;
while (taskseat == 0)
{
if (TaskOrder[i] == 0)
{
TaskOrder[i] = task_id; //任务生成
TaskPriority [i] = task_pri;
TaskCounter[i] = 0;
TaskCountValue[i] += task_count;
taskseat = 1;
}
else
{
if (i < TASKREALNUM)
{
i++;
}
else
{
taskseat = 1; //无空位
}
}
}
}
void Task_destory (uchar task_id)
{
uchar i;
uchar taskaway;
i = 1;
taskaway = 0;
while (taskaway == 0)
{
if (TaskOrder[i] == task_id)
{
TaskOrder[i] = 0; //任务删除
TaskPriority [i] = 0;
TaskCounter[i] = 0;
TaskCountValue[i] = 0;
taskaway = 1;
}
else
{
if (i < TASKREALNUM)
{
i++;
}
else
{
taskaway = 1; //无空位
}
}
}
}
void WatchDog (void)
{}
#define timeH 0xfc
#define timeL 0x17 //1ms减去入栈误差
void timer0_ini (void)
{
TMOD = 0x01;
TH0 = timeH;
TL0 = timeL;
TR0 = 1;
ET0 = 1;
EA = 1;
}
void timer0 (void) interrupt 1
{
uchar i;
TR0 = 0;
TL0 = timeL;
TH0 = timeH;
TR0 = 1;
//---------------------watchdog更新--------------------
//---------------------计数维护---------------------------
....
//-------------------优先级排序(倒排序)-----------------
....
//------------------------任务出栈------------------------
....
//-------------------------调试用--------------------------
Timerlengh = (TH0 * 256 + TL0) - 0xfc17;
if (Timerlenghhigh < Timerlengh)
{
Timerlenghhigh = Timerlengh;
}
if (Timerlenghlow > Timerlengh)
{
Timerlenghlow = Timerlengh;
}
}
void main (void)
{
SP = 0x70;
Core_ini ();
//----------------------------
Task_creat (1,10,1);
Task_creat (2,10,2);
Task_creat (3,10,3);
Task_creat (4,10,4);
Task_creat (5,10,5);
Task_creat (6,10,6);
Task_creat (7,10,7);
Task_creat (8,10,8);
Task_creat (9,10,9);
// Task_destory (4);
timer0_ini ();
WatchDog ();
//------------------------------------
for ( ; ; )
{
//函数调用原型
SysBit.TaskFinish = 1;
while (SysBit.TaskFinish)
{
// SysCounter++;
}
//------------------------------------
}
}
特点:
1.时间片轮转调度
2.多任务
3.优先级并发控制
4.内核消耗小
5.任务任意载入删除
6.实时性强
如有任何问题请加我qq:549917930
- 多任务 51单片机纯C语言内核V1.03
- 多任务 多进程 51单片机C语言 完整版
- 51单片机 C语言入门教程
- 51单片机 C语言电子琴
- 手把手教你学单片机--51单片机C语言开发
- 手把手教你学单片机--51单片机C语言开发
- 51单片机 C 语言编程:单片机定时中断
- 51单片机C语言学习杂记
- 单片机C语言-51芯片
- 51单片机c语言精确延时
- C语言之51单片机中的数据类型
- 51单片机基础剖析(基于C语言)
- 51单片机C语言延时函数
- 单片机C语言学习
- 单片机C语言下载
- 单片机C语言编程
- 单片机的c语言
- 单片机C语言程序结构
- 2010-02-18
- JDBC数据库学习中遇到的problems(一)
- where dream starts
- 论坛可用分兑换资源分
- 开门
- 多任务 51单片机纯C语言内核V1.03
- 常见智能手机操作系统平台与开源情况
- 传智播客-web service(8)-利用xfire开发WS应用
- 链栈的实现
- Softap_research_basic_tech
- 中国佛学震世禅语
- 让VB6/VBA 编辑器支持鼠标滚轮
- MINA2 核心源代码分析笔记 - 1. 整体结构与代码分析指引
- 实现单元格下拉菜单的3种方法