您的位置 首页 发布

ARM微处理器的uC/OS的移植规划

概述嵌入式操作系统μC/OS-II是一个公开源代码的占先式多任务的微内核RTOS,其特点可以概括为以下几个方面:公开源代码,代码结构清晰、明了,注

概述

嵌入式操作体系μC/OS-II是一个揭露源代码的占先式多使命的微内核RTOS,其特色能够归纳为以下几个方面:揭露源代码,代码结构明晰、明晰,注释翔实,安排有条理,可移植性好,可裁剪,可固化。内核归于抢占式,最多能够办理60个使命。现在国内对μC/OS-II的研讨和运用都许多。只需买一本书就可取得源代码,对校园和教育的运用彻底免费,商业运用的费用相对也很低。所以对μC/OS-II实时操作体系的学习研讨、开发、运用具有重要意义。

大部分的μC/OS-II代码是运用ANSI C言语书写的,因而μC/OS-II的可移植性好,但是仍需求运用C和汇编言语写一些处理器相关代码。μC/OS-II的移植需求满意以下要求:

(1)处理器的C编译器能够发生可重入代码;

(2)能够运用C调用进入和退出临界区代码;

(3)处理器有必要支撑硬件中止,并且需求一个守时中止源;

(4)处理器需求能够包容必定数据的硬件仓库;

(5)处理器需求有能够在CPU寄存器与内核和仓库交流数据的指令。

依据ARM7的S3C44B0X处理器彻底满意上述要求。它运用ARM公司的16位/32位RISC结构,内核是arm7TDMI,作业在66MHz,片上集成了以下部件:8K Cache、外部存储器控制器、LCD控制器、4个DMA通道、2个UART、1个多主I2C总线控制器、1个I2C总线控制器,以及5通道PWM守时器和1个内部守时器、8通道12位ADC等,能够与常用的外围设备完结无缝衔接,功用强大。现在,国内运用较为广泛。

1内核的移植

μC/OS-II的移植只需求修正与处理器相关的代码就能够了。详细有如下内容:

(1)os_cpu.h中需求设置一个常量来标识仓库增加方向;

(2)os_cpu.h中需求声明几个用于开关中止和使命切换的宏;

(3)os_cpu.h中需求针对详细处理器的字长从头界说一系列数据类型;

(4)os_cpu_a.asm需求改写4个汇编言语的函数;

(5)os_cpu_c.c需求用c言语编写6个简略函数;

(6)修正主头文件include.h,将上面的三个文件和其他自己的头文件参加。

完结上述作业后,μC/OS-II就能够运转在arm处理器上了。

2 LwIP的移植

μC/OS-II自身没有TCP/IP协议栈,现在的一些第三方TCP/IP支撑都是彻底商业化的,很少给出源代码,影响了μC/OS-II的研讨和推行。通过把开放源代码的TCP/IP协议栈LwIP移植到μC/OS-II上来,就取得了一套可免费研讨、学习的嵌入式网络软件渠道。

2.1 Lwip的操作体系封装层(operating system.emulation layer)

Lwip为了习惯不同的操作体系,在代码中没有运用和某一个操作体系相关的体系调用和数据结构。而是在lwip和操作体系之间增加了一个操作体系封装层。操作体系封装层为操作体系服务(守时,进程同步,音讯传递)供给了一个一致的接口。在lwip中进程同步运用semaphone和音讯传递选用”mbox”。操作体系封装层的原代码在…/lwip/src/core/sys.c中。而和详细的操作体系相关的代码在../lwip/src /arch/sys_arch.c中。

操作体系封装层的首要函数如下:

void sys_init(void)//体系初始化

sys_thread_t sys_thread_new(void (* function)(void *arg), void *arg,int prio)//创立一个新进程

sys_mbox_t sys_mbox_new(void)//创立一个邮箱

void sys_mbox_free(sys_mbox_t mbox)//开释并删去一个邮箱

void sys_mbox_post(sys_mbox_t mbox, void *data) //发送一个音讯到邮箱

void sys_mbox_fetch(sys_mbox_t mbox, void **msg)//等候邮箱中的音讯

sys_sem_t sys_sem_new(u8_t count)//创立一个信号量

void sys_sem_free(sys_sem_t sem)//开释并删去一个信号量

void sys_sem_signal(sys_sem_t sem)//发送一个信号量

void sys_sem_wait(sys_sem_t sem)//等候一个信号量

void sys_timeout(u32_t msecs, sys_timeout_handler h, void *arg)//设置一个超时事情

void sys_untimeout(sys_timeout_handler h, void *arg)//删去一个超时事情

关于操作体系封装层的信息能够阅览lwip的doc目录下面的sys_arch.txt.文件。

2.2 Lwip在μC/OS-II上的移植.

2.2.1 体系初始化sys_int()

sys_int有必要在tcpip协议栈使命tcpip_thread创立前被调用。

2.2.2 创立一个和tcp/ip相关新进程sys_thread_new()

lwip中的进程便是μC/OS-II中的使命,留意宏LWIP_STK_SIZE是tcp/ip相关使命的仓库巨细,能够依据状况自己设置,我设置成10*1024,由于44b0X开发板上有8M的sdram;而宏LWIP_TASK_MAX是tcp/ip相关的使命最多数目;LWIP_START_PRIO 是tcp/ip相关使命的开始优先级,tcpip_thread在所有tcp/ip相关进程中应该是优先级最高的;别的tcpip_thread应该是最早创立的。

2.2.3 Lwip中的守时事情

在tcp/ip协议中许多时分都要用到守时,守时的完结也是tcp/ip协议栈中一个重要的部分。 LwIP中每个与外界网络衔接的线程都有自己的timeout特点,即等候超时时刻。这个特点表现为每个线程都对应一个sys_timeout结构体行列,包含这个线程的timeout时刻长度,以及超时后应调用的timeout函数,该函数会做一些开释衔接,收回资源的作业。假如一个线程对应的 sys_timeout为空(NULL),阐明该线程对衔接做永久的等候。timeout结构体已经由LwIP自己在sys.h中界说好了,并且对结构体行列的数据操作也由LwIP担任,咱们所要完结的是如下函数:

struct sys_timeouts * sys_arch_timeouts(void)

这个函数的功用是回来现在正处于运转态的线程所对应的timeout行列指针。timeout行列归于线程的特点,因而是OS相关的函数,只能由用户完结。

2.2.4 “mbox”的完结:

LwIP运用音讯行列来缓冲、传递数据报文,因而要在sys_arch中完结音讯行列结构sys_mbox_t,以及相应的操作函数:

sys_mbox_new() //创立一个音讯行列

sys_mbox_free() //开释一个音讯行列

sys_mbox_post() //向音讯行列发送音讯

sys_arch_mbox_fetch() //从音讯行列中获取音讯

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/fabu/300695.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部