基于AVR单片机的多任务嵌入式Internet系统设计

[09-12 18:17:39]   来源:http://www.88dzw.com  单片机学习   阅读:8379

文章摘要:地址译码采用的是ATF16V8,具体是把MCU地址线的高8位作为16V8的译码输入,16V8的3位输出作为译码片选输出:低端RAM(32KB)、高端RAM(32KB)和8019AS的片选。由于8019AS的地址空间仅需要32Byte,而且与高端RAM的地址重叠,为了给RAM分配尽可能多的地址空间,为8019AS分配顶部的256Byte,而把剩余的地址空间全部分配给RAM。上述译码的CUPL描述如下:CS_RAM_L = ! A15;CS_RAM_H = A15 & ! (A14 & A13 & A12 & A11 & A10 & A9 & A8); CS_8019 = A15 & A14 &

基于AVR单片机的多任务嵌入式Internet系统设计,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com

  地址译码采用的是ATF16V8,具体是把MCU地址线的高8位作为16V8的译码输入,16V8的3位输出作为译码片选输出:低端RAM(32KB)、高端RAM(32KB)和8019AS的片选。由于8019AS的地址空间仅需要32Byte,而且与高端RAM的地址重叠,为了给RAM分配尽可能多的地址空间,为8019AS分配顶部的256Byte,而把剩余的地址空间全部分配给RAM。上述译码的CUPL描述如下:

CS_RAM_L = ! A15;

CS_RAM_H = A15 & ! (A14 & A13 & A12 & A11 & A10 & A9 & A8);

CS_8019 = A15 & A14 & A13 & A12 & A11 & A10 & A9 & A8;

3 操作系统移植

  uC/OS-II是一个专门为中小型嵌入式应用设计的抢占式的实时操作系统内核,具有源代码公开、移植性好、可裁减、可固化、实时性和安全稳定性高的特点 ,非常适合本系统的应用。uC/OS-II的系统框图如图2所示。

  uC/OS-II与硬件平台无关的代码文件:UCOS_CORE.C、UCOS_II.C等

  uC/OS-II配置代码文件:INCLUDES.H 、OS_CFG.H


图2:uC/OS-II的系统框图
  在设计之初就充分考虑了移植性,移植起来非常方便。从图2可以看出,与移植有关的只有3个文件:OS_CPU.H,OS_CPU_C.C和OS_CPU_A.S。

  第1个文件是OS_CPU.H,其中主要定义了一些与编译器有关的数据类型、堆栈的生长方向、临界代码区的保护方式。需要说明的是uC/OS-II中临界代码区的保护方式有3种,本设计采用第3种,即在进入临界区之前把CPU状态寄存器SREG的内容保存到一个局部变量cpu_sr中,在退出临界区之后再还原SREG,这样做的好处是临界区保护不会对SREG产生影响。其中SREG的保存和返回函数必须由汇编语言来写,放在OS_CPU_A.S文件中。

  第2个文件OS_CPU_C.C中主要是任务堆栈初始化函数OSTaskStkInit(),任务创建时调用此函数来初始化任务的堆栈结构。该函数一开始把传入的任务函数的指针存放到硬件堆栈的栈顶,看上去就像该函数在执行过程中发生了中断一样(低字节在先),这样返回后就可以从新的任务开始执行了。需要特别注意的是,在这个函数中必须把CPU状态寄存器SREG的值设为0x80,也就是全局中断使能,否则系统将崩溃。

  最后一个文件OS_CPU_A.S是一个汇编源文件,主要定义了6个汇编函数。首先是临界区保护用到的SREG保存和恢复函数。然后定义的是OSStartHighRdy()函数,它只在系统启动时由OSStart()函数调用一次,所做的工作主要是让系统从最高优先级的任务开始执行,实现的方法和后面要介绍的OSCtxSw()函数相似。OSCtxSw()函数实现的是任务级的切换,首先把当前的任务的状态保存到其任务控制块TCB中,然后把当前优先级最高的任务的TCB中的内容加载到工作寄存器中,这样函数返回后就可以从此任务开始执行了。接下来的OSIntCtxSw()函数实现的是中断级的任务切换,它和OSCtxSw()函数的唯一不同是它是在中断中调用的,因此不需要保存工作寄存器的内容,剩下的和任务级的切换过程完全一样。最后一个定义的是节拍时钟的中断服务子程序,在这个函数中的开始要令中断欠套全局变量加1,并且调用时钟管理函数OSTimeTick(),中断退出时调用系统提供的中断退出函数OSIntExit()。

4 网络平台设计

  LwIP是一套专门为嵌入式系统设计的源码开放的轻型协议栈,最新版本是LwIP1.1.0。LwIP在保持TCP/IP协议基本要求的前提下,通过层与层之间共享内存,避免了许多繁琐的复制处理,这样做虽然破坏了严格的分层思想,但却大幅度地节省了代码和数据存储空间,因此非常适合嵌入式应用。与其他轻型协议栈不同的是,LwIP不仅支持一般的网络协议,比如UDP协议、DHCP协议、PPP协议等,而且还支持多网络接口、IPv6和标准API 。

4.1 LwIP在uC/OS-II上的移植

  针对uC/OS-II和AVR的ICC编译器,LwIP的移植只需要编写arch文件夹下的3个文件——cc.h、sys_arch.h和sys_arch.c。其中cc.h中有与CPU和编译器有关的定义,包括数据结构和大小端存储方式等。其中关键代码区的保护用uC/OS-II中的相应函数替换一下即可。剩下的两个与操作系统有关的文件是移植工作的重点。

上一页  [1] [2] [3]  下一页


Tag:单片机学习单片机开发,单片机原理,单片机教程单片机学习
分类导航
最新更新
热门排行