文档库 最新最全的文档下载
当前位置:文档库 › 实验一 UCOS-II编译环境的建立和移植

实验一 UCOS-II编译环境的建立和移植

实验一 UCOS-II编译环境的建立和移植
实验一 UCOS-II编译环境的建立和移植

班级学号姓名同组人

实验日期室温大气压成绩

实验一 UCOS-II编译环境的建立和移植

一、实验目的

1、掌握Keil的安装,并在keil中建立UCOS-II开发的模板,为以后的开发建立基础;

2、掌握UCOS-II在ARM平台下移植;

3、了解UCOS-II源码的结构。

二、实验步骤

1、Keil的安装和建立开发模板

1)在MDK的安装文件夹,点击MDK5.0图标,安装MDK5.0;

2)点击之后出现界面,选择Next;

3)选择”I Agree…Licence agreement”同意协议;

4)选择安装目录,这里用户自行选择安装的目录后,点击Next即可;

5)随便输入邮箱之类的信息即可,点击Next开始安装;

6)按图配置,然后点击Finish,左面会出现keil快捷图标;

7)出现Pack Install 主要是安装一些应用例子和代码;

8)需要进行注册,File->License Management,弹出一个License Management;

9)根据MDK的CID,生成License Key,然后再将这个License Key添加到MDK里面New License ID Code(LIC)对话框中去注册;

2、建立无UCOS-II的STM32的工程模板

1)首先,打开MDK(以下将RVMDK简称为MDK)软件。然后点击Project->New uVision Project;

新建一个文件夹TEST,然后把工程名字设为test.点击保存。弹出选择器件的对话框,因为ALIENTEK战舰STM32开发板所使用的STM32型号为STM32F103ZET6,所以在这里

我们选择STMicroelectronics下面的STM32F103ZET6(如果使用的是其他系列的芯片,选择相应的型号就可以了)。

点击OK,MDK会弹出一个对话框,问你是否加载启动代码到当前工程下面,这里我们选择否。

没有选择加载默认的启动代码,先介绍一下启动代码:启动代码是一段和硬件相关的汇编代码。是必不可少的!这代码主要作用如下:1、堆栈(SP)的初始化;2、初始化程序计数器(PC);3、设置向量表异常事件的入口地址;4、调用main函数。

因为芯片是STM32F103ZET6,如果用默认的启动文件(STM32F10x.s),因为有些中断入口函数在这个文件里面并没有定义,会影响使用。不过,选择ST公式提供的startup_stm32f10x_hd.s作为我们的启动文件。

出错和警告信息在下面的Output Windows对话框中提示出来了。因为工程中没有main函数,所以报错了,需要添加Main函数,打开文件夹,看到文件夹下面多了很多文件,但是其中真正有用的文件就两个:startup_stm32f10x_hd.s和test.uv2。

所以,在TEST目录下新建两个新的文件夹:USER和OBJ,USER用来存放启动文件(startup_stm32f10x_hd.s)、工程文件(test.uv2)等不可缺少的文件,而OBJ则用来存放这些编译过程中产生的过程文件(包括.hex文件也将存放在这个文件夹里面)。然后把这些东西全部移到相应的文件夹下。

由于上面我们还没有任何代码在工程里面,这里我们把系统代码COPY过来(在SYSTEM文件夹下,此SYSTEM文件夹不是XP的文件夹,是由ALIENTEK提供,可以在光盘任何一个实例的目录下找到。这些代码在任何STM32F103的芯片上都是通用的,可以用于快速构建自己的工程,后面会有详细介绍)

然后在USER文件夹下面找到test.Uv2,打开它.然后在Target目录树上点击右键->Manage Components。

在上面对话框的中间栏,点新建(用红圈标出)按钮(也可以通过双击下面的空白处实现),新建USER和SYSTEM两个组。然后点击Add Files按钮,把sys.c、usart.c、delay.c加入到SYSTEM组中。注意:此时USER组下还是没有任何文件。

点击OK,退出该界面返回IDE。在Target树下发现多了2个组名,就是刚刚新建的2个组。

接着,新建一个test.c文件,并保存在USER目录下。然后双击USER组,会弹出加载文件的对话框,此时我们在USER目录下选择test.c文件,加入到USER组下。

在test.c文件里面输入如下代码:

#include "sys.h"

#include "usart.h"

#include "delay.h"

int main(void)

{

u8 t=0;

Stm32_Clock_Init(9); //72M

delay_init(72); //延时初始化

uart_init(72,9600); //设置串口1波特率

while(1)

{

printf("t:%d\n",t);

delay_ms(500);

t++;

}

}

此时编译,生成的过程文件,还是会存放在USER文件夹下,所以,先设置输出路径,再编译。点击(Options for Target按钮),弹出Options for Target’Target 1’对话框,选择Output选项卡 选中Create Hex File(用于生成Hex文件,后面会用到)点击Select Folder for Objects 找到OBJ文件夹 点击OK。

接着,再设置Listings文件路径,打开Listing选项卡点击Select Folder for Listings找到OBJ文件夹点击OK。

最后点击OK,回到IDE主界面。接下来我们编译刚刚写的代码,点击(部分编译按钮)编译一下,会在Output Windows信息栏中发现如下报错信息:test.c(1):error:#5:cannot open source input file "sys.h":No such file or directory。

test.c的01行出现了一个浅绿色的小箭头,说明错误是这个地方产生的。双击后浅绿色箭头出现位置其实通过下面错误的说明,错误的原因了:就是include的路径没

有加进去的缘故,而导致了这个错误。现在再次点击(Options for Target按钮),弹出Options for Target’Target 1’对话框,选择C/C++选项卡。

在Include Paths处,点击按钮。在弹出的对话框中加入SYSTEM文件夹下的3个文件夹字,把这几个路径都加进去(此操作即加入编译器的头文件包含路径,后面会经常用到)。

点击OK确认,回到IDE,此时再点击按钮,再编译一次,发现没错误了。

因为之前选择了生成Hex文件,所以在编译的时候,MDK会自动生成Hex文件,这个

文件在OBJ文件夹里面,串口下载的时候,就是下载这个文件到STM32里面的,这个在后面的程序下载一节会介绍。

编译后,可能会出现一个警告:warning:#1-D last line of file ends without a newline。这个警告是在某个C文件的最后,没有输入新行,只需要双击这个警告,跳转到警告处,然后在后面输入多一个空行就好了。

至此,一个完整的STM32开发工程在MDK下建立了。接下来就可以进行代码下载和仿真调试了。

3、建立带有UCOS-II的工程模板

在前面工程的基础上修改,在该工程源码下面加入UCOSII文件夹,存放UCOSII源码(已经将UCOSII源码分为三个文件夹:CORE、PORT和CONFIG)。打开工程,新建UCOSII-CORE、UCOSII-PORT和UCOSII-CONFIG三个分组,分别添加UCOSII三个文件夹下

的源码,并将这三个文件夹加入头文件包含路径,最后得到工程。

UCOSII-CORE分组下面是UCOSII的核心源码,不需要做任何变动。

UCOSII-PORT分组下面是移植UCOSII要修改的3个代码,这个在移植的时候完成。

UCOSII-CONFIG分组下面是UCOSII的配置部分,主要由用户根据自己的需要对UCOSII进行裁剪或其他设置。

4、移植文件的编写

在模板中,需要针对STM32平台,需要做一些代码的移植。参考代码如下面所示

1)需要修改的移植文件OS_CPU.H

/******************************* (C) COPYLEFT 2010 Leafgrass ************************** * File Name : os_cpu_c.c

* Author : Librae

* Date : 06/10/2010

* Description : μCOS-II在STM32上的移植代码C语言部分,

* 包括任务堆栈初始化代码和钩子函数等

*************************************************************************************/ #ifndef __OS_CPU_H__

#define __OS_CPU_H__

#ifdef OS_CPU_GLOBALS

#define OS_CPU_EXT

#else

#define OS_CPU_EXT extern

#endif

/*************************************************************************************

定义与编译器无关的数据类型

*************************************************************************************/

typedef unsigned char BOOLEAN;

typedef unsigned char INT8U; /* Unsigned 8 bit quantity */

typedef signed char INT8S; /* Signed 8 bit quantity */

typedef unsigned short INT16U; /* Unsigned 16 bit quantity */

typedef signed short INT16S; /* Signed 16 bit quantity */

typedef unsigned int INT32U; /* Unsigned 32 bit quantity */

typedef signed int INT32S; /* Signed 32 bit quantity */

typedef float FP32; /* Single precision floating point*/

typedef double FP64; /* Double precision floating point*/

//STM32是32位位宽的,这里OS_STK和OS_CPU_SR都应该为32位数据类型

typedef unsigned int OS_STK; /* Each stack entry is 32-bit wide*/

typedef unsigned int OS_CPU_SR; /* Define size of CPU status register*/

/*************************************************************************************

* Cortex M3

* Critical Section Management

*************************************************************************************/

/*************************************************************************************

* ARM Miscellaneous

*************************************************************************************/

//定义栈的增长方向.

//CM3中,栈是由高地址向低地址增长的,所以OS_STK_GROWTH设置为1

#define OS_STK_GROWTH 1 /* Stack grows from HIGH to LOW memory on ARM */

//任务切换宏,由汇编实现.

#define OS_TASK_SW() OSCtxSw()

/************************************************************************************

* PROTOTYPES

* (see OS_CPU_A.ASM)

*************************************************************************************/

//OS_CRITICAL_METHOD = 1 :直接使用处理器的开关中断指令来实现宏

//OS_CRITICAL_METHOD = 2 :利用堆栈保存和恢复CPU的状态

//OS_CRITICAL_METHOD = 3 :利用编译器扩展功能获得程序状态字,保存在局部变量cpu_sr

#define OS_CRITICAL_METHOD 3 //进入临界段的方法

#if OS_CRITICAL_METHOD == 3

#define OS_ENTER_CRITICAL() {cpu_sr = OS_CPU_SR_Save();}

#define OS_EXIT_CRITICAL() {OS_CPU_SR_Restore(cpu_sr);}

#endif

void OSCtxSw(void);

void OSIntCtxSw(void);

void OSStartHighRdy(void);

void OSPendSV(void);

#if OS_CRITICAL_METHOD == 3u /* See OS_CPU_A.ASM */ OS_CPU_SR OS_CPU_SR_Save(void);

void OS_CPU_SR_Restore(OS_CPU_SR cpu_sr);

#endif

OS_CPU_EXT INT32U OSInterrputSum;

#endif

/****************************** (C) COPYLEFT 2010 Leafgrass **************************/

2 OS_CPU_C.C

#define OS_CPU_GLOBALS

#include "includes.h"

/*

**************************************************************************************

*

#if OS_TMR_EN > 0

static INT16U OSTmrCtr;

#endif

#if OS_CPU_HOOKS_EN > 0 && OS_VERSION > 203

void OSInitHookBegin (void)

{

#if OS_TMR_EN > 0

OSTmrCtr = 0;

#endif

}

#endif

#if OS_CPU_HOOKS_EN > 0 && OS_VERSION > 203

void OSInitHookEnd (void)

{

}

#endif

#if OS_CPU_HOOKS_EN > 0

void OSTaskCreateHook (OS_TCB *ptcb)

{

#if OS_APP_HOOKS_EN > 0

App_TaskCreateHook(ptcb);

#else

(void)ptcb; /* Prevent compiler warning */ #endif

}

#endif

#if OS_CPU_HOOKS_EN > 0

void OSTaskDelHook (OS_TCB *ptcb)

{

#if OS_APP_HOOKS_EN > 0

App_TaskDelHook(ptcb);

#else

(void)ptcb; /* Prevent compiler warning */

#endif

}

#endif

/*

#if OS_CPU_HOOKS_EN > 0 && OS_VERSION >= 251

void OSTaskIdleHook (void)

{

#if OS_APP_HOOKS_EN > 0

App_TaskIdleHook();

#endif

}

#endif

#if OS_CPU_HOOKS_EN > 0

void OSTaskStatHook (void)

{

#if OS_APP_HOOKS_EN > 0

App_TaskStatHook();

#endif

}

#endif

OS_STK *OSTaskStkInit (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT16U

opt)

{

OS_STK *stk;

(void)opt; /* 'opt' is not used, prevent warning */ stk = ptos; /* Load stack pointer *(stk) = (INT32U)0x01000000L; /* xPSR */ *(--stk) = (INT32U)task; /* Entry Point */ *(--stk) = (INT32U)0xFFFFFFFEL; /* R14 (LR) (init value will cause

fault if ever used)*/

*(--stk) = (INT32U)0x12121212L; /* R12 */ *(--stk) = (INT32U)0x03030303L; /* R3 */ *(--stk) = (INT32U)0x02020202L; /* R2 */ *(--stk) = (INT32U)0x01010101L; /* R1 */ *(--stk) = (INT32U)p_arg; /* R0 : argument*/ *(--stk) = (INT32U)0x11111111L; /* R11 */ *(--stk) = (INT32U)0x10101010L; /* R10 */ *(--stk) = (INT32U)0x09090909L; /* R9 */ *(--stk) = (INT32U)0x08080808L; /* R8 */ *(--stk) = (INT32U)0x07070707L; /* R7 */ *(--stk) = (INT32U)0x06060606L; /* R6 */ *(--stk) = (INT32U)0x05050505L; /* R5 */ *(--stk) = (INT32U)0x04040404L; /* R4 */

return (stk);

}

#if (OS_CPU_HOOKS_EN > 0) && (OS_TASK_SW_HOOK_EN > 0)

void OSTaskSwHook (void)

{

#if OS_APP_HOOKS_EN > 0

App_TaskSwHook();

#endif

}

#endif

#if OS_CPU_HOOKS_EN > 0 && OS_VERSION > 203

void OSTCBInitHook (OS_TCB *ptcb)

{

#if OS_APP_HOOKS_EN > 0

App_TCBInitHook(ptcb);

#else

(void)ptcb; /* Prevent compiler warning */ #endif

}

#endif

#if (OS_CPU_HOOKS_EN > 0) && (OS_TIME_TICK_HOOK_EN > 0)

void OSTimeTickHook (void)

{

#if OS_APP_HOOKS_EN > 0

App_TimeTickHook();

#endif

#if OS_TMR_EN > 0

OSTmrCtr++;

if (OSTmrCtr >=

(OS_TICKS_PER_SEC / OS_TMR_CFG_TICKS_PER_SEC)) {

OSTmrCtr = 0;

OSTmrSignal();

}

#endif

}

#endif

#if OS_CPU_HOOKS_EN > 0u && OS_VERSION > 290u

void OSTaskReturnHook(OS_TCB *ptcb)

{

(void)ptcb;

}

#endif

3 os_cpu_a.asm

;/*********************** (C) COPYRIGHT 2010 Libraworks ************************* * File Name : os_cpu_a.asm

;* Author : Librae

;* Version : V1.0

;* Date : 06/10/2010

;* Description : μCOS-II asm port for STM32

;*******************************************************************************/ IMPORT OSRunning ; External references

IMPORT OSPrioCur

IMPORT OSPrioHighRdy

IMPORT OSTCBCur

IMPORT OSTCBHighRdy

IMPORT OSIntNesting

IMPORT OSIntExit

IMPORT OSTaskSwHook

EXPORT OSStartHighRdy

EXPORT OSCtxSw

EXPORT OSIntCtxSw

EXPORT OS_CPU_SR_Save ; Functions declared in this file

EXPORT OS_CPU_SR_Restore

EXPORT PendSV_Handler

NVIC_INT_CTRL EQU 0xE000ED04 ; 中断控制寄存器

NVIC_SYSPRI2 EQU 0xE000ED20 ; 系统优先级寄存器(2)

NVIC_PENDSV_PRI EQU 0xFFFF0000 ; PendSV中断和系统节拍中断

(都为最低,0xff).

NVIC_PENDSVSET EQU 0x10000000 ; 触发软件中断的值.

PRESERVE8

AREA |.text|, CODE, READONLY

THUMB

OS_CPU_SR_Save

MRS R0, PRIMASK ;读取PRIMASK到R0,R0为返回值

CPSID I ;PRIMASK=1,关中断(NMI和硬件FAULT可以响应)

BX LR ;返回

OS_CPU_SR_Restore

MSR PRIMASK, R0 ;读取R0到PRIMASK中,R0为参数

BX LR ;返回

;/************************************************************************************ *

*

;* 函数名称: OSStartHighRdy

*

;* 功能描述: 使用调度器运行第一个任务

;*

;* 参数: None

;*

;* 返回值: None

;************************************************************************************* * /

OSStartHighRdy

LDR R4, =NVIC_SYSPRI2 ; set the PendSV exception priority

LDR R5, =NVIC_PENDSV_PRI

STR R5, [R4]

MOV R4, #0 ; set the PSP to 0 for initial context switch call MSR PSP, R4

LDR R4, =OSRunning ; OSRunning = TRUE

MOV R5, #1

STRB R5, [R4]

;切换到最高优先级的任务

LDR R4, =NVIC_INT_CTRL ;rigger the PendSV exception (causes context switch)

LDR R5, =NVIC_PENDSVSET

STR R5, [R4]

CPSIE I ;enable interrupts at processor level

OSStartHang

B OSStartHang ;should never get here

;/************************************************************************************ ;* 函数名称: OSCtxSw

;*

;* 功能描述: 任务级上下文切换

;*

;* 参数: None

;*

;* 返回值: None

;************************************************************************************* */

OSCtxSw

PUSH {R4, R5}

LDR R4, =NVIC_INT_CTRL ;触发PendSV异常 (causes context switch)

LDR R5, =NVIC_PENDSVSET

STR R5, [R4]

POP {R4, R5}

BX LR

;/************************************************************************************ ;* 函数名称: OSIntCtxSw

;*

;* 功能描述: 中断级任务切换

;*

;* 参数: None

;*

;* 返回值: None

;************************************************************************************* */

OSIntCtxSw

PUSH {R4, R5}

LDR R4, =NVIC_INT_CTRL ;触发PendSV异常 (causes context switch)

LDR R5, =NVIC_PENDSVSET

STR R5, [R4]

POP {R4, R5}

BX LR

NOP

;/************************************************************************************ *

;* 函数名称: OSPendSV

;*

;* 功能描述: OSPendSV is used to cause a context switch.

;* 参数: None

;*

;* 返回值: None

;************************************************************************************* */

PendSV_Handler

CPSID I ; Prevent interruption during context switch

MRS R0, PSP ; PSP is process stack pointer 如果在用PSP堆栈,则可以忽略保存寄存器,参考CM3权威中的双堆栈。

CBZ R0, PendSV_Handler_Nosave ; Skip register save the first time

;*

SUBS R0, R0, #0x20 ; Save remaining regs r4-11 on process stack

STM R0, {R4-R11}

LDR R1, =OSTCBCur ; OSTCBCur->OSTCBStkPtr = SP;

LDR R1, [R1]

STR R0, [R1] ; R0 is SP of process being switched out

; At this point, entire context of process has been saved PendSV_Handler_Nosave

PUSH {R14} ; Save LR exc_return value

LDR R0, =OSTaskSwHook ; OSTaskSwHook();

BLX R0

POP {R14}

LDR R0, =OSPrioCur ; OSPrioCur = OSPrioHighRdy;

LDR R1, =OSPrioHighRdy

LDRB R2, [R1]

STRB R2, [R0]

LDR R0, =OSTCBCur ; OSTCBCur = OSTCBHighRdy;

LDR R1, =OSTCBHighRdy

LDR R2, [R1]

STR R2, [R0]

LDR R0, [R2] ; R0 is new process SP; SP =

OSTCBHighRdy->OSTCBStkPtr;

LDM R0, {R4-R11} ; Restore r4-11 from new process stack

ADDS R0, R0, #0x20

MSR PSP, R0 ; Load PSP with new process SP

ORR LR, LR, #0x04 ; Ensure exception return uses process stack

CPSIE I

BX LR ; Exception return will restore remaining context end

windows安装交叉编译环境

Duanxx的嵌入式学习: Win7安装交叉编译环境 ——Duanxx ——2015-09-15 ARM-linux的交叉编译环境,一般的教程都是在linux系统(比如ubuntu)上安装linaro的arm-linux-gnueabihf编译环境,然后再安装Eclipse和CDT,这样来实现交叉编译环境的安装。 我个人使用这种方法已经使用了几年了,因为我个人比较喜欢使用Linux系统(我使用的是CentOS),所以感觉很自然。但对于初学者而言,如果对linux系统不熟悉,这个方法非常的麻烦,仅仅是为了编译一个可以在ARM-linux上运行的elf文件,还要装虚拟机,学习linux系统的很多使用方法,挺麻烦的。 这两天试了一下在windows平台上安装交叉编译环境,成功了,这里将详细教程写下来,就当是做个记录。 目录 一、安装Eclipse (2) 二、安装CDT (3) 2.1Eclipse Marketplace 安装CDT (4) 2.2 Install New Software 安装CDT方案1 (4) 2.3 Install New Software 安装CDT方案2 (7) 2.4 手动安装CDT (9) 三、安装minGW (10) 四、安装Linaro ToolChain (10) 五、搭建交叉编译开发环境 (13) 六、RSE将可执行文件传输到ARM上 (26)

一、安装Eclipse Eclipse的下载网址是:https://www.wendangku.net/doc/a010566834.html,/downloads/ 会有下面的这个网页,我打红色框的都可以直接使用,这里其实是无所谓的,因为Eclipse是基于插件的开发环境,如果只是为了开发C++的,可以考虑选择后面一个“Eclipse IDE for c/C++ Developers”。 Eclipse解压后就可以直接使用,见下图中的eclipse.exe,同时注意一下freatures和plugins文件夹。

开发环境搭建步骤

一、需要使用的工具 1.开发工具:Eclipse 3.2、MyEclipse 5.0GA 2.JDK V ersion:j2sdk1.4.2_08 3.J2EE Server:JBoss 4.20GA 4.Eclipse SVN plugin:Subclipse 1.2.4 二、集成调试环境搭建 1. 安装JDK 假设安装目录为:C:\Java Tools\JDK\j2sdk1.4.2_08 2. 安装Eclipse 假设安装目录为:C:\ec lipse 3.2\eclipse 3. 安装JBoss 假设安装目录为:C:\jboss-4.0.5.GA 4. 在Eclipse下配置JDK、JBoss 打eclipse后,进入Window-Preferences-Java-Installed JREs,做如下配置 单击Ok完成JDK配置,之后进入Window-Preferences-MyEclipse-Application Servers-JBoss 4,做如下配置

配置JBoss Server为Enable,配置JDK为j2sdk1.4.2_08,单击Ok完成JBoss的配置5. 安装Eclipse SVN plugin 进入Help-Software Updates-Find and Install…,做如下配置 选择Search for new features to install,并单击Next 单击New Archived Site..,选择SVN plugin包文件。 单击OK后,按提示操作完成SVN Plugin的安装。

三、工程环境搭建 该工程包括下列子工程:iTreasuryEJB、iTreasuryWEB、ebank、webdocs、Build、lib、properties、Workdoc。各子工程含义: ◆iTreasuryEJB:iTreasury工程JA V A代码; ◆iTreasuryWEB:iTreasur工程WEB部分代码; ◆ebank:ebank工程JA V A及WEB部分代码; ◆webdocs:js文件及图片; ◆Build:配置文件; ◆Lib:JAR包; ◆Properties:配置文件; ◆Workdoc:工程相关文档。 下面分别介绍各项目新建方法: 1. 新建iTreasuryEJB 选择SVN Repository的itreasuryEJB并右键单击Check out… 选择” Check out as a project configured using the New Project Wizard”,并单击 选择EJB Project并单击Next

测试环境搭建流程

测试环境搭建流程 目录 1 文档目的:............................................................................................... 2 适用范围:............................................................................................... 3 术语和缩略语解释:............................................................................... 4 参考文献:............................................................................................... 5 角色和职责:........................................................................................... 6 测试环境搭建流程:............................................................................... 6.1 测试环境搭建流程图:.................................................................. 6.2 BS测试环境搭建............................................................................. 6.3 CS测试环境搭建............................................................................. 7测试环境备份与恢复 ............................................................................ 7.1 备份 .................................................................................................. 7.1 恢复 .................................................................................................. 8测试环境数据生产和维护 .................................................................... 8 附录........................................................................................................... 1 文档目的: 为了完成软件测试工作所必需的计算机硬件、软件、网络设备、历史数据的总称。毫无疑问,稳定和可控的测试环境,可以使测试人员花费较少的时间就完成测试用例的执行,也无需为测试用例、测试过程的维护花费额外的时间,并且可以保证每一个被提交的缺陷都可以在任何时候被准确的重现。

实操性最强:uCOS-II移植到STM32上的详细步骤;

前言: 说点废话,网上有很多关于uCOS-ii移植的文章,好多都是千篇一律,理论性很强,分析了一大堆虚头巴脑的东西,真想问他们,你确定你分析的这些东西是需要你做的工作吗?实操性严重欠缺。。。这方面我也走了很多弯路,下面就将自己的移植过程一步步的记录下来,也给大家做做参考。 首先,简单总结一下移植的大概过程: (1)去uC/OS-ii官网下载你要移植芯片CPU的相关案例,不一定完全对应,那就找相应系列吧。 (2)编程环境一般有两种,分别是IAR和MDK,这个根据你自己的编程环境进行下载。 (3)本案例需要将uC/OS-II 移植到STM32F103ZET6上,而我使用的编程环境是MDK,很遗憾,官网上提供的案例是基于 IAR的,所以要基于IAR的案例进行更改。 (4)使用MDK创建一个无操作系统的最简单程序,确保这个程序能够使用,这样做的目的是为了一步步的排查错误,假 如无操作系统时,都有错误,移植过程中也肯定会有编译 错误,那么在排查错误的时候也就增加了难度,不会写物 操作系统的简单程序怎么办。。。那就不要往下看了。 (5)移植的最大的改动主要有两部分,一个是一些头文件的增减,另外一个就是向量表中PendSV_Handler和 SysTick_Handler的修改。这里我要吐槽一下,网上说了

一大堆关于什么OS_CPU.H的更改还有各种函数的的分析, 这都是扯淡。。。这些根本就不用移植者去修改,官网提供 的案例都已经提供了,除非你选择移植的CPU是比较偏的, 那么这些东西需要移植者自己去编写。 好了,下面就开始详细的记录怎么去移植。 一、创建一个无操作系统的简单裸板系统 1.创建源文件工程文件夹,如下图所示: 其中文件夹“CMSIS”为内核的接口,包含的文件如下 图 文件夹STM32_StdPeriph为固件驱动文件夹,这个把 STM32的固件全都添加进去即可。 文件夹User为其他文件,如下图所示:

嵌入式交叉编译环境的搭建

实验二、嵌入式交叉编译环境的搭建 1、实验目的: 通过本实验使学生掌握交叉编译环境的建立,了解在S3C2440上交叉编译环境搭建的原理及步骤。 2、实验设备及说明 1、安装ubuntu10及vmware的计算机 2、天嵌2440的开发板 3、实验指导书 4、天嵌开发板的超级终端设置 5、天嵌开发板开发文档 6、TQ2440使用手册v2.3---20100125 3、实验内容和步骤 1、安装交叉编译器:EABI4.3.3 ●解压EABI 工具包 命令:tar zxvf /mnt/hgfs/(根据本机压缩包存储路径输入)/EABI 4.3.3.tar.gz –C / ##将压缩包解压到根目录下 ●添加路径至全局变量PATH中 命令:PATH=$PAHT:/opt/EmbedSky/4.3.3/bin (此路径应根据本机的具体情况输入) ●查看全局变量PATH 命令:echo PATH ###查看刚才的添加是否成功 ●查看交叉编译命令是否能够使用 命令:arm-linux-gcc –v ###如果刚才解压、添加变量成功,此时输入命令后,即可以显示命令的版本信息。

2、minicom

●在线安装minicom 命令:apt-get install minicom ●在命令行中键入“minicom”,这就启动了minicom软件。 ●Minicom在启动时默认会进行初始化配置minicom -s ?CTRL+A Z,来查看minicom的帮助 ?CTRL-A O配置minicom的串口参数,选择“Serial port setup”子项,上面列出的配置是minicom启动是的默认配置,用户可以通过键入每一项前的大写字母,分别对每一项进行更改.要对波特率、数据位和停止位进行配置,键入“E”,在该配置界面中,可以键入相应波特率、停止位等对应的字母,即可实现配置,配置完成后按回车键就退出了该配置界面。在确认配置正确后,可键入回车返回上级配置界面,并将其保存为默认配置。 ?

嵌入式操作系统实验一建立交叉编译环境

嵌入式操作系统实验一建 立交叉编译环境 Last updated on the afternoon of January 3, 2021

嵌入式操作系统实验报告 队友:张圣苗亚 实验内容 1、准备工作工作:安装virtualbox虚拟机工具,并安装系统、增强型工具,实现共享文件夹的自动挂载。 2、利用crosstool提供的脚本安装和相关资源编译面向的ARM的GCC工具。 详细内容1:安装虚拟机软件和虚拟机时要完成的主要步骤有:安装virtualbox,建立一台虚拟机,分配内存和硬盘,指定共享文件夹(主机和虚拟机可共同操作),指定操作系统镜像文件路径(相当于光盘,第一次启动时安装),安装虚拟操作系统,安装增强工具包,实现共享文件夹的自动挂载。有几点需要注意: 1、虚拟硬盘尽量分配大一些,之后再扩就比较麻烦。 2、共享文件夹不要有中文路径,不然挂载后看不到中文名称文件。 3、安装操作系统时,不能断网,需要下载各种资源,不然会异常。 详细内容2需要安装与脚本相关的工具,需要修改crosstool中的配置文件以指定编译的目标位arm-linux。需要修改需要的资源 实验步骤 实验准备: 在实验准备中,在安装完增强工具包()并重启之后,需要实现对共享文件夹的自动挂载,只需要修改etc目录中的配置文件,是很多linux系统管理员的偏爱,因为凡是需要随系统自动启动的服务、程序等,都可以放在里面。 $sudomkdir/mnt/share $sudomount-tvboxsfembedded/mnt/shared 上面三句话实现了将共享文件夹embeded挂载到了share上。 gedit/etc/ 将第2句命令添加在exit之前,实现了自动挂载功能。 实验一 一、搭建编译环境 1、安装于脚本运行相关及其他的工具bison、flex、build-essential、patch、libncurses5-dev。

MyEClipse开发环境搭建步骤

Myeclipse安装步骤指南 一:安装myeclipse 二:安装JDK 1、安装JDK 注意:把安装路径记下来!!安装完成后: 2、配置环境变量: (1)配置环境变量路径:我的电脑—属性—高级系统设置—高级—环境变量—新建 (注意:有的话直接在后面添加,用;分号隔开) (2)变量值: ①变量名path (有就在原有基础上加; 分号把变量值添加进去) 变量值:%JA V A_HOME%\bin;%JA V A_HOME%\jre\bin ②变量名:CLASSPA TH 变量值:. (要加.表示当前路径,当前路径的意思就是你现在编译运行的程序class文件所在的地方) ③变量名:JA V A_HOME 变量名:JDK 安装路径(默认:C:\Program Files\Java\ \jdkXXX ) 3、验证JDK是否配置成功 CMD 输入命令javac 成功输出安装配置成功

三:tomcat安装 1、下载——安装(安装版) 路径:myeclipse—myeclipse—preferences—servers—Tomcat6.X 在这选择tomcat 的路径成功后可见:

路径:myeclipse—myeclipse—preferences—servers—Tomcat6.X 方法一:在线安装

找到栏目help———eclipse configuration center———进入后点software 页面———点击add site 如图 Name:SVN URL:https://www.wendangku.net/doc/a010566834.html,/update_1.8.x 3键Add to Profile

环境管理体系的建立过程正式版

Guide operators to deal with the process of things, and require them to be familiar with the details of safety technology and be able to complete things after special training.环境管理体系的建立过程 正式版

环境管理体系的建立过程正式版 下载提示:此操作规程资料适用于指导操作人员处理某件事情的流程和主要的行动方向,并要求参加施工的人员,熟知本工种的安全技术细节和经过专门训练,合格的情况下完成列表中的每个操作事项。文档可以直接使用,也可根据实际需要修订后使用。 随着可持续发展战略在全球的实施,环境保护正朝着污染预防的方向发展。这要求组织以主动自觉的方式从其管理职能上推动生命周期的环境管理,将环境保护贯穿渗透到组织的基本活动过程中,以促进组织环境表现的持续改进。实践表明,为实现这一目的,在组织中需要一种系统的结构化管理机制。环境管理体系正是这样一个有效的方法工具。建立环境管理体系,必须以ISO14001标准为规范、 ISO14004标准为指南,并结合国家的法律法规和环境标准。需要特别指出的是:

ISO14001是用于对组织所拥有的环境管理体系进行认证、注册和自我声明的规范标准。因而其对环境管理体系的规定和表述,更侧重于从审核认证或自我声明的角度对环境管理体系的建立和实施提出基本要求。相反,GB/T24004-ISO14004则是一个拟用于对环境管理体系进行认证、注册或自我声明的标准。它作为一个组织由于自身环境管理的需要而自愿选用的支持工具,为组织的环境管理体系的建立、实施及改善提供了具体而广泛的指导。在各类组织的实际应用中,不同的组织所建立的环境管理体系,其特定形式,具体内容等有可能并不完全相同,这取决于组织及其活动,产品或服务过程的具体特点和复杂

基于ARM9的UCOS-II移植

编号: 嵌入式系统设计与制作(论文)说明书 题目:基于嵌入式ARM的 μC/OS-II移植 院(系):信息与通信学院 专业:电子信息工程 学生姓名: 学号: 指导教师: 2012年12月29日

嵌入式系统设计与制作实训任务书

以应用为中心、以计算机为基础的嵌入式技术,是当今发展最快、应用最广、最有发展前景的主要技术之一。嵌入式技术已经被广泛应用于工业控制、移动通信、信息家电、医疗仪器、汽车电子、航空航天等各个领域。 在各种嵌入式处理器中,ARM以体积小、低功耗、低成本、高性能等优点,获得许多半导体厂商的支持,在嵌入式应用领域取得巨大的成功。软件方面,uC/OS是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统,因而被使用频繁。 本文主要研究了μC/OS-II在S3c2440芯片上的移植。本文通过对S3c2440硬件和源码公开的嵌入式实时操作系统μC/OS-II的分析,以S3C2440为例,阐述了在ARM9上移植μC/OS-II,来运行多个任务,用液晶显示来说明μC/OS-II移植的优缺点,以及在移植中应注意的问题,启动代码的理解,解析代码的优化。 关键词:嵌入式系统;实时;ARM9;μC/OS-II

Application, embedded computer-based technology, is one of today's fastest-growing, most widely used, the most promising technologies. Embedded technology has been widely used in industrial control, mobile communications, information appliances, medical equipment, automotive electronics, aerospace and other fields. In a variety of embedded processors, ARM advantages of small size, low-power, low-cost, high-performance, get the support of many semiconductor manufacturers, achieved great success in the field of embedded applications. Software, u C / OS is a free, open-source, compact structure, can be deprived of a real-time operating system for real-time kernel, thus frequent. This paper studies the μC / OS-II in the S3c2440 chip transplant. This article by S3c2440 hardware and open source embedded real-time operating system μC / OS-II analysis, for example, descr ibed to S3C2440 ARM9 on transplantation μC / OS-II to run multiple tasks to illustrate with LCD transplant μC / OS-II strengths and weaknesses, as well as the transplant should pay attention to the problem of understanding of the startup code, the parsing code optimization. Key words: embedded system; real-time; ARM9; μC / OS-II

ubuntu10.04全过程创建交叉编译环境

ubuntu10.04下建立交叉编译工具链(支持软浮点)全过程 参考了网上的不少的资料,花了五个小时终于完成了,记录下全过程供大家分享。 用到的源码包如下,建议新手全部放在/home/usr/downloads/ 目录下。以下操作在用户权限下进行。 ======================================================================= arm-linux-gcc-3.4.1.tar.gz glibc-2.3.3.tar.gz linux-2.6.8.tar.gz crosstool-0.43.tar.gz binutils-2.15.tar.gz glibc-linuxthreads-2.3.3.tar.gz binutils-2.18.tar.gz --安装用 编译一次至少要花半个小时,如果因为依赖软件没有安装中途会报错退出,只有从头再来,那样很浪费时间的。 sudo apt-get install bison flex build-essential patch libncurses5-dev 由于ubuntu10.04自带的ld ,as版本太高的原因,需要安装binutils的2.18版本,然后替换系统中的2.20版本。方法如下: $cd downloads $tar xzvf binutils-2.18.tar.gz $cd binutils-2.18 $./configure --prefix=/tmp/binutils --disable-nls (-prefix后面的是生成可执行文件存放的位置可以自己定义) $make all $make install 编译成功后在/tmp/binutils/bin/中就生成了ld和as程序的可执行文件 重新链接/usr/bin/ld 和/usr/bin/as文件 $sudo rm /usr/bin/ld /usr/bin/as //删除2.20的ld,as $sudo ln –s /tmp/binutils/bin/ld /usr/bin/ $sudo ln –s /tmp/binutils/bin/as /usr/bin/ 然后可运行ld –v 和as –v 查看版本是否为2.18。 安装2.18版本可解决出现的 ld as " version too old "问题。 2. ubuntu10.04下默认的GCC版本是4.4.3,但这个不是版本越高越好,版本太高,对语法什么的要求也高,编译不成功,降低版本吧: #sudo apt-get install gcc-4.1 //安装4.1的GCC,需要联网 #sudo rm /usr/bin/gcc //删除之前4.4.3的快捷方式,4.4.3的GCC并未删除#sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc //建立4.1的快捷方式 这是由于crosstool中定义了GCC的版本的上下线,最高也就到4.1,在其配置的时候会对这个版本信息进行检测,不在其规定范围就报错了。 3.修改sh版本 如果运行

开发环境搭建文档

开发环境搭建 jdk1.5环境的安装和配置 1.jdk1.5的安装 jdk的安装很简单,双击jdk1.5文件下面的jdk-1_5_0_07-windows-i586-p.exe文件,按照步骤一步一步安装即可。 2.jdk1.5的配置 找到jdk1.5的安装路径D:\Program Files\Java\jdk1.5.0_07\bin目录,将其配置到windows 的环境下。 右击“我的电脑”—>“属性”—>“高级” 选择Path点击编辑 将鼠标移到变量值的最前端,把D:\Program Files\Java\jdk1.5.0_07\bin拷贝进去并以分号结束。

配置CLASSPATH,单击新建按钮 输入变量名CLASSPA TH,变量值为“.”; 3.查看jdk是否安装成功 运行cmd,在命令行中输入java。查看命令行的提示信息。 输入javac,查看提示信息。

提示上述信息,则安装成功。 db2客户端环境的安装和配置 1.db2客户端的安装 db2客户端的安装很简单,双击db2 client目录下的setup.exe按提示一步一步安装即可。 2.db2客户端的配置 选择“开始”—>“所有程序”—>“IBM db2”—>“设置工具”—>“配置助手”,打开配置助手,如下图: 单击“选择”—>“使用向导来添加数据库”

选择“人工配置与数据库的连接”选择,单击“下一步”。 选择“TCP/IP”单击下一步。 主机名框中填写DB2服务器的IP地址,服务名保持默认值,端口号填写DB2端口号(默认为50000),单击“下一步”按钮,出现如下图所示界面。

UCOSII移植过程及心得

UCOSII V2.86在LPC2378上的移植 (编译器ADS1.2) 忙了几天,终于移植成功了。 移植UCOS需要准备一些东西,首先当然是OS源代码,再就是选定编译器,需要弄清一下几点: 1、UCOS需要移植的内容 2、编译器的特性(在这里主要是ATPCS) 3、处理器的特性(这里主要注意ARM7的模式) 以下先简要说一下这几点,为后面的程序说明做准备 首先说说第一点,UCOS需要移植的内容。 1、数据类型的定义,这个根据平台来处理。具体代码如下: 2、任务切换函数,就是两个任务环境之间的切换。 3、处理临界代码前要关闭中断,之后再打开,这个实现的方法与平台关系很大。 4、栈的初始化,栈中保存的是任务的运行环境,不同的处理器中的寄存器自然是不一样的。 5、还有一个和任务切换差不多的,这个函数只运行一次,就是将第一个运行的任务的运行环境复制到CPU中。 再说说编译器的特性,ATPCS规定(想要详细一些的可以看看ADS 的帮助文档):R0-R3用来传递参数,R4-R12用来处理局部变量。这个在处理汇编和C的接口时十分重要。 最后是CPU的特性。ARM7有7种模式,但是有些模式对于UCOS在ARM7上的运行用处不大,经过综合考虑,可以只使用四种模式:SVC:运行OS代码和用户代码 SYS:用于IRQ的嵌套处理,(暂时还未实现) IRQ:处理中断,处于OS的控制范围内 FIQ:独立于操作系统,处理快速中断 有了上面的说明,下面可以具体讨论了,因为网页中显示代码及注释不方便,所以把它们放在了附件中。 标题中前面是内容,括号内是涉及到的需要移植的函数 1、任务栈(OSTaskStkInit)

交叉编译环境的搭建简介(精)

交叉编译环境的搭建简介 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构(Architecture、操作系统(Operating System。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说,我们常说的x86 Linux平台实际上是Intel x86体系结构和Linux for x86操作系统的统称;而x86 WinNT平台实际上是Intel x86体系结构和Windows NT for x86操作系统的简称。 有时是因为目的平台上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。 交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们常用的计算机软件,都需要通过编译的方式,把使用高级计算机语言编写的代码(比如C代码编译(compile成计算机可以识别和执行的二进制代码。比如,我们在Windows平台上,可使用Visual C++开发环境,编写程序并编译成可执行程序。这种方式下,我们使用PC 平台上的Windows工具开发针对Windows本身的可执行程序,这种编译过程称为native compilation,中文可理解为本机编译。然而,在进行嵌入式系统的开发时,运行程序的目标平台通常具有有限的存储空间和 运算能力,比如常见的 ARM 平台,其一般的静态存储空间大概是16到32MB,而CPU的主频大概在100MHz到500MHz之间。这种情况下,在ARM 平台上进行本机编译就不太可能了,这是因为一般的编译工具链(compilation tool chain需要很大的存储空间,并需要很强的CPU 运算能力。为了解决这个问题,交叉编译工具就应运而生了。通过交叉编译工具,我们就可以在CPU能力很强、存储控件足够的主机平台上(比如PC上编译出针对其他平台的可执行程序。

MTK 开发环境搭建步骤

MTK 平台软件环境配置 Bright.Zhang 2006-12-27 1. 将软件代码拷贝至D:\pvcs\maui\mcu 目录下,做为工作目录。 2. Perl 将Perl 拷贝至C 盘根目录下,在“我的电脑”→“属性”→“高级”→“环境变量” →“系统变量”→Path 中添加Perl 的路径 C:\perl\bin\; (path参考:C:\Program Files\ARM\bin\win_32-pentium;C:\Program Files\ARM\RVCT\Programs\3.1\569\win_32-pentium;C:\Program Files\ARM\Utilities\FLEXlm\10.8.5.0\1\win_32-pentium;C:\Program Files\ARM\ADSv1_2\bin;c:\program files\imagemagick-6.2.5-q16;C:\perl\bin\;C:\WINDOWS\system32;C:\WIN DOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\TortoiseSVN\bin;C:\Program Files\ARM\RDI\Deprecated\1.3.1\1\windows) 3. 7-Zip 安装7-Zip 软件。完毕后,将C:\Program Files\7-Zip 目录下的7za.exe 文件拷贝到 D:\pvcs\maui\mcu\plutommi\Customer\ResGenerator 目录下 4. MinGW-3.1.0-1.exe MinGW-3.1.0-1.exe 安装到c 盘根目录 5. gcc-core-3.3.1 gcc-core-3.3.1 解压,将“bin”、“info”、“lib”、“man”四个目录覆盖方式复制到c:\ MinGW 中。 6. gcc-g++-3.3.1-20030804-1.tar.gz gcc-g++-3.3.1-20030804-1.tar.gz 解压,将“bin”、“include”、“lib”、“man”四个目录覆 盖方式复制到c:\ MinGW 中。 7. 将c:\ MinGW 目录拷贝至D:\pvcs\maui\mcu\tools 中 8. MSYS-1.0.10.exe 将MSYS-1.0.10.exe 安装到C:\msys\1.0 的默认路径下 在弹出的Dos 框中

UcOS2移植

学号: 嵌入式系统及应用 实验报告 uc/os-II的移植 学生姓名 班级 成绩 计算机与信息工程学院 2013年10月14日

任务的基本管理 1、实验目的 a)理解stm32处理器的寄存器结构; b)写好uc/os-II的接口代码; 2、实验原理及程序结构 2.1 实验设计 本实验主要实现操作和底层寄存器的数据交换和通信,从而实现操作系统的移植。实现主要如下。 (1)实现配置文件的编写; (2)实现寄存器和内存的管理; 2.2 源程序说明 IMPORT OSRunning ; External references IMPORT OSPrioCur IMPORT OSPrioHighRdy IMPORT OSTCBCur IMPORT OSTCBHighRdy IMPORT OSIntNesting IMPORT OSIntExit IMPORT OSTaskSwHook EXPORT OSStartHighRdy EXPORT OSCtxSw EXPORT OSIntCtxSw EXPORT OS_CPU_SR_Save ; Functions declared in this file EXPORT OS_CPU_SR_Restore EXPORT PendSV_Handler

NVIC_INT_CTRL EQU 0xE000ED04 ; 中断控制寄存器 NVIC_SYSPRI2 EQU 0xE000ED20 ; 系统优先级寄存器(2) NVIC_PENDSV_PRI EQU 0xFFFF0000 ; PendSV中断和系统节拍中断 ; (都为最低,0xff). NVIC_PENDSVSET EQU 0x10000000 ; 触发软件中断的值. PRESERVE8 AREA |.text|, CODE, READONLY THUMB OS_CPU_SR_Save MRS R0, PRIMASK ;读取PRIMASK到R0,R0为返回值 CPSID I ;PRIMASK=1,关中断(NMI和硬件FAULT可以响应) BX LR ;返回 OS_CPU_SR_Restore MSR PRIMASK, R0 ;读取R0到PRIMASK中,R0为参数 BX LR ;返回 ;函数名称: OSStartHighRdy ;功能描述: 使用调度器运行第一个任务 参数: None 返回值: None OSStartHighRdy LDR R4, =NVIC_SYSPRI2 ; set the PendSV exception priority LDR R5, =NVIC_PENDSV_PRI STR R5, [R4] MOV R4, #0 ; set the PSP to 0 for initial context switch call MSR PSP, R4

Android开发环境搭建图解教程(完整过程详细步骤)

Android开发环境搭建图解教程 一、开发环境搭建 在搭建Android开发环境之前,首先要了解Android对操作系统的要求:Android可以运行在Windows XP及以上的版本上,也可以运行在Mac OS和Linux 等操作系统上,本文以Windows XP为依托进行Android开发环境搭建的讲解。1.安装JDK和配置Java开发环境 Android应用程序开发使用Java语言,因此首先需要搭建Java程序开发运行环境,Java的开发环境称为JDK(Java Development Kit),是Sun Microsystems 针对java程序员开发的产品,自从Java推出以来,JDK已经成为最广泛的Java SDK。JDK是整个Java的核心,包括了Java运行环境JRE(Java Runtime Environment)、Java工具和Java基础类库。 1.1 下载JDK 当前最新版JDK的下载地址为: .oracle./technetwork/java/javase/downloads/jdk-7u2-download-1377129.html 图 1 - 1 1.2 配置JDK

右键点击“我的电脑”,选择“属性”→“高级”→“环境变量”→“系统变量”,找到“Path”变量名(如果没有就新建一个名为“Path”的变量),点击“编辑”按钮,添加JDK安装目录中的“bin”文件夹路径,以分号隔开,如图1-2所示,然后点击“确定”按钮完成设定。 图 1 - 2 再找到“CLASSPATH”变量(如果没有,以同样方法新建一个),输入JDK 安装目录中的“lib”及“demo”的路径,如图1-3所示,点击“确定”按钮完成设定。 1.3 验证JDK是否安装配置成功 安装配置完成之后,需要测试JDK是否安装配置成功。在Windows XP系统中点击“开始”→“运行”,输入“CMD”回车进入命令行模式,键入命令“java -version”,运行结果如图 1-4所示,表示安装JDK安装成功(显示的版本号根据具体情况可能有所不同)。 然后键入命令“javac”,运行结果如图1-5所示,表示JDK环境配置正确。

在PROTEUS中使用ARM处理器及UCOS-II移植理解

嵌入式系统课程论文 在PROTEUS中使用ARM处理器及uC/OS-II移植理解 Rein Lee 一.嵌入式系统概述 通过本次嵌入式系统课程的学习,我了解了嵌入式系统的概念。所谓嵌入式系统,是指用于执行独立功能的专用计算机系统,它由包括微处理器、定时器、微控制器、存储器、传感器等一系列微电子芯片与器件,和嵌入在存储器中的微型操作系统、控制应用软件组成,共同实时诸如实时控制、监视、管理、移动计算、数据处理等各种自动化处理任务。嵌入式系统以应用为中心,以微电子技术、控制技术和通讯技术为基础,强调硬件软件的协同性与整合性,软件与硬件可裁减,以满足系统对功能、成本、体积和功耗等要求。 1.1 嵌入式系统的硬件特征 嵌入式系统的硬件必须根据具体的应用任务,以功耗、成本、体积、可靠性、处理能力等为指标来选择。嵌入式系统的核心是系统软件和应用软件。由于存储空间有限,因而要求软件代码紧凑、可靠,大多对实时性有严格的要求。 早期的嵌入式系统设计方法,通常是采用“硬件优先”原则。在粗略估计软件任务需求的情况下,首先进行硬件设计与实现。然后在此硬件平台上,再进行软件设计。因为很难充分利用硬件软件资源,取得最佳性能的效果。同时,一旦在测试时发现问题,需求对设计进行修改时,整个设计流程将重新进行,对成本和设计周期的影响很大。这种传统的设计方法只能改善硬件/软件各自的性能,在有限的设计空间不可能对系统做出较好的性能综合优化,在很大程度上依赖于设计者的经验和反复实验。 随着电子系统功能的日益强大和微型化,系统设计涉及的问题越来越多,难度也越来越大。硬件和软件也不再是截然分开的两个概念。因而出现了软硬件协同的设计方法。在系统目标要求下,协同设计软硬件体系结构,以最大限度地挖掘系统软硬件能力,得到高性能低代价的优化设计方案。 1.2 嵌入式操作系统 目前流行的嵌入式操作系统可以分为两类:一类是从运行在个人电脑上的操作系统向下移植到嵌入式系统中,形成的嵌入式系统,如微软公司的Windows CE,SUN公司的Java操作系统,嵌入式Linux等。 另一类是实时操作系统,如WindRiver公司的VxWorks,ISI的pSOS,ATI的Nucleus,和免费公开源代码的uC/OS-II等。 二.在Proteus中使用ARM处理器 由于Proteus中只支持LPC系列的ARM处理器,在这里只是简单的列举出LPC2124的一些特性: LPC2124是基于一个支持实时仿真和跟踪的16/32位ARM7TDMI-S CPU的微处理器,并带有256k 的嵌入的高速Flash存储器和16k的片那静态RAM。128位宽度的存储器接口和独特的加速结构使得32位代码能够在最大的时钟速率下运行。对代码规模有严格控制的应用可使用16位Thumb模式,将使得代码规模降低超过30%,而性能的损失却很小。 LPC2124片那Boot装载程序实现在系统编程(ISP)和在应用编程(IAP)。1ms可以编程512字节。整片擦除只需要400ms。此外还有4路A/D转换器,转换时间低于2.24us;2个32位定时器,6路PWM输出、RTC、看门狗和多个串 第 1 页共 7 页

Linux交叉编译环境

开发编译环境 1.交叉编译器的安装,与使用 以ubuntu-14.04.4-desktop-amd64 为例 将附录1的arm_toolchain.tar.gz 选择一个目录COPY过去,(此处以/opt为例) tar zxvf arm_toolchain.tar.gz 修改~/.bashrc 在最后一行添加 将/opt/X3改成你解压的所在目录即可 source ~/.bashrc 在终端查看是否正确,输入arm后按TAB键若出现 安交叉编译器安装正确 若不添加该环境变量,则在使用该编译器时,请使用绝对路径 如: 部分LINUX操作系统,可能存在所需的库并未安装,在编译时若提示未能找到相关库,请自行搜索该库的相应安装 若出现 arm-Linux-gcc /usr/local/arm/4.3.2/bin/arm-linux-gcc: 行3: /usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc: 没有那个文件或目录(No such file or directory) 且进入external-toolchain/bin/ 直接运行./ arm-none-linux-gnueabi-gcc出现同样提示,则可能原因是64位系统需要安装32位相应库 解决方法: 方法一: sudo apt-get install lib32z1 方法二: sudo apt-get install g++-multilib 方法三: $ sudo dpkg --add-architecture i386 $ sudo apt-get update $ sudo apt-get install ia32-libs (工具:附录1-arm_toolchain.tar.gz)

相关文档
相关文档 最新文档