IN_TIME_OS操作系统升级版.doc_第1页
IN_TIME_OS操作系统升级版.doc_第2页
IN_TIME_OS操作系统升级版.doc_第3页
IN_TIME_OS操作系统升级版.doc_第4页
IN_TIME_OS操作系统升级版.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

IN_TIME_OS操作系统很开心写下这篇文章,本人喜欢研究单片机的编程方法以及各种算法,最近因工作繁忙,任务较多,编程频繁,所以研究一些可以提高编程效率的方法,因此想在单片机上做一个模块,但是找了很久找不到可以各种单片机可以通用的模块,于是看到了陈明计的51单片操作系统 非常感兴趣,画了一星期的时间研究,确实非常的好,可是发现该系统虽然占用内存很小但是实时性还是有欠缺,而且内存比51还要小的单片机是很难应用该系统的,因此我个人做了一个非常微型的操作系统用于内存小且rom也小的单片机中 比如义隆的 时速的,三星的,凌阳的 松瀚的 等等他们所发布的低端单片机中,本系统非常容易移植。/*学习了陈明计的操作系统后,对51单片机的应用深有感触,因此闲暇之余参照了陈明计以及网友发表的操作系统写下了本人的51操作系统,是入门级的, 不足之处还望大家多多提意见,本人邮箱:,QQ:550606839 非常欢迎网友提供宝贵的建议,本系统是基于时间片轮转的操作系统, 我设定了两个任务,无需扩展RAM,在51和 52上都可以运行,是一个非常简单的操作系统,本系统自动保存断点,可以添加任务,但需注意内存是否够用2011年7月5日修改内容:在原系统上增加以下几个功能 :1, 增加任务定时器2, 使任务具有挂起功能3, 挂起后的任务不再占用cpu资源 使其他任务执行速度更快 本RTOS命名为:IN_TIME_OS*/以下是该操作系统的全部源码:/*学习了陈明计的操作系统后,对51单片机的应用深有感触,因此闲暇之余参照了陈明计以及网友发表的操作系统写下了本人的51操作系统,是入门级的, 不足之处还望大家多多提意见,本人邮箱:,QQ:550606839 非常欢迎网友提供更好的建议,本系统是基于时间片轮转的操作系统, 我设定了两个任务,无需扩展RAM,在51 52上都可以运行,是一个非常简单的操作系统,本系统自动保存断点,可以添加任务,但需注意内存是否够用 本OS命名为:IN_TIME_OS*/#include #define uchar unsigned char #define uint unsigned int#define os_int(tid) task_sptid=task_stacktid+1;SP=task_sptid;/初始化操作系统#define timeT_delay(TT) EA=0; TR0=0; TH0=0xff; TL0=0xfe; timeTtask_id=TT;EA=1;TR0=1; ; ;/任务定时器#define MAXTASK 3 /定义3个任务,其中一个任务为实时任务sbit P1_0=P10;sbit P1_1=P11;sbit P1_2=P12;sbit P1_3=P13;/引脚定义:我只是简单的通过这几个引脚演示了本操作系统的工作sbit P1_4=P14;sbit P1_5=P15;sbit P1_6=P16;sbit P1_7=P17;uchar task_stackMAXTASK10; /定义2个任务私栈uchar task_spMAXTASK; /定义堆栈指针uchar timeTMAXTASK; /定义任务定时器uchar task_id=0; /定义任务号,如果想要1号任务先启动那么该值初始化为1uchar zz,aa; /定义的全局变量 是任务中要用到的变量,为静态变量 /* 函数名称: task_load* 功能描述: 装载任务* 输入: 任务地址 ID * 输出: 无* 全局变量: 无* 调用模块: 无* * 作者: 朱登* 日期: 2011年7月1日*-* 修改:* 日期:*/void task_load(uint fn,uchar tid) task_stacktid0=(uint)fn&0xff; task_stacktid1=(uint)fn8; task_sptid=task_stacktid+7; /中断产生6字节压栈 调整栈顶 ,具体看51的堆栈操作 /* 函数名称: T0_int* 功能描述: 初始化节拍发生器* 输入: 无* 输出: 无* 全局变量: 无* 调用模块: 无* * 作者: 朱登* 日期: 2011年7月1日*-* 修改:* 日期:*/void T0_int() TMOD=0x01; TH0=0xfe; TL0=0x3c; EA=1; ET0=1; TR0=1; /* 函数名称: T0_serv* 功能描述: 任务调度* 输入: 无* 输出: 无* 全局变量: 无* 调用模块: 无* * 作者: 朱登* 日期: 2011年7月1日*-* 修改: 增加软定时器功能,增加任务挂起,就绪功能* 日期: 2011年7月5日*/void T0_serv() interrupt 1 uchar ii,jj,temp=0; TR0=0; TH0=0xff; TL0=0x0f;ii=task_id;jj=task_id;task_sptask_id=SP; /保存当前任务断点while(1)if(+ii=MAXTASK) ii=0; /该循环使每个任务定时器减一,直到某个任务就绪,记录就绪任务 if(ii=jj) break; if(timeTii=0) if(temp=0) task_id=ii;temp=1; continue; timeTii-; SP=task_sptask_id;/执行就绪任务 TR0=1; /* 函数名称: task0* 功能描述: 任务0,使p1.0 等所接的发光管闪烁* 输入: 无* 输出: 无* 全局变量: aa bb * 调用模块: 无* * 作者: 朱登* 日期: 2011年7月1日*-* 修改:* 日期:*/void task0() while(1) for(aa=0;aa166;aa+) timeT_delay(5); /设定5个单位的定时量 P1_0=P1_0; P1_2=P1_2; P1_4=P1_4; P1_6=P1_6; /* 函数名称: task1* 功能描述: 任务1,使p1.1 等所接的发光管闪烁* 输入: 无* 输出: 无* 全局变量: zz cc * 调用模块: 无* * 作者: 朱登* 日期: 2011年7月1日*-* 修改:* 日期:*/void task1() while(1)for(zz=0;zz166;zz+) timeT_delay(10); /设定10个单位的定时量 P1_1=P1_1; P1_3=P1_3; P1_5=P1_5; P1_7=P1_7; /* 函数名称: task2* 功能描述: 任务2,实时空任务* 输入: 无* 输出: 无* 全局变量: 无 * 调用模块: 无* * 作者: 朱登* 日期: 2011年7月1日*-* 修改:* 日期:*/void task2() while(1); /* 函数名称: main* 功能描述: 主函数入口* 输入: 无* 输出: 无* 全局变量: 无 * 调用模块: 无* * 作者: 朱登* 日期: 2011年7月1日*-* 修改:* 日期:*/void ma

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论