已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
BRUCEWOO西南科技大学创新基金项目第1页COPYRIGHTFRESHAIR团队西南科技大学创新基金项目过程与结果总结报告基于ARM7平台的C/OS的移植年级2007级学号20076012姓名吴友强专业计算机科学与技术二零一零年五月BRUCEWOO西南科技大学创新基金项目第2页一准备工作1C/OS简介UC/OSII读做“MICROCOS2”,意为“微控制器操作系统版本2”。UC/OSII是著名的,源代码公开的实时内核,可用于各类8位,16位和32位单片机或DSP。从UC/OS算起,该内核已有十多年应用历史,在诸多领域得到广泛应用。简要说明一下该题目的特点和它的实际意义和社会价值。(约250字并翻译英文)2C/OS的特点(1)提供源代码(2)可固化(3)可裁剪(4)可剥夺(5)多任务(6)可确定性(7)任务栈(8)系统服务(9)中断管理(10)稳定性与可靠性3编译器的选择ARM处理器核的C编译器有很多,大概有SDT,ADS12,IAR,TASKING和GCC等。我最终选择的是ADS12编译程序和调试。为什么要选择ADS12,要简要说明理由。(约200字)4ARM7简介ARM7处理器核具有用户,系统,管理,中止,未定义,中断和快中断7中工作模式。其中除了用户模式外其他均为特权模式。同时支持两个指令集16位THUMB指令集和32位ARM指令集。为什么要选择ARM7,而不选ARM9或ARMX的高版本进行UC/OSII的移植,简要说明理由。(约200字)5开发环境的搭建操作系统WINDOWSXP集成开发环境ADS12调试环境AXD(ADS12配套的软件)串口调试工具6项目中所运用到的技术创新(1)实现了加密程序,保护了用户应用程序代码,利用在特定的地址0X1FC处写入特定的值0X87654321实现加密(2)通过工程配置文件加载程序代码,实现了写应用程序的模板工程,不用每次配置工程设置(3)初始化程序和操作系统代码都留有很多扩充的接口,方便不同的用户需要实现不同的启动代码功能和扩充操作系统的功能7项目的特色(1)在本文档中有完整的源代码,并且有很详细的注释(2)只要具备同样的软硬件环境,根据我的过程与结果总结报告完全可以实现这个项目(3)同时完成了引导程序和操作系统的移植BRUCEWOO西南科技大学创新基金项目第3页(4)涉及到软硬件的知识,不仅仅只是软件2移植过程1编写BOOTLOADER(ARM启动代码)1启动代码综述(精确简述移植过程,关键程序不要省略,其它程序可用流程图表达和说明即可。)在一般32位ARM应用系统中,软件大多数采用C语言进行编程,并且以嵌入式操作系统为开发平台,这样大大的提高了开发效率及软件性能。为了能够进行系统初始化,通常会用一个汇编文件作为启动代码。它可以实现向量表定义、堆栈初始化、系统变量初始化、中断系统初始化、I/O初始化、外围初始化和地址重映射等操作。ARM公司之设计内核,不生产芯片,只是把内核授权给其他厂商。其他厂商购买了授权后加入自己的外设,生产出各具特色的芯片。这样就促进了基于ARM处理器核的芯片的多元化,但也使得各种芯片的启动代码差别很大,不易编写出统一的启动代码。2文件的组成汇编文件1STARTUPS异常向量表、各模式堆栈初始化和跳到MAIN函数入口等2IRQS负责管理中断嵌套C文件TARGETC初始化目标板头文件CONFIGH系统配置和类型定义TARGETH一些和目标板相关的声明LPC2294HLPC2000系列芯片特殊寄存器定义分散加载文件MEM_ASCF在片内FLASH发布,RELINFLASHMEM_BSCF在片内RAM调试,DEBUGINRAM,在UCOSII中不使用这种布局模式MEM_CSCF在片内FLASH调试,DEBUGINFLASH3各源代码文件内容及其注释1STARTUPSFILEINFOFILENAMESTARTUPSLASTMODIFIEDDATE20090817LASTVERSION10DESCRIPTIONS为LPC2100系列芯片的启动代码,从这里开始执行,包括初始化代码,为每一种模式的进入口和任务的堆栈定义堆栈的大小SVC_STACK_LEGTHEQU0FIQ_STACK_LEGTHEQU0IRQ_STACK_LEGTHEQU256ABT_STACK_LEGTHEQU0UND_STACK_LEGTHEQU0NOINTEQU0X80;BIT7,I位NOFIQEQU0X40;BIT6,F位USR32MODEEQU0X10;M4010000,用户模式SVC32MODEEQU0X13;M4010011,管理模式SYS32MODEEQU0X1F;M4011111,系统模式IRQ32MODEEQU0X12;M4010010,IRQ中断FIQ32MODEEQU0X11;M4010001,快速中断IMPORT_USE_NO_SEMIHOSTING_SWI引入的外部标号在这声明IMPORTFIQ_EXCEPTION快速中断异常处理程序IMPORT_MAINC语言主程序入口IMPORTTARGETRESETINIT目标板基本初始化BRUCEWOO西南科技大学创新基金项目第4页给外部使用的标号在这声明EXPORTBOTTOM_OF_HEAPEXPORTSTACKUSREXPORTRESETEXPORT_USER_INITIAL_STACKHEAPCODE32AREAVECTORS,CODE,READONLYENTRY中断向量表RESETLDRPC,RESETADDR;0X00,复位LDRPC,UNDEFINEDADDR;0X04,未定义地址LDRPC,SWI_ADDR;0X08,软件中断LDRPC,PREFETCHADDR;0X0C,预取指中止LDRPC,DATAABORTADDR;0X10,数据中止DCD0XB9205F80;0X14,保留LDRPC,PC,0XFF0;0X18,IRQ中断LDRPC,FIQ_ADDR;0X1C,快速中断RESETADDRDCDRESETINIT;复位初始化处理程序地址UNDEFINEDADDRDCDUNDEFINED;未定义指令处理程序地址SWI_ADDRDCDSOFTWAREINTERRUPT;软件中断处理程序地址PREFETCHADDRDCDPREFETCHABORT;预取指中止处理程序地址DATAABORTADDRDCDDATAABORT;数据中止处理程序地址NOUSEDCD0;未使用IRQ_ADDRDCD0;IRQ中断,已在“LDRPC,0XFF0“中处理FIQ_ADDRDCDFIQ_HANDLER未定义指令UNDEFINEDBUNDEFINED;死循环软中断SOFTWAREINTERRUPTBSOFTWAREINTERRUPT/增加开/关中断处理CMPR0,4;判断传过来的参数是否大于4LDRLOPC,PC,R0,LSL2;小于4(参数正确),进行查表MOVSPC,LR;大于或者等于4(参数出错),则返回SWIFUNCTIONDCDIRQDISABLE0号调用,禁止IRQ中断DCDIRQENABLE1号调用,使能IRQ中断DCDFIQDISABLE2号调用,禁止FIQ中断DCDFIQENABLE3号调用,使能FIQ中断IRQDISABLE关IRQ中断MRSR0,SPSR;读取SPSR的值ORRR0,R0,NOINT;置位I位,设置关IRQ中断MSRSPSR_C,R0;回写SPSRMOVSPC,LR;返回IRQENABLEBRUCEWOO西南科技大学创新基金项目第5页开IRQ中断MRSR0,SPSRBICR0,R0,NOINT;清零I位,设置开IRQ中断MSRSPSR_C,R0MOVSPC,LRFIQDISABLE关FIQ中断MRSR0,SPSRORRR0,R0,NOFIQ;置位F位,设置关FIQ中断MSRSPSR_C,R0MOVSPC,LRFIQENABLE开FIQ中断MRSR0,SPSRBICR0,R0,NOFIQ;清零F位,设置开FIQ中断MSRSPSR_C,R0MOVSPC,LR取指令中止PREFETCHABORTBPREFETCHABORT;死循环取数据中止DATAABORTBDATAABORT;死循环快速中断FIQ_HANDLERSTMFDSP,R0R3,LR;寄存器R0R3,LR入栈BLFIQ_EXCEPTION;调用FIQ处理程序LDMFDSP,R0R3,LR;寄存器R0R3,LR出栈SUBSPC,LR,4;计算返回地址/UNCTIONNAME函数名称INITSTACKDESCRIPTIONS功能描述初始化堆栈CREATEDBY作者吴友强CREATEDDATE日期2009/07/202009年7月20日/;初始化堆栈,此时禁止IRQ和FIQ中断,处于ARM状态INITSTACKMOVR0,LRBUILDTHESVCSTACK设置管理模式堆栈MSRCPSR_C,0XD3LDRSP,STACKSVCBUILDTHEIRQSTACK设置中断模式堆栈MSRCPSR_C,0XD2LDRSP,STACKIRQBUILDTHEFIQSTACK设置快速中断模式堆栈MSRCPSR_C,0XD1BRUCEWOO西南科技大学创新基金项目第6页LDRSP,STACKFIQBUILDTHEDATAABORTSTACK设置中止模式堆栈MSRCPSR_C,0XD7LDRSP,STACKABTBUILDTHEUDFSTACK设置未定义模式堆栈MSRCPSR_C,0XDBLDRSP,STACKUNDBUILDTHESYSSTACK设置系统模式堆栈MSRCPSR_C,0XDF;切换到系统模式,之后将在系统模式下运行LDRSP,STACKUSR;除非进行模式切换MOVPC,R0/UNCTIONNAME函数名称RESETINITDESCRIPTIONS功能描述复位入口CREATEDBY作者吴友强CREATEDDATE日期2009/07/202009年7月20日/RESETINITBLINITSTACK初始化堆栈BLTARGETRESETINIT目标板基本初始化B_MAIN跳转到C语言入口/UNCTIONNAME函数名称_USER_INITIAL_STACKHEAPDESCRIPTIONS功能描述库函数初始化堆和栈,不能删除CREATEDBY作者吴友强CREATEDDATE日期2009/07/202009年7月20日/_USER_INITIAL_STACKHEAPLDRR0,BOTTOM_OF_HEAPLDRR1,STACKUSRMOVPC,LRSTACKSVCDCDSVCSTACKSPACESVC_STACK_LEGTH14;管理模式堆栈STACKIRQDCDIRQSTACKSPACEIRQ_STACK_LEGTH14;IRQ模式堆栈STACKFIQDCDFIQSTACKSPACEFIQ_STACK_LEGTH14;FIQ模式堆栈STACKABTDCDABTSTACKSPACEABT_STACK_LEGTH14;中止模式堆栈STACKUNDDCDUNDTSTACKSPACEUND_STACK_LEGTH14;未定义模式堆栈/UNCTIONNAME函数名称CRPDATADESCRIPTIONS功能描述芯片加密,代码保护INPUTPARAMETERS输入NONE无RETURNEDVALUE输出NONE无USEDGLOBALVARIABLES全局变量NONE无CALLINGMODULES调用模块NONE无BRUCEWOO西南科技大学创新基金项目第7页CREATEDBY作者吴友强CREATEDDATE日期2009/07/202009年7月20日/IFDEFEN_CRPIF0X1FCINFO1,“NTHEDATAAT0X000001FCMUSTBE0X87654321NPLEASEDELETESOMESOURCEBEFORETHISLINE“ENDIFCRPDATAWHILEINCLUDEPRAGMAIMPORT_USE_NO_SEMIHOSTING_SWIINT_RT_DIV0INTAAARETURN0BRUCEWOO西南科技大学创新基金项目第10页INTFPUTCINTCH,FILEFCHCHFFRETURN0INTFGETCFILEFFFRETURN0INT_SYS_CLOSEFILEHANDLEFHFHFHRETURN0INT_SYS_WRITEFILEHANDLEFH,CONSTUNSIGNEDCHARBUF,UNSIGNEDLEN,INTMODEFHFHBUFBUFLENLENMODEMODERETURN0INT_SYS_READFILEHANDLEFH,UNSIGNEDCHARBUF,UNSIGNEDLEN,INTMODEFHFHBUFBUFLENLENMODEMODERETURN0VOID_TTYWRCHINTCHCHCHINT_SYS_ISTTYFILEHANDLEFHFHFHRETURN0INT_SYS_SEEKFILEHANDLEFH,LONGPOSFHFHBRUCEWOO西南科技大学创新基金项目第11页RETURN0INT_SYS_ENSUREFILEHANDLEFHFHFHRETURN0LONG_SYS_FLENFILEHANDLEFHFHFHRETURN0INT_SYS_TMPNAMCHARNAME,INTSIG,UNSIGNEDMAXLENNAMENAMESIGSIGMAXLENMAXLENRETURN0VOID_SYS_EXITINTRETURNCODERETURNCODERETURNCODECHAR_SYS_COMMAND_STRINGCHARCMD,INTLENCMDCMDLENLENRETURN04CONFIGHIFNDEF_CONFIG_HDEFINE_CONFIG_HIFNDEFTRUEDEFINETRUE1ENDIFIFNDEFFALSEDEFINEFALSE0ENDIFTYPEDEFUNSIGNEDCHARUINT8/无符号8位整型变量/TYPEDEFSIGNEDCHARINT8/有符号8位整型变量/TYPEDEFUNSIGNEDSHORTUINT16/无符号16位整型变量/TYPEDEFSIGNEDSHORTINT16/有符号16位整型变量/TYPEDEFUNSIGNEDINTUINT32/无符号32位整型变量/TYPEDEFSIGNEDINTINT32/有符号32位整型变量/TYPEDEFFLOATFP32/单精度浮点数(32位长度)/TYPEDEFDOUBLEFP64/双精度浮点数(64位长度)/INCLUDE“LPC2294H“/系统设置,FOSC、FCCLK、FCCO、FPCLK必须定义/DEFINEFOSC11059200/应当与实际一至晶振频率,10MHZ25MHZ,应当与实际一至BRUCEWOO西南科技大学创新基金项目第12页DEFINEFCCLKFOSC4/系统频率,必须为FOSC的整数倍132,且0EXTERNINTCONST_OSFUNCTIONADDREXTERNINTCONST_USRFUNCTIONADDRENDIFVOIDSWI_EXCEPTIONINTSWI_NUM,INTREGSOS_TCBPTCBSWITCHSWI_NUMCASE0X02/关中断函数OS_ENTER_CRITICAL/_ASMMRSR0,SPSRORRR0,R0,NOINTMSRSPSR_C,R0OSENTERSUMBREAKCASE0X03/开中断函数OS_EXIT_CRITICAL/IFOSENTERSUM0_ASMMRSR0,SPSRBICR0,R0,NOINTMSRSPSR_C,R0BREAKIFOS_SELF_EN0CASE0X40/返回指定系统服务函数的地址/函数地址存于数组_OSFUNCTIONADDR中/数组_OSFUNCTIONADDR需要另外定义/REGS0为第一个参数,也是返回值/REGS1为第二个参数/REGS2为第三个参数/REGS3为第四个参数/仅有一个参数为系统服务函数的索引/REGS0_OSFUNCTIONADDRREGS0BREAKCASE0X41/返回指定用户的服务函数的地址/函数地址存于数组_USRFUNCTIONADDR中/数组_USRFUNCTIONADDR需要另外定义/BRUCEWOO西南科技大学创新基金项目第18页/REGS0为第一个参数,也是返回值/REGS1为第二个参数/REGS2为第三个参数/REGS3为第四个参数/仅有一个参数为用户服务函数的索引/REGS0_USRFUNCTIONADDRREGS0BREAKCASE0X42/中断开始处理/OSINTNESTINGBREAKCASE0X43/判断中断是否需要切换/IFOSTCBHIGHRDYOSTCBCURREGS00ELSEREGS01BREAKENDIFCASE0X80/任务切换到系统模式/_ASMMRSR0,SPSRBICR0,R0,0X1FORRR0,R0,SYS32MODEMSRSPSR_C,R0BREAKCASE0X81/任务切换到用户模式/_ASMMRSR0,SPSRBICR0,R0,0X1FORRR0,R0,USR32MODEMSRSPSR_C,R0BREAKCASE0X82/任务是ARM代码/IFREGS0OSTCBSTKPTR1/PREVENTCOMPILERWARNING/VOIDOSTASKDELHOOKOS_TCBPTCBPTCBPTCB/PREVENTCOMPILERWARNING/VOIDOSTASKSWHOOKVOIDBRUCEWOO西南科技大学创新基金项目第20页VOIDOSTASKSTATHOOKVOIDIFOS_VERSION203VOIDOSTCBINITHOOKOS_TCBPTCBPTCBPTCB/PREVENTCOMPILERWARNING/ENDIFIFOS_VERSION251VOIDOSTASKIDLEHOOKVOIDENDIFENDIF(3)OS_CPU_AASM文件进入多任务环境时,应运行优先级最高的任务OSSTARTHIGHRDY函数,中断退出时的任务切换函数OSINTCTXSW和时钟节拍中断服务程序;为使用ADS12编译器的管理这个文件改名为OS_CPU_AS。源代码如下/COPYRIGHTCFRESHAIR嵌入式软件开发团队软件开发团队技术部HTTP/WWWFRESHIAIRCOM文件信息文件名OS_CPU_AS创建人吴友强最后修改日期2009年7月19日当前版本修订修改人吴友强日期2009年7月29日/定义系统模式堆栈的大小SVC_STACK_LEGTHEQU32NOINTEQU0X80USR32MODEEQU0X10SVC32MODEEQU0X13SYS32MODEEQU0X1FIRQ32MODEEQU0X12FIQ32MODEEQU0X11T_BIT用于检测进入异常前CPU是否处于THUMB状态T_BITEQU0X20CODE32AREA|SUBR|,CODE,READONLYIMPORTOSTCBCUR指向当前任务TCB的指针IMPORTOSTCBHIGHRDY指向将要运行的任务TCB的指针IMPORTOSPRIOCUR当前任务的优先级IMPORTOSPRIOHIGHRDY将要运行的任务的优先级BRUCEWOO西南科技大学创新基金项目第21页IMPORTOSTASKSWHOOK任务切换的钩子函数IMPORTOSRUNNINGUC/OSII运行标志IMPORTOSENTERSUM关中断计数器(关中断信号量)IMPORTSWI_EXCEPTION软中断异常处理程序EXPORT_OSSTARTHIGHRDYEXPORTOSINTCTXSW中断退出时的入口,参见STARTUPS中的IRQ_HANDLEREXPORTSOFTWAREINTERRUPT软中断入口/函数名称SOFTWAREINTERRUPT功能描述软件中断,用于提供一些系统服务输入依功能而定输出依功能而定调用模块SWI_EXCEPTION作者吴友强日期2009年7月29日/软件中断SOFTWAREINTERRUPTLDRSP,STACKSVC重新设置堆栈指针STMFDSP,R0R3,R12,LRMOVR1,SPR1指向参数存储位置MRSR3,SPSRTSTR3,T_BIT中断前是否是THUMB状态LDRNEHR0,LR,2是取得THUMB状态SWI号BICNER0,R0,0XFF00LDREQR0,LR,4否取得ARM状态SWI号BICEQR0,R0,0XFF000000R0SWI号,R1指向参数存储位置CMPR0,1LDRLOPC,OSINTCTXSWLDREQPC,_OSSTARTHIGHRDYSWI0X01为第一次任务切换BLSWI_EXCEPTIONLDMFDSP,R0R3,R12,PCSTACKSVCDCDSVC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 员工思想动态分析报告制度(2篇)
- 林周县松盘乡松盘村达嘎组农田灌溉蓄水池维修改造以工代赈项目水土保持报告表
- 施工机械操作管理办法
- 某服装厂安全操作规范
- 某服装厂生产质量办法
- 危险源辨识、风险评价清单(办公区、食堂、宿舍)
- 2026滨州医院面试题及答案
- 2026变压器专家面试题及答案
- 2025年再生面料产品创新趋势
- 2026年天津市高考数学试卷(含答案及解析)
- 湖南省郴州市2026年中考语文第一次模拟监测试卷附答案
- 2026年5月浙江省Z20高三语文联考9篇考场高分范文:当一个人向你树立边界时
- 德州市2026届高三(三模)语文试题(含答案)
- 2026春青岛版三年级科学下册(全册)各单元知识点复习要点梳理
- 2026年广东广州市高三二模高考英语模拟试卷(含答案解析)
- 生物新教师培训
- 全国职工数字化应用技术技能大赛无人机装调检修工竞赛题库(附答案)
- 2026年药品gmp知识考核题库检测试卷(考点提分)附答案详解
- 2026年西部计划楚雄考试试题及答案
- 外贸英语函电 课件 第十八章 跨境电商英文写作Cross-border E-commerce English Writing
- GB/T 17824.3-2026规模猪场环境参数及环境管理技术规范
评论
0/150
提交评论