uC/OSⅡ下协议栈uIP的移植与应用
ucosII多核移植和扩展的原理以及注意事项

uC/OS-II是源码开放、可固化、可移植、可裁剪、可剥夺的实时多任务OS 内核,适用于任务多、对实时性要求较高的场合。
uC/OS-II适合小型系统,具有执行效率高、占用空间小、实时性优良和可扩展性等特点,最小内核可编译至2K。
uC/OS-II内核提供任务调度与管理、时间管理、任务间同步与通信、内存管理和中断服务等功能。
所谓RTOS移植,就是使一个实时内核能在某个微处理器或微控制器上运行。
大部分的uC/OS-II代码试用C写的,但仍需要用C和ASM写一些与处理器相关的代码,这是因为uC/OS-II在读写处理器寄存器时只能通过ASM实现。
要是uC/OS-II正常运行,处理器必须满足一定的条件:处理器的C编译器能产生可重入代码;用C语言就可以打开和关闭中断;处理器支持中断,并能产生定时中断;处理器支持能够容纳一定量数据的硬件堆栈;处理器有将SP和其他CPU reg读出和存储到堆栈或内存中的指令;uC/OS-II移植工作主要包括以下三个方面的内容:(1)修改与处理器核编译器相关的代码:主要在includes.h中,修改数据类型定义说明,OS_ENTER_CRITICAL()、OS_EXIT_CRITICAL()和堆栈增长方向定义OS_STK_GROWTH。
(2)用C语言编写10个移植相关的函数:主要在OS_CPU_C.C中,包括堆栈初始化OSTaskStkInit()和各种回调函数。
(3)编写4个汇编语言函数:主要在OS_CPU_A.ASM中,包括:_OSTickISR //时钟中断处理函数_OSIntCtxSW //从ISR中调用的任务切换函数_OSCtxSW //从任务中调用的任务切换函数_OSStartHighRdy //启动最高优先级的任务uC/OS-II移植的关键问题:(1)临界区访问:uC/OS-II需要先禁止中断再访问代码临界段,并且在访问完毕后重新允许中断,这就使得uC/OS-II能够保护临界段代码免受多任务或ISR的破坏。
五、ucos-II的移植-智能嵌入技术开发与实践-佟国香-清华大学出版社

11
Intel/AMD 80186 Motorola 68HC11
\SOFTWARE\uCOS-II\Ix86S \OS_CPU.H \OS_CPU_A.ASM \OS_CPU_C.C \SOFTWARE\uCOS-II\Ix86L \OS_CPU.H \OS_CPU_A.ASM \OS_CPU_C.C \SOFTWARE\uCOS-II\68HC11 \OS_CPU.H \OS_CPU_A.ASM \OS_CPU_C.C
➢ uC/OS-II的全部源代码量大约是6000-7000行,一共有15 个文件。将 uC/OS-II 移植到ARM处理器上,需要完成的工 作也非常简单,只需要修改三个和ARM体系结构相关的文件 ,代码量大约是500行。
14
移植工作
如果处理器和编译器满足了μC/OS-Ⅱ的要求,并 且已经有了必要工具。移植工作包括以下几个内容: (1)用#define设置一些常量的值(OS_CPU.H) (2)声明10个数据类型(OS_CPU.H) (3)用#define声明三个宏(OS_CPU.H) (4)用C语言编写六个简单的函数(OS_CPU_C.C) (5)编写四个汇编语言函数(OS_CPU_A.ASM)
7
处理器支持硬件堆栈
COS-II进行任务调度的时候,会把当前任 务的CPU寄存器存放到此任务的堆栈中,然后, 再从另一个任务的堆栈中恢复原来的工作寄存器 ,继续运行另一个任务。所以,寄存器的入栈和 出栈是COS-II多任务调度的基础。
处理器中有专门的指令处理堆栈,可以灵活 的使用堆栈。
uip应用

uip应用介绍一个适用于8/16位单片机的嵌入式TCP/IP协议栈(uIP)在发电机远程监测系统中的应用。
重点阐述uIP的功能特性、体系结构和相关接口,并详细介绍如何在该协议栈上实现一个嵌入式Web服务器。
目前uIP已成功地移植到51单片机上。
目前,随着互联网的发展,越来越多的工业测控设备已经将网络接入功能作为其默认配置,以实现设备的远程监控和信息分布式处理。
笔者曾参与某发电机射频监测仪的开发,该设备主要用于诊断和预警发电机早期故障,并通过RS232接口定时输出电平和状态数据,现场专门设一台PC作接收、显示及存储。
每年都要有专家到各发电厂对以往数据作检查和诊断,不胜其烦。
因此有必要设计一个RS232到Internet的数据传输模块,以便对发电机的运行状况作远程监测。
设计该模块的关键在于如何实现一个嵌入式TCP/IP协议栈,根据以往的经验,自己设计一个协议栈的难度很可能超过应用本身,而采用商业的协议栈似乎又无必要(功能过于复杂),最后笔者选用一种功能简易的免费TCP/IP协议栈uIP 0.9作为设计核心。
1 、嵌入式TCP/IP协议栈目前,市场上几乎所有的嵌入式TCP/IP协议栈都是根据BSD版的TCP/IP协议栈改写的。
在商业嵌入式TCP/IP协议栈大都相当昂贵的情况下,很多人转而使用一些源代码公开的免费协议栈,并加以改造应用。
目前较为著名的免费协议栈有:lwIP(Light weight TCP/IP Stack)——支持的协议比较完整,一般需要多任务环境支持,代码占用ROM>40KB,不适合8位机系统,没有完整的应用文档;uC/IP(TCP/IP stack for uC/OS)—基于uC/OS的任务管理,接口较复杂,没有说明文档。
笔者采用的协议栈系瑞典计算机科学研究所Adam Dunkels开发的uIP0.9。
其功能特性总结如下:完整的说明文档和公开的源代码(全部用C语言编写,并附有详细注释);极少的代码占用量和RAM资源要求,尤其适用于8/16位单片机(见表1);高度可配置性,以适应不同资源条件和应用场合;支持ARP、IP、ICMP、TCP、UDP(可选)等必要的功能特性;支持多个主动连接和被动连接并发,支持连接的动态分配和释放;简易的应用层接口和设备驱动层接口;完善的示例程序和应用协议实现范例。
uip协议栈

uIP协议栈分析uIP特性uIP协议栈往掉了完整的TCP/IP中不常用的功能,简化了通讯流程,但保存了网络通讯必须使用的协议,设计重点放在了IP/TCP/ICMP/UDP/ARP这些网络层和传输层协议上,保证了其代码的通用性和结构的稳定性。
由于uIP协议栈专门为嵌进式系统而设计,因此还具有如下优越功能:(1)代码非常少,其协议栈代码不到6K,很方便阅读和移植。
(2)占用的内存数非常少,RAM占用仅几百字节。
(3)其硬件处理层、协议栈层和应用层共用一个全局缓存区,不存在数据的拷贝,且发送和接收都是依靠这个缓存区,极大的节省空间和时间。
(4)支持多个主动连接和被动连接并发。
(5)其源代码中提供一套实例程序:web服务器,web客户端,电子邮件发送程序(SMTP 客户端),Telnet服务器,DNS主机名解析程序等。
通用性强,移植起来基本不用修改就可以通过。
(6)对数据的处理采用轮循机制,不需要操纵系统的支持。
由于uIP对资源的需求少和移植轻易,大部分的8位微控制器都使用过uIP协议栈, 而且很多的著名的嵌进式产品和项目(如卫星,Cisco路由器,无线传感器网络)中都在使用uIP协议栈。
uIP架构uIP相当于一个代码库,通过一系列的函数实现与底层硬件和高层应用程序的通讯,对于整个系统来说它内部的协议组是透明的,从而增加了协议的通用性。
uIP协议栈与系统底层和高层应用之间的关系如图2-1所示。
从上图可以看出,uIP协议栈主要提供了三个函数供系统底层调用。
即uip_init(), uip_input() 和uip_periodic()。
其与应用程序的主要接口是UIP_APPCALL( )。
uip_init()是系统初始化时调用的,主要初始化协议栈的侦听端口和默认所有连接是封闭的。
当网卡驱动收到一个输进包时,将放进全局缓冲区uip_buf中,包的大小由全局变量uip_len约束。
同时将调用uip_input()函数,这个函数将会根据包首部的协议处理这个包和需要时调用应用程序。
uCOS-II移植实验

17
五
基础知识
OS_CPU.S的移植 -OSStartHighRd
OSStartHighRd()函数是在OSStart()多任务启动之后,从最高优先 级任务的TCB控制块中获得该任务的堆栈指针sp,通过sp依次将cpu现 场恢复,这时系统就将控制权交给用户创建的该任务进程,直到该任 务被阻塞或者被其他更高优先级的任务抢占cpu.该函数仅仅在多任务 启动时被执行一次,用来启动第一个,也就是最高优先级的任务执行.
void OSIntCtxSw(void) { need_to_swap_context = 1; }
12
五
基础知识
OS_CPU.S的移植 -时钟节拍中断服务函数
时钟节拍是特定的周期性中断.这个中断可以看作是系统 心脏的脉动. 时钟的节拍式中断使得内核可以将任务延时若干个整数时 钟节拍,及当任务等待事件发生时,提供等待超时的依据. 时钟节拍率越快,系统的额外开销就越大.中断之间的时 间间隔取决于不同的应用,本系统使用S3C44B0的timer 0 作为时钟节拍源,产生间隔10mS的时钟节拍. OSTickISR()就是时钟节拍中断服务函数,也就是S3C44B0 的timer 0的中断处理函数.
jx44b0实验系统教案ucosii移植实验jx44b0实验系统教案ucosii移植实验武汉创维特信息技术有限公司201969提纲11113333222244445555基础知识实验目的实验内容预备知识实验设备6666实验过程7777实验报告要求实验目的实验目的了解ucosii内核的基本原理和主要结构掌握将ucosii内核移植到arm处理器上的基本方法掌握ucosii下基本多任务应用程序的编写实验内容实验内容学习ucosii再arm处理器上的移植过程编写简单的多任务应用程序同时实现跑马灯和数码管显示的功能预备知识预备知识了解嵌入式操作系统的构架以及具体的ucosii的组成了解操作系统的移植方法实验设备实验设备jx44b0教学实验箱adt1000仿真器和adtide集成开发环境串口连接线基础知识ucosii概述ucosii在特定处理器上的移植工作绝大部分集中在多任务切换的实现上因为这部分代码主要是用来保存和恢复处理器现场许多操作如读写寄存器操作不能用c语言只能使用特定的处理器的汇编语言来完成
ucos_ii移植过程详解_移植原理

uCOS-II移值过程实例讲解我将uCOS-II 移植到了EPONS 的C33209的平台上,接下来我就基于我移植好的代码讲解如何将uCOS-II从一种MCU移植到另一种MCU。
首先介绍uCOS-II的文件,如下表:ucos_ii.hos_cfg.hos_cpu.hos_core.cos_dbg_r.cos_flag.cos_mbox.cos_mem.cos_mutex.cos_q.cos_sem.cos_task.cos_time.cucos_ii.cos_cpu_c.cos_cpu_a.asm其中我们和硬件平台相关的文件的文件名被加粗了,也就是说若要将uCOS-II移植到新的平台上只要关心以上四个文件就行了。
当然你也可以根据需要再添加你自己的和平台相关的文件,事实上我也是这么做的。
在我移植的例子中就添加了四个和平台相关的文件,文件如下表:crt0.cdrv_rtc.cvector.cext.scrt0.c是用来初始化系统的比如说MCU的一些特殊寄存器、设置外围的总线接口,等。
drv_rtc.c是用来初始化系统中的一个RTC的,这个RTC可以为内核提供必要的基于时间片调度的时基。
同时提供了对RTC开始和停止的操作函数。
在我的例子中RTC会每秒产生32次中断。
vector.c顾名思义,它是系统上电后为系统提供矢量入口表的文件,当然也包括中断向量表。
ext.s是为uc/OS-II 提供OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()函数的具体实现以及在用户程序的中断函数出入时要调用的状态保护和状态恢复函数OS_SA VEALL ()和OS_RESTOREALL ()。
前面两个函数的功能是:OS_ENTER_CRITICAL()屏蔽中断;OS_EXIT_CRITICAL()恢复原来的中断使能状态。
1. os_cpu_a.asm的说明要想顺利的移植首先要了解uCOS-II的一些基本概念。
uCGUI NIOS II移植及应用笔记

uC/GUI NIOS II移植及应用笔记这是前些日子在使用uc/GUI的时候即下来的一些东西原来发布在EDACN的bbs上面。
现在不知道沉到哪里去了。
现在把它重新整理发布在这里。
随后在明年过年的时候把后续的几个高级主题整理出来。
下面开始我的笔记!有兴趣的兄弟们可以来看看。
step1.下载uC/GUI的代码。
(废话没有源代码移植个鸟)我下载的时uC/GUI3.32这是能得到的源代码中最全的一个版本。
看看里面都有些什么东西。
由于这里的发间大小的限制的问题不能上传源代码。
很是郁闷。
有需要的同志可以联系我。
Email:william7447@首先看看所有名叫Simulation的东西这是uC/GUI在VC中仿真的VC工程,他的仿真功能非常的实用可以在没有具体硬件的情况下先行开发软件,而丝毫不影响软件的兼容性。
但是有一个问题比较郁闷,就是速度的问题。
大家知道嵌入式系统的CPU运算能力有限,而电脑的cpu.........我的整个项目的gui是在电脑上完成的。
拿到目标系统上面编译.......通过。
经过紧张的下载.....................运行..........显示出了第一个画面,无比的兴奋。
但测试发现极其郁闷而几乎无法解决的问题......目标系统的处理能力只有100mips而我的电脑的cpu是P4 3.0。
速度的差别太大了。
解决这个问题几乎成了我后半段工作的主题。
GUI文件夹存放全部uC/GUI源代码的地方看看它的属性有多达390个文件,全部是.c和.h。
可以看出GUI系统是一个庞大复杂的东西。
我在调试系统的时候跟踪过完整的消息循环再进入了60多个子函数调用后还没有看到希望,就彻底的放弃了跟踪的想法。
下来会具体说明这里面都有些什么东西。
config文件夹uC/GUI的配置文件夹。
里面存放的是uC/GUI的配置头文件。
改动里面的相应的就可以改动uC/GUI的配置。
这个GUI功能十分强大。
一步步移植uCOS-IIandLwIP(四)

一步步移植uCOS-IIandLwIP(四)二、uCOS-II移植嵌入式实时操作系统uCOS-II移植的核心在于任务切换时上下文环境的保存及恢复,针对Cortex-M3内核的单片机,其采用了PendSVHandler中断处理的方式解决这一核心问题。
我们要做的就是在任务切换及中断任务切换过程中开启触发PendSV中断,并在PendSVHandler中实现上下文环境的切换,即保存CPU内部寄存器值和恢复切换任务的相关信息。
为什么要使用PendSV中断实现上下文切换呢?参阅Cortex-M3的一段话。
另一个相关的异常是PendSV(可悬起的系统调用),它和SVC 协同使用。
一方面,SVC异常是必须在执行SVC指令后立即得到响应的(对于SVC异常来说,若因优先级不比当前正处理的高,或是其它原因使之无法立即响应,将上访成硬fault——译者注),应用程序执行SVC时都是希望所需的请求立即得到响应。
另一方面,PendSV则不同,它是可以像普通的中断一样被悬起的(不像SVC那样会上访)。
OS可以利用它“缓期执行”一个异常——直到其它重要的任务完成后才执行动作。
悬起PendSV 的方法是:手工往NVIC的PendSV悬起寄存器中写1。
悬起后,如果优先级不够高,则将缓期等待执行。
PendSV的典型使用场合是在上下文切换时(在不同任务之间切换)。
例如,一个系统中有两个就绪的任务,上下文切换被触发的场合可以是:- 执行一个系统调用-系统滴答定时器(SYSTICK)中断,(轮转调度中需要)让我们举个简单的例子来辅助理解。
假设有这么一个系统,里面有两个就绪的任务,并且通过SysTick异常启动上下文切换。
如图所示。
上图是两个任务轮转调度的示意图。
但若在产生SysTick 异常时正在响应一个中断,则SysTick异常会抢占其ISR。
在这种情况下,OS 是不能执行上下文切换的,否则将使中断请求被延迟,而且在真实系统中延迟时间还往往不可预知——任何有一丁点实时要求的系统都决不能容忍这种事。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
.
( . o eeo o ue, n n nvri f ot a dT l o 1 C l g f mp t Naj gU i s yo s n ee mmu i t n , n n 10 3 C ia l C r i e t P s c nc i sNaj g2 0 0 , hn ; ao i
Absr c : r s n , t h a i e eo me t o e I t r e e h o o y, a e y o o s h l p l n e , r m i o d t n n o t a t Atp e e t wi t e r p d d v l p h n ft n e n ttc n l g a v r t fh u e o d a p i c s fo h i a ar c n i o i g t i
po e l o ar mo e a am y tm , a ie e r mo e aa m . p rme t l e u t h w a h i k b t e ma t e ie d I t r e t r d u P t e t l r s se r l d t e z h e t lr Ex e i n a s l s o t t e l e we n s r vc sa n en t r s h t n d n c mmu ia i n ss c e s u l sa l h d t c i v e i t r o n ci n o e o n c t si u c s f l e t bi e o a h e e t n e c n e t ft m. o y s h o h
t e r fi e ao , r d c d t e n e so c e st e I tr e . n r s o s o t i e u s , u i h iht h erg r t r p o u e e d fa c s o t n e n t I e p n e t h sr q e t p t l twe g h h a g TCP I r t c lsa k u P p r / P p o o o t c l o -
第2 2卷
第 9期
计 算 机 技 术 与 发 展
COMP I U 匿R CHNOL TE OGY AND DEVEL OPMENT
21 0 2年 9月
Vo . 2 No 9 12 . S p. 2 2 e 01
u / 下 协 议 栈 uP的移 植 与应 用 C 0S1 1 I
关 键词 :C / P;l ; T P I uP 移植 ;C O I u/ SI
中国分 类号 : P 9 T 3
文献标 识码 : A
文章 编号 :6 3 6 9 ( 0 2 0 - 13 0 1 7 - 2 X 2 1 )9 0 4・ 3 -
Po t g a d Ap l ain o l i C/ ri n pi t fu P n u OS Ⅱ n c o
tn o¥ C2 0p o e srb sdo C/ Io eaigs se o etre o r temanwo ki sflo : l c n g rto e e- ig t 3 41 rc so ae nu OS 1 p rt y tm nt ag t ad, i r a ol ws uP o f uain,t r n h b h s i h n titrae c i rv rpo rmm ig, 3 41 i rpo rmmi g, C/ I otn 叩 piaind sg ae n uP. n l a pid e nefc hp die r ga n ¥ C2 0 t me r ga n u OS I r g, lc t e inb sdo l Fial p le p i o y,
3 Istt o o ue eh oo y N nigU iesyo ot adT l o .ntue f mp t T c nlg , aj nv rt f s e cmmu i t n , i C r n i P sn e nc i s ao N nig20 0 , hn ) aj 10 3 C ia n
摘 要: 随着互 联 网的发展 , 种家 用 电器从空 调 到冰箱 , 各 都产 生 了接人 Itnt n re的需 求 。针 对 这一 要求 , 中把 一个 轻 量 e 文
级 的 T P I 协 议 栈 uP移植 到基 于三 星的 ¥ C 4 0 理器 和 u / S C /P l 321 处 C O Ⅱ操 作 系 统 的 目标机 上 。移 植 步骤 与 方 法如 下 :l uP
刘春 风 张代 算机 学院 , 苏 南京 200 ; 江 10 3 2 江 苏省 无线传 感 网高技 术研 究重点 实验 室 , 苏 南 京 2 0 0 ; . 江 10 3
3 南京 邮 电大 学 计 算机技 术研 究所 , 苏 南京 2 0 0 ) . 江 10 3
的配 置 , 以太 网接 口芯片驱 动程 序 的编程 ,3 2 1 时器编 程 ,C O I ¥C 40定 u / S I操作 系统 的移 植 , 于 uP的应用 程序 设 计 。最 基 l 后将 移植 后 的 u l 用到 一个 远程报 警 系统 中 , 现 了远 程报 警功 能 。实验 结果表 明 文中成 功 的在智能 设备 和 Itnt P应 实 n re间 e 建 立 了通 信链 路 , 实现 了智能 设备 与 It t n me的互 联 。 e
2 J n s i eh oo yR sac e aoaoyfr rl sS no ew rsN n n 10 3 C ia .i guHg T c n l eerhK yL brtr e s esr t ok , aj g2 0 0 , hn ; a h g o Wi e N i