基于Nios软核CPU的uC/OS-II和LwIP移植
Altera公司推出的Nios软核CPU是一种可配置的通用精简指令集计算RISC(Reduced Instruction Set Computing)嵌入式处理器。它可以与各种外设相结合,构成一个定制的可编程片上系统SOPC(System on Programable Chip)。嵌入式实时操作系统uC/OS-II是一个非常优秀的实时操作系统RTOS(Real Time Operating System),其性能已得到广泛认可。uC/OS-II的特点有:公开的源代码、可移植、可裁剪、可固化、抢占式内核。TCP/IP是Interenet的基本协议。嵌入式设备要与Internet网络交换信息,就必须支持TCP/IP协议。
尽管uC/OS-II是一个开放源码的RTOS,但是目前它的第三方TCP/IP支持都是商业化的,很少给出源代码。用户需要付费才能获得。通过在Nios上移植uC/OS-II和开放源码的TCP/IP协议栈-LwIP轻量级网络协议(Light-weight Internet Protocol),就可以实现uC/OS-II的网络功能,并建立一套嵌入式网络开发平台。该系统模型示于图1。
uC/OS-II在Nios上的移植
uC/OS-II可以看作是一个多任务的调度器,在这个任务调度器上添加了和多任务操作系统相关的一些系统服务,如信号量、邮箱、消息队列等。uC/OS-II的设计分为与处理器类型无关的代码、与处理器类型相关的代码和与应用程序有关的配置代码三部分。这也是uC/OS-II具有良好的可移植性的原因。移植工作主要集中在多任务切换的实现上。这部分代码主要是用来保存和恢复处理器现场(即相关寄存器),因此不能用c语言,只能使用特定处理器的汇编语言完成。在Nios上移植uC/OS-II非常简单,只需修改三个和Nios体系结构相关的文件即可。下面分别介绍这三个文件的移植工作。
1.1 OS_CPU.H文件
数据类型定义 这部分的移植是和所用的编译器相关的,我们使用的编译器是nios-elf-gcc。需要定义的数据类型包括无符号和有符号的8位、16位和32位整型变量等。
堆栈单位 因为处理器现场的寄存器在任务切换时都将被保存在当前运行任务的堆栈中,所以OS_STK数据类型应该与处理器的寄存器长度一致。
typedef unsigned int OS_STK;
堆栈增长方向 堆栈由高地址向低地址增长,这和选择的编译器有关。
#define OS_STK_GROWTH 1
宏定义(包括开、关中断的宏定义,以及进行任务切换的宏定义)
#define OS_ENTER_CRITICAL() disable_interrupt();
#define OS_EXIT_CRITICAL() enable_interrupt()
#define OS_TASK_SW() OSCtxSw
1.2 OS_CPU_C.C文件
该文件必须实现任务初始化时的堆栈设计,也就是在堆栈增长方向上如何定义每个需要保存的寄存器的位置。我们将堆栈空间设计为按任务堆栈空间由高至低依次保存寄存器ra、ISTATUS、r1~r31。
相关文章
- 2024-10-31奥运场馆几何量参数与计量
- 2024-03-11光纤传感在测温仪方面应用
- 2024-07-11用动力减振器消减建筑结构在地震波激励下的随机振动响应
- 2024-08-13FPGA的超声相控阵系统接收波形合成结构
- 2024-07-24基于ATS的声波换能器设计
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。