ImageVerifierCode 换一换
格式:DOCX , 页数:51 ,大小:33.46KB ,
资源ID:10607284      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10607284.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于arm平台的uCOSII移植.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于arm平台的uCOSII移植.docx

1、基于arm平台的uCOSII移植西 南 科 技 大 学创新基金项目过程与结果总结报告基于ARM7平台的C/OS-的移植年 级: 2007 级 学 号: 20076012 姓 名: 吴 友 强 专 业: 计算机科学与技术 二零一零年五月一.准备工作1.C/OS-简介 uC/OS-II读做“micro COS2”, 意为“微控制器操作系统版本2”。uC/OS-II是著名的,源代码公开的实时内核,可用于各类8位,16位和32位单片机或DSP。从uC/OS算起,该内核已有十多年应用历史,在诸多领域得到广泛应用。简要说明一下该题目的特点和它的实际意义和社会价值。(约250字并翻译英文)2.C/OS-的特

2、点(1)提供源代码(2)可固化(3)可裁剪(4)可剥夺(5)多任务(6)可确定性(7)任务栈(8)系统服务(9)中断管理(10)稳定性与可靠性3.编译器的选择ARM处理器核的C编译器有很多,大概有SDT,ADS1.2,IAR,TASKING和GCC等。我最终选择的是ADS1.2编译程序和调试。为什么要选择ADS1.2,要简要说明理由。(约200字)4.ARM7简介ARM7处理器核具有用户,系统,管理,中止,未定义,中断和快中断7中工作模式。其中除了用户模式外其他均为特权模式。同时支持两个指令集:16位Thumb指令集和32位ARM指令集。为什么要选择ARM7,而不选ARM9或ARMX的高版本进

3、行uC/OS-II的移植,简要说明理由。(约200字)5.开发环境的搭建操作系统:Windows XP集成开发环境:ADS1.2调试环境:AXD(ADS1.2配套的软件)串口调试工具6.项目中所运用到的技术创新(1)实现了加密程序,保护了用户应用程序代码,利用在特定的地址0x1fc处写入特定的值0x87654321实现加密(2)通过工程配置文件加载程序代码,实现了写应用程序的模板工程,不用每次配置工程设置(3)初始化程序和操作系统代码都留有很多扩充的接口,方便不同的用户需要实现不同的启动代码功能和扩充操作系统的功能7.项目的特色(1)在本文档中有完整的源代码,并且有很详细的注释(2)只要具备同

4、样的软硬件环境,根据我的过程与结果总结报告完全可以实现这个项目(3)同时完成了引导程序和操作系统的移植(4)涉及到软硬件的知识,不仅仅只是软件2移植过程1.编写bootloader(ARM启动代码)1.启动代码综述(精确简述移植过程,关键程序不要省略,其它程序可用流程图表达和说明即可。)在一般32位ARM应用系统中,软件大多数采用C语言进行编程,并且以嵌入式操作系统为开发平台,这样大大的提高了开发效率及软件性能。为了能够进行系统初始化,通常会用一个汇编文件作为启动代码。它可以实现向量表定义、堆栈初始化、系统变量初始化、中断系统初始化、I/O初始化、外围初始化和地址重映射等操作。ARM公司之设计

5、内核,不生产芯片,只是把内核授权给其他厂商。其他厂商购买了授权后加入自己的外设,生产出各具特色的芯片。这样就促进了基于ARM处理器核的芯片的多元化,但也使得各种芯片的启动代码差别很大,不易编写出统一的启动代码。2.文件的组成汇编文件1.Startup.S:异常向量表、各模式堆栈初始化和跳到main()函数入口等 2.IRQ.S :负责管理中断嵌套C文件 Target.C :初始化目标板头文件 Config.H :系统配置和类型定义Target.H :一些和目标板相关的声明LPC2294.H :LPC2000系列芯片特殊寄存器定义分散加载文件mem_a.Scf:在片内Flash发布,RelInF

6、LASHMem_b.Scf:在片内RAM调试,DebugInRAM,在uCOSII中不使用这种布局模式Mem_c.Scf:在片内Flash调试,DebugInFLASH 3.各源代码文件内容及其注释1.Startup.S:;*-File Info-;* File name: Startup.s;* Last modified Date: 2009-08-17;* Last Version: 1.0;* Descriptions: 为 LPC2100系列芯片的启动代码,从这里开始执行,包括初始化代码,为每一种模;* 式 的进入口和任务的堆栈;定义堆栈的大小SVC_STACK_LEGTH EQU

7、0FIQ_STACK_LEGTH EQU 0IRQ_STACK_LEGTH EQU 256ABT_STACK_LEGTH EQU 0UND_STACK_LEGTH EQU 0NoInt EQU 0x80 ;Bit7,I位NoFIQ EQU 0x40 ;Bit6,F位USR32Mode EQU 0x10 ;M4:0=10000,用户模式SVC32Mode EQU 0x13 ;M4:0=10011,管理模式SYS32Mode EQU 0x1f ;M4:0=11111,系统模式IRQ32Mode EQU 0x12 ;M4:0=10010,IRQ中断FIQ32Mode EQU 0x11 ;M4:0=1

8、0001,快速中断 IMPORT _use_no_semihosting_swi;引入的外部标号在这声明 IMPORT FIQ_Exception ; 快速中断异常处理程序 IMPORT _main ; C语言主程序入口 IMPORT TargetResetInit ;目标板基本初始化;给外部使用的标号在这声明 EXPORT bottom_of_heap EXPORT StackUsr EXPORT Reset EXPORT _user_initial_stackheap CODE32 AREA vectors,CODE,READONLY ENTRY;中断向量表Reset LDR PC, Re

9、setAddr ;0x00,复位 LDR PC, UndefinedAddr ;0x04,未定义地址 LDR PC, SWI_Addr ;0x08,软件中断 LDR PC, PrefetchAddr ;0x0c,预取指中止 LDR PC, DataAbortAddr ;0x10,数据中止 DCD 0xb9205f80 ;0x14,保留 LDR PC, PC, #-0xff0 ;0x18,IRQ中断 LDR PC, FIQ_Addr ;0x1C,快速中断ResetAddr DCD ResetInit ;复位初始化处理程序地址UndefinedAddr DCD Undefined ;未定义指令处理

10、程序地址SWI_Addr DCD SoftwareInterrupt ;软件中断处理程序地址PrefetchAddr DCD PrefetchAbort ;预取指中止处理程序地址DataAbortAddr DCD DataAbort ;数据中止处理程序地址Nouse DCD 0 ;未使用IRQ_Addr DCD 0 ;IRQ中断,已在LDR PC,#-0xff0中处理FIQ_Addr DCD FIQ_Handler;未定义指令Undefined B Undefined ;死循环;软中断SoftwareInterrupt ; B SoftwareInterrupt;/增加开/关中断处理 CMP

11、R0, #4 ;判断传过来的参数是否大于4 LDRLO PC, PC, R0, LSL #2 ;小于4(参数正确),进行查表 MOVS PC, LR ;大于或者等于4(参数出错),则返回SwiFunction DCD IRQDisable ;0号调用,禁止IRQ中断 DCD IRQEnable ;1号调用,使能IRQ中断 DCD FIQDisable ;2号调用,禁止FIQ中断 DCD FIQEnable ;3号调用,使能FIQ中断IRQDisable ;关IRQ中断 MRS R0, SPSR ;读取SPSR的值 ORR R0, R0, #NoInt ;置位I位,设置关IRQ中断 MSR SP

12、SR_c, R0 ;回写SPSR MOVS PC, LR ;返回IRQEnable ;开IRQ中断 MRS R0, SPSR BIC R0, R0, #NoInt ;清零I位,设置开IRQ中断 MSR SPSR_c, R0 MOVS PC, LR FIQDisable ;关FIQ中断 MRS R0, SPSR ORR R0, R0, #NoFIQ ;置位F位,设置关FIQ中断 MSR SPSR_c, R0 MOVS PC, LRFIQEnable ;开FIQ中断 MRS R0, SPSR BIC R0, R0, #NoFIQ ;清零F位,设置开FIQ中断 MSR SPSR_c, R0 MOVS

13、 PC, LR;取指令中止PrefetchAbort B PrefetchAbort ;死循环 ;取数据中止DataAbort B DataAbort ;死循环;快速中断FIQ_Handler STMFD SP!, R0-R3, LR ;寄存器R0R3,LR入栈 BL FIQ_Exception ;调用FIQ处理程序 LDMFD SP!, R0-R3, LR ;寄存器R0R3,LR出栈 SUBS PC, LR, #4 ;计算返回地址;/*;* unction name 函数名称: InitStack;* Descriptions 功能描述: 初始化堆栈;* Created by 作者: 吴友强

14、;* Created Date 日期: 2009/07/20 2009年7月20日;*/;初始化堆栈,此时禁止IRQ和FIQ中断,处于ARM状态InitStack MOV R0, LR;Build the SVC stack;设置管理模式堆栈 MSR CPSR_c, #0xd3 LDR SP, StackSvc ;Build the IRQ stack ;设置中断模式堆栈 MSR CPSR_c, #0xd2 LDR SP, StackIrq;Build the FIQ stack;设置快速中断模式堆栈 MSR CPSR_c, #0xd1 LDR SP, StackFiq;Build the D

15、ATAABORT stack;设置中止模式堆栈 MSR CPSR_c, #0xd7 LDR SP, StackAbt;Build the UDF stack;设置未定义模式堆栈 MSR CPSR_c, #0xdb LDR SP, StackUnd;Build the SYS stack;设置系统模式堆栈 MSR CPSR_c, #0xdf ;切换到系统模式,之后将在系统模式下运行 LDR SP, =StackUsr ;除非进行模式切换 MOV PC, R0;/*;* unction name 函数名称: ResetInit;* Descriptions 功能描述: 复位入口;* Created

16、 by 作者: 吴友强;* Created Date 日期: 2009/07/20 2009年7月20日;*-;*/ResetInit BL InitStack ;初始化堆栈 BL TargetResetInit ;目标板基本初始化 B _main ;跳转到c语言入口 ;/*;* unction name 函数名称: _user_initial_stackheap;* Descriptions 功能描述: 库函数初始化堆和栈,不能删除;* Created by 作者: 吴友强;* Created Date 日期: 2009/07/20 2009年7月20日;*/_user_initial_st

17、ackheap LDR r0,=bottom_of_heap; LDR r1,=StackUsr MOV pc,lrStackSvc DCD SvcStackSpace + (SVC_STACK_LEGTH - 1)* 4 ;管理模式堆栈StackIrq DCD IrqStackSpace + (IRQ_STACK_LEGTH - 1)* 4 ;IRQ模式堆栈StackFiq DCD FiqStackSpace + (FIQ_STACK_LEGTH - 1)* 4 ;FIQ模式堆栈StackAbt DCD AbtStackSpace + (ABT_STACK_LEGTH - 1)* 4 ;中止

18、模式堆栈StackUnd DCD UndtStackSpace + (UND_STACK_LEGTH - 1)* 4;未定义模式堆栈;/*;* unction name 函数名称: CrpData;* Descriptions 功能描述: 芯片加密,代码保护;* input parameters 输入: None 无;* Returned value 输出 : None 无;* Used global variables 全局变量: None 无;* Calling modules 调用模块: None 无;* ;* Created by 作者: 吴友强;* Created Date 日期:

19、2009/07/20 2009年7月20日;*/ IF :DEF: EN_CRP IF . = 0x1fc INFO 1,nThe data at 0x000001fc must be 0x87654321.nPlease delete some source before this line. ENDIFCrpData WHILE . 0x1fc ;循环用NOP填充,直到0x1FC NOP WENDCrpData1 DCD 0x87654321 ;/* 当此数为0x87654321时,用户程序被保护 */ ENDIF;/* 分配堆栈空间 */ AREA MyStacks, DATA, NOI

20、NIT, ALIGN=2SvcStackSpace SPACE SVC_STACK_LEGTH * 4 ; 管理模式堆栈空间IrqStackSpace SPACE IRQ_STACK_LEGTH * 4 ; 中断模式堆栈空间FiqStackSpace SPACE FIQ_STACK_LEGTH * 4 ; 快速中断模式堆栈空间AbtStackSpace SPACE ABT_STACK_LEGTH * 4 ; 中止义模式堆栈空间UndtStackSpace SPACE UND_STACK_LEGTH * 4 ; 未定义模式堆栈 AREA Heap, DATA, NOINIT ;Heap通过分散加

21、载文件定位bottom_of_heap SPACE 1 AREA Stacks, DATA, NOINIT ;Stack通过分散加载文件定位StackUsr END2.IRQ.SNoInt EQU 0x80USR32Mode EQU 0x10SVC32Mode EQU 0x13SYS32Mode EQU 0x1fIRQ32Mode EQU 0x12FIQ32Mode EQU 0x11 CODE32 AREA IRQ,CODE,READONLY MACRO$IRQ_Label HANDLER $IRQ_Exception_Function EXPORT $IRQ_Label ; 输出的标号 IM

22、PORT $IRQ_Exception_Function ; 引用的外部标号$IRQ_Label SUB LR, LR, #4 ; 计算返回地址 STMFD SP!, R0-R3, R12, LR ; 保存任务环境 MRS R3, SPSR ; 保存状态 STMFD SP, R3,LR ; 保存SPSR和用户状态的SP,注意不能回写 ; 如果回写的是用户的SP,所以后面要调整SP NOP SUB SP, SP, #4*2 MSR CPSR_c, #(NoInt | SYS32Mode) ; 切换到系统模式 BL $IRQ_Exception_Function ; 调用c语言的中断处理程序 MS

23、R CPSR_c, #(NoInt | IRQ32Mode) ; Switch bak to IRQ mode 切换回irq模式 LDMFD SP, R3,LR ; 恢复SPSR和用户状态的SP,注意不能回写 ; 如果回写的是用户的SP,所以后面要调整SP MSR SPSR_cxsf, R3 ADD SP, SP, #4*2 LDMFD SP!, R0-R3, R12, PC MEND;/* 以下可添加中断句柄,根据实际情况改变 */;Timer0_Handler HANDLER Timer0 END3.Target.C#define IN_TARGET#include config.hvoi

24、d _irq IRQ_Exception(void) while(1); / 这一句替换为自己的代码void FIQ_Exception(void) while(1); / 这一句替换为自己的代码void TargetInit(void) /* 添加自己的代码 */ void TargetResetInit(void)#ifdef _DEBUG_RAM /如果在片内RAM调试 MEMMAP = 0x2; /映射到片内RAM#endif#ifdef _DEBUG_FLASH /如果在片内Flash调试 MEMMAP = 0x1; /映射到片内FLASH#endif#ifdef _IN_CHIP

25、/如果在片内Flash发布(将会被加密) MEMMAP = 0x1; /映射到片内FLASH#endif/* 设置系统各部分时钟 */ PLLCON = 1; /设置激活但未连接PLL #if (Fpclk / (Fcclk / 4) = 1 VPBDIV = 0;#endif#if (Fpclk / (Fcclk / 4) = 2 VPBDIV = 2;#endif#if (Fpclk / (Fcclk / 4) = 4 VPBDIV = 1;#endif/设定PLL的乘因子M和除因子P的值#if (Fcco / Fcclk) = 2 PLLCFG = (Fcclk / Fosc) - 1)

26、 | (0 5);#endif#if (Fcco / Fcclk) = 4 PLLCFG = (Fcclk / Fosc) - 1) | (1 5);#endif#if (Fcco / Fcclk) = 8 PLLCFG = (Fcclk / Fosc) - 1) | (2 5);#endif#if (Fcco / Fcclk) = 16 PLLCFG = (Fcclk / Fosc) - 1) | (3 5);#endif PLLFEED = 0xaa; /发送PLL馈送序列,执行设定PLL的动作 PLLFEED = 0x55; while(PLLSTAT & (1 10) = 0); /等待PLL锁定 PLLCON = 3; /设置激活并连接PLL PLLFEED = 0xaa; /发送PLL馈送序列,执行激活和链接动作 PLLFEED = 0x55; /* 设置存储器加速模块 */ MAMCR = 0; /禁止MAM功能#if Fcclk 20000000 /根据Fcclk的大小来设置MAM定时寄存器 MAMTIM = 1;#else#if Fcclk 40000000 MAMTIM = 2;#else MAMTIM = 3;#endif#endif MAMCR = 2; /使能M

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1