基于ARM和eCos的 嵌入式WEB服务器设计

发布者:电子艺术大师最新更新时间:2011-07-01 关键字:ARM  eCos  嵌入式WEB服务器 手机看文章 扫描二维码
随时随地手机看文章

  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所示。

基于M D K RTX的COrtex—M3多任务应用设计

  基于该平台,设计一个超温报警器。使用美国半导体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所列的几个状态。

基于M D K RTX的COrtex—M3多任务应用设计

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

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

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

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

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

基于M D K RTX的COrtex—M3多任务应用设计

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

基于M D K RTX的COrtex—M3多任务应用设计

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

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

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

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

基于M D K RTX的COrtex—M3多任务应用设计

  基于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文件到工程文件夹中,并添加到工程中。

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

基于M D K RTX的COrtex—M3多任务应用设计

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

  4 应用设计

  4.1 多任务应用设计

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

基于M D K RTX的COrtex—M3多任务应用设计

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

  将应用分解为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显示了任务触发的流程。

  定义任务:

基于M D K RTX的COrtex—M3多任务应用设计

基于M D K RTX的COrtex—M3多任务应用设计

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

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

基于M D K RTX的COrtex—M3多任务应用设计

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

基于M D K RTX的COrtex—M3多任务应用设计

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

基于M D K RTX的COrtex—M3多任务应用设计

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

  4.2 应用设计测试

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

基于M D K RTX的COrtex—M3多任务应用设计

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

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

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

基于M D K RTX的COrtex—M3多任务应用设计

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

基于M D K RTX的COrtex—M3多任务应用设计

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

  结 语

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

 

 

关键字:ARM  eCos  嵌入式WEB服务器 引用地址:基于ARM和eCos的 嵌入式WEB服务器设计

上一篇:基于ARM和nRF24L01的无线数据传输系统
下一篇:基于ARM核微处理器的便携式管道泄漏检测仪

推荐阅读最新更新时间:2024-03-16 12:37

Imagination走出ARM阴影:与多家公司签订授权
    导语:国外媒体周日发表题目为「Imagination走出ARM阴影」(Imagination looks to emerge from Arm』s shadow)的文章称,作为英国两大晶元厂商,Imagination和ARM本来井水不犯河水。但随着并购的进行,两家公司相互侵入对方领地。在过去的一年中,Imagination一度陷入困境,但如今正走出ARM阴影的笼罩。   以下为文章内容摘要:   当前,苹果公司的iPhone 5s采用的就是Imagination TechnOLogies的图形晶元技术。一年前,Imagination Technologies市值高达16亿英镑。   当时,如果Imagination Tech
[手机便携]
基于ARM-Linux嵌入式系统引导程序的设计
0. 概述   在专用的嵌入式开发板上运行操作系统(如Linux)已经变得越来越流行,而Bootloader就是为引导操作系统内核运行的一段代码。通过它可以初始化硬件设备、建立或检测内存空间的映射,其功能有点类似于PC机的BIOS(基本输入输出系统)程序。它的主要作用是为运行操作系统提供基本的运行环境,并操作系统的内核装载到存储器(RAM)中的合适位置上去运行。本文将以Samsung公司的S3C2410开发板为开发平台,具体阐述了Bootloader的运行原理与实现分析。   Bootloader程序与CPU芯片的内核结构、具体芯片和使用的操作系统等因素有着密切关系,因此要为所有类型的嵌入式开发板建立一个通用的Bootlo
[单片机]
基于<font color='red'>ARM</font>-Linux<font color='red'>嵌入式</font>系统引导程序的设计
ARM的启动代码为什么要用汇编语言
在ARM中讲到ARM的启动代码必须有汇编语言写成,一直不是很了解。 书上给的原因是 C语言不具备上电立即运行的条件: 全局变量没有初始化、系统堆栈没有初始化等。 那单片机的C语言怎么就不要启动代码?(keil带有启动代码,但是处理不好会出错,一般不用也没事) 看来还是和编译器有关,今天看到了一个比较信服的答案。 编译器在编译C语言时 ,会在前加一段固定的代码**.O文件,他是编译器自带的一个文件, 即C语言执行的第一条指令不是C语言的main入口函数中,而是**.O中指令。 指令初始化后调用MAIN函数入口,但是并不能直接运行,我们必须写一段代码来取代他。 所以我们经常能看到一些超简单的启动代码: AREA |DATA|,CODE,
[单片机]
基于ARM单片机 LPC2214的在线式UPS硬件设计
1 概 述 目前UPS主要发展方向有两个:一是新的功能不断加强,例如增加远程监视、自动诊断、识别、事件记录、故障警告等功能;二是自身效率的提高。采用高效率的IC芯片和新的制造工艺,使空载功耗不断地降低,功率密度进一步提高。紧凑密集的空间设计给小型电子设备的应用带来了新的解决方案。 将功能强大的嵌入式微处理器(本文选用LPC2214)系统引入UPS,可以增强UPS的功能,使其具有网络化、智能化的特性,满足许多无人职守基站的用电要求。用数字控制代替模拟控制,可以消除温漂、老化等模拟器件存在的问题;抗干扰能力强,有利于参数整定和调节;通用性强,便于通过改变程序软件方便地调整方案和实现多种新型控制策略;同时高度集成的数字电路可
[电源管理]
基于ARM的智能储物系统设计
  智能储物系统由上位机、物品存取软件和以下位机为核心的自动控制执行机构组成。上位机为一台内部安装了物品存取软件的PC机,它为智能储物系统提供人机交互平台,实现智能储物系统的用户验证功能、物品存取界面显示、存储物品的管理和检索功能。以基于ARM LPC2210的下位机为核心的自动控制执行机构接收上位机发送的控制指令,通过自动控制使被选中的储物箱体到达预定的位置来实现物品的自动存取和异常情况下的快速报警功能。整个储物系统被安装在一个坚固、密封的金属箱体中。该金属箱体可以被嵌入到非承重墙体中或者作为房屋隔断使用,其大小可根据用户需要做成整面墙或为墙体的一部分。与传统保险柜相比,它非常隐蔽,而且合理、有效地利用了室内空间。储物系统存
[单片机]
基于<font color='red'>ARM</font>的智能储物系统设计
ARM开发:一 ARM微处理器概述
1.1ARM-Advanced RISC Machines ARM(Advanced RISC Machines),既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。 1991年ARM公司成立于英国剑桥,主要出售芯片设计技术的授权。目前,采用ARM技术知识产权(IP)核的微处理器,即我们通常所说的ARM微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,基于ARM技术的微处理器应用约占据了32位RISC微处理器75%以上的市场份额,ARM技术正在逐步渗入到我们生活的各个方面。 ARM公司是专门从事基于RISC技术芯片设计开发的公司,作为知识产权供应商
[单片机]
ARM位操作和伪指令介绍
ARM汇编程序由指令(ARM指令和伪指令)、伪操作和宏指令组成。 ARM伪操作: GET,通常用于包含定义常量的源文件,如用EQU定义的外设地址,类似于C语言中用include好含头文件。(汇编语言中被包含的文件常以.inc结尾)GET 2440addr.inc AREA、ENTRY和END AREA操作常用于定义一个段。通常一个ARM源程序至少需要一个代码段。 ENTRY用于指定程序的入口点。 END用于告诉汇编编译器源文件已经结束。 EXPORT和IMPORT EXPORT 伪操作用于声明外部标号,即当前标号是本源文件中定义的,在其他文件中可能会被引用。 IMPORT 伪操作用于告诉编译器
[单片机]
苹果广告暗示iPhone将采用Arm处理器
北京时间1月12日消息,据国外媒体报道,苹果近日对外展示了iPhone智能手机后,外界非常关注该机型将采用何种处理器。而苹果网站上的一则招聘广告暗示,iPhone很可能采用Arm处理器。 这则招聘网络工程师的广告显示,希望熟悉Mac OS和嵌入平台特别是Arm处理器的人才加入苹果。一些分析人士称,Arm处理器能满足智能手机任务处理需求,且能耗较低,目前已占据智能手机处理器市场的优势地位,故而iPhone采用Arm也在情理之中。如果iPhone采用Arm处理器,将代表苹果Mac OS X操作系统的最新发展方向。目前Mac OS已可应用于英特尔的x86和IBM的PowerPC处理器,而Arm无疑将代表苹果操作系统的第三个平台。 市场
[焦点新闻]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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