中国·芯片交易在线
首页 | 供应信息 | 求购信息 | 库存查询 | 新闻中心 | 展会资讯 | IC厂商 | 技术资料 | 自由区域
   新闻首页 |  行业动态 | 新品发布 | 政策法规 | 科技成果 | 模拟技术 | 嵌入系统 | 传感控制 | 存储设计  
当前位置:IC72首页>> IC新闻中心>> 嵌入系统 >>电子行业新闻正文

嵌入式实时操作系统与网络构件的设计

时间:2007/12/28 9:51:00  作者:  来源:ic72  浏览人数:1780
 
 

      1、引言

      近年来,嵌入式实时操作系统接入网络后将使远程监测、远程控制、远程诊断和远程维护变得越来越容易。从根本上讲,嵌入式设备接入网络,当前基本上所采用的网络协议是基于TCP/IP通信协议。

      由于嵌入式系统是以计算机技术为基础、软硬件可裁减并对成本、体积、功耗有严格要求的专用系统,它对TCP/IP通信协议的支持有其自身的特点,这些特点也决定嵌入式实时操作系统与网络构件的体系结构。

      本方案以LPC2210为核心元件研究了嵌入式实时操作系统与网络构件的硬件电路,同时在μC/OS-Ⅱ平台上编写了应用软件程序。

      2、嵌入式实时操作系统与网络构件的系统整体结构

      嵌入式实时操作系统与网络构件的硬件原理图如图1所示。系统采用PHILIPS公司LPC2210微处理器,外扩一片FLASH SST 39VF160,并接入RTL8019AS以太网芯片(Webchip),再与接口连接器HR901170A相连。并将开放源代码的TCP/IP协议栈 LwIP移植到μC/OS-Ⅱ系统上。

ic72新闻中心

      图1 硬件结构原理图

      RTL8019AS以太网芯片(Webchip)是独立于各种微控制器的专用网络接口芯片,它通过标准的输入、输出口与MCU相连。具有16位的数据总线 和24为的地址总线,并且内部集成了DMA控制器、ISA总线控制器和集成16k SRAM、网络PHY收发器,兼容NE2k标准。用户可以通过DMA方式把需要发送的数据写入片内SRAM中,让芯片自动将数据发送出去;而芯片接收到数 据后,用户可以通过DMA方式将其读出。

      HR901170A是中山市汉仁电子有限公司生产的RJ45接口连接器(带网络变压器/滤波器),该连接器满足IEEE802.3和IEEE902.3ab标准,能够较好的抑制电磁干扰。通过HR901170A系统就可以连接到以太网上了。

      该方案设计相对简单,硬件电路中采用的LPC2210是PHILIPS公司推出的微处理器,带有16k RAM,76个通用I/O口,12个独立外部中断引脚,集成有8通道的10位A/D,能够基于芯片设计复杂的系统。虽然LPC2210具有较快的访问速 度,但片内没有集成FLASH,所以这里扩展一片16Mbit FLASH SST 39VF160保存用户程序。其架构满足了μC/OS-Ⅱ正常运行的基本要求。

      3、嵌入式实时操作系统与网络构件的软件设计

      为使嵌入式实时操作系统与网络构件具有交好的实时性和稳定性,在实时多任务操作系统μC/OS-Ⅱ平台上设计系统软件。系统中各个任务在宏观上按照一定的 关系并行工作,CPU资源得到充分利用,系统可靠性得到很大的保证,方便组织开发任务。在μC/OS-Ⅱ平台上,软件设计工作主要包括三个方面的内容: μC/OS-Ⅱ在LPC2210上的移植和LwIP协议在μC/OS-Ⅱ上的实现以及系统应用软件的编写。本设计的系统结构图如图2所示:

ic72新闻中心

      图2 系统结构图

      该系统采用源码公开的嵌入式实时操作系统μC/OS-Ⅱ,版本号为V2.52。其特点是源码公开、可读性强、移植性好、可配置、可裁剪。它采用优先级抢占 式调度方案,优先级最高的任务一旦准备就绪,则拥有CPU的所有权并开始投入运行。μC/OS-Ⅱ的软硬件体系结构图如图3所示。应用程序建立在操作系统 之上,处于系统的顶层,每个任务在宏观上是并行运行。与CPU类型无关的代码提供了系统服务,即内核、任务管理、内存管理等。μC/OS-Ⅱ的移植部分用 于完成与不同处理器的接口工作。μC/OS-Ⅱ的移植必须要求处理器及其编译器满足一定的条件。

ic72新闻中心

图3 μC/OS-Ⅱ硬件和软件体系结构原理图

      μC/OS-Ⅱ的移植工作主要集中在下面几个文中:OS_CPU.H,OS_CPU_A.ASM,OS_CPU_C.C。另外,在INCLUDES.H中 必须包括LPC2210文件LPC2210.H;OS_CFG.H用于系统应用μC/OS-Ⅱ中的初始化配置。OS_CPU.H主要包括了一些与处理器和 编译器相关的常量和类型定义等,而且要注意的是LPC2210的堆栈方向是由高到低,用OS_STK_GROWTH来设置堆栈的增长方向。因此将 OS_STK_GROWTH设为1。


      OS_CPU_A.ASM中需要编写4个汇编语言函数:OS_TASK_SW(),OS_IntCtxSw(),OSStartHighRdy()和OSTickISR()。
   
      OSStartHighRdy()代码如下:
   
      LDR  r4, addr_OSTCBCur    
   
      ;获得当前任务TCB地址
   
      LDR  r5, addr_OSTCBHighRdy
   
      ;获得优先级最高任务TCB地址
   
      ……
   
      ;恢复CPU工作模式
   
      LDMFD  sp!, {r4}
   
      MSR   SPSR_cxsf, r4
   
      LDMFD  sp!, {r4}
   
      MSR   CPSR_cxsf, r4
   
      LDMFD  sp!, {r0-r12, lr, pc}
   
      OS_TASK_SW( )函数汇编代码如下:
   
      STMFD  sp!,  {lr}  ;保存pc
   
      STMFD  sp!,  {lr}  ;保存lr
   
      STMFD  sp!,  {r0~r12}
   
      ;保存寄存器和返回地址
   
      …… 
   
      ;得到当前任务TCB地址
   
      LDR  r4, addr_OSTCBCur
   
      LDR  r5, [r4]
   
      STR  sp, [r5]    
   
      ;保存sp在被占先任务的TCB
   
      ;得到最高优先级任务的TCB地址
   
      LDR  r6, addr_OSTCBHighRdy
   
      LDR  r6, [r6]
   
      LDR  sp, [r6]    
   
      ;得到新任务堆栈指针
   
      ;OSTCBCur = OSTCBHighRdy
   
      STR  r6, [r4]    
   
      ;设置新的当前任务的TCB地址
   
      ……
   
      OSIntCtxSw()函数汇编代码如下:
   
      LDR  sp,=IRQ_STACK  
   
      SUB  r7, sp, #4  
   
      ;将处理器切换到管理模式
   
      MRS  r1, SPSR
   
      ORR  r1, r1, #0xC0
   
      MSR  CPSR_cxsf, r1  
   
      ;完成模式切换
   
      ……
   
      STMFD  sp!, {r4}    
   
      ;保存程序状态寄存器
   
      ……
   
      OS_CPU_C.C需要用C语言编写6个与操作系统相关的函数:OSTaskStkInt(),OStaskCreateHooK(), OStaskDelHook(),OStaskSwHook(),OStaskStatHook(),  OSTimeTickHook()。必须编写的是OSTaskStkInt(),其余5个函数必须声明但可以不编写代码。
   
      void *OSTaskStkInit(void(*task)(void *pd),void *pdata, OS_STK *ptos, INT16U opt)
   
      { OS_STK *stk;
   
      opt = opt
   
      //防止编译错误
   
      stk = ptos;   
   
      //装载堆栈指针
   
      ……
   
      *--stk = (USER_USING_MODE|0x00);
   
      //spsr,允许IRQ,FIQ中断
   
      *--stk = ();  
   
      //关中断计数器OsEnterSum
    
      return (stk);
   
      }

      下来要做的就是LwIP在μC/OS-Ⅱ上的移植,即就是把与硬件、OS、编译器相关的部分独立出来放在/src/arch目录下。LwIP在μC/OS -Ⅱ上的实现就是修改这个目录下的文件,其它文件一般不做修改。首先要修改与CPU或编译器相关的文件,如数据长度,字的高低位顺序等要和用户实现 μC/OS-Ⅱ移植时定义的数据长度参数是一致的;然后要修改与操作系统相关的函数与数据结构;最后是库函数的实现,如u16_t htons();u16_t ntohs(); u32_t htonl();u32_t ntohl();int strlen(); int strncmp(); void bcopy(); void bzero(); 

      前4个函数由用户自己实现,而ADS编译器中库里面已经有了后四个函数。用户在其它CPU上实现时应根据自己的编译器来决定。

      LwIP在μC/OS-Ⅱ上的移植结束后,剩下的工作就是编写应用程序。将系统划分成若干个任务,每个任务对应一个独立的无限循环的主程序,完成一个特定 的功能。系统任务优先级的划分是根据任务的重要性而定的,当然还要考虑到系统的安全性因素。为简化设计,应用程序采用静态优先级,即应用程序在执行的过程 中各个任务优先级保持不变。系统的软件架构搭建好了以后,用C编写各个任务就容易多了。主程序中关键代码如下:
   
      #define  TASK_STK_SIZE    64  
   
      ;声明任务堆栈
   
      OS_STK  TaskStartStk[TASK_STK_SIZE] 
   
      ;开始任务堆栈
   
      OS_STK  TaskWatchStk[TASK_STK_SIZE] 
   
      ;监视任务堆栈
   
      ……
   
      void TaskWatch(void *data)    
   
      ;声明监视任务的函数原型
   
      ……
   
      void main(void)
   
      { OSInit() 
   
      /*初始化μC/OS-Ⅱ*/
   
      OSTaskCreate(TaskStart,(void*)0,& TaskStartStk[TASK_STK_SIZE-1],0);
   
      OSStart();
   
      /*开始多任务*/
   
      }
   
      void TaskStart(void *data)
   
      { data=data;
   
      /*防止编译器错误*/
  
      ……}

      将主程序和μC/OS-Ⅱ中的系统文件放在同一工程下,进行编译即可。为了提高执行效率,可以根据实际应用修改μC/OS-Ⅱ的部分常用代码,甚至剪切掉某些不必要的代码。

      4、结束语

      基于嵌入式实时操作系统与网络构件的设计方案在硬件上简洁可靠;软件可维护性好,可扩展性好,有利于系统的后续开发,降低了系统设计的复杂性。随着嵌入式 产品研究的深入,网络接口芯片的研究也会快速发展,是智能化产品的设计更趋向简单、标准、成熟。可以看出,嵌入式实时操作系统与网络将会得到更大的发展和 更广阔的应用。

 
【相关文章】
·嵌入式实时操作系统与网络构件的设计
 
 
IC新闻搜索
 
热点新闻
基于红外超声光电编码器的室内移动小车定位系
基于闪烁存储器的TMS320VC5409DSP并行引导装载方法
非移动市场需求飙升,ARM预计2010年出货量超50亿片
一种快速响应的电容式湿度传感器感湿薄膜设计
利用特殊应用模拟开关改进便携式设计
无线传感器网络跨层通信协议的设计
基于ARM9内核Processor对外部NAND FLASH的控制实现
基于GSM技术的汽车防盗系统的设计
热电阻在烟叶初烤炕房温度控制中的应用
高速数据转换系统对时钟和数据传输的性能要求
友情连接
 关于我们  IC论坛  意见反馈  设置首页  广告服务  用户帮助  联系我们
copyright:(1998-2005) IC72 中国·芯片交易在线
(北京)联系电话:(010)82614113、82614123 传真:(010)82614123 客户服务:service@IC72.com 库存上载:IC72@IC72.com
在线MSN咨询:ic72sale8@hotmail.com 通信地址:北京市西城区西直门内大街2号大厦15层 邮政编码:100013
(深圳)联系方式: 在线MSN咨询:ic72sale6@hotmail.com 在线QQ咨询:191232636 通信地址:深圳市福田区振华路
注 册 号: 1101081318959(1-1)

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9