基于某nios软核cpu地ucos-ii和lwip移植

基于某nios软核cpu地ucos-ii和lwip移植

ID:35935862

大小:111.00 KB

页数:11页

时间:2019-04-25

基于某nios软核cpu地ucos-ii和lwip移植_第1页
基于某nios软核cpu地ucos-ii和lwip移植_第2页
基于某nios软核cpu地ucos-ii和lwip移植_第3页
基于某nios软核cpu地ucos-ii和lwip移植_第4页
基于某nios软核cpu地ucos-ii和lwip移植_第5页
资源描述:

《基于某nios软核cpu地ucos-ii和lwip移植》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、实用标准文案Altera公司推出的Nios软核CPU是一种可配置的通用精简指令集计算RISC(ReducedInstructionSetComputing)嵌入式处理器。它可以与各种外设相结合,构成一个定制的可编程片上系统SOPC(SystemonProgramableChip)。嵌入式实时操作系统uC/OS-II是一个非常优秀的实时操作系统RTOS(RealTimeOperatingSystem),其性能已得到广泛认可。uC/OS-II的特点有:公开的源代码、可移植、可裁剪、可固化、抢占式内核。T

2、CP/IP是Interenet的基本协议。嵌入式设备  要与Internet网络交换信息,就必须支持TCP/IP协议。尽管uC/OS-II是一个开放源码的RTOS,但是目前它的第三方TCP/IP支持都是商业化的,很少给出源代码。用户需要付费才能获得。通过在Nios上移植uC/OS-II和开放源码的TCP/IP协议栈-LwIP轻量级网络协议(Light-weightInternetProtocol),就可以实现uC/OS-II的网络功能,并建立一套嵌入式网络开发平台。该系统模型示于图1。uC/OS-I

3、I在Nios上的移植  uC/OS-II可以看作是一个多任务的调度器,在这个任务调度器上添加了和多任务操作系统相关的一些系统服务,如信号量、邮箱、消息队列等。uC/OS-II的设计分为与处理器类型无关的代码、与处理器类型相关的代码和与应用程序有关的配置代码三部分。这也是uC/OS-II具有良好的可移植性的原因。移植工作主要集中在多任务切换的实现上。这部分代码主要是用来保存和恢复处理器现场(即相关寄存器),因此不能用c语言,只能使用特定处理器的汇编语言完成。在Nios上移植uC/OS-II非常简单,只

4、需修改三个和Nios体系结构相关的文件即可。下面分别介绍这三个文件的移植工作。   文档实用标准文案1.1OS_CPU.H文件  数据类型定义这部分的移植是和所用的编译器相关的,我们使用的编译器是nios-elf-gcc。需要定义的数据类型包括无符号和有符号的8位、16位和32位整型变量等。  堆栈单位因为处理器现场的寄存器在任务切换时都将被保存在当前运行任务的堆栈中,所以OS_STK数据类型应该与处理器的寄存器长度一致。typedefunsignedintOS_STK;堆栈增长方向堆栈由高地址向低

5、地址增长,这和选择的编译器有关。#defineOS_STK_GROWTH1宏定义(包括开、关中断的宏定义,以及进行任务切换的宏定义)#defineOS_ENTER_CRITICAL()disable_interrupt();#defineOS_EXIT_CRITICAL()enable_interrupt()#defineOS_TASK_SW()OSCtxSw1.2OS_CPU_C.C文件  文档实用标准文案该文件必须实现任务初始化时的堆栈设计,也就是在堆栈增长方向上如何定义每个需要保存的寄存器的位

6、置。我们将堆栈空间设计为按任务堆栈空间由高至低依次保存寄存器ra、ISTATUS、r1~r31。该文件还需要实现几个操作系统规定的hook函数。通常都实现为空函数。1.3OS_CPUA.S文件(由汇编语言实现)  (1)OSStartHighRdy()函数此函数是在OSStart()多任务启动后,负责从最高优先级任务的TCB控制块中获得该任务的堆栈指针sp,通过sp依次将CPU现场恢复。这时系统就将控制权交给用户创建的该任务进程,直到该任务被阻塞或者被其他更高优先级的任务抢占CPU。该函数仅仅在多任

7、务启动时被执行一次,用来启动优先级最高的任务执行,以后多任务的调度和切换就由下面的函数来实现。  (2)OSCtxSw()函数任务级的上下文切换。它是当任务因被阻塞而主动请求CPU调度时被执行的。它的工作是先将当前任务的CPU现场保存到该任务堆栈中,然后获得最高优先级任务的堆栈指针,从该堆栈中恢复此任务的CPU现场,使之继续执行。  (3)OSIntCtxSw()函数中断级的任务切换,它是在ISR(中断服务例程)中执行任务切换。当发现有高优先级任务就绪,则在中断退出后并不返回被中断任务,而是直接调度

8、就绪的最高优先级任务执行。这样做的目的是能够尽快地让高优先级的任务得到响应,保证系统的实时性。它的原理基本上与任务级的切换相同,但是由于进入中断时已经保存过被中断任务的CPU现场,因此这里就不用再保存。  文档实用标准文案(4)OSTickISR()函数时钟中断处理函数。它的主要任务是负责处理时钟中断,调用系统实现的OSTimeTick函数,如果有等待时钟信号的高优先级任务,则需要在中断级别上调度其执行。  (5)OS_ENTER_CRITICAL()函数和OS_EX

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。