基于MDK RTX的Cortex-M3多任务应用设计

发布者:陈书记最新更新时间:2015-04-16 来源: eechina关键字:MDK  RTX  Cortex-M3 手机看文章 扫描二维码
随时随地手机看文章
1 MDK RL—RTX和COrtex—M3概述

MDK开发套件源自德国Keil公司,是ARM公司目前最新推出的针对各种嵌入式处理器的软件开发工具。MDKRL—IUX是一个实时操作系统(RTOS)内核,完全集成在MDK编译器中。广泛应用于ARM7、ARM9和Cortex-M3设备中。它可以灵活解决多任务调度、维护和时序安排等问题。基于RL—I订X的程序由标准的C语言编写,由Real—View编译器进行编译。操作系统依附于C语言使声明函数更容易,不需要复杂的堆栈和变量结构配置,大大简化了复杂的软件设计,缩短了项目开发周期。

Cortex—M3是一个32位的核。它是首个基于ARMv7M架构,主要针对价格敏感但又具备高系统效能需求的嵌入式应用设计,如微控制器、汽车车体系统及网络装置等。它内核紧凑,性能更高,采用了Thumb一2指令集架构,中断时间更短,标准化内存映射,带有内置SysTick的集成式NVIC。 SysTick能定期地产生异常请求,作为系统的时基,计时更准确。

MDK RL—RTX和Cortex—M3都源自ARM公司。ARM公司将其无缝整合在MDK开发套件中,因此将RL—RTX移植到Cortex—M3上非常适合。RL—RTX作为一个全功能的内核,可以结合实时软件库中的其他组件。例如,加入实时库中RL—Flasht文件系统组件,就可以读写标准SD卡和 MMC卡上面的文件;加入RL—TCPnet组件,可应用于HTTP Web,ServeI’、TFTP Server和SMTP Client等。可扩展性强,应用广泛。

2 基于COrtex—M3硬件平台的构建

STM32F103VB是ST公司基于Cortex—M3的处理器。它有1个128 KB Flash,1个20 KB SRAM,4个16位定时器,100个可编程的I/0引脚,具有I2C、SPI、USB、15SART和CAN接口,2路10通道12位A/D转换器,RTC功能模块,WDT功能和高级电源管理功能。

系统的数据缓存RAM和程序存储器Flash为芯片自带,系统外接A/D转换器构成控制器。基于Cortex-M3核的最小系统框图如图1所示。

1.gif 

基于该平台,设计一个超温报警器。使用美国半导体Dalias公司的智能温度传感器DS18820采样,LCD显示温度数值,如果短时间内温度超出正常温度,蜂鸣器发出100 dB警报且LED灯闪烁示警。可以进一步在该平台上进行扩展,加入GPS和GPRS模块,当温度超出设定范围时,GPS将现场经纬度以及时间通过GPRS 以短信方式发送给监控中心,GPRS模块自动拨打有关人员移动电话或固定电话报警。

3 MDK RL—RTX的配置与移植

RL—RTX在任务管理方面不仅支持抢先式任务切换,而且支持时间片轮转切换。在基于时间片的轮转任务机制下,CPIJ的执行时间被划分为若干时间片,由 RL—RTX分配一个时间片给每个任务,在该时间片内只执行这个任务。当时间片到,在下一个时间片中无条件地执行另外一个任务。所有任务都轮询一次后,再回头执行第一个任务。

RL—RTX最多可以定义256个任务,所有任务都可以同时激活成为就绪态。RL—RTX用户任务具有表1所列的几个状态。

2.gif 

一般情况下,任务切换由时间片控制,但有时需要用事件控制任务切换。RL—RTX事件主要有超时(Timeout)、间隔(Interval)和信号 (Signal)三种。

Timeout:挂起运行任务指定数量的时钟周期,调用OS_DLY_WAIT函数的任务将被挂起,直到延时结束才返回到Ready状态,并可被再次执行。延时时间由SysTick衡量,可以设置从1至OxFFFE的任何值。

Interval:时间间隔,任务在该时间间隔中不运行,该时问间隔与任务执行时间独立。

Signal:用于任务间通信,可以用系统函数进行置位或复位。如果一个任务调用了wait函数等待Signal未置位,则该任务被挂起直到Signal 置位,才返回READY状态,可再被执行。

RL—RTX中主要的系统函数说明如表2所列。

3.gif 

RL—RTX为每个任务都分配了一个单独的堆栈区,各个任务所用堆栈位置是动态的,用task_id记录各堆栈栈底位置。有多个嵌套子程序调用或使用大量的动态变量时,自由空间会被用完。使能栈检查(Stack Checking),系统会执行OS_STK_0VERFLOW()堆栈错误函数进行堆栈出错处理。RL—RTX堆栈管理如图2所示。

4.gif 

RL—RTX选择Cortex上定时器1产生周期性中断,相邻中断之间的时间就是时间片的长度。在其中断服务程序中进行任务调度,并判断执行了延迟函数的任务的延时时间是否到。这种周期性的中断形成了RL—RTX的时钟节拍。采用Cortex—M3的处理器STM32F103VB的CPU时钟频率为72 MHz,VPBDIV分频值为4,输出的时钟频率为18 MHz。系统推荐的时间片为1~lOO ms。[page]

使用RL—RTX,包含以下几个步骤:

第1步,由于RL—RTX集成在MDK开发套件中,在使用MDK创建工程后,需要在工程中添加RTX内核选项。选择Project→Options for Target,在Operating下拉框中选择RTX内核,使得在编译时把RL—RTX所需的库编译进去。

第2步,在嵌入式应用程序的开发中使用RL—RTX内核,须对其进行配置。复制\Keil\ARM\Startup目录下RTX_Config.c文件到工程文件夹并添加到工程中。该文件中,部分配置参数说明如表3所列。

5.gif 

基于Cortex—M3平台的超温报警器,可以设计3个任务并发,分别进行数据采集、数据处理和数据显示。3个任务较小,系统安排的任务栈足够使用,栈的容量以32位无符号整型定义,容量为64字。选择硬件平台片上定时器1。

DSl8820具有300 ms的更新速率,在采集数据过程中,通过多次采集取平均值,数据采集任务执行的时间为30 ms,数据处理任务执行时间为40 ms,数据显示任务执行时间为20 ms。根据公式,对响应时间的要求:t(响应时间)=N(进程数目)×q(时间片)。总体响应时间为90 ms,进程数目为3,因此时间片设置为30 ms合适。在任务OS_IDLE_DEMON()中添加休眠代码,空闲时系统休眠,降低功耗。

第3步,复制\Keil\ARM\Startup下Retarget.c文件到工程文件夹中,并添加到工程中。

修改文件,使其包含如下内容:

6.gif 

该文件的目的是避免半主机方式软件中断,因为这时所有中断都由RL—RTX统一管理。半主机是用于ARM目标的一种机制,可将来自应用程序代码的输入/输出请求传送至运行调试器的主机。它由一组已定义的SWI操作来实现。库函数调用相应的SWI(软件中断),然后调试代理程序处理SWI异常,并提供所需的与主机之间的通信。

4 应用设计

4.1 多任务应用设计

根据图1所示的最小系统框图,采用由表及里 (out—side-in approach)分解应用的方法设计多任务。该应用的上下文框图如图3所示,中间的圈表示软件应用,矩形框表示应用的输入和输出设备。箭头标有具体含义名,表示输入和输出通信的流程。

7.gif 

根据上下文框图以及避免“资源冲突”原则,将对同一个外设的访问放在同一个设备中,无论何时切换任务,都不会对任何独立的“外设”造成影响。

将应用分解为4个任务,RL—RTX的第一个任务必须是系统任务Init Task,该任务用来初始化其他3个任务,任务创建完毕后,3个任务都处于READY状态;第2个任务t_phase_ADC Task用来读取A/D采样的数据;第3个任务t_phase_DEA Task用来处理采样的数据;第4个任务t_phase_DIS Task用来将数据送到LCD液晶屏上,显示、控制LED灯闪烁和蜂鸣器高频报警。图4显示了任务触发的流程。[page]

定义任务:

8.gif 

9.gif 

使用os_tsk_create创建任务t_phase_ADC、t_phase_DEA、t_phase_DIS。

os_tsk_delete_self删除自身任务,实现任务切换。任务的创建和初始化是在主函数中定义的:

10.gif 

任务初始化完毕后,3个任务都处于就绪状态。t_phase_ADC任务用来采样,多次采样取平均值,通过给任务t_phase_DEA发信号 signal_func(t_phase_DEA),唤醒t_phase_DEA任务。

11.gif 

os_evt_wait_and进行控制。该任务判断采样的数据是否在警戒温度范围内,如果出现温度异常,置标志位为1。执行完自身任务后,通过 signal_func(t_phase_DIS),将唤醒t_phase_DIS任务。

12.gif 

t_phase_DIS任务用来在LCD液晶屏上显示温度值。如果发现标志位为1,则LED灯闪烁和蜂鸣器高频报警。

4.2 应用设计测试

采用基本RMA可调度性测试。式1用来完成系统的基本RMA可调度性测试。

13.gif 

这里:Ci为与周期性任务i相关的最坏执行时间,Ti为与任务i相关的周期,n为任务的个数。

U(n)是利用系数,式1的右边是理论处理器利用率的上界。如果给定一组任务,其处理器利用率小于理论利用率上界,则这组任务是可调度的。U的值随n的增加而下降;当n的值为无限时,最终收敛于69%。

表4总结了使用RMA进行调度的3个任务的特性。

14.gif 

使用式1,该应用设计处理器利用率计算如下:

15.gif 

应用设计总的利用率是27.42%,低于78%的理论边界。此4个任务的系统是可调度的,该应用设计是成功的。

结语

本文描述了如何在Cortex—M3上使用MDK RL—RTX的方法,并给出了一个简单的多任务应用设计。可以看出多任务的程序设计被大大简化了,它不但满足多个任务的时间要求,降低了开发难度,而且程序的可读性和可维护性也有了很大的提高。利用MDK RL—RTX构建的嵌入式工业控制系统具有成本低、性能高等特点,应用广泛,有着良好的发展前景。

参考文献

   1. 李宁 ARM 开发工具RealView MDK使用入门 2008
   2. 任哲 ARM 体系结构及其嵌入式处理器 2008
   3. Cesar Marquez Chin Identification of arm movements using correlation of electrocorticographic spectral components and kinematic recordings 2007(2)
   4. 查看详情
   5. Li Qing Real-time concepts for Embedded Systems 2003
关键字:MDK  RTX  Cortex-M3 引用地址:基于MDK RTX的Cortex-M3多任务应用设计

上一篇:文件系统在EEPROM中的应用
下一篇:双层AMBA总线设计及其在SoC芯片设计中的应用

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

基于STM32微控制器处理先进电机控制方法
    变频器的问世和先进的电机控制方法让三相无刷电机(交流感应电机或永磁同步电机)曾经在调速应用领域取得巨大成功。这些高性能的电机驱动器过去主要用于工厂自动化系统和机器人。十年来,电子元器件的大幅降价使得这些电机驱动器能够进入对成本敏感的市场,例如:家电、空调或个人医疗设备。本文将探讨基于ARM的标准微控制器如何在一个被DSP和FPGA长期垄断的市场上打破复杂的控制模式,我们将以意法半导体的基于Cortex-M3 内核的STM32系列微控制器为例论述这个过程。     首先,我们回顾一下电机控制的基本原理。在电机控制系统内,为什么处理器非常重要?我们为什么需要非常好的计算性能?毕竟,Nicolas Tesla在一个世纪前发明
[嵌入式]
【STM32H7】第7章 RL-TCPnet V7.X网络协议栈移植(RTX5)
7.1 初学者重要提示 学习本章节前,务必要优先学习第6章的底层驱动讲解。 测试时,请将网线接到路由器或者交换机上面测试,因为已经使能了DHCP,可以自动获取IP地址。而且使能了NetBIOS局域网域名,用户只需在电脑端ping armfly,就可以获得板子的IP地址。 如果要使用固定IP进行测试,请看附件章节A。 网口使用的是DM9161/9162(紧挨着9帧串口座的网口),而不是DM9000。 测试例子,务必看本章7.14小节的操作步骤。 7.2 移植RL-TCPnet协议栈整体说明(必读) 移植之前,有必要对移植过程有个整体的认识: 第1步,准备一个工程模板。 第2步,移植RTX5。 移植RTX5是
[单片机]
【STM32H7】第7章 RL-TCPnet V7.X网络协议栈移植(<font color='red'>RTX</font>5)
基于RTX51实时操作系统的交通灯控制系统的设计
   O 引言   一个高效的单片机智能控制系统,不仅要求系统能够同时执行多个任务,对每个任务作出实时响应,而且要求系统能够及时响应随机发生的外部事件,并对其作出快速处理。对于这样的系统应用,采用实时操作系统RTOS(Real-time-Operating System)作为系统软件设计平台是一个良好的选择,它可以灵活地安排系统资源,简化复杂的软件设计,加快软件的开发效率,大大缩短了项目的开发周期。道路交通灯是最常见的一种多任务控制系统,本文以此为倒,详细阐述了51嵌入式实时操作系统RTX51开发软件的方法和步骤。    1 系统硬件电路设计   交通信号灯控制系统主要实现以下三个功能:   (1)信号灯指示,即完成十字路
[单片机]
MDK (Keil For ARM) 与 Proteus 联调 的设置方法
之前想用ADS来编译ARM,可是ADS不能像KEIL那样与Proteus联调,只能先生成HEX文件,然后再加载到Proteus中去,这样的话显然效率会降低好多,也不方便。所以在这里给大家介绍下MDK与Proteus的联调方法,希望对大家有所帮助。 安装之前的准备: 1、MDK4.0(Keil uVision 4) 有网友说4.0之前的版本在联调的时候会出现死机或连接不成功的情况,我没有试过,建议大家用4.0或其之后的版本。 2、Proteus 7.5 sp3 这个是目前最新的版本吧,对Proteus没有特别的要求,当然也可以用其他的版本。 3、vdmagdi.exe 这个是一个联调的补丁,就像
[单片机]
Trimble推出数据完整性监控系统Trimble RTX Integrity™
据外媒报道,全球定位解决方案供应商Trimble为其精确点定位(PPP)校正服务CenterPoint® RTX Fast推出数据完整性监控方案Trimble RTX Integrity™监控系统。该系统是一种创新的专利解决方案,可直接响应客户对生产就绪应用程序的要求。此外,该方案还将不断验证网络处理的校正数据的可靠性,包括农业、地理空间、建筑和汽车行业用户,从而确保定位数据第一时间正确。 图片来源:Trimble 通过独特的两步流程,该Trimble RTX Integrity系统会验证从卫星接收的GNSS数据的完整性,并在数据传播前过滤网络服务器中的错误信息。对整个数据传输过程进行二次传播后检查,其中可能会检测到
[汽车电子]
Trimble推出数据完整性监控系统Trimble <font color='red'>RTX</font> Integrity™
个人修改的用于MDK的2440init.s
;====================================================================================== ; 文件名: 2440INIT.s ; 描述: 1).ARM 指令集, ; 2).小端格式 ; 3).NOR Flash总线16位,大小2MB ; 4).NAND Flash型号:K9F2G08,大小256MB ; 5).GPIO总线32位, ; 更改日期: 2012年1月31日 ;======================================================================================
[单片机]
消息称英伟达正开发新款 GeForce RTX 3060 显卡,基于 GA104 GPU+GDDR6X 显存
TechPowerUP GPU 数据库维护者 @T4C Fantasy 发现英伟达正在开发一款新的 RTX 3060 显卡,这次使用的是新 GPU (GA104)+GDDR6X 显存。 英伟达已经推出了三种 RTX 3060,虽然有可能会推出新版本但也存在后续被砍的可能。当然,考虑到 RTX 30 系列的库存问题,我们认为 RTX 40 系列的中端卡可能不会那么快上市,所以大家按照自己需求来选购即可。 如果算上这款新型号,NVIDIA 现在将拥有四款 RTX 3060 型号: GeForce RTX 3060 12GB GDDR6 – GA106-300 GeForce RTX 3060 12GB GDDR6(LHR)
[家用电子]
消息称英伟达正开发新款 GeForce <font color='red'>RTX</font> 3060 显卡,基于 GA104 GPU+GDDR6X 显存
德州仪器隆重推出30多款全新 ARM(R) 器件
  日前,德州仪器 (TI) 宣布推出 31 款全新的 ARM 处理器,可为客户提供从成本低至 1 美元到超过 1GHz的未来产品的高扩展性解决方案,显著壮大了嵌入式处理器产品的阵营。最新处理器包括 29 款 Stellaris Cortex-M3 微控制器 (MCU) 以及基于 ARM9和 Cortex-A8 技术的最新微处理器 (MPU) —— Sitara 系列旗下的头两款器件。该产品阵营的进一步壮大得益于TI 近期对 Luminary Micro 的并购,使 TI 作为单个供应商所推出的业界最丰富 ARM 技术处理器系列得到进一步加强。     TI ARM 系列产品拥有完整的信号链,其中包括的众多低功耗处理器不仅
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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