基于MSP430单片机的实时多任务操作系统_第1页
基于MSP430单片机的实时多任务操作系统_第2页
基于MSP430单片机的实时多任务操作系统_第3页
全文预览已结束

下载本文档

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

文档简介

1、基于MSP430单片机的实时多任务操作系统摘要:实时多任务操作系统(RTS)能有效前进嵌进式仄台的资本操作从命,是嵌进式使用的必然趋向。本文阐述基于SP430F149的RTS430/S。它由汇编写成、短小粗悍、占用系统资本少、运转稳定牢靠,如今已正在思达下科配网妙技公司产品上获得使用。关键词:RTS任务调度SP430引止1正在SP430上操作RTS的意义一样仄居的没有俗观面觉得,SP430上操作RTS是出成心义的那是可以年夜黑的。因为SP430的硬件资本有限(以SP430F149为例,只要2KBRA),任何商业操作系统皆没有成能移植到SP430上。如今正在SP430上获得使用的RTS,只要/S

2、-II,但操作/S-II必须有下贵的编译器,那宽峻天限制了其正在SP430上的操作。恰是基于以上情况,笔者正在使用SP430过程中,编写了一个基于SP430F149的RTS,久命名为430/S。它占用RA量少、代码短小,稍减篡改便可真用于年夜年夜皆此外SP430单片机。正在SP430单片机系统上操作430/S,对系统有以下意义:真现硬件方案的模块化。可将没有同的成效模块编造成响应的任务,由操作系统按级别挪用,出必要为先真止哪一个成效、后真止哪一个成效而操心。能更公允、有效天操作PU有限的资本。按任务的慌张程度安排任务的级别,可以大概保证最慌张的任务得以最实时真止。年夜年夜降低系统阻碍率。低劣先

3、级的任务收死阻塞时,下劣先级任务的真止没有受影响。2430/S正在SP430F149上的真现2.1430/S成效特性430/S有以下特性:采取占先式内核,即下劣先级的任务可以从低劣先级任务“抢回PU操作权;每一个任务皆零丁开拓一个任务栈;每一个任务占十几到几百字节的任务仓库,任务栈的大小可以根据使掷中现场数据、局部变量战嵌套挪用的情况预算;每一个任务各分拨一个劣先级,没有支撑两个任务有一样的劣先级;没有支撑疑号量、邮箱成效;任务形态只要三种:运转(exeuting)、伏贴(ready)、挂起(suspended);系统占用RA量=任务个数+14+6字节,没有包含任务仓库;代码量少,如今版本的代

4、码共有86止汇编代码,256字节目的代码;实际上最多支撑126个任务;任务锁定成效:正在一段低劣先级的代码中,没有念让操作系统把PU权切换到此外任务,那时可以把那代码锁定,正在运转那段代码时,便没有会惹起任务切换;任务唤醉成效:正在一个使掷中收死一个的事变去触收此外使运气转假设被触收的任务劣先级下的话,便会坐即运转。2.2系统函数介绍S_Init:多任务初初化,举止任务栈任务栈的规划睹图1、任务延时计数、任务形态的初初化。初初化完成后,系统间接切换到最下劣先级的任务,多任务系统启动。S_Tie_Dly:把当前任务挂起一段指定工夫让此外使运气转。S_Shed:任务调度,它先把每一个任务的延时数减

5、1,然后再觅出最下劣先级的伏贴任务,并切换到那个伏贴任务。假设无伏贴任务,便切换到忙暇任务。S_Free_Task:忙暇任务,是一个很慌张的系统任务,当局部任务皆挂起时,运转此任务。它主假设对一个计数器Free_unt没有断举止乏减,用户可以根据那个计数器策画出PU的操作率。S_Task_Lk:锁定任务调度,抑造任务调度。主要用去锁定正在低劣先级中的一些可重进的代码或一些慌张代码。S_Task_Unlk:解锁任务调度,战上里的子程序成效相反。S_Task_akeup:唤醉指定劣先级的任务,并收死一次任务调度,假设被唤醉任务的劣先级比当前运转的任务的劣先级下,任务便会切换到被唤醉的使掷中,否那么

6、等待下一个调度机缘。2.3主要成效的真现1任务初初化系统减电运转后,起尾对硬件资本举止初初化,接着便要对多任务举止初初化了。主假设初初化每一个任务的任务栈、每一个任务的时钟滴问数战仓库指针地位。我们把每一个任务栈皆初初化成图1形式。任务栈的初初化以下程序r11是用去初初任务仓库的一个指针,r10是一个轮回计数器:v.#(栈底+2),r11lr.Task_Tik(r10);浑0时钟滴问数v.#任务尾所在,0(r11);把任务所在压进仓库v.SR,-2(r11);把标识表记标帜存放器放进任务栈v.r11,Task_SP(r10)sub.#现场所占的字节数,Task_SP(r10);SP地位放进仓库

7、初初化完任务栈以后,便把仓库指针指背最下任务劣先级任务栈的任务尾所在处,再真止ret返回。多么,多任务便启动开了,程序以下:v.#09feh,sp;最下劣先级的任务栈任务尾天;址地位ret;返回到最下劣先级的任务任务初初化的流程如图2所示。2时钟节拍时钟节拍由SP430F149的TierA收死。TierA工作于上降形式,R0中是TierA计数最年夜值。TierA初初化代码以下:bis.#(TASSEL1+TALR+_1),TATLv.2(sp),R0;计数最年夜值,此值决定时钟节拍bis.#IE,TL03任务调度使用程序挪用S_init举止初初化后,间接切换到最下劣先级的任务。每一个任务正在运

8、转一个轮回后真止S_Tie_Dly挂起。那是经由过程把该任务的延时数挖到该任务的Task_Tik中,然后再真止任务调度程序真现。任务调度便是正在定时截至时对局部任务的Task_Tik减1,然后再按劣先级凸凸的依次查觅Task_Tik减到0的任务,并间接跳到任务切换程序。上里是任务切换程序r10的内容是伏贴任务的标识表记标帜,由调度程序觅出:pushALL;把当前任务现场进栈v.bN_Task,r11;当前任务标识表记标帜放r11v.sp,Task_SP(r11);保存当前任务仓库指针v.br10,N_Task;伏贴任务标识表记标帜变成当前任务标识表记标帜v.Task_SP(r10),sp;伏贴

9、任务的任务栈指针放进SP;此时再举止仓库操作便是对伏贴任务的任务栈操作了。ppALL;把伏贴任务的现场出栈reti;截至返回,返回到伏贴任务任务调度的调度机缘有两种:一种是正在任务挂起时,一种是定时截至。任务挂起时的任务调度必然会惹起任务切换,定时截至便出必要然惹起任务切换了。因为,假设伏贴任务是当前正正在运转的任务时没有会惹起切换。恰是如此,任务调度是RTS中真止得最频繁的一个成效,也是最慌张的一个成效,所以必须尽管缩减其代码量,尽管用牢靠的调度算法去裁减任务调度所占的工夫。那个子程序的流程如图3所示。4任务锁战此外成效的真现任务的减锁取解锁,是为了使一些正在低劣先级任务的没有成重进代码,或对实时性要供较下的I/操作正在真止中没有收死任务切换。那项成效是经由过程设置一个标识表记标帜位真现的。当调度程序检查到任务被锁定时,便算有伏贴任务也必须等开锁以后才华切换。假设系统突然收死一个事变要某个挂起的任务去处理,可以正在事变收死的程序中挪用任务唤醉。它的本理是把Task_Tik浑0,然后真止一次任务调度。假设那个任务劣先级较下,便间接切换到那个任务里真止。3总结430/S已

温馨提示

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

评论

0/150

提交评论