1 / 3
文档名称:

基于MSP430单片机的实时多任务操作系统.doc

格式:doc   大小:15KB   页数:3页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

基于MSP430单片机的实时多任务操作系统.doc

上传人:卢卡斯6687 2022/7/3 文件大小:15 KB

下载得到文件列表

基于MSP430单片机的实时多任务操作系统.doc

相关文档

文档介绍

文档介绍:基于MSP430单片机的实时多任务操作系统
  摘要:实时多任务操作系统(RTS)能有效进步嵌入式平台的资源利用效率,是嵌入式应用的必然趋势。本文阐述基于SP430F149的RTS——430/S。它由汇编写成、短小精干、占用系统资源少、运务唤醒功能:在一个任务中产生一个的事件来触发其它任务运行〔假如被触发的任务优先级高的话,就会马上运行〕。①S_Init:多任务初始化,进展任务栈〔任务栈的构造见图1〕、任务延时计数、任务状态的初始化。初始化完成后,系统直接切换到最高优先级的任务,多任务系统启动。②S_Tie_Dly:把当前任务挂起一段指定时间让其它任务运行。③S_Shed:任务调度,它先把每个任务的延时数减1,然后再找出最高优先级的就绪任务,并切换到这个就绪任务。假如无就绪任务,就切换到空闲任务。④S_Free_Task:空闲任务,是一个很重要的系统任务,当所有任务都挂起时,运行此任务。它主要是对一个计数器Free_unt一直进展累加,用户可以根据这个计数器计算出PU的利用率。⑤S_Task_Lk:锁定任务调度,制止任务调度。主要用来锁定在低优先级中的一些可重入的代码或一些重要代码。⑥S_Task_Unlk:解锁任务调度,和上面的子程序功能相反。⑦S_Task_akeup:唤醒指定优先级的任务,并产生一次任务调度,假如被唤醒任务的优先级比当前运行的任务的优先级高,任务就会切换到被唤醒的任务中,否那么等待下一个调度时机。〔1〕任务初始化系统加电运行后,首先对硬件资源进展初始化,接着就要对多任务进展初始化了。主要是初始化每个任务的任务栈、每个任务的时钟滴答数和堆栈指针位置。我们把每个任务栈都初始化成图1形式。任务栈的初始化如下程序〔r11是用来初始任务堆栈的一个指针,r10是一个循环计数器〕:v.#(栈底+2),(r10);清0时钟滴答数v.#任务首地址,0(r11);,-2(r11);,Task_SP(r10)sub.#现场所占的字节数,Task_SP(r10);SP位置放入堆栈
  初始化完任务栈之后,就把堆栈指针指向最高任务优先级任务栈的任务首地址处,再执行ret返回。这样,多任务就启动开了,程序如下:v.#09feh,sp;最高优先级的任务栈任务首地;址位置ret;返回到最高优先级的任务任务初始化的流程如图2所示。〔2〕时钟节拍时钟节拍由SP430F149的TierA产生。TierA工作于上升形式,R0中是TierA计数最大值。TierA初始化代码如下:bis.#(TASSEL1+TALR+_1),(sp),R0;计数最大值,此值决定时钟节拍bis.#IE,TL0〔3〕任务调度应用程序调用S_init进展初始化后,直接切换到最高优先级的任务。每个任务在运行一个循环后执行S_Tie_Dly挂起。这是通过把该任务的延时数填到该任务的Task_Tik中,然后再执行任务调度程序实现。任务调度就是在定时中断时对所有任务的Task_Tik减1,然后再按优先级上下的顺序查找Task_Tik减到0的任务,并直接跳到任务切换程序。下面是任务切换程序〔r10的内容是就绪任务的标志,由调度程序找出〕:pushALL;把当前任务现