基于MSP430单片机的M430/OS对系统的意义解析

发布者:SereneSunset最新更新时间:2018-04-01 来源: eefocus关键字: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:把当前任务挂起一段指定时间让其它任务运行。

    ③ 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) , r11

    clr.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进行初始化后,直接切换到最高优先级的任务。

    每个任务在运行一个循环后执行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单片机的M430/OS对系统的意义解析

上一篇:基于 SPCE061A单片机采集语音信号的设计与实现
下一篇:单片机的应用详解

推荐阅读最新更新时间:2024-03-16 15:58

51单片机小白零基础教程——数码管的动态显示
数码管的动态显示 数码管的动态显示:数码管的动态显示又叫做数码管的动态扫描。动态显示的特点是:将所有位数码管段选线并联在一起,,由位选控制是哪一位数码管有效。所谓动态扫描显示即轮流向各位数码管送出字型码和相应的位选,利用发光管的余晖和人眼视觉暂留作用,使人感觉好像各位数码管同时都在显示,而实际上多位数码管是一位一位轮流显示的,只是轮流的速度比较快,人眼已经无法分辨出来。 关于数码管以及74HC573锁存器的分析放在这,有详细的分析过程,请自行查看https://blog.csdn.net/chrisbum/article/details/115583779?spm=1001.2014.3001.5502 设计要求:在实验板
[单片机]
51<font color='red'>单片机</font>小白零基础教程——数码管的动态显示
89C51单片机之红外通信 ----自学笔记
一、概述 常见的红外线遥控器:空调遥控器,电视机遥控器。 1.1、什么是红外线 人眼可见光按波长从长到短排列,依次为:红、橙、黄、绿、青、蓝、紫。 红光的波长范围为0.62~0.76um(微米)。 紫光的波长范围位0.38~0.46um(微米) 。 1米(m)=1000000微米(um) 比紫光波长还短的叫紫外线。 比红光波还长的叫红外线。 红外线遥控就是利用波长位0.76~1.5um(微米)之间的近红外线来传送控制信号的。 1.2、红外系统的组成 红外系统的组成:红外发射装置和红外接收设备两大部分组成。 红外发射装置的组成:由键盘电路、红外编码芯片、电源和红外发射电路组成。 红外接收设备的组成:红外接收电路、红外解
[单片机]
89C51<font color='red'>单片机</font>之红外通信 ----自学笔记
Linux如何运行于8位AVR微控制器
更新记录2 太平洋夏令时(PDT),2012年4月3日凌晨1点:上传了新的源代码存档;使用内存的FPM(Fast Page Mode,快页模式)模式和修改后的i-cache(指令缓存)配置文件加快了仿真器频率(6.5KHz- 10KHz);更新了移植指南,包括内核镜像、新的更小的ramdisk(虚拟磁盘)和新的完整镜像。 更新记录1 太平洋夏令时(PDT),2012年3月29日晚19点:上传了新的源代码存档;修改了Makefile,并且现在包含了一个移植指南,它可以帮助您将它移植到其他的开发板或CPU中。 简介 我们经常可以看到初学者在微控制器论坛中询问他们是否可以在他们微不足道的小
[单片机]
Linux如何运行于8位AVR<font color='red'>微控制器</font>?
51单片机双机通信硬件电路图及C程序
双机通信的硬件电路 需要注意的是,两单片机要保证正确通信,主机的RXD连接从机的TXD,从机的RXD连接主机的TXD。 双机通信C语言程序 (1)主机程序 #include #include #define _READY_ 0x06//主机握手信号 #define _BUSY_ 0x15//从机忙应答 #define_OK_ 0x00//从机准备好 #define _SUCC_ 0x0f//数据传送成功 #define _ERR_ 0xf0//数据传送失败 unsigned charTable ={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; unsigned char Bu
[单片机]
51<font color='red'>单片机</font>双机通信硬件电路图及C程序
基于C8051F920单片机的金卤灯控制器设计
1 概论 目前,大部分照明设备仍以传统能源来照明,充分利用太阳能作为照明设备的能源供给,在节约能源、保护环境等方面具有重要意义。 2 控制器整体结构 太阳能光伏板接入光伏信号处理电路,光伏电压经PWM充电控制电路送到12 V蓄电池内。正常工作时,12 V蓄电池输出电压经高频平面变压器次级感应升压、整流后到全桥电路。同时12 V输出电压与电压变换电路相连接,向控制器其他电路供电。 2.1 太阳能充电系统   光伏信号处理电路包括防信号反接电路、光伏电压取样电路和雷击保护电路。其中,防信号反接电路可以阻止光伏信号反接输入对控制器电路造成损坏。电压取样电路提供给C8051F9
[单片机]
基于C8051F920<font color='red'>单片机</font>的金卤灯控制器设计
基于物联网的矿井氧气浓度监测系统设计
摘要:为了实现对矿井氧气浓度检测,提出了一种基于物联网的矿井氧气浓度检测系统,并完成了系统的软硬件测试。硬件包括传感器检测模块、路由器传输模块、数据汇集模块和上位机模块,软件采用MSP430进行编程,实现了氧气浓度信号检测。应用表明,该系统能有效地避免矿井有毒气体泄漏的发生。 煤矿有毒性气体对矿工的生命安全是致命的伤害。煤矿井下的各个生产环节都可能产生有毒性气体,如钻眼、炸药爆破、掘进机掘进、采煤机割煤、装煤、采煤支护放顶、巷道支护、装载运输转载及卸载提升等。有毒性气体危害不仅能使煤矿工人得尘肺病,而且易引发爆炸,造成重大安全事故。我国煤矿普遍具有毒性气体危险。 以上所述足见矿井有毒性气体的危害性之大,同时也说明了氧气监测
[单片机]
基于物联网的矿井氧气浓度监测系统设计
具有单片机串行接口的汽车电子驱动器
    摘要: MC33298是Motorola公司推出的新型汽车电子驱动器,它具有8路输出,可由8位串行控制。MC33298所具有的独特的串行外设接口(SPI)可以使其和各种单片机直接相连以控制不同的负载。文中介绍了MC33298的特点、功能和工作原理,并给出了它的几种典型的接口应用电路。     关键词: 驱动器 串行接口 单片机 MC22298 1 概述 MC33298是一种较为新颖的汽车驱动器,它具有8路输出的低边功率开关,由8位串行控制。MC33298采用新型集成工艺,内含集成CMOS逻辑、双极性MOS模拟电路和DMOS功率场效应管等多种电路。由于该芯片具有串行外设接口(SPI),所以能和多种单
[手机便携]
基于51单片机控制的温湿度监控仪
  1 系统硬件组成   本系统完成对温度、湿度的实时测量,配合有关控制部分即可对温度湿度进行实时控制,同时具有温度、湿度和露点显示功能,满足一般上业环境对温度、湿度和露点检测的需要。系统由STC89C51RC、RAM、键盘、温度传感器、湿度传感器、A/D转换电路、D/A转换电路等组成。如图1所示。      STC89系列是具有Flash结构的51系列单片机,因此,程序存储器(ROM)可不用外扩,为了记忆校正后的参数,需要存储各种校正参数,本系统采用具有掉电保护功能的铁电存储器,以便在校正后,将校正参数存储下来。系统以温度传感器采用AD590集成温度传感器,具有传感精度高、工作性能稳定的特点。湿度传感器采用HS11
[单片机]
基于51<font color='red'>单片机</font>控制的温湿度监控仪
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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