基于MSP430的实时多任务操作系统

发布者:数字思维最新更新时间:2014-02-18 来源: elecfans关键字:MSP430  实时多任务  操作系统 手机看文章 扫描二维码
随时随地手机看文章

  引 言

  1 在MSP430上使用RTOS的意义

  一般的观点认为,MSP430上使用RTOS是没有意义的这是可以理解的。因为MSP430的硬件资源有限(以MSP430F149为例,只有2KB RAM),任何商业操作系统都不可能移植到MSP430上。目前在MSP430上得到应用的RTOS,只有μC/OS-II,但使用μC/OS-II 必须有昂贵的C编译器,这严重地限制了其在MSP430上的使用。

  正是基于以上情况,笔者在应用MSP430过程中,编写了一个基于MSP430F149的RTOS,暂定名为M430/OS。它占用RAM量少、代码短小,稍加改动就可适用于大多数其它MSP430单片机。

  在MSP430单片机系统上使用M430/OS,对系统有以下意义:

  ① 实现软件设计的模块化。可将不同的功能模块编制成相应的任务,由操作系统按级别调用,不必为先执行哪个功能、后执行哪个功能而费神。

  ② 能更合理、有效地利用CPU有限的资源。按任务的重要程度安排任务的级别,能够保证最重要的任务得以最及时执行。

  ③ 大大降低系统故障率。低优先级的任务发生阻塞时,高优先级任务的执行不受影响。

  2 M430/OS在MSP430F149上的实现

  2.1 M430/OS功能特点

  M430/OS有以下特点:

  ① 采用占先式内核,即高优先级的任务可以从低优先级任务“抢”回CPU控制权;

  ② 每个任务都单独开辟一个任务栈;

  ③ 每个任务占十几到几百字节的任务堆栈,任务栈的大小可以根据任务中现场数据、局部变量和嵌套调用的情况估算;

  ④ 每个任务各分配一个优先级,不支持两个任务有相同的优先级;

  ⑤ 不支持信号量、邮箱功能;

  ⑥ 任务状态只有三种:运行(executing)、就绪(ready)、挂起(suspended);

  ⑦ 系统占用RAM量=((任务个数+1)×4)+6字节,不包括任务堆栈;

  ⑧ 代码量少,目前版本的代码共有86行汇编代码,256字节目标代码;

  ⑨ 理论上最多支持126个任务;

  ⑩ 任务锁定功能:在一段低优先级的代码中,不想让操作系统把CPU权切换到别的任务,这时可以把这代码锁定,在运行这段代码时,就不会引起任务切换;

  任务唤醒功能:在一个任务中产生一个的事件来触发其它任务运行(如果被触发的任务优先级高的话,就会马上运行)。

  2.2 系统函数介绍

  ① OS_Init:多任务初始化,进行任务栈(任务栈的结构见图1)、任务延时计数、任务状态的初始化。初始化完成后,系统直接切换到最高优先级的任务,多任务系统启动。

  ② OS_Time_Dly:把当前任务挂起一段指定时间让其它任务运行。[page]

  ③ OS_Sched:任务调度,它先把每个任务的延时数减1,然后再找出最高优先级的就绪任务,并切换到这个就绪任务。如果无就绪任务,就切换到空闲任务。

  ④ OS_Free_Task:空闲任务,是一个很重要的系统任务,当所有任务都挂起时,运行此任务。它主要是对一个计数器Free_Count一直进行累加,用户可以根据这个计数器计算出CPU的利用率。

  ⑤ OS_Task_Lock:锁定任务调度,禁止任务调度。主要用来锁定在低优先级中的一些可重入的代码或一些重要代码。

  ⑥ OS_Task_Unlock:解锁任务调度,和上面的子程序功能相反。

  ⑦ OS_Task_Wakeup:唤醒指定优先级的任务,并产生一次任务调度,如果被唤醒任务的优先级比当前运行的任务的优先级高,任务就会切换到被唤醒的任务中,否则等待下一个调度时机。

  2.3 主要功能的实现

  (1)任务初始化

  系统加电运行后,首先对硬件资源进行初始化,接着就要对多任务进行初始化了。主要是初始化每个任务的任务栈、每个任务的时钟滴答数和堆栈指针位置。我们把每个任务栈都初始化成图1形式。

  初始化好的任务栈结构

  任务栈的初始化如下程序(r11是用来初始任务堆栈的一个指针,r10是一个循环计数器):

  mov.w #(栈底 + 2) ;

  r11clr.w Task_Tick(r10) :清0时钟滴答数mov.w #任务首地址;

  0(r11) :把任务地址压入堆栈mov.w SR;

  -2(r11) :把标志寄存器放入任务栈mov.w r11;

  Task_SP(r10)sub.w #现场所占的字节数;

  Task_SP(r10) :SP位置放:入堆栈

  初始化完任务栈之后,就把堆栈指针指向最高任务优先级任务栈的任务首地址处,再执行ret返回。这样,多任务就启动开了,程序如下:mov.w #09feh , sp ;最高优先级的任务栈任务首地;址位置ret ;返回到最高优先级的任务任务初始化的流程如图2所示。

  任务初始化流程

  (2)时钟节拍

  时钟节拍由MSP430F149的TimerA产生。TimerA工作于上升模式,CCR0中是TimerA计数最大值。TimerA初始化代码如下:

  bis.w #(TASSEL1+TACLR+MC_1),&TACTL

  mov.w 2(sp),&CCR0 ;计数最大值,此值决定时钟节拍

  bis.w #CCIE,&CCTL0

  (3)任务调度

  应用程序调用OS_init进行初始化后,直接切换到最高优先级的任务。[page]

  每个任务在运行一个循环后执行OS_ Time_Dly挂起。这是通过把该任务的延时数填到该任务的Task_ Tick中,然后再执行任务调度程序实现。任务调度就是在定时中断时对所有任务的Task_ Tick减1,然后再按优先级高低的顺序查找Task_Tick减到0的任务,并直接跳到任务切换程序。下面是任务切换程序(r10的内容是就绪任务的标志,由调度程序找出):

  pushALL ;把当前任务现场入栈

  mov.b Now_Task,r11 ;当前任务标志放r11

  mov.w sp,Task_SP(r11) ;保存当前任务堆栈指针

  mov.b r10,Now_Task ;就绪任务标志变为当前任务标志

  mov.w Task_SP(r10),sp ;就绪任务的任务栈指针放入SP;此时再进行堆栈操作就是对就绪任务的任务栈操作了。

  popALL ;把就绪任务的现场出栈

  reti ;中断返回,返回到就绪任务

  任务调度的调度时机有两种:一种是在任务挂起时,一种是定时中断。任务挂起时的任务调度一定会引起任务切换,定时中断就不一定引起任务切换了。因为,如果就绪任务是当前正在运行的任务时不会引起切换。正是如此,任务调度是RTOS中执行得最频繁的一个功能,也是最重要的一个功能,所以必须尽量缩减其代码量,尽量用可靠的调度算法来减少任务调度所占的时间。这个子程序的流程如图3所示。

 任务调度流程

  (4)任务锁和其它功能的实现

  任务的加锁与解锁,是为了使一些在低优先级任务的不可重入代码,或对实时性要求较高的I/O操作在执行中不产生任务切换。这项功能是通过设置一个标志位实现的。当调度程序检查到任务被锁定时,就算有就绪任务也必须等开锁之后才能切换。如果系统突然产生一个事件要某个挂起的任务来处理,可以在事件产生的程序中调用任务唤醒。它的原理是把Task_Tick清0,然后执行一次任务调度。如果这个任务优先级较高,就直接切换到这个任务里执行。

  3 总 结

  M430/OS已在笔者开发的基于MSP430F149的系统上应用,运行稳定可靠。该操作系统稍加改动,就可应用于其它MSP430单片机。当然,它的功能还是很有限的,也可能还存在一些尚未暴露的问题;但无论如何,它向我们证明,在MSP430单片机系统中使用RTOS是完全可能的。

关键字:MSP430  实时多任务  操作系统 引用地址:基于MSP430的实时多任务操作系统

上一篇:基于SPCE061A的传感器测试系统应用与设计
下一篇:太阳能LED灯控制器电路图

推荐阅读最新更新时间:2024-03-16 13:35

基于MSP430单片机和CH376USB接口的信号采集存储系统
在现代控制系统中,经常需要在操作现场进行数据采集,以及对数据进行处理来实现现场控制,但是由于单片机数据存贮容量和数据处理能力都较低,因此本文主要介绍了使用USB总线通用接口芯片CH376和16位单片机MSP430对天线发射的信号进行数据采集处理,并且能够将这些大容量的数据以.txt文本格式实时的存储到U盘中,然后能在上位机上方便的打开查看和应用。这样就可以很容易的实现把单片机所采集的数据传送到PC机上,再在PC机上进行数据处理,充分发挥两者各自优势。 本文首先要设计出天线方向图的自动测试系统。通过这个天线参数自动化测量系统准确地发送和接收信号,从而进行数据的采集处理和存储等。早期的天线测试主要依靠手工,误差大、效率低。随着计算机
[单片机]
基于<font color='red'>MSP430</font>单片机和CH376USB接口的信号采集存储系统
远传智能网络水表抄表系统设计方案
  随着电子通信与计算机网络技术的发展,远程抄表技术在水、电和煤气计量方面得以推广应用。为适应这个发展方向,在研制出有线远传水表及其数据采集器的基础上,开发了专用的数据集中器,以实现远传水表抄表系统。该系统有三层网络结构:上位机管理系统、集中器和智能网络水表。智能网络水表通过RS-485总线和集中器连接,集中器通过调制解调器MODEM和电话网连接进行远程通讯,将数据通过电话网传输给上位机管理系统,在降低成本的同时提高了数据传输的可靠性。该系统具有良好的伸缩性,同时,上位机管理系统也可以和银行联网,组成四级网络,为后续功能扩展奠定了基础。   1 智能网络水表   智能网络水表的工作原理是在普通转盘计数的水表中加装干簧管和永磁铁
[单片机]
远传智能网络水表抄表系统设计方案
基于MSP430FW427的无磁水表设计方案精编
1 MSP430FW42x单片机介绍 MSP430FW42x系列单片机是TI公司针对电子式流量与旋转运动检测最新开发的专用MCU芯片,它将超低功耗MCU、旋转扫描接口(SCAN IF)和液晶显示LCD驱动模块完美地结合在一起。该器件的超低功耗结构和流量检测模块不仅延长了电池的寿命,同时还提高了仪表的精度与性能。MSP430FW42x的典型应用包括热量仪表、热水和冷水仪表、气体仪表和工业流量计、风力计以及其他旋转检测应用。 2 流量测量的原理 2.1 基本原理 一个由叶轮或螺旋齿轮构成的机械装置把流体流动转换为转动,这种转换能够实现对流体流量的测量。 把一个谐振回路中的电感置于叶轮的上方可以检测到叶轮的转动,叶轮
[单片机]
基于<font color='red'>MSP430</font>FW427的无磁水表设计方案精编
适合嵌入式stm32的五大操作系统解析
  基于STM平台且满足实时控制要求操作系统,有以下5种可供移植选择。分别为μClinux、μC/OS-II、eCos、FreeRTOS和都江堰操作系统(djyos)。下面分别介绍这五种嵌入式操作系统的特点及不足。   1、μClinux   μClinux是一种优秀的嵌入式Linux版本,其全称为micro-control Linux,从字面意思看是指微控制Linux。同标准的Linux相比,μClinux的内核非常小,但是它仍然继承了Linux操作系统的主要特性,包括良好的稳定性和移植性、强大的网络功能、出色的文件系统支持、标准丰富的API,以及TCP/IP网络协议等。因为没有MMU内存管理单元,所以其多任务的实现需要一定技巧
[单片机]
嵌入式操作系统UC/OSII的内核实现
引言   以前在我们一般所使用的系统中,任务没有优先级之分。应用程序是一个无限的循环,任务函数按在代码中的顺序运行,处理相应的事务。时间相关性强的任务处理使用中断机制,但是当系统比较复杂、中断资源有限时,中断程序只能将处理该任务的信息条件准备好后返回。当程序按顺序没有执行到该任务时,该任务的执行必须等待,所以将会造成任务每次的执行时间间隔不定,不能及时处理紧急事务,影响系统的运行。这种情况在要求限定时间内周期性处理事务的系统中是不允许发生的,而且只由应用者编写的复杂程序很可能会出现 Bug 。   嵌入式操作系统是实时操作系统,运行于特定的硬件平台上,一般包括处理器、存储器及外设器件和 I/O端口,包括操作系统软件,
[嵌入式]
MSP430开发总结
1.#i nclude 指要在编辑器设定目录下,#i nclude 指的是在当前工程目录下。 2.要调用另一个文件中的函数,要把这个函数文件放到当前工程目录下,并且在工程中添加此文件。 3.命名中不能有-,比如:byq-ee会认为是错误的,要用下划线。 4.用IAR软件仿真时,可以加入变量,如果是查看I/O信息只需加入PXIN,PXOUT即可。 5.IAR在处理字符时,要注意,是字符处理结尾标志,他和其他编辑软件是不同的。比如我们长用字符处理回 自动在结尾处加,但IAR有些是不加的,这就要十分注意。 6.如果只用到LFX1的低速时钟,9600bit/s传输的话,接收会出现问题,原因是误差太大,可以设置到4800以下。 7.在写FL
[单片机]
MSP430低功耗设置小结
设置低功耗模式也就是对SR状态寄存器当中的位进行操作SCG0.SCG1,CPUOFF,OSCOFF等位进行操作 如果我们要设置低功耗模式,那一般来说也是要设置 中断的,在中断函数中打开CPU来执行我们想要执行的程序 大部分时间CPU是处于OFF状态的,这样可以达到降低功耗的目的 void main { unsigned char i; BCSCTL1|=DIVA_2; WDTCTL=_WDT_ADLY_1000; IE1|=WTDIE; while(1) { _BIS_SR(LPM3_bits); i++; } } #pragma vector=WDT_VECTO
[单片机]
MSP430F149为主控芯片的超低功耗智能火灾报警系统设计
引言 火灾严重威胁着人类的生命财产安全,每年我国由火灾引起的灾难数不胜数,然而,准确、及时的对火灾进行预测已成为迫在眉睫的事情。目前,火灾探测技术是预防火灾发生的最有效的手段,根据火灾发生初期的迹象来判断并进行预测,从而使人们在第一时间对这些迹象进行处理,有效的减少了火灾的发生。 普通可燃物燃烧的表现形式是:首先产生燃烧气体和烟雾,在氧气供应充足的条件下才能达到完全燃烧,产生火焰并发出一些可见光与不可见光,同时释放大量的热,使得环境温度升高。普通可燃物由初起阴燃阶段开始,到火焰燃烧、火势渐大,最终酿成火灾的起火过程。在该系统中我们以环境温度、烟雾浓度作为判断火灾的依据。 传统火灾报警系统有结构简单、准确度低、存在误报和漏报
[单片机]
以<font color='red'>MSP430</font>F149为主控芯片的超低功耗智能火灾报警系统设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved