_C_OS_II在LPC2210处理器上的移植

合集下载

基于嵌入式技术的多串口数据传输系统研究

基于嵌入式技术的多串口数据传输系统研究

基于嵌入式技术的多串口数据传输系统研究摘要:串口数据传输技术已经成为工业测控领域的设备范围内有效性最高的一种数据传输形式,然而其本身仍具有一定的局限性,从而限制了数据传输系统的实行速率。

使用lpc2210型号的32位微型控制处理器、gm8125型号的串口通信扩展芯片与μc/os-ii移植性的实时操作系统,把嵌入式技术作为串行终端通信设备和以太网两个部分之间实现数据双向传输的基础条件,设计一种综合程度较高的多串口数据传输系统。

关键词:嵌入式系统以太网多串口数据传输中图分类号:tn 文献标识码:a 文章编号:1007-0745(2013)06-0268-021引言由于串行通信的数据传输速度慢、间隔小与可靠性弱等方面的不足,串行通信设备和控制主机之间存在着数据通信传输与操作管理问题,从而会对自动化执行与工业控制等方面的上升发展产生阻碍作用。

以性价比与实践角度作为实际考虑点,构建了以32位微型控制处理器lpc2210和实时操作系统μc/os-ii为基础的嵌入式技术多串口数据传输系统。

这系统能够充分地解决三个方面的问题。

其一为经过gm8125串口通信扩展芯片改善单串口模式数据传输系统的限制影响,可以达到多串口数据传输的目标功能;其二为rtl8019as型号网卡控制芯片和微型处理器lpc2210的功能性结合,有利于优化微型处理器的资源消耗率;其三为能够有效地提升数据传输效率,达到硬件通信设备的联网实现。

2系统的功能架构嵌入式系统是连接串行数据通信终端设备和以太网两部分而实现数据传输的基础条件,由串口能够接收到从串行数据通信终端设备传来的数据,而且可以对数据实现tcp/ip协议的转变功能,最后进入到intenet中传送至相应的上位机软件。

在实际数据传输系统的执行过程当中,不但需要进行串行通信终端设备的数据采集功能,而且可以实现数据通信的自由控制。

数据通信的转换和传输技术作为系统的关键环节,进行串行通信终端设备数据和通信网络数据格式的判断与转变操作,实现数据双向传输的直接目的。

在LPC1788上移植uCOS-II

在LPC1788上移植uCOS-II

今天终于把uCOS-II在LPC1788上的移植给搞出来了,之前上网搜了很多资料,又把《嵌入式操作系统uC/OS-II》这本书通读了一下,然后开始尝试uCOS-II的移植。

在uCOS-II在不同CPU之间的移植只需要更改三个文件:os_cpu.h,os_cpu_c.c,os_cpu_a.asm。

其中os_cpu.h是关于可移植数据类型的定义、uCOS-II的主堆栈的定义、开关中断宏的定义以及os_cpu_c.c和os_cpu_a.asm中的函数声明;os_cpu_c.c是关于系统钩子函数、系统节拍初始化函数及设置函数还有任务栈初始化函数的定义;os_cpu_a.asm是关于开关中断函数、开始最高优先级任务函数及任务切换函数的定义。

这三个函数的模板有很多,我用的是MDK5.15中自带的,MDK5.15版本中有个Manage Run-Time Environment模块,能在建立工程时为所选的MCU提供RTOS的运行环境支持。

由于我用的开发环境是MDK4.72,所以我将uCOS-II的内核源码及移植文件都复制到了MDK4.72下建立的工程中,分别在MDK5.15的安装路径如下:E:\Program Files (x86)\Keil_v5\ARM\PACK\Micrium\RTOS\1.0.0\Software\uCOS-II\Source和E:\Program Files (x86)\Keil_v5\ARM\PACK\Micrium\RTOS\1.0.0\Software\uCOS-II\Ports\ARM-Cortex-M3\Gene ric\RealView。

其中Source文件夹下的ucos_ii.h不要添加到工程中,否则会出现函数重定义的错误,从官网上下载下来的源码也不包括这个文件;Ports文件夹下的os_dbg.c也不要添加的工程中,在Source文件夹中已经包括了os_dbg_r.c,这两个文件一样。

《嵌入式系统》课程教学大纲

《嵌入式系统》课程教学大纲

《嵌入式系统》课程教学大纲学分:3学时:64适用专业:电子信息、通信技术前导课程:电路分析基础、模拟电路、数字电路、高频电路、单片机原理、C语言后续课程:一、课程的性质和任务本课程围绕目前流行的32位ARM处理器和嵌入操作系统,讲述嵌入式系统的概念、软硬件组成、开发过程以及嵌入式应用程序和驱动程序的开发设计方法。

《嵌入式系统》是培养学生具有嵌入式系统的应用知识、嵌入式系统的初步分析能力和具有使用RTOS (实时操作系统)构成嵌入式系统的应用能力等方面的学科,是电子信息与计算机类或相关工科专业的一门专业课。

二、课程的教学基本要求本课程是一门综合性、实践性、应用性很强的专业课。

课程教学所要达到的目的是:使学生掌握嵌入式系统体系结构,嵌入式处理器结构(ARM架构为主),异常处理、系统控制过程、存储处理、ARM内部资源、各种I/O接口;嵌入式系统开发应用方法;实时多任务操作系统。

本课程将为学生今后从事嵌入式系统研究与开发打下坚实的基础。

三、教学内容和要求(一)理论教学内容和要求第一章:嵌入式系统的概况1、讲授内容:主要讲解嵌入式系统的定义、嵌入式系统的分类、嵌入式系统的组成及嵌入式系统的应用领域和发展趋势。

2、基本要求:使学生明确学习本课程的目的。

第二章:嵌入式系统的硬件基本知识1、讲授内容:1、ARM体系的硬件架构2、冯.诺依曼体系结构和哈佛体系结构3、RISC体系结构4、流水线技术2、基本要求:了解嵌入式系统的硬件基础。

第三章:嵌入式操作系统1、讲授内容:1、嵌入式操作系统的分类2、嵌入式操作系统的特点3、实时操作系统4、目前市场上流行的嵌入式操作系统2、基本要求:掌握嵌入式操作系统的分类和特点,明确实时操作系统的内核特点第四章:ARM架构的嵌入式微处理器1、讲授内容:目前基于ARM架构的嵌入式微处理器:I44B0,2410,LPC2000的架构及特点。

2、基本要求:要求掌握不同处理的的特点及使用场合。

uC/OS—II在LPC2210处理器上的移植

uC/OS—II在LPC2210处理器上的移植
维普资讯

20 0 6年 第 2期
u / — l L C 2 理 器 上 的移 植 C OS I在 P 2 1 0处

【 摘
俊 ,刘 绍 海
( 1福 建泉 州华 侨 大 学机 械 工 程 学院 福 建 泉 州 32 2 ; 6 0 1 2湖 北 武 汉 湖 北 工 业 大 学机 械 工 程 学院 湖 北 武 i 60 6 ) X 3 0 8 .
要工具有 :
堆栈 增 长 方 向 的定 义 , 由于 AD S的 C语 言编 译 器仅 支持 一 种 方 式 , 即 从 上 往 下 长 并 且 必 须 是 满 递 减 堆 栈 , 所 以 OS S K G O T R WT 的 值 为 1 H 。 ( oS CP C. 文 件 移 植 分 析 2 ) U C 每一 个 任 务都 需 要 自己 的堆 栈 空 间 , 以便 进 行 任 务 切 换 的 时候 能够 将 当 时 的处 理 器 现 场 保 存 到 任 务 的堆 栈 空 间 中 ,在 下 次执 行 时 能够 在 恢 复 出来 。在 A M 体 系 结 构 下 . 理 器 的现 场 R 处 通常 指 {c l r一 1 、p rs s I p 、 、 r2 c s、p r 。在 目前 实 现 的 系 统 中 , 务 堆 r0 任 栈 由 高 到 低 依 次 将 保 存 着 p 、 、 2 R 1 R1 … R1 R 、 P R、 e l R1 、 1 、 0 r 、0C S SS P R。 函数 如 下 :
要 】 本 文 介 绍 了使 用 A M 公 司 的 A 1 R DS . 发 工具 在 P LP 2开 HIIS嵌 入 式 L C 20微 处 理 器 上 进 行 v P 21 . C/ ; 入式 嵌 ; 移 植

UCOS-II的详细移植笔记两种处理器的移植比较(S1C33209S3C44BOX)

UCOS-II的详细移植笔记两种处理器的移植比较(S1C33209S3C44BOX)

UCOS-II的详细移植笔记两种处理器的移植比较(S1C33209S3C44BOX)UC/OS-II的详细移植笔记两种处理器的移植比较(S1C33209&&S3C44BOX) [原创 2007-05-20 23:03:21] 字号:大中小UC/OS-II的移植步骤分析zqcumt 07-4-15关于UC/OS-II的移植网上介绍的已经很多了,比较流行的几款处理器(例如ARM)在网上都可以直接下载移植好的代码。

由于最近选修了一门嵌入式系统的课,用的处理器是EPSON公司的S1C33系列,做实验的时候要进行操作系统的移植,这个周末花了一天半的时间学习了一下,因为毕业设计的时候做过ARM上的移植,于是将两者比较了一下,给出一般的移植要点。

由于将来实验还要设计到GUI的移植以及文件系统的移植和网络协议的移植,我会将自己的学习笔记都记录下来。

大家下载到源码后,针对Intel 80x86的代码在uCOS-II\Ix86L目录下。

代码是80x86实模式,且在编译器大模式下编译的。

移植部分的代码可在下述文件中找到:OS_CPU.H, OS_CPU_C.C, 和OS_CPU_A.ASM。

大家可以参考这个例子,对它进行修改。

INCLUDES.H 是主头文件,在所有后缀名为.C的文件的开始都包含INCLUDES.H文件。

使用INCLUDES.H的好处是所有的.C文件都只包含一个头文件,程序简洁,可读性强。

缺点是.C文件可能会包含一些它并不需要的头文件,额外的增加编译时间。

与优点相比,多一些编译时间还是可以接受的。

用户可以改写INCLUDES.H文件,增加自己的头文件,但必须加在文件末尾。

/////////////////////////////////////////////////////////////////// ////////////一、(1)OS_CPU.H文件的移植 (针对S1C33209)//////////////////////////////////////////////////////////////////////////OS_CPU.H 文件中包含与处理器相关的常量,宏和结构体的定义。

uCOS-II下基于ARM系列芯片的移植过程分析

uCOS-II下基于ARM系列芯片的移植过程分析

uC/OS-II下基于ARM系列芯片的移植过程分析前言PS:如果想转载本文请联系tony或者作者本人我。

请勿将本文用于任何商业用途。

本文也是写给自己的,以提供给自己随时查阅。

等我全部写完以后,会把我写的手稿上传到网站上。

总的来说:只是希望本文能对准备学习uCOS的人有点指引,对徘徊在如果移植uCOS的人有点抛砖引玉,对已经玩熟悉了uCOS的朋友,你们就当看看罗!呵呵!本人联系方式:zhenyang.mo#。

如果文中有任何错误请各位看官给本人发一下邮件提醒我一下!感谢感谢了!借个文章抬头问问tony:你那里还有STM32那个板子么?还在免费发放么?最近手痒的很,想玩玩STM32的冬冬了。

等我玩熟悉以后,我就写一些STM32的东东了!有的话,也发一份给偶吧,感谢感谢了!本文是完全基于自己写的,本人看到网上很多地方都提供什么什么芯片基于uCOS的移植代码,但是很少有人能详细讲解为什么要这样进行移植的说明文档。

本人不才想填补一下这部分的空缺。

在论坛上也看到了某位大侠的移植情景分析,写的真的非常好,不过就是对于那些刚入门的兄弟来说,还是太深奥了。

我希望各位看官能结合到我写的这篇文章,在看看那位大侠的情景分析,相信大家一定会收获不少东西的。

文章目录简介第一楼:综述+任务堆栈初始化过程分析(完成)第二楼:启动uC/OS-II的服务函数过程分析(完成)第三楼:任务级的任务切换服务函数过程分析(完成)第四楼:中断级的任务切换服务函数过程分析(完成)第五楼:ARM体系结构下的异常模式分析(完成)第六楼:ARM的启动代码和手动编写中断服务程序(附源代码)(完成)-必须掌握的重点知识源代码重新修正过。

第七楼:在ARM体系下uC/OS-II的中断函数编写(完成)本次就来讲解一下在IAR开发环境下,让整个系统工作在管理模式下的uCOS-II移植。

本文只讲解了OS_CPU_C.C和OS_CPU_A.A这两个文件。

着重给各位看官模拟仿真一下uCOS-II中的任务级上下文切换,本文以图文形势给大家分析。

基于ARM-LPC2210芯片的uClinux移植及应用

基于ARM-LPC2210芯片的uClinux移植及应用
e n t i p p r h e u so x e me t a e p o e h tt e meh d p o s d i h s p p ri c re ta d e e t e n i s a e .T e rs h fe p r n sh v rv d t a h t o r p e n t i a e or c n f c i . h i o s v Ke r s P 2 1 y wo d :L C 2 0;e e d d o eai n s se ;u ln x r n p a t mb d e p r t y tm o C i u ;t s ln a
Hale Waihona Puke 器上 , 不仅可 以合理 地对软 硬件 资 源进 行 调 度 , 而且 为用户 提供 方便 的应 用 接 1… .Ciu 针 对工 业 = u l x是 I n 控 制领域 , Lnx24内核 派生 出来 的嵌 入式 操 作 从 i . u
高 端 新 兴 领 域 中 网络 、 信 、 通 多媒 体 技 术 的 发 展, 以及 控制领 域应 用对数 据处 理 能力 的提 升要 求 ,
促进了 3 2位 A M7 D 系列 L C 2 0嵌入 式处 理 R T MI P 21 器 的广 泛应 用. 果将 操 作 系统 移 植 到嵌 入 式 处 理 如
As t e o e ain s se whc s d r e r m i u u ln x i u e n mirp o e s rwi o tme r n g me tu i h p r t y tm ih i e v d f o i o l x, C i u s sd o c o r c s o t u mo y ma a e n nt n h .
UClnu r d ll c me h an e b d e p r to y tm . whih i i e a te fed o n sra o to . Ho t i x ga ua y be o s te m i m e d d o e a in s se c S am d t h il f idu tl c nr 1 l w o

2440启动串口输出乱码问题

2440启动串口输出乱码问题

2440 移植2.6.30 (转)解压缩内核压缩文件后进入到目录中,然后修改Makefile,找到ARCH ?=CROSS_COMPILE ?=这两项,不修改这两项的话将会默认使用x86的配置,这里修改为ARCH ?= armCROSS_COMPILE ?= arm-linux-arm-linux- 是交叉编译器~ 这里我使用的交叉编译器为友善送的arm-linux-gcc-4.3.2.tgz,带EABI然后执行make menuconfig,然后进入System Type中看看是否为ARM体系~第一行为ARM system type 说明没错~ 然后在ARM system type中选择SamSung“S3C2410...”随后在下面出现的S3C2440 Machines中选择SMDK2440退出保存~ 执行make zImage出现ERRORdrivers/video/console/vgacon.c:510:error “PCIMEM_BASE undeclared”是在vgacon_startup中,vgacon是啥?~ 不认识~ 应该是不必要的东西~ 去掉它~vim drivers/video/console/Makefile在里面看见了这句obj-$(CONFIG_VGA_CONSOLE) += vgacon.o然后执行find ./ -name “Kconfig” | xargs grep “VGA_CONSOLE”看见config VGA_CONSOLE 在driver/video/console/Kconfig中也就是说在驱动->视频->终端中,执行make menuconfig在Device Drivers->Graphics Support->Console display driver support中发现了VGA text console去掉它,保存设置后再编译编译完成后将在arch/arm/boot中得到zImage文件使用SuperVivi的USB加载功能启动这个内核文件~ 得到下列输出zImage magic = 0x016f2818Setup linux parameters at 0x30000100linux command line is: "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0" MACH_TYPE = 1999NOW, Booting Linux......Uncompressing Linux........................................................................................................ done, booting the kernel.失败信息不够丰富~ 根据kasim大大的指点,在配置中进入Kernel hacking打开Kernel debugging和Kernel low-level debugging functions 还有Kernel low-level debugging messages via S3C UART保存后再编译运行zImage后得下列输出zImage magic = 0x016f2818Setup linux parameters at 0x30000100linux command line is: "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0" MACH_TYPE = 1999NOW, Booting Linux......Uncompressing Linux........................................................................................................ done, booting the kernel.Error: unrecognized/unsupported machine ID (r1 = 0x000007cf).Available machine support:ID (hex) NAME0000016a SMDK2440Please check your kernel config and/or bootloader.失败原来是machine的ID和Supervivi传递进来的ID不匹配~关于machine ID,可以参考一下这篇文章<2.6.18-2内核中对S3C2440的引导启动分析>虽然版本老了点,但是核心思想还是没有变vim arch/arm/mach-s3c2440/mach-smdk2440.c在最后一段有这句MACHINE_START(S3C2440 , ”SMDK2440”)这里S3C2440就是machine ID的代号~ 呢具体值是多少呢?~在arch/arm/tools/mach-types中s3c2440 ARCH_S3C2440 S3C2440 362原来我们的machine ID是362~呢bootloader传递进来的值是多少呢?~Error: unrecognized/unsupported machine ID (r1 = 0x000007cf).注意到没有?~ 0x7CF转换成10进制也就是1999修改mach-types中的对应项s3c2440 ARCH_S3C2440 S3C2440 1999虽然这样就和下面MINI2440的1999冲突了,但是只要不加入MINI2440的配置就没事修改后编译,再执行zImage后得下列输出zImage magic = 0x016f2818Setup linux parameters at 0x30000100linux command line is: "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0" MACH_TYPE = 1999NOW, Booting Linux......Uncompressing Linux........................................................................................................ done, booting the kernel.失败咦?~ 啥都没有?~ 最起码也应该有个乱码吧这时候我的第一反应是会不会没有跳入到start_kernel中所以马上编辑init/main.c,在start_kernel的前部加上printk(KERN_INFO “in start_kernel \n”);但是这个时候内核还没有初始化,所以printk是没有作用的~继续得到kasim大大的指点,编辑kernel/printk.c中的printk函数{va_list args;int r;#ifdef CONFIG_DEBUG_LLextern void printascii(const char *);char buff[256];#endifva_start(args, fmt);r = vprintk(fmt, args);#ifdef CONFIG_DEBUG_LLvsprintf(buff, fmt, args);#endifva_end(args);#ifdef CONFIG_DEBUG_LLprintascii(buff);#endifreturn r;}编译后执行zImage,得下列输出zImage magic = 0x016f2818Setup linux parameters at 0x30000100linux command line is: "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0" MACH_TYPE = 1999NOW, Booting Linux......Uncompressing Linux........................................................................................................ done, booting the kernel.<6>in start_kernel<6>Initializing cgroup subsys cpuset<6>Initializing cgroup subsys cpu<5>Linux version 2.6.30.3 (wolf@ubuntu) (gcc version 4.3.2 (Sourcery G++ Lite2008q3-72) ) #4 Wed Aug 5 16:54:49 CST 2009 ..................................................失败虽然正常输出了~ 有进入start_kernel~ 但是为什么之前每输出呢?~ 会不会是没有找到输出设备在输出中看到这行<5>Kernel command line: noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0 console=ttySAC0 会不会是没有ttySAC0这个设备呢~ 在内核中搜索ttySAC 在driver/serial/samsung.c中得到对应项目这时候我猜想会不会没有加载samsung.c , 经过一轮Makefile和Kconfig的查询, 发现对应选项在Device Drivers->Character devices->Serial drivers中一看,原来根本就没有加载Samsung SoC serial support , 选成静态编译之后又出现了Support for console on Samsung SoC serial port ,就是它了,选上, 退出的时候顺便把Kernel low-level debugging functions给取消了否则我们设置的printk会自行输出,就不知道ttySAC有没有加载成功了编译后执行,得下列输出zImage magic = 0x016f2818Setup linux parameters at 0x30000100linux command line is: "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0" MACH_TYPE = 1999NOW, Booting Linux......Uncompressing Linux......................................................................................................... done, booting the kernel.w# DpñGpGp´ó70ÇC¼ØûÛ»›3ó•ó¸Û0ƒw#DpñGpGp´ó•tØ›•p¸›7¿³ó•\@û7¼¿[£¼Û3•¼ó;£¸ÀÛ;[7û;D°•D@GoGpGpíó•t›7•{ð#ßóÄ;›•770ÄÄ3Çß;GoDh}û7wœ´{…[ó7ûÛ›30°ôܸ‡#_sÄ;›•770Øijœ¼DG@ÁôÛ•ûÄ;•sÄ›£Ø›•DŽ³ÃÛ70ÄGpÁ4ßœ»ôGã›30³D˜ßF[s˜£ÀÛû70ÛD8ßÄ4G8ôGv£°ÇÃGpÍ´0ƒ†# DpñGš´;óC…[4¸F¸ÄÛtÜàGp}4GGÇ4tD@Ä38ÀGpGß ôØ Û›ŸÄÛD\Cûƒ£¸ƒ;7v›Ã30Ü›4Û´£ô¼;C3[;7ù³û770‡¸°[•4tD@Ä38ÀGpGß ´´p‡ƒ•ô¼Û7ŸtÛG»4œØ…Çpíƒw# .......................................失败但这说明ttySAC加载成功了~ 不过为什么是乱码呢?~这时候就需要对比友善的配置和我们的配置有什么不同了~打开友善送的linux-2.6.29,观察arch/arm/mach-s3c2440/mach-mini2440.c和我们的2.6.30.4下面的arch/arm/mach-s3c2440/mach-smdk2440.c有什么不同由于乱码主要是时钟问题,所以我们重点观察UART的设置和基本设置,其它什么NAND LCD 的就不看先修改smdk2440_uartcfgs[][2] = {.ulcon = 0x03,}修改s3c24xx_init_clocks(12000000);然后编译再运行,输出为zImage magic = 0x016f2818Setup linux parameters at 0x30000100linux command line is: "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0" MACH_TYPE = 1999NOW, Booting Linux......Uncompressing Linux......................................................................................................... done, booting the kernel.[ 0.000000] in start_kernel[ 0.000000] Initializing cgroup subsys cpuset[ 0.000000] Initializing cgroup subsys cpu ...........................最后为Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)失败终于可以正常输出了,但是根文件系统挂载失败因为板子上的根文件系统为yaffs2 这时候内核还没有这个文件系统的支持,需要我们加上去拷贝友善的送的2.6.29下的fs/yaffs2目录到我们的fs目录下然后修改观察一下友善的送的2.6.29下的fs/Kconfig 和fs/Makefile和我们的有什么不同在我们的Kconfig中的source “fs/jffs2/Kconfig” 上面加上source “fs/yaffs2/Kconfig”在Makefile中的obj-$(CONFIG_FAT_FS) += fat/ 上面加上obj-$(CONFIG_YAFFS_FS) += yaffs2/然后在配置的File systems->Miscellaneous filesystems 中选上“YAFFS2 file system support” “Autoselect yaffs2 format” “Cache short names in RAM”然后编译运行,输出如下......................Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)失败还是不行,往上看几行VFS: Cannot open root device "mtdblock2" or unknown-block(0,0)Please append a correct "root=" boot option; here are the available partitions:Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)原来是没有可用的分区这个时候就要更正我们的NAND配置了还是对照友善送的linux-2.6.29,观察arch/arm/plat-s3c24xx/common-friendly-smdk.c来修改我们的arch/arm/plat-s3c24xx/common-smdk.c主要修改smdk_default_nand_part[]{[0] = {.name = “supervivi”,.size = 0x00060000,.offset = 0,},[1] = {.name = “Kernel”,.offset = 0x00060000,.size = 0x00200000,},[2] = {.name = “root”,.offset = 0x00260000,.size = 1024*1024*1024,},[3] = {.name = “nand”,.offset = 0x00000000,.size = 1024*1024*1024,}};编译后运行,输出VFS: Cannot open root device "mtdblock2" or unknown-block(0,0)Please append a correct "root=" boot option; here are the available partitions:Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)失败还是不行,连最起码的分区都没有看见,会不会是MTD没有加载呢?~打开配置进入Device DriversMemory Technology Device ......... 前面是个M~ 说明这个模块是动态加载的,而我们编译的zImage里面只有静态模块将MTD选为静态加载,然后进入MTD配置中看看还有什么需要选的NAND Device Support 这个也是动态,选为静态加载进入NAND Device Support原来连NAND Flash support for S3C2410/S3C2440 SoC都没选,马上选为静态加载保存配置后编译运行,再运行输出如下:NAND device: Manufacturer ID: 0xec, Chip ID: 0xf1 (Samsung NAND 128MiB 3,3V 8-bit) Scanning device for bad blocksCreating 4 MTD partitions on "NAND 128MiB 3,3V 8-bit":0x000000000000-0x000000060000 : "supervivi"0x000000060000-0x000000260000 : "Kernel"0x000000260000-0x000040260000 : "root"mtd: partition "root" extends beyond the end of device "NAND 128MiB 3,3V 8-bit" -- size truncated to 0x7da00000x000000000000-0x000040000000 : "nand"mtd: partition "nand" extends beyond the end of device "NAND 128MiB 3,3V 8-bit" -- size truncated to 0x8000000 ...............................VFS: Cannot open root device "mtdblock2" or unknown-block(0,0)Please append a correct "root=" boot option; here are the available partitions:Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)失败还是没有可用分区,虽然成功分辨了分区,但是没有加载成功,估计还是在MTD的模块选择上这时候需要对照友善的配置,经过对比,发现在友善的配置中静态编译了MTD中的下面3个模块Direct char device access to MTD devicesCommon interface to block layer for MTD …translation layers‟Caching block device access to MTD devices我们也选为静态编译保存配置后编译运行,输出如下List of all partitions:1f00 384 mtdblock0 (driver?)1f01 2048 mtdblock1 (driver?)1f02 128640 mtdblock2 (driver?)1f03 131072 mtdblock3 (driver?)No filesystem could mount root, tried: cramfsKernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,2)分区加载成功了,但是文件系统却不能识别,我们之前不是已经加入了yaffs2么?~回到配置中再看,原来是动态编译,并没有真正进入到内核之中,选为静态编译~保存配置后编译,输出为yaffs: dev is 32505858 name is "mtdblock2"yaffs: passed flags ""yaffs: Attempting MTD mount on 31.2, "mtdblock2"yaffs: auto selecting yaffs2yaffs_read_super: isCheckpointed 0VFS: Mounted root (yaffs filesystem) on device 31:2.Freeing init memory: 128KKernel panic - not syncing: Attempted to kill init!失败依然错误,这个时候懵了,哪里错呢~ 没办法,只能对照着友善的配置一个个大模块对着来改当改到Kernel Features的时候错误消失了,原来需要选上Use the ARM EABI to compile the kernelAllow old ABI binaries to run with thie Kernel为什么呢?~ Google了一下,原来友善的根文件系统在编译的时候也启用了EABI特性,内核和文件系统需要对上文件系统用了EABI 内核也要用EABI 内核不用EABI 也只能读取不用EABI的文件系统选上这两项之后再编译,运行,输出如下yaffs: dev is 32505858 name is "mtdblock2"yaffs: passed flags ""yaffs: Attempting MTD mount on 31.2, "mtdblock2"yaffs: auto selecting yaffs2yaffs_read_super: isCheckpointed 0VFS: Mounted root (yaffs filesystem) on device 31:2.Freeing init memory: 128Kmount: mounting none on /proc/bus/usb failed: No such file or directoryhwclock: can't open '/dev/misc/rtc': No such file or directory[01/Jan/1970:00:00:13 +0000] boa: server version Boa/0.94.13[01/Jan/1970:00:00:13 +0000] boa: server built Mar 26 2009 at 15:28:42.[01/Jan/1970:00:00:13 +0000] boa: starting server pid=845, port 80open device leds: No such file or directoryTry to bring eth0 interface up......ifconfig: SIOCGIFFLAGS: No such deviceifconfig: SIOCSIFHWADDR: No such deviceifconfig: SIOCSIFADDR: No such deviceroute: SIOCADDRT: No such processDoneifconfig: SIOCSIFADDR: No such devicePlease press Enter to activate this console.[root@FriendlyARM /]#成功了,ls后输出如下bin home lost+found proc sys vardev lib mini2440 root tmp wwwetc linuxrc opt sbin usr不过ifconfig命令没有成功,继续来配置网卡对比友善的mach-mini2440.c文件,发现我们的mach-smdk2440.c中的smdk2440_devices[]数组并没有&s3c_device_dm9k这个结构,加上,追踪发现该数据结构在arch/arm/plat-s3c24xx/devs.c中,我们的devs.c中没有该数据结构的定义,加上#include <linux/dm9000.h>static struct resource s3c_dm9k_resource[] = {[0] = {.start = S3C2410_CS4,.end = S3C2410_CS4 + 3,.flags = IORESOURCE_MEM,},[1] = {.start = S3C2410_CS4 + 4,.end = S3C2410_CS4 + 4 + 3,.flags = IORESOURCE_MEM,},[2] = {.start = IRQ_EINT7,.end = IRQ_EINT7,.flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING,},};static struct dm9000_plat_data s3c_dm9k_platdata = {.flags = DM9000_PLATF_16BITONLY,};struct platform_device s3c_device_dm9k = {.name = “dm9000”,.id = 0;.num_resources = ARRAY_SIZE(s3c_dm9k_resource),.resource = s3c_dm9k_resource,.dev = {.platform_data = &s3c_dm9k_platdata,}};EXPORT_SYMBOL(s3c_device_dm9k);编译,出错,error : s3c_device_dm9k undeclared here找不到结构?~ 打开mach-smdk2440.c看看有什么头文件比较显眼的就是<plat/s3c2410.h><plat/s3c2440.h><plat/devs.h>,我们刚才编辑的文件是devs.c呢么devs.h的可能性较高,通过搜索,这个devs.h在/arch/arm/plat-s3c/include/plat/中,打开,BINGO,里面都是devs.c的数据定义加上我们的s3c_device_dm9kextern struct platform_device s3c_device_dm9k;再编译,通过了,不过这个时候先别急,我们只添加了设备,驱动有没有静态加载呢?~ 打开配置Device Drivers->Networks device support->Ethernet(10 or 100Mbit)DM9000 support没选上,马上选为静态编译保存配置,编译后运行,输出如下Try to bring eth0 interface up......说明DM9000配置成功使用ping命令进行测试,发现丢包率高达78%是不是驱动没设置好呢?~ 比较了一下友善的driver/net/dm9000.c和2.6.30.4的dm9000.c,发现明显不同直接拷贝友善的dm9000.c和dm9000.h过来编译后运行,顺利进入终端,然后运行PING丢包改善,基本无丢包我对这次内核移植的总结是:一步步来~ 先做好终端输出再挂载好根文件系统最后才考虑其它驱动的配置到此移植就基本结束了= 3=)/ 感谢阅读。

μC/OS-Ⅱ在LPC2210中的移植

μC/OS-Ⅱ在LPC2210中的移植
理器 上 , 需要 完 成 的工 作 主要 是 以下 三 个 与体
系结 构 相关 的文 件 : _ P H , _ P C OS C U. OS C U— .
C以及 OS C U_ S3。 _ P A. L j
1 1 OS .
_
编写和调试也变得更简单 。
C U H 的 移植 P .
收稿 日期 :0 70 —1 20 —73 作者简介 : 王敏 ( 9 5 , , 1 7 一) 女 安徽 六安 人 , 硕士 , 执 教于成都理工大学 应用核 技术 与 自动化工 程学 院 , 主要从事于嵌入式 系统 、 电子仪器 的研 制 与核辐 核 射探测方面的研究工作 。
析 和介绍 。
理器或者操作系统上 。移植技术可以使一种特 定 的技术在更加广泛的范 围使用 , 使软件使用
更 加灵 活 , 不局 限 于某 一 条 件 [ 。u / - 是 5 C OSI ] I

个实时操作系统 , 但只是一个实时内核 , 要想
在此基 础上进行开发 , 就必 须将 / / SI 移  ̄ O- C I
普及 , 手机、 如: 掌上电脑等 , 嵌入式产品逐渐成 为信息产业的主流。 嵌入式操作系统对嵌入式产品的好坏有着 直接的影响, 因此 , 嵌入式实时操作系统在嵌入 式系统中确立了主导地位。本文基于 目 前应用 非常广泛的 A M 处理器 L C 2 0对 u / s R P 21, c o - I嵌入式实时操作系统 内核的移植工作做 了分 I
王 敏 , 方 方 , 张礼莉 , 朱景 良
( 都理工大学应用核技术与 自动化 工程学院 ,四川成都 成 60 5 1 0 9)
摘要 : 本文 主要 介 绍 了 u / S I实 时操 作 系 统 的特 点 和 内核 结 构 , 阐述 了该 操 作 系 统 在 C O -I 并

μCOS-II操作系统在各种处理器上的移植

μCOS-II操作系统在各种处理器上的移植

μC/OS-Ⅱ操作系统在各种处理器上的移植长江大学杨青胜徐爱钧摘要介绍μC/OS-II操作系统的应用和移植条件;阐述μC/OS-Ⅱ操作系统在普通的51单片机,NXP公司的LPC2210,ALTERA公司的Nios II 三种处理器上的移植。

关键字μC/OS-II移植51单片机LPC2210 Nios IIPortingμC/ OS - Ⅱto Various processorYangtze University Yang Qingsheng Xu Aijun Abstract :Introduced the μC/OS-II operating system applicationand transplant conditions;Explained the μC/OS-II operating system on 51 common microprocessor ,NXP's LPC2210, ALTERA's Nios II three processors transplant.Key Words:μC/OS-II port 51 microprocessor LPC2210 Nios II μC/OS-II操作系统是一种抢占式多任务、单内存空间、微小内核的嵌入式操作系统,具有高效、紧凑的特点。

它具有执行效率高、占用空间小、可移植性强、实时性能良好和可扩展性强等特点。

采用μc/os-ii实时操作系统可以有效地对任务进行调度;对各任务赋予不同的优先级可以保证任务及时响应,而且采用实时操作系统,降低了程序的复杂度,方便程序的开发和维护。

非常适合应用在一些小型的嵌入式产品应用场合,在家用电器,机器人,工业控制,航空航天,军事科技等领域有着广泛的应用。

单片机ARM, FPGA与μC/OS-II操作系统的结合,实现一些具体功能是目前嵌入式应用中比较常见。

在这些应用中基础性的工作就是操作系统的移植,故而本文选取使用较多的51单片机,LPC2210, NiosII三种处理器做介绍必定有一定的意义。

《嵌入式系统》课程教学大纲

《嵌入式系统》课程教学大纲

《嵌入式系统》课程教学大纲学分:3学时:64适用专业:电子信息、通信技术前导课程:电路分析基础、模拟电路、数字电路、高频电路、单片机原理、C语言后续课程:一、课程的性质和任务本课程围绕目前流行的32位ARM处理器和嵌入操作系统,讲述嵌入式系统的概念、软硬件组成、开发过程以及嵌入式应用程序和驱动程序的开发设计方法。

《嵌入式系统》是培养学生具有嵌入式系统的应用知识、嵌入式系统的初步分析能力和具有使用RTOS (实时操作系统)构成嵌入式系统的应用能力等方面的学科,是电子信息与计算机类或相关工科专业的一门专业课。

二、课程的教学基本要求本课程是一门综合性、实践性、应用性很强的专业课。

课程教学所要达到的目的是:使学生掌握嵌入式系统体系结构,嵌入式处理器结构(ARM架构为主),异常处理、系统控制过程、存储处理、ARM内部资源、各种I/O接口;嵌入式系统开发应用方法;实时多任务操作系统。

本课程将为学生今后从事嵌入式系统研究与开发打下坚实的基础。

三、教学内容和要求(一)理论教学内容和要求第一章:嵌入式系统的概况1、讲授内容:主要讲解嵌入式系统的定义、嵌入式系统的分类、嵌入式系统的组成及嵌入式系统的应用领域和发展趋势。

2、基本要求:使学生明确学习本课程的目的。

第二章:嵌入式系统的硬件基本知识1、讲授内容:1、ARM体系的硬件架构2、冯.诺依曼体系结构和哈佛体系结构3、RISC体系结构4、流水线技术2、基本要求:了解嵌入式系统的硬件基础。

第三章:嵌入式操作系统1、讲授内容:1、嵌入式操作系统的分类2、嵌入式操作系统的特点3、实时操作系统4、目前市场上流行的嵌入式操作系统2、基本要求:掌握嵌入式操作系统的分类和特点,明确实时操作系统的内核特点第四章:ARM架构的嵌入式微处理器1、讲授内容:目前基于ARM架构的嵌入式微处理器:I44B0,2410,LPC2000的架构及特点。

2、基本要求:要求掌握不同处理的的特点及使用场合。

嵌入式操作系统μC_OS-Ⅱ在ADuC7020处理器上的移植

嵌入式操作系统μC_OS-Ⅱ在ADuC7020处理器上的移植

嵌入式操作系统μC_OS-Ⅱ在ADuC7020处理器上的移植万方数据万方数据万方数据第l期王雨等:嵌入式操作系统pC/OS?II在ADuC7020处理器上的移植编译运行后,可以在AduC7020Board上看到TASK”,“YOUTASK”字符。

如图l所示:LED不断闪烁,并且串口上交替输出“MY,5结论本文针对当前嵌入式操作系统斗C/OS-II在各种处理器平台上移植的现状,结合具体的一款ADI公司生产的ARM7内核的芯片AduC7020,成功实现了斗C/OS-II在AduC7020上的移植,并且在AduC7020的开发板上实现了多任务“taskl”与“task”的同步与通信。

参考文献:[1]刘建新,谭平,刘渝,雷玉勇.基于CAN和斗C/OS.II的数字化车用仪表盘系统设计[J].微计算机信息,2007,25(8—2):253-254[2]任哲.嵌入式实时操作系统gC/OS.Ⅱ原理及图1应用[M].北京:北京航空航天大学出版社。

2005[3]周立功.ARM嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2005[4]AduC7020DataSheethttp://www.analog.corn[5]ADUC7020.Hhttp://www.keil.com/dd/ehip/3677.htm[6]吴明晖.基于ARM的嵌入式系统开发与应用[M].北京:人民邮电出版社,2004[7]JeanJ.Labrosse.嵌入式实时操作系统一vC/OS-Ⅱ[M].第2版邵贝贝等译.北京:北京航空航天大学出版社,2003TransplantationofEmbeddedOS删c/os-1IintheProcessorofAduCT020WANGYu,12Wenting,ZHAOXiaoguang(ChinaUniversityofMining&Technology(Beijing),Beijing100083)Abstract:ThispaperisonthebasisofMCUADuCT020ofADICO.whichisbasedonthecoreofARM7TDMI.Ithasintro-ducedthemainprocessoftransplantingtheembeddedoperatingsystempLC/OS.IItoARMprocessor,andonthebaseofsue—eessfultransplantation,ithasfinishedmulti?taskssynchronizationandeommuneiationKeywords:p.C/OS-iI;AduC7020;transplantationofOS万方数据嵌入式操作系统μC/OS-Ⅱ在ADuC7020处理器上的移植作者:王雨,李文婷,赵小光,WANG Yu,LI Wenting,ZHAO Xiaoguang作者单位:中国矿业大学(北京),北京,100083刊名:华北科技学院学报英文刊名:JOURNAL OF NORTH CHINA INSTITUTE OF SCIENCE AND TECHNOLOGY年,卷(期):2008,5(1)参考文献(7条)1.Jean brosse;邵贝贝嵌入式实时操作系统-μC/O S-Ⅱ 20032.吴明晖基于ARM的嵌入式系统开发与应用 20043.ADUC7020.H4.AduC7020 DataSheet5.周立功ARM嵌入式系统基础教程 20056.任哲嵌入式实时操作系统μC/OS-Ⅱ原理及应用 20057.刘建新;谭平;刘渝;雷玉勇基于CAN和μC/OS-II的数字化车用仪表盘系统设计[期刊论文]-微计算机信息2007(8-2)本文链接:/Periodical_hbkygdzkxxxb200801 024.aspx。

USB接口技术及驱动程序开发

USB接口技术及驱动程序开发

的设备驱动程序需要有“即插即用(PnP)”模块以及安装标识的INF文件。

在上述不同模块之间需要交互,其中的一些交互可以直接通过函数调用,而大量信息需要通过数据结构传递(比如在”设备对象”之类的数据结构中可以存储每个设备的信息)。

IRP,每个设备对象有一个内部的IRP队列,驱动程序的分发例程把1RP插入到这个设备队列中,内核I/O管理器从该队列一个个取出IRP,并传递到驱动程序的Startlo例程,Startlo例程串行处理IRP,以确保不与其它IRP处理程序冲突,但是StartIo例程仍然需要通过临界段例程避免与硬件中断发生冲突。

中断是用于停止处理器对一个任务的执行,而被强制运行某个中断去处理代码。

中断包括软件中断和硬件中断。

中断具有优先级,低优先级中断会被高优先级的中断所中断,以保证重要任务会优先执行。

硬件产生的中断总是比软件产生的中断优先级要高。

硬件中断类型包括:设备中断请求级处理程序的执行、配置文件定时器、时钟、同步器、处理器之间中断级、电源故障级;软件中断包括异步过程调用执行、线程调度、延迟过程调用执行。

至于常规线程执行则没有中断。

基本驱动程序例程Ifo控制伊腰派遣规程必须的驱动程序例程处理请求队列聪包含戳artlo_【蹙备产生中断需要包舍中断服务和OPc洲程DMA设备需要包含AdapterContro橱腥可选的l刚书R遣例程图3-2WDM设备驱动程序的模块组驱动程序的主要的初始化入口点是一个称为DriverEntry的例程。

多数WDM设备对象是由PIlP管理器调用AddDevice入15点创建,该例程在插入新设备和安装INF文件指示相对应的驱动程序时被调用,之后,一系列P11PIRP被发送到。

μC/OS—Ⅱ在LPC2210上的移植研究

μC/OS—Ⅱ在LPC2210上的移植研究

i u csflta s l tt ip o a yARM PC2 1 d a he e hspafr u cs flta s l ta d r l e t sc esu rn pa oPhl sc mp n s n i L 2 0a c iv t i lt mssc esu r pa n e i d. n s o n n a z
wiep eda pi t n.Th rfr c ntetre rc so lt m rn pa th sb c mev r otnt ts o d s ra p l i a c o e eo ewhihi h g tpo es rpa f a or ta s ln a e o ey i mp ra .I h ws“C/ S— I d O , I n a
P I IS 司的 A M 微 控制器 L ( 2 0上 , H LP 公 R P. 1 2 实现 了嵌入 式开 发平 台的移 植及实 现 。
关键 词 : R ; A M 嵌入式 ;c 【 一I; 时操作 系统 ; /] I实 6 移植 ; ̄ 2 0 L 1
中图分类 号 : P 1 . T 3 62 文 献标识 码 : A 文 章编 号 :6 3 2 X 2 0 )2 1 3 0 1 7 —6 9 ( 0 7 0 —0 0 — 3
Re e r h o ri s a c fPo tng RTOS  ̄C/ OS。 Yu Z
( ia eh o gcl i rt , ia 10 2 C ia X ’nT cn l i v sy X ’n70 3 , h ) o a Un e i n
维普资讯

7卷 第 期 2 0 年 2 月 0 7年
计 算 机 技 术 与 发 展
COM P  ̄ ER TECHN0I Y LF J AND DEVELOP ENT M

基于LPC2210的U-Boot移植

基于LPC2210的U-Boot移植
关键 词 : 动 加 载 程 序 ; 初 始 化 ;L C 2 0 控 制 器 ; 嵌 入 式 系 统 ; 移 植 启 P 2 1微
中图法分 类号 :P 1; P 6 T 35 T 38
文献 标识 码: A
文 章编 号: 0072 2 0) 20 7 .3 10 —0 4(0 8 0 —240
基 于 L C 2 U B o 移植 P 2 1 0的 — ot
李 彦 中 , 张曦 煌 , 李 岩 一
( 南大 学 信 息工程 学院 ,江 苏 无锡 2 4 2 ) 江 1 12
摘 要: 嵌入 式 系统 由 于其 自身的特 点, 一般 没有通 用的 B ol d r 而 U B o 是 一款 功能 强大 的 B olae 软件 , o t a e。 o — ot ot d r o 它可 以支
e mbe d d s se d e tm. y
Ke r s Bo f a e ; i i aia i n L C2 0M CU; e e d d s se ywo d : o o d r n t l to ; P 21 l i z mb d e y t m; p r o t
持很 多架构 的 C U, P 但是 U.o t 对 的也会 比较 复 杂。通 过对 U B o 的 目录结构 以及运 行机 制 的详 细分 析 , 此基础 上结 B o相 .ot 在 合 飞 利浦 L C 2 0 控制 的硬件 架构 特点 , U B o 进 行移 植 。对移植 成功 的 U.o t P 2 1微 对 —ot B o 代码 进行 测试 分析表 明 , 移植 是成 该 功的 , 能够为使 用 L C 00系列 C U进行嵌 入 式 系统 开放 的人 员提供 一些 参考 。 P 20 P

uCOSii的移植过程详解

uCOSii的移植过程详解

uCOSii的移植过程详解C/ OS 是一种多任务实时操作系统。

内核源代码公开、短小精干、可裁剪、执行时间可确定, 可移植性较强, 非常适用于一些中小型嵌入式系统开发。

uC/OS 可以移植到8~ 64 位的不同类型、不同规模的嵌入式系统, 并能在大部分的8 位、16 位、32 位, 甚至64 位的微处理器和DSP上运行[ 1] 。

MCF52235是飞思卡尔公司Co ldf ire 系列32 位单片机解决方案的嵌入式微控制器, 采用的是V2 版本的RISC 内核。

MCF52235 内部有32 KB SRAM 和256 KB FLASH, 并且集成了标准的Coldfire外围设备, 包括三个适合中长距离通信的SCI, 一个I2 C 和一个用于系统内部和外围设备通信的Q SPI。

在60Hz的核心频率下, MCF52235 的处理能力为56 MIPS, 具备较高的性能价格比[ 24] 。

MCF52235 对于移植C/ OS 来说有足够的RAM 和FLASH, 且有较快的处理速度和较低的成本,所以对于嵌入式应用系统的开发来说, 嵌入C/ OS到MCF52235 微控制器是一个不错的选择。

uC/ OS 的体系结构要实现C/ OS 向MCF52235 的移植, 需要做两方面的工作: 一是重新定义内核的大小和功能; 二是为内核编写与硬件相关的代码。

C/ OS 的文件结构如图1 所示。

可以看到, C/ OS 与CPU 类型无关的C 代码文件COS . C 包括很多文件, 它们是C/ OS 的内核和很多功能函数, 其中前三个文件是实时内核、任务管理和时钟节拍, 这三个文件是一定要用的。

后面6 个功能函数用于任务间的通信, 应用程序中可能只用到其中的几个, 不用的可以不包含进去, 以免编译时生成没用的代码。

这部分代码与CPU 类型无关, 在移植时, 这些文件不要改动。

配置文件OS_CFG. H 需要根据应用要求来进行,主要作用是确定C/ OS 提供的系统功能函数, 应用程序用哪些和不用哪些, 这个文件移植时需要修改。

U-Boot在LPC2210上的移植分析

U-Boot在LPC2210上的移植分析

U-Boot在LPC2210上的移植分析1.引言Bootloader 是嵌入式软件开发的第一个环节,它为最终加载操作系统内核映像建立了正确的环境。

U-Boot 是一个开放源代码的启动引导加载程序。

笔者以PHILIP 公司生产的LPC2210 处理器为硬件基础,详细分析了U-Boot 软件启动流程,以及针对U-Boot 源码本身并不支持的LPC2210 处理器应用U-Boot 作为Bootloader 的移植方法,最后给出了U-Boot 在LPC2210 上的移植实例。

2.Bootloader 简介Bootloader(引导加载程序)是系统加电后运行的第一段软件代码。

通过运行Bootloader 程序,可以初始化硬件设备,建立系统的内存空间映射图,从而将系统的软硬件环境带到一个适合的状态,以便为最终调用操作系统内核准备好正确的环境。

最终,Bootloader 把操作系统内核映像加载到RAM 中,并将系统控制权传递给它。

通常Bootloader 对硬件的依赖性非常强,特别是在嵌入式系统世界,因此,在嵌入式系统世界里建立一个通用的Bootloader 几乎是不可能的。

这就要求开发人员根据不同的硬件环境来开发适合自己开发板的Bootloader 程序。

3.U-Boot 软件结构U-Boot,全称Universal Boot Loader,是遵循GPL 条款的开放源码项目。

U- Boot 不仅仅支持嵌入式Linux 系统的引导,它还支持多种主流嵌入式操作系统。

这是U-Boot 中universal 的一层含义。

另外一层含义则是U-Boot 能够支持MIPS、ARM、XScale 等诸多常用系列的处理器。

这两个特点正是U- Boot 项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。

U-Boot 软件在顶层目录下有18 个子目录,分别存放和管理不同的源程序。

这些目录按。

-C/OS-II系统的移植分析与应用

-C/OS-II系统的移植分析与应用

?C/OS-II系统的移植分析与应用【摘要】本文首先对?C/OS-II操作系统移植可行性进行分析,然后基于ARM 体系LPC2294处理器的EASYARM开发板阐述了?C/OS-II系统移植的一般过程,最后对?C/OS-II系统的移植进行了测试。

【关键词】?C/OS-II;移植;ARM1.引言嵌入式系统[1]主要由嵌入式处理器、相关支撑硬件、嵌入式操作系统及应用软件系统等组成。

嵌入式操作系统作为嵌入式系统的核心组成部分,必须具备良好的可移植性才能满足嵌入式系统的多样化需求。

?C/OS-II[1]是用ANSI的C 语言编写的,它是一个完整的、可移植、可固化、可裁剪的占先式实时多任务内核操作系统。

至今,从8位到64位,?C/OS-II已经在各种不同架构的微处理器上运行,目前市场上已经有许多应用?C/OS-II的嵌入式产品,因此研究?C/OS-III 操作系统及其移植技术很有价值。

文章首先对?C/OS-II操作系统的移植可行性进行分析,然后结合基于ARM体系LPC2294处理器的EASYARM开发板阐述了?C/OS-II系统移植的一般过程,最后对?C/OS-II系统的移植进行了测试。

2.?C/OS-II操作系统移植的可行性分析2.1 ?C/OS-II操作系统移植的条件要使?C/OS-II正常运行,处理器必须需满足以下要求[2]:①处理器的C编译器能产生可重入代码;②用C语言可以开/关中断;③处理器支持中断,并且能够产生定时中断;④处理器能够支持容纳一定量数据的硬件堆栈;⑤处理器有将堆栈指针和其他寄存器读出和存储到堆栈或内存中的指令。

在采用?C/OS-II系统的移植中,作者采用ARM LPC2294[3]微控制器,该微控制器可以满足上述②、④、⑤条件,而ADS1.2的C编译器可以满足①、③的要求。

2.2 ?C/OS-II操作系统软件的体系结构是移植的基础所谓移植[2],就是使一个实时内核能在微处理器或微控制器上运行。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

福建电脑2006年第2期μC/OS-II在LPC2210处理器上的移植刘俊1,刘绍海2(1福建泉州华侨大学机械工程学院福建泉州362021;2湖北武汉湖北工业大学机械工程学院湖北武汉630068)【摘要】本文介绍了使用ARM公司的ADS1.2开发工具在PHILIPS嵌入式LPC2210微处理器上进行μC/OS-II的移植步骤及相关代码。

【关键词】μC/OS-II;ARM;嵌入式;移植1引言经过几十年的发展,嵌入式系统已经在很大程度上改变了人们的生活、工作和娱乐方式,而且这种改变还在加速。

但是不少人对嵌入式系统不甚了解。

嵌入式系统指嵌入到对象体系中的专用计算机系统。

它由嵌入式微处理器和嵌入式系统软件组成。

实时操作系统(RTOS)是一段在系统启动后首先执行的背景程序,用户的应用程序运行在RTOS之上,RTOS根据各个任务的要求,进行资源管理,消息管理,任务调度及异常处理等工作。

大大减小程序编写的工作量,减少了出错的工作量,保证了程序具有高可靠性。

2μC/OS-II简介μC/OS-II是一个源码公开、可移植、可固化、可裁剪及先占式的实时操作系统,其绝大部分源码是用ANSIC写的,与微处理器硬件相关的部分用汇编语言编写,汇编语言写的部分已经压缩到最低的限度以使μC/OS-II便于移植到其他微处理器上。

它最多可以管理64可任务,系统保留了4个最高优先级和4个最低优先级的任务,所以用户可以使用的任务数是56个。

其实时内核能进行任务调度、任务管理、时间管理、信号量、邮箱、消息队列、内存管理、中断管理等服务。

其稳定性和实用性已被数百个商业级的应用所验证。

3μC/OS-II在LPC2210上的移植LPC2210是PHILIPS开发的基于ARM7TDMI内核的微处理器。

128位宽度接口/加速器实现高达60MHZ的操频率。

16K静态RAM。

片内Boot装载程序实现在系统编程(ISP)和在应用中编程(IAP)。

8路10位A/D转换器,2个32位定时器(4路捕获和4路比较通道)、PWM单元、实时时钟和看门狗。

2个16C550工业标准UART、高速I2C接口和2个SPI接口。

向量中断控制器可配置优先级和向量地址。

开发工具选用ARM公司提供的ADS1.2集成开发环境。

主要工具有:①armasm.exe:汇编文件编译器。

②armcc.exe:C文件编译器。

③arrmlink.exe:目标文件连接器。

④fromelf.exe:用于将axf或者elf格式转换成其他格式的文件例如二进制映像。

⑤Armprof.exe:对调试过程中生成的profiling记录文件做分析用的工具软件。

移植μC/OS-II到一个新的体系结构上需要提供2个或3个文件:OS_CPU.H(C语言头文件)、OS_CPU.C(C程序源文件)及OS_CPU_A.ASM(汇编程序源文件)。

(1)OS_CPU.H文件移植分析不同的编译器会使用不同的字节长度来表示同一数据类型,这里使用ADS的armcc.exe编译器,相关的数据类型的定义如下:typedefunsignedcharBOOLEN;typedefunsignedcharINT8U;typedefsignedcharINT8S;typedefunsignedshortINT16U;typedefsignedshortINT16S;typedefunsignedintINT32U;typedefsignedintINT32S;typedeffloatFP32;typedefdoubleFP64;typedefINT32UOS_STK;堆栈增长方向的定义,由于ADS的C语言编译器仅支持一种方式,即从上往下长并且必须是满递减堆栈,所以OS_STK_GROWTH的值为1。

(2)OS_CPU_C.C文件移植分析每一个任务都需要自己的堆栈空间,以便进行任务切换的时候能够将当时的处理器现场保存到任务的堆栈空间中,在下次执行时能够在恢复出来。

在ARM体系结构下,处理器的现场通常指{pc、lr、r0-r12、cpsr、spsr}。

在目前实现的系统中,任务堆栈由高到低依次将保存着pc、lr、R12、R11、R10┉R1、R0、CPSR、SPSR。

函数如下:OS_STK*OSTaskStkInit(void(*task)(void*pd),void*pdata,OS_STK*ptos,INT16Uopt){OS_STK*stk;opt=opt;/*optisnotused,preventwarning*/stk=ptos;/*Loadstackpointer*/*stk=(OS_STK)task;/*pc*/*--stk=(OS_STK)task;/*lr*/*--stk=0;/*r12*/*--stk=0;/*r11*/*--stk=O;/*r10*/*--stk=O;/*r9*/*--stk=O;/*r8*/*--stk=O;/*r7*/*--stk=O;/*r6*/*--stk=O;/*r5*/*--stk=O;/*r4*/*--stk=O;/*r3*/*--stk=O;/*r2*/*--stk=O;/*r1*/*--stk=(unsignedint)pdata;/*r0*/*--stk=(USER_USING_MODE|OxO0);/*spsr*/*--stk=0;/*关中断计数器OsEnterSum*/return(stk);}在这个文件里还有几个系统规定的hook函数:OS-STaskGreateHook()OSTaskDelHook()OSTaskSwHook()OS-TaskStatHook()OSTimeTickHook()。

如果没有特殊需求,将它们都实现为空函数即可。

为了使底层接口函数与处理器状态无关,同时使任务调用相应的函数不需要知道函数的位置,本移植实例中使用软中断SWI作底层接口,使用不同的功能号区分不同的函数,同时预留挂接μC/OS-II系统服务函数的接口。

分配各功能号如下所示:_swi(0x00)voidOS_TASK_SW(void);/*任务级任务切换函数*/_swi(Ox01)voidOSStartHighRdy/*运行优先级最高的任务*/_swi(Ox02)voidOS_ENTER_CRITICAL/*关中断*/_swi(Ox03)voidOS_EXIT_CRITICAL(void)/*开中断*/_swi(Ox80)voidChangeToSYSMode(void);/*任务切换到系统模式*/_swi(0x81)voidChangeToUSRMode(void);/*任务切换到用户模式*/_swi(0x82)voidTasklsARM(INT8Uprio);/*任务代码是ARM代码*/_swi(0x83)voidTasklsTHUMB(INT8Uprio);/*任务代码是THUMB*/(3)OS_CPU_A.S文件移植分析在本文件中需要采用汇编语言编写四个函数:OSStarHigh-170福建电脑2006年第2期同的几何图形和物体,幼儿从中发现按大小、颜色或形状从左到右(或从右到左)进行排序的规律;在第二模块中,横排的图形(或物体)一下动起来,变成从里到外大小交替的几个圆圈,这一变化,一下打开了幼儿的记忆大门,开启了幼儿思维、想像的火花,创造出多类型的排序方法,按大小、颜色或形状从里到外、从上到下(从下到上)、从少到多(或从多到少)从左到右(从右到左)进行排列的规律;第三模块,在静止的农家小院画面中,有规律地出现鸡叫声和狗叫声,幼儿从中挖掘出生活中常见的声音规律———汽车叫声、自然界的雷雨声、人们的说笑声、音乐声,到各种节奏乐器的敲打声等;第四模块,有规律地出现一只大公鸡快速的奔跑着,然后停下高声鸣叫,由此,联想到生活中常见的动作规律———人的规律动作、动物的规律动作、车辆及自然现象(风吹物体的摆动等)的规律变化。

模块式教学情景的设置,可无限延伸学生的各种感官,拓宽感受的时空领域,可以使幼儿多角度、多顺序、多途径地提示认知对象,提高幼儿对已有经验的充分挖掘和利用,进而帮助幼儿寻找规律,理解关系,建立表象,有效扩大了幼儿视野,促进幼儿想象力、创造力的发展。

四、交互学习的设置:利用信息化学习环境和资源,借助人机交互技术和参数处理技术,建立虚拟学习环境。

培养幼儿积极参与、不断探索的精神。

参考文献[1]余文森,《新课程系列专题报告提纲》———教育部福建师范大学基础教育课程研究中心,2003年1月;[2]黄甫全,《试论信息技术与课程整合的基本策略》———电化教育研究,2002年7月;[3]李谨,《纵论信息技术与课程整合》———何克抗教授访谈,上海华东师范大学出版;[4]钟启泉,《国家基础教育课程改革纲要(试行)解读》,上海华东师范大学出版社;[5]李克东,《信息技术与课程整合的目标和方法》,广州市教育局教研室。

Rdy()、OSCtxSw()、OSTickISR()、OSIntCtxSw()。

OSStarHighRdy()源码如下:BLOSTaskSwHookLDRr4,=OSRuningMOVr5,#1STRBr5,[r4]LDRr4,=OSTCBHighRdyLDRr4,[r4]LDRsp,[r4]LDMFDsp!,{r4}MSRspsr,r4LDMFDsp!,{r4}MSRcpsr,r4LDMFDsp!,{r0-r12,lr,pc}在本移植实例中使用软中断后OSCtxSw0函数和OSIntC-txSw0函数可用同一段代码实现。

OSIntCtxSw()源码如下:LDRR2,[SP,#20];获取PCLDRR12,[SP,#16];获取R12MRSR0,CPSRMSRCPSR_c,#(NoInt|SYS32Mode)MOVR1,LRSTMFDSP!,{R1-R2};保存LR,PCSTMFDSP!,{R4-R12};保存R4-R12MSRCPSR_c,R0LDMFDSP!,{R4-R7};获取R0-R3ADDSP,SP,#8;出栈R12,PCMSRCPSR_c,#(NoInt|SYS32Mode)STMFDSP!,{R4-R7};保存R0一R3LDRR1,=OsEnterSum;获取OsEnterSumLDRR2,[R1]STMFDSP!,{R2,R3}LDRR1,=OSTCBCurLDRR1,[R1]STRSP,[R1]BLOSTaskSwHook;调用钩子函数LDRR4,=OSPfioCurLDRR5,=OSPrioHighRdy.LDRBR6,[R5]STRBR6,[R4]LDRR6.=OSTCBHighRdyLDRR6,[R6]LDRR4.=OSTCBCurSTRR6,[R4]LDRR4,[R6];获取新任务堆栈指针ADDSP,R4,#68;17寄存器CPSR,OsEnterSum,RO-RI2,LR,SPLDRLR,[sp,#-8]MSRCPSR_C,#(NoInt|SVC32Mode);进入管理模式MOVSP,r4;设置堆栈指针LDMFDSP!,{r4,r5};CPSR,OsEnterSumLDRR3,=OsEnterSum;恢复新任务的OsEnterSumSTRR4,[R3]MSRSPSR_cxsf,R5;恢复CPSRLDMFDSP!,{R0-R12,LR,PC};运行新任务时钟中断处理函数的主要任务是负责处理时钟中断,调用系统实现的OSTimeTick函数,如果有等待时钟信号的高优先级任务,则需要在中断级别上调用其执行。

相关文档
最新文档