基于μC/OS-II操作平台的嵌入式电网监测仪的研制
电子元件,电子元器件深圳市创唯电子有限公司
您现在的位置: 首页 > 电子技术
基于μC/OS-II操作平台的嵌入式电网监测仪的研制  2012/3/1
摘 要: μC/OS-II是一种适用于嵌入式系统的源码开放的占先式实时多任务操作系统。本文讨论了基于μC/OS-II嵌入式系统的网络通信实现,包括μC/OS-II实时操作系统、LwIP协议栈的移植和网络设备驱动程序的建立以及系统任务的调度。关键词: μC/OS-II操作系统 LwIP协议栈 RTL8019AS 驱动程序 系统任务  嵌入式电网监测仪使用了嵌入式实时操作系统μC/OS-II和 LwIP协议栈,并成功运行在由S3C44BOX微处理器和RTL8019AS以

摘  要:μC/OS-II是一种适用于嵌入式系统的源码开放的占先式实时多任务操作系统。本文讨论了基于μC/OS-II嵌入式系统的网络通信实现,包括μC/OS-II实时操作系统、LwIP协议栈的移植和网络设备驱动程序的建立以及系统任务的调度。
关键词:μC/OS-II操作系统  LwIP协议栈  RTL8019AS  驱动程序  系统任务

嵌入式电网监测仪使用了嵌入式实时操作系统μC/OS-II和 LwIP协议栈,并成功运行在由S3C44BOX微处理器和RTL8019AS以太网控制器组成的硬件平台。在实时操作系统和LwIP协议栈的驱动下,由微处理器实现数据采集、数据处理和采集模块的控制功能,而以太网控制器通过以太网接收远程主机的命令和向远程主机发送采集数据及当前状态信息。
1  μC/OS-II的移植
μC/OS-II是一种源码公开且被广泛应用、结构小巧、具有可剥夺实时内核的免费嵌入式操作系统。其内核提供任务调度与管理、时间管理、任务间同步与通信、内存管理和中断服务等功能。它适合小型控制系统,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2KB。
移植μC/OS-II时,系统可以运行于用户模式(User Mode),也可以运行于管理模式(Supervision Mode),大部分的移植都运行于管理模式。如果需要,也可以设置为在用户模式运行,但进行处理模式的切换时必须由异常处理完成,这样操作要复杂一些。
下面介绍在本系统中进行μC/OS-II移植时需要解决的主要问题。
(1)OS_CPU.H修改
此修改主要是改变与处理器、编译器有关的数据类型和宏定义,S3C44BOX为32位微处理器,使用armcc编译器。Char类型长度8位,Short类型长度16位,Int和Long类型长度32位。ARM 寄存器都是32 位的,所以将堆栈数据类型OS_STK 声明为32位。所有的堆栈都必须使用OS_STK 声明。
将开关中断的宏OS_ENTER_CRITICAL和OS_EXIT_CRITICAL定义为OS_CPU_ASM.S中的函数ARMDisableINT和ARMEnableINT,用于屏蔽中断和开中断。
(2)OSTaskStkInit( )
OSTaskCreate( )和OSTaskCreateExt( )通过调用OSTask-StkInit( )来初始化任务的堆栈结构,因此,堆栈看起来就像刚发生过中断并将所有的寄存器保存到堆栈中的情形一样。
μC/OS-II为每个任务建立堆栈,用于保存处理器的寄存器。其结构体定义OS_STK[17],任务堆栈空间由高至低依次保存着处理器工作模式(SVC模式)的pc、lr、r12、r11、r10……r1、r0、CPSR、SPSR。
μC/OS-II在OS_CPU_C.C中由任务堆栈初始化函数OSTaskStkInit,需要将任务栈内的CPSR 和SPSR 设为SVC 模式。
(3)OSCtxsw( )
用于任务级的上下文切换。当任务因为被阻塞而主动请求CPU调度时OSCtxsw( )被执行,此时的任务切换在非异常模式下进行。它的工作是先将当前任务的CPU现场保存到该任务堆栈中,然后获得最高优先级任务的堆栈指针,从该堆栈中恢复此任务的CPU现场,使之继续执行。这样就完成了一次任务切换。
(4)OSIntCtxSW( )
用于中断级的任务切换。若在时钟中断ISR中发现有高优先级任务等待的时钟信号到来,则在中断退出后并不返回被中断任务,而是直接调度就绪的高优先级任务执行,从而能够尽快地使高优先级的任务得到响应,保证系统的实时性能。
OSIntCtxSW( )完成的工作为:向S3C44BOX的INTCON寄存器写入值,将IRQ栈内保存的中断CPU寄存器的值写入被中断的任务栈,将就绪的高优先级的任务栈内容写入对应的CPU 寄存器。
(5)OSTickISR( )
时钟中断处理函数。其主要任务是负责处理时钟中断,调用系统实现OSTimeTick( )函数,如果有等待时钟信号的高优先级任务,则需要在中断级别上调度其执行。
OSTickISR( )是标准的中断服务程序,函数的入口写入ISR的中断向量表。其实现的过程是:向S3C44BOX 的0x18写入任意的数(0x18在ARM中是IRQ的中断入口地址),读取S3C44BOX的状态寄存器清除中断,保护CPU寄存器入栈,调用OSIntEnter( )对中断嵌套标志加1。调用中断服务程序OSTimeTick( ),调用OSIntExit( )判断是否需要任务切换,如果需要则调用OSIntCtxSW( )来进行任务切换。若没有调用任务切换函数OSCtxsw( ),则说明CPU寄存器入栈的工作已经在进入中断时完成。
2  LwIP协议栈的移植
LwIP是瑞士计算机科学院的Adam

与《基于μC/OS-II操作平台的嵌入式电网监测仪的研制》相关列表
电话:400-900-3095
QQ:800152669
库存查询
Copyright(C) 2011-2021 Szcwdz.com 创唯电子 版权所有 备案号:粤ICP备11103613号
专注电子元件代理销售  QQ:800152669  电子邮件:sales@szcwdz.com  电话:400-900-3095