![Rank: 8](images/default/star_level3.gif) ![Rank: 8](images/default/star_level3.gif)
- UID
- 872238
|
![](http://images.eccn.com/silabs/silicon_chip_980x60_202203.jpg)
(3) sys_mbox_t消息。
在LwIP中实现缓冲、数据传递要用到消息队列,所以在sys_arch中实现sys_mbox_t结构体和处理函数:
typedef struct
{
OS_EVENT * pQ;
void * pvQEntries [MAX _ QUEUE _ EN_ TRIES];
} sys_mbox_t;
sys_mbox_t;
sys_mbox_t sys_mbox_new (void);
void sys_mbox_post(sys_mbox_t mbox,void * msg);
INT16U sys_arch_mbox_fetch (sys_mbox_tmbox,void * * msg,INT16U timeout);
void sys_mbox_free (sys_mbox_t mbox);
在μC/OS-Ⅱ中同样实现了消息队列结构OSQ及其相应操作函数,但在μC/OS-Ⅱ并没有对消息队列中的消息进行管理,因此不能直接使用,所以sys_mbox_t结构定义如上面所述。对队列本身的管理利用μC/OS-Ⅱ的OSQ操作完成;对消息的创建、使用、删除回收使用μC/OS-Ⅱ中的内存管理模块实现,两部分综合起来形成了LwIP的消息队列功能。
2.网络设备驱动程序
驱动程序主要包括:
(1) 初始化CPU芯片s3c4510b的ethernet controller的寄存器和PHY芯片ICS1890的控制寄存器;
(2) 中断处理函数;
(3) 接收数据包和发送数据包处理函数。
四、μC/OS-Ⅱ在s3c4510b上的移值
μC/OS-Ⅱ是一个开源的RTOS,其主要工作流程如图4所示。任务切换的核心是利用出栈指令将每个任务的工作现场恢复,并且调整PC指针来完成任务的切换。μC/OS-Ⅱ移值的关键就是如何构造任务堆栈及切换任务时的出栈顺序。在这个流程图中我们可以看到在移值过程中需编写的几个子程序的位置。
由图4的工作流程可以看出要实现μC/OS-Ⅱ的移值,必须对系统源码做必要的修改,主要集中在以下三个文件中。
![](http://embed.chinaitlab.com/UploadFiles_4615/201306/20130604221546490.png)
(一) OS CPU.H文件
OS_CPU.H中包括了用#define定义的与处理器相关的常量、宏、数据类型、堆栈单位和堆栈增长方向。
1.数据类型定义
不同的处理器有不同的字长,而且数据字长和所用的编译器也有关系,因此在移植中要定义一些数据类型。在本网关的设计中所用的编译器是开源的GNU下的arm-elf-gCC,用户需要做的就是查看所用的编译器手册,确定对应于μC/OS-Ⅱ的标准C数据类型。 |
|