当前位置:文档之家› μcos_II之移植篇

μcos_II之移植篇

μcos_II之移植篇
μcos_II之移植篇

/*

*Author:Callon Huang

*Version:1.0

*Time:2014/11/5

*blog:https://www.doczj.com/doc/b412040369.html,/u/2451220761

*/

希望博客也能帮到你~

第一步:μcosII源码下载

https://www.doczj.com/doc/b412040369.html,/downloadcenter/

STM32固件库stm32f10x_stdperiph_lib.zip的下载

第二步:新建文件夹,并准备子目录:

其中Software是μcosII源码下载完成后拷贝过来的,其它的都自己新建.

App 用来存放应用程序文件,

Bsp 用来存放版级驱动文件,

Lib 用来存放 STM32 的标准外设库文件,

Source 用来存放uCOS 文件

第三步:把Software里的uCOS-II、uC-LIB和uC-CPU文件夹到Source里并把后两者拷贝到uCOS-II文件夹里,最后如下:

第四步:找到Software\EvalBoards\ST\STM32F103ZE-SK\IAR下的BSP文件夹,复制到Source文件夹下

第五步:找到Software\EvalBoards\ST\STM32F103ZE-SK\IAR下的OS-Probe-LCD文件夹,复制到Source文件夹下并改名为APP

第六步:解压下载好的stm32f10x_stdperiph_lib.zip固件库:

找到

stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Librari es\STM32F10x_StdPeriph_Driver下的inc和src文件夹并复制到Lib 文件夹下

第七步:复制

stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Librari es\CMSIS下的CM3文件夹到Lib文件夹下

第八步:删除一些不需要的文件:

APP文件夹只需要:

BSP文件夹只需要:

在Software\CPU\ST\STM32里也有inc和src文件夹,但是比STM32固件库的要多两个文件

stm32f10x_systick.c和stm32f10x_systick.h

把这两个文件拷贝到SysTick文件夹下.

第九步:建立工程my_ucosII,把所有的.c文件和.asm文件都加进来:

第十步:对工程进行一些设置:

Device就不用说了;

Target不变;

Output勾选上Create HEX File,并在

里选择Obj文件夹;

C/C++中

添加头文件所在路径,否则会出现大量如下编译错误:

头文件路径:

Libraries文件夹是这三个

最后这部分全部设置好后,如下:

最后总体设置完如下:

Debug里

最后

下载程序的时候,如果碰到

MDK中出现“Error Flash download failed-Cortex-M3”错误,可以通过上面的添加On-chip-Flash来解决。

其他没提的就不改变;

此时先修改部分代码做到最简化:

app.c:

#include "stm32f10x_conf.h"

#include

#include

#include

#define STARTUP_TASK_PRIO 4

#define LED1_TASK_PRIO 6

#define STARTUP_TASK_STK_SIZE 80

#define LED1_TASK_STK_SIZE 80

OS_STK startup_task_stk[STARTUP_TASK_STK_SIZE];

OS_STK led1_task_stk[LED1_TASK_STK_SIZE];

static void systick_init(void)

{

RCC_ClocksTypeDef rcc_clocks;

RCC_GetClocksFreq(&rcc_clocks);

SysTick_Config(rcc_clocks.HCLK_Frequency/OS_TICKS_PER_SEC);

}

void led1_task(void *p_arg)

{

while(1)

{

LED1_ON();

OSTimeDlyHMSM(0,0,1,0);

LED1_OFF();

OSTimeDlyHMSM(0,0,1,0);

}

}

void startup_task(void *p_arg)

{

systick_init();

OSTaskCreate(led1_task,(void*)0,&led1_task_stk[LED1_TASK_STK_SIZE-1],LED1_TASK_PRIO) ;

GPIO_SetBits(GPIOF,GPIO_Pin_7);

while(1)

{

LED2_ON();

OSTimeDlyHMSM(0,0,0,500);

LED2_OFF();

OSTimeDlyHMSM(0,0,0,500);

}

}

int main(void)

{

led_config();

OSInit();

OSTaskCreate(startup_task,(void*)0,&startup_task_stk[STARTUP_TASK_STK_SIZE-1],ST ARTUP_TASK_PRIO);

OSStart();

return 0;

}

bsp.c:

#include "stm32f10x_conf.h"

void led_config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //板上LED编号D5

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOF, &GPIO_InitStructure);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //板上LED编号D5 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOF, &GPIO_InitStructure);

}

打开bsp.h修改为:

#ifndef __BSP_H__

#define __BSP_H__

#define LED1_ON() GPIO_SetBits(GPIOF,GPIO_Pin_6)

#define LED1_OFF() GPIO_ResetBits(GPIOF,GPIO_Pin_6)

#define LED2_ON() GPIO_SetBits(GPIOF,GPIO_Pin_7)

#define LED2_OFF() GPIO_ResetBits(GPIOF,GPIO_Pin_7)

void led_config(void);

#endif

现在可以下编译试试,会出现很多很多问题:

No.1:

原因是因为stm32f10x_conf.h需要包含的很多头文件没有包含,如

没有包含stm32f10x_gpio.h,当然就会很多东西没有定义,我们彻底修改一下stm32f10x_conf.h:

#ifndef __STM32F10x_CONF_H

#define __STM32F10x_CONF_H

/* Includes ------------------------------------------------------------------*/

/* Uncomment/Comment the line below to enable/disable peripheral header file inclusion */

//#include "stm32f10x_adc.h"

//#include "stm32f10x_bkp.h"

//#include "stm32f10x_can.h"

//#include "stm32f10x_cec.h"

//#include "stm32f10x_crc.h"

//#include "stm32f10x_dac.h"

//#include "stm32f10x_dbgmcu.h"

//#include "stm32f10x_dma.h"

//#include "stm32f10x_exti.h"

//#include "stm32f10x_flash.h"

//#include "stm32f10x_fsmc.h"

#include "stm32f10x_gpio.h"

//#include "stm32f10x_i2c.h"

//#include "stm32f10x_iwdg.h"

//#include "stm32f10x_pwr.h"

#include "stm32f10x_rcc.h"

//#include "stm32f10x_rtc.h"

//#include "stm32f10x_sdio.h"

//#include "stm32f10x_spi.h"

//#include "stm32f10x_tim.h"

//#include "stm32f10x_usart.h"

//#include "stm32f10x_wwdg.h"

#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ #ifdef USE_FULL_ASSERT

#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) void assert_failed(uint8_t* file, uint32_t line);

#else

#define assert_param(expr) ((void)0)

#endif /* USE_FULL_ASSERT */

#endif /* __STM32F10x_CONF_H */

/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/

上面的stm32f10x_xxx.h,当你需要用到相应功能时再包含即可,这里只是点亮led灯.

No.2:

..\Libraries\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h(96): error: #35: #error directive: "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"

如果出现上述错误

是需要修改stm32f10x.h配置芯片类型:打开 stm32f10x.h 文件,在大约的 66-73 行,根据所选芯片类型,去掉相应注释。这里我去掉 STM322F10X_HD行的注释(高密度型的stm32芯片)。对自己选用的芯片到底是属于低密度型、中密度型、高密度型还是互联型,可查看 78-92 行的官方注释

,但是会发现无法修改,因为文件是只读的,我们需要修改属性再修改:

是否启用标准外设库:继续在stm32f10x.h 文件中,去掉105行的USE_STDPERIPH_DRIVER 注释,启用 stm32 标准外设库

No.3:

D:\Program Files\keil\ARM\Inc\ST\STM32F10x\stm32f10x_type.h(23): error: #256: invalid redeclaration of type name "s32" (declared at line 487 of "..\Libraries\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h")

上述错误的原因在于重复定义,因为keil本身带的头文件和我们工程的头文件重复定义了!

我们先把回收站清除,再删除keil下的这些文件,以防以后需要恢复.

No.4:

..\Source\uCOS-II\Ports\arm-cortex-m3\Generic\IAR\os_dbg.c(32): error: #20: identifier "__root" is undefined

如果你碰到上述这个问题,那么把

里的__root去掉就好了,这个问题也是由编译器不同而产生的.

No.5:

..\Source\uCOS-II\Ports\arm-cortex-m3\Generic\IAR\os_cpu_a.asm(34): error: A1163E: Unknown opcode PUBLIC , expecting opcode or Macro

如果你碰到上述问题,问题原因在于编译器,我们需要将下面的PUBIC改为EXPORT。(如果下载的源代码是用RealView编译的,则此处就不用改了,因为代码本来就是用EXPORT)

修改完,如下

No.6:

..\Source\uCOS-II\Ports\arm-cortex-m3\Generic\IAR\os_cpu_a.asm(54): error: A1163E: Unknown opcode RSEG , expecting opcode or Macro

如果你碰到上述问题,问题在于编译器的原因,也要将下面的内容替换一下:

我们改为

即可

No.7:

..\Source\uCOS-II\uC-CPU\ARM-Cortex-M3\IAR\cpu_a.asm(40): error: A1163E: Unknown opcode PUBLIC , expecting opcode or Macro

..\Source\uCOS-II\uC-CPU\ARM-Cortex-M3\IAR\cpu_a.asm(57): error: A1163E: Unknown opcode RSEG , expecting opcode or Macro

同样类似的问题我们在cpu_a.asm里面我们也可以看到

修改同样照做:

No.8:

..\Source\uCOS-II\uC-CPU\ARM-Cortex-M3\IAR\cpu_a.asm(136): error: A1167E: Invalid line start

问题就出在下面的红字部分,

我们删除它们,直接到END

No.9:

..\Source\uCOS-II\uC-CPU\ARM-Cortex-M3\IAR\cpu_a.asm(46): error: A1145E: Undefined exported symbol 'CPU_CntLeadZeros'

问题如果是上面这个,那么把这些没有定义的都注释掉,如下

结果编译还是出错

..\Source\uCOS-II\uC-CPU\ARM-Cortex-M3\IAR\cpu_a.asm(46): error: A1158E: Illegal line start, should be blank

因为这里面的注释需要用“;”来注释:

SOPC课程设计实验报告--基于 NIOS 的 μCOS-II 实验

FPGA-CPLD原理及应用课程设计报告题目:基于NIOS的μC/OS-II实验 学院:信息与电子工程学院 专业:电子科学与技术 学号: 姓名: 指导老师: 时间:2013-7-15~2013-7-20

一、摘要 本实验项目使用Quartus II、SOPC Builder和Nios II EDS从零开始构建一个能够在DE2-115实验平台上运行的μC/OS-II操作系统的Nios II系统。初学者可以借此范例熟悉Quartus II、SOPC Builder、Nios II EDS的使用,并且了解基于FPGA的嵌入式系统开发流程。 关键词:SOPC Builder Nios II DE2Nios II EDS 二、设计要求 从零开始建立一个基于Nios II的μC/OS-II应用实验系统(也可以认为是一个Nios II+μC/OS-II的应用框架)具有以下一些作用。 (1)读者可以借助SOPC Builder工具自行对Nios II软核处理器进行配置。 (2)很多范例都是纯硬件的VHDL代码,需要自行从零开始建立Nios II 系统,不能够直接使用Altera公司已经建立好的Nios II系统。 (3)DE2-115并非Altera公司原创的开发板,而是友晶科技ODM的电路板,很多外围设备都与Altera提供的电路板不一样,所以很多Altera手册中范例都无法执行,必须要有自己从硬件到软件建立系统的能力,将来才有办法将Altera 提供的范例移植到DE2-115上执行并做到最佳化。 三、设计内容” 1、SOPC Builder硬件建立 SOPC Builder是在Quartus II里的SOPC Builder进行的,先建立工程在SOPC Builder里添加硬件,包括CPU,PLL,onchip_memory,SSRAM,SDRAM Tristate Bridge,Flash,JTAG UART,UART,Timer System ID 2、Quartus II硬件处理 硬件会自动建立一个顶层模块,通过建一个原理图来对对应的硬件进行输入输出的添加,再锁定引脚,编译工程,硬件下载。 3、Nios II DE2嵌入软件编写 在Nios II里建立工程,选择相应的模块,编写需要嵌入的软件,添加缺少的头文件对应的宏定义,编译工程,进行软件下载,在观察结果。 四、设计步骤 1、打开Quartus II新建工程

实验四Linux内核移植实验

合肥学院 嵌入式系统设计实验报告 (2013- 2014第二学期) 专业: 实验项目:实验四 Linux内核移植实验 实验时间: 2014 年 5 月 12 实验成员: _____ 指导老师:干开峰 电子信息与电气工程系 2014年4月制

一、实验目的 1、熟悉嵌入式Linux的内核相关代码分布情况。 2、掌握Linux内核移植过程。 3、学会编译和测试Linux内核。 二、实验内容 本实验了解Linux2.6.32代码结构,基于S3C2440处理器,完成Linux2.6.32内核移植,并完成编译和在目标开发板上测试通过。 三、实验步骤 1、使用光盘自带源码默认配置Linux内核 ⑴在光盘linux文件夹中找到linux-2.6.32.2-mini2440.tar.gz源码文件。 输入命令:#tar –jxvf linux-2.6.32.2-mini2440-20110413.tar对其进行解压。 ⑵执行以下命令来使用缺省配置文件config_x35 输入命令#cp config_mini2440_x35 .config;(注意:x35后面有个空格,然后有个“.”开头的 config ) 然后执行“make menuconfig”命令,但是会出现出现缺少ncurses libraries的错误,如下图所示: 解决办法:输入sudo apt-get install libncurses5-dev 命令进行在线安装ncurses libraries服务。

安装好之后在make menuconfig一下就会出现如下图所示。 ⑶配置内核界面,不用做任何更改,在主菜单里选择退出,并选“Yes”保存设置返回到刚命令行界面,生成相应配置的头文件。 编译内核: #make clean #make zImage 在执行#make zImage命令时会出现如下错误: 错误:arch/arm/mach-s3c2440/mach-mini2440.c:156: error: unknown field 'sets' specified in initializer 通过网上查找资料 于是在自己的mach-mini2440.c中加入 #include

实操性最强: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 参考资料及工具 (1) 1.1 参考资料及工具 (1) 2 应用软件移植方案实践 (2) 2.1 课程介绍 (2) 2.2 教学目标 (2) 2.3 案例背景 (2) 2.4 任务 (3) 演练场景1:需求分析 (3) 演练场景2:实施准备 (4) 演练场景3:方案实施 (5) 演练场景4:方案验收 (6) 2.5 评分表 (7)

1 参考资料及工具 1.1 参考资料及工具 文档中所列出的命令以及参考文档,请根据实际环境中的不同产品版本使用对应的命令以及文档。 参考文档: 1. 华为鲲鹏代码迁移工具用户指南 路径:华为云> 鲲鹏社区> 鲲鹏文档> 编译器和工具链> 开发工具 2. 华为鲲鹏分析扫描工具用户指南 路径:华为云> 鲲鹏社区> 鲲鹏文档> 编译器和工具链> 开发工具 3. Nginx软件安装指南 路径:华为云> 鲲鹏社区> 鲲鹏文档> 软件安装指南 4. PHP软件安装指南 路径:华为云> 鲲鹏社区> 鲲鹏文档> 软件安装指南

2 应用软件移植方案实践 2.1 课程介绍 【开发者设计提供引导员的开场白,为新老师提供便利,以下是作为参考】 本章的内容主要为应用软件从x86计算平台向鲲鹏计算平台的迁移实践指导。 2.2 教学目标 ●能完成应用迁移项目的需求分析; ●能完成应用迁移项目的实施准备; ●能完成应用迁移项目的方案实施; ●能完成应用迁移项目的方案验收。 2.3 案例背景 说明:本文所涉及的案例仅为样例,实际操作中请以真实设备环境为准,具体配置步骤请参考对应的产品文档。 在这个数字时代,银行业务面临转型与重塑,为此银行应当实施数字化战略,通过构建有力的支撑体系及IT能力助力数字化转型,从而保持在金融行业的领先地位。 为更好的推进H银行的数字化转型,企业决定将现有的业务平台迁移至华为鲲鹏计算平台,为异构计算、大数据分析等新兴业务提供更好的算力支撑。 假设您是本次项目技术负责人工程师A,需要完成如下任务: ●需求分析; ●实施准备; ●方案实施; ●方案验收。 说明:本手册涉及的操作物理环境下与云环境下均适用,故在此不作区分。

基于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

华为常用实验手册范本

目录 实验一以太网交换机基本配置 (1) 实验二以太网端口配置实验 (7) 实验三利用TFTP管理交换机配置 (13) 实验四虚拟局域网VLAN (16) 实验五生成树配置 (25) 实验六802.1x和AAA配置 (38) 实验七路由器基本配置 (45) 实验八PPP配置 (51) 实验九FR配置 (56) 实验十静态路由协议配置 (64) 实验十一RIP协议配置 (68) 实验十二OSPF协议配置 (74) 实验十三访问控制列表配置 (88) 实验十四地址转换配置 (95) 实验十五DHCP配置 (101) 实验十六升级路由器或交换机的操作系统 (116)

实验一以太网交换机基本配置 【实验目的】 掌握以太网交换机基本配置 【实验学时】 建议2学时 【实验原理】 一、交换机常用命令配置模式 1 业务描述 (1)Quidway系列产品的系统命令采用分级保护方式,命令被划分为参观级、监控级、配 置级、管理级4个级别,简介如下: ?参观级:网络诊断工具命令(ping、tracert)、从本设备出发访问外部设备的命 令(包括:Telnet客户端、RLogin)等,该级别命令不允许进行配置文件保存的 操作。 ?监控级:用于系统维护、业务故障诊断等,包括display、debugging命令,该 级别命令不允许进行配置文件保存的操作。 ?配置级:业务配置命令,包括路由、各个网络层次的命令,这些用于向用户提供 直接网络服务。 ?管理级:关系到系统基本运行,系统支撑模块的命令,这些命令对业务提供支撑 作用,包括文件系统、FTP、TFTP、XModem下载、配置文件切换命令、电源 控制命令、备板控制命令、用户管理命令、命令级别设置命令、系统部参数设置 命令等。 (2)命令视图: 系统将命令行接口划分为若干个命令视图,系统的所有命令都注册在某个(或某些)命令视图下,只有在相应的视图下才能执行该视图下的命令: 各命令视图的功能特性、进入各视图的命令等的细则: ◆命令视图功能特性列表

μCOS-II移植实验

昆明理工大学信息工程与自动化学院学生实验报告 (2012—2013 学年第 2 学期) 课程名称:嵌入式系统设计开课实验室: 实验五μC/OS-II移植实验 一、实验目的 ●了解μC/OS-II移植条件和内核基本结构。 ●掌握将μC/OS-II内核移植到ARM7处理器上的方法和步骤。 二、实验原理 1.μC/OS-II文件体系 μC/OS-II的文件体系结构见图1,其中应用软件层是基于μC/OS-II上的代码。μC/OS-II包括3个部分: 1)核心代码部分:这部分代码与处理器无关,包括7个源代码文件和1个头文件。它们负责的功能是内核管理、事件管理、消息队列管理、存储管理、消息管理、信号量处理、任务调度和定时管理。 2)设置代码部分:包括2个头文件,用来配置事件控制块的数目以及是否包含消息管理相关代码等。 3)处理器相关的移植代码部分:包括1个头文件、1个汇编文件和1个C代码文件。在μC/OS-II的移植过程中,用户所需关注的就是这部分文件。

图1 μC/OS-II文件体系结构 2.μC/OS-II移植条件 1)处理器的C编译器能产生可重入代码。 可重入代码指的是可以被多个任务同时调用,而不会破坏数据的一段代码;或者说代码具有在执行过程中打断后再次被调用的能力。 2)用C语言就可以打开和关闭中断。 ARM处理器核包含一个CPSR寄存器。该寄存器包括一个全局中断禁止位,控制它打开和关闭中断。 3)处理器支持中断并且能产生定时中断。 ARM处理器都支持中断并能产生定时中断。 4)处理器支持容纳一定量数据的硬件堆栈。 对于一些只有10根地址线的8位控制器,芯片最多可访问1KB存储单元。在这样的条件下移植是比较困难的。 5)处理器有将堆栈指针和其他CPU寄存器读出和存储到堆栈或内存中的指令。 ARM处理器中汇编指令STMFD可以将所有寄存器压栈,对应也有一个出栈的指令LDMFD。 三、实验内容 移植μC/OS-II内核到ARM处理器S3C44B0,在IDE中观察其运行状况。 四、实验步骤 1.基本的配置和定义 所有需要完成的基本配置和定义全部集中在OS_CPU.H中。 1)定义与编译器相关的数据类型 μC/OS-II为保证可移植性,程序中没有直接使用int、unsigned int等定义,而是自己定义了一套数据类型。 2)定义使能和禁止中断宏 3)定义栈的增长方向 用户规划好栈的增长方向后,定义符号OS_STK_GROWTH的值。 4)定义OS_TASK_SW宏 此宏是μC/OS-II从低优先级任务切换到高优先级任务时的调用,可采用两种方式定义:若处理器支持软中断,可使用软中断将中断向量指向OSCtxSW函数;也可直接调用OSCtxSW函数。 2.移植OS_CPU_A.ASM汇编代码文件 OS_CPU_A.ASM汇编代码文件有4个汇编函数需要移植。 1)OSStartHighRdy() 该函数由OSStart()调用。OSStart()负责使就绪状态的任务开始运行,其中OSStartHighRdy()负责获取新任务的堆栈指针,并从堆栈指针中恢复新任务的所有处理器。

H3C-系统实验手册

2016年南通市地税系统实验手册 目录 实验一:通过Telnet方式登录交换机典型配置举例 (2) 实验二:基于端口的VLAN典型配置举例 (3) 实验三:802.1X认证配置举例 (4) 实验四:网络地址转换配置举例 (6) 实验五:DHCP配置举例 (9) 实验六:静态路由 (10) 实验七:配置OSPF基本功能 (11)

实验一:通过Telnet方式登录交换机典型配置举例 组网图 配置步骤 (1)配置Device接口地址 #配置接口GigabitEthernet0/0地址为192.168.100.230/24。 system [Sysname] interface GigabitEthernet 0/0 [Sysname-GigabitEthernet0/0] ip address 192.168.100.230 24 [Sysname-GigabitEthernet0/0] quit (2)配置认证 #设置VTY的认证模式为scheme。 [Sysname] line vty 0 15 [Sysname-line-vty0-15] authentication-mode scheme [Sysname-line-vty0-15] quit #创建设备管理类本地用户admin。 [Sysname] local-user admin #指定本地用户的授权用户角色为network-admin [Sysname-luser-manage-admin] authorization-attribute user-role network-admin #配置该本地用户的服务类型为Telnet。 [Sysname-luser-manage-admin] service-type telnet #配置该本地用户密码为密文admin。 [Sysname-luser-manage-admin] password simple admin [Sysname-luser-manage-admin] quit (3)开启Telnet服务 [Sysname] telnet server enable

μCOSII系统移植2

实验报告 实验名称μCOSII系统移植2 课程名称嵌入式系统 华北电力大学 一、实验目的及要求: 1.实验目的 1、熟悉实验箱的硬件环境; 2、熟悉实验系统各部分的使用。 3、理解LM3S8962的各个资源使用。 4、熟悉μCOSII系统的工作特点。 5、熟悉μCOSII系统移植相关知识。 6、理解μCOSII系统中多任务的调度。 2.实验要求 在μCOSII系统上实现多任务协同工作,任务控制LM3S8962开发板上的LED1闪烁,同时控制OLED动态显示字符或图形。 二、仪器用具:

三、实验原理 i.μCOSII的简介 μCOSII的组成部分 μCOSII可以大致分成核心、任务管理、时间管理、任务同步与通信,CPU的移植等5个部分。 ii.核心部分 是操作系统的处理核心,包括操作系统初始化、操作系统运行、中断进出的前导、时钟节拍、任务调度、事件处理等多部分。 iii.任务管理 μCOSII中最多可以支持64 个任务,分别对应优先级0~63,其中0 为最高优先级。63为最低级,系统保留了4个最高优先级的任务和4个最低优先级的任务,所有用户可以使用的任务数有56个。μCOSII提供了任务管理的各种函数调用,包括创建任务,删除任务,改变任务的优先级,任务挂起和恢复等。系统初始化时会自动产生两个任务:一个是空闲任务,它的优先级最低,该任务仅给一个整形变量做累加运算;另一个是系统任务,它的优先级为次低,该任务负责统计当前cpu的利用率。 iv.任务调度 μCOSII采用的是可剥夺型实时多任务内核。可剥夺型的实时内核在任何时候都运行就绪了的最高优先级的任务。μCOSII的任务调度是完全基于任务优先级的抢占式调度,也就是最高优先级的任务一旦处于就绪状态,则立即抢占正在运行的低优先级任务的处理器资源。为了简化系统设计,μCOSII规定所有任务的优先级不同,因为任务的优先级也同时唯一标志了该任务本身。 v.时间管理 μCOSII的时间管理是通过定时中断来实现的,该定时中断一般为10毫秒或100毫秒发生一次,时间频率取决于用户对硬件系统的定时器编程来实现。中断发生的时间间隔是固定不变的,该中断也成为一个时钟节拍。μCOSII要求用户在定时中断的服务程序中,调用系统提供的与时钟节拍相关的系统函数,例如中断级的任务切换函数,系统时间函数。 μCOSII的移植 本移植的层次结构如图1所示。它由用户层、中间件层、μCOSII源码层、μCOSII移植层和驱动库层等五个层次组成。

《计算机控制系统》实验手册

《计算机控制系统》实验手册 上海海事大学电气自动化系施伟锋 上海海事大学电气自动化实验中心李妮娜 目录 1《计算机控制系统》实验指导(Matlab版) (2) 实验一数字PID参数的整定 (3) 实验二Smith算法的运用..........................................5实验三二阶对象数字控制系统设计..............................7实验四达林控制算法的运用 (9) 2 《计算机控制系统》实验指导(DSP版) (11) 实验一实验系统介绍与CCS软件使用入门 (11) 实验二数字I/O实验—交通灯实验 (26) 实验三PWM输出实验1——直流电机控制实验 (30) 3 《计算机控制系统》课程设计指导(Matlab版)………33 4 《计算机控制系统》课程设计指导(DSP版) (35) 5 《计算机控制系统》课程设计报告或小论文格式 (40)

《计算机控制系统》实验指导 (Matlab 版) 一、实验课程教学目的与任务 通过实验设计或计算机仿真设计,使学生了解和掌握数字PID控制算法的特点、了解系统PID参数整定和数字控制系统的直接设计的基本方法,了解不同的控制算法对被控对象的控制特性,加深对计算机控制系统理论的认识,掌握计算机控制系统的整定技术,对系统整体设计有一个初步的了解。 根据各个实验项目,完成实验报告(用实验报告专用纸)。 二、实验要求 学生在熟悉PC机的基础上,熟悉MATLAB软件的操作,熟悉Simuli nk工具箱的软件编程。通过编程完成系统的设计与仿真实验,逐步学习控制系统的设计,学习控制系统方案的评估与系统指标评估的方法。 计算机控制系统主要技术指标和要求: 根据被控对象的特性,从自动控制系统的静态和动态质量指标要求出发对调节器进行系统设计,整体上要求系统必须有良好的稳定性、准确性和快速性。一般要求系统在振荡2~3次左右进入稳定;系统静差小于3%~5%的稳定值(或系统的静态误差足够小);系统超调量小于30%~50%的稳定值;动态过渡过程时间在3~5倍的被控对象时间常数值。 系统整定的一般原则: 将比例度置于交大值,使系统稳定运行。根据要求,逐渐减小比例度,使系统的衰减比趋向于4:1或10:1。若要改善系统的静态特性,要使系统的静差为零,加入积分环节,积分时间由大向小进行调节。若要改善系统的动态特性,增加系统的灵敏度,克服被控对象的惯性,可以加入微分环节,微分时间由小到大进行调节。PID控制的三个特性参数在调节时会产生相互的影响,整定时必需综合考虑。系统的整定过程是一个反复进行的过程,需反复进行。

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)

第6章 μCOS-II操作系统基础及其移植开发初步

第六章μC O S-I I操作系统基础及其移植开 发初步 μCOS-II内核作为一种代码公开的嵌入式实时操作系统内核非常有特色,在规模不大的代码内实现了抢占式任务调度和多任务间通信等功能,任务调度算法也很有独特。该内核裁剪到最小状态后编译出来只有8K左右,全部内核功能(添加LWIP网络协议栈等)也就100K 左右,资源消耗非常小。市面上一些ARM微处理器片上所带内存就已经足够一个裁剪合适的内核的简单应用,非常方便产品的开发设计。 当前,μCOS-II是一个基本完整的嵌入式操作系统解决方案套件,包括μC/TCP-IP(IP 网络协议栈)、μC/FS(文件系统)、μC/GUI(图形界面)、μC/USB(USB驱动)、μC/FL(Flash加载器)等部件。但是这些部件不是公开代码的。 还有一些比较重要的可能在嵌入式环境中发挥重要重要作用的部件,包括嵌入式数据库、POSIX兼容性接口、常用设备的驱动模块等。将来这个行业还会产生更多的重要部件需求,在互联网上的开源社区通常能够找到相应的开源代码包,并且可以进行移植。 6.1 实时操作系统基本原理与技术 本节将主要讲述实时操作系统的基本原理和技术,通过对本章的学习读者可以了解掌握RTOS(Real Time operation System,实时操作系统)的基本特征、结构体系、重要指标、性能参数等重要理论,为全面掌握RTOS打下基础。 6.1.1 实时操作系统基本特征 根据IEEE实时UNIX分委会对实时操作系统的定义,实时操作系统的基本特征应表现为以下几个方面: ?实时性:对外部事件作出反应的时间必须在限定的时间内,在某些情况下还需要是确定的,可重复实现的,不管当时系统内部状态如何,都是可预测的; ?异步并发事件响应能力:异步事件是指无一定时序关键随机发生的事件。如外部设备完成数据传输,实时控制设备出现异常情况等。实际环境中,嵌入式实时系统处理的外部事

实验 手册范本

实验 4.1 练习 1:在 Brew MP Simulator 6 中运行样例应用程序 在 Brew MP Simulator 6 中运行样例程序应用程序: 1.从“开始”菜单中,启动适用 于 Qualcomm Brew MP SDK 的 Brew MP SDK Manager。 2.在 SDK Manager 中,要显示制 作工具和运行时工具,请单击“工具”选项卡。 3.启动 Target Manager。 4.单击“翻盖手机”设备配置文 件,然后单击“创建目标”。

5.当提示您输入“目标名称”时,保留默认名称,然后单击“继续”。 6.在“Simulator 目标”窗口中,双击“翻盖手机”。 7.在模拟设备上,启动AppManager。 8.选择 C Localized App 应用程序。使用鼠标模拟设备上的按键功能。 9.要退出应用程序,请按“电源(结束)”。 10.在 AppManager 中,尝试其他应用程序。

11.完成后,关闭 Simulator 和 Target Manager。 练习 2:从 Visual Studio 安装样例源代码并运行 Simulator 将样例应用程序源代码安装到便携式计算机上: 1.从“开始”菜单中,启动 Brew MP SDK Manager。 2.要显示工具组和平台,请单击 “设置”。 3.在“工具组” “可选组件” 中,单击“安装”安装样例程序。 4.按照向导窗口中的提示进行操 作。请注意安装文件的位置。

使用安装的源代码打开项目: 1.在 Visual Studio 中,单击 “文件”→“打开”→“项目/解决方案”。 2.导航到已安装的源代码,选择 c_basicapp_VS.vcproj ,然后单击 “打开”。 3.在 Visual Studio Solution Explorer 窗格中,导航到“源文件”目录,然后双击 c_basicapp.c 加载文件。 4.在 Visual Studio 中,使用 Brew MP 插件工具栏执行以下操 作:

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

嵌入式μCOS-II实验报告模板

3.1 多任务编程实验 3.1.1 实验目的 1. 本实验的目的是让学生了解uC/OS-II中怎样创建一个任务以及了解uC/OS-II的多任 务调度机制。 3.1.2 实验内容 1. 在Eg1的基础上新建一个任务; 2. 在该任务函数中打印提示信息。 3.1.3 预备知识 1. C语言的基础知识; 2. 程序调试的基础知识和方法。 3.1.4 实验设备 1. 硬件:JXARM9-2410教学实验箱、PC机; 2. 软件:PC机操作系统 Windows 98(2000、XP) + ADT IDE集成开发环境。 3.1.5 实验步骤 本章将以Eg1为基础,在其上添加一个任务。 1. 打开Eg1工程 打开examples/ucos工作区,并设置Eg1工程为活动工程。然后打开App目录下的eg1.C 文件。 2. 声明任务栈 在eg1.c文件中声明任务堆栈,下面代码中黑体字表示的为新添加的代码: /* task stack */ OS_STK StackLED[STACKSIZE]= {0, }; OS_STK StackSEG[STACKSIZE]= {0, }; OS_STK StackTEST[STACKSIZE]= {0, }; 任务栈以全局变量的方式静态分配,然后在创建任务时使用。 3. 添加任务ID /* task name string */ char IdLED = '1'; char IdSEG = '2'; char IdTEST = '3';

4. 任务函数声明 /* task entry function */ void TaskLED(void *Id); void TaskSEG(void *Id); void TaskTEST(void *Id); 5. 任务函数实现 在TaskSEG函数后添加如下函数: /* * Task entry function. * this task blink the seg every 200 ticks * that is 1s. */ void TaskTEST(void *Id) { uHALr_printf("Task3() called\n"); for (;;) { OSSchedLock(); uHALr_printf("Task%c() turned\n", *(char *)Id); User_SEG_Blink(); OSSchedUnlock(); OSTimeDly(100); } } 在该函数中实现数码管显示,由于在TaskSEG中也进行了数码管显示,因此,请先将TaskSEG中的数码管显示功能关闭,以更好地看到效果,修改后的TaskSEG函数如下:void TaskSEG(void *Id) { uHALr_printf("Task2() called\n"); for (;;) {

在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 页

UCOS-II ucGUI的完美移植

stm32 UCGUI 完美移植 作者:Changing发表时间:09-16 04:13分类:电子相关1 Comment 前一篇:stm32 DA 数模转换 后一篇:Stm32 SWD 下载 调试配置 UCGUI是一种嵌入式应用中的图形支持系统。它设计用于为任何使用LCD图形显示的应用提供高效的独立于处理器及LCD控制器的图形用户接口,它适用单任务或是多任务系统环境, 并适用于任意LCD控制器和CPU下任何尺寸的真实显示或虚拟显示。 它的设计架构是模块化的,由不同的模块中的不同层组成,由一个LCD驱动层来包含所有对LCD的具体图形操作。UCGUI可以在任何的CPU上运行,因为它是100%的标准C代码编写的。 类似程序还有国产的一个MINIGUI (https://www.doczj.com/doc/b412040369.html,/zhcn/),MiniGUI 是一个自由软件项目。其目标是提供一个快速、稳定、跨操作系统的图形用户界面(GUI)支持系统,尤其是基于 Li nux/uClinux、eCos 以及其他传统 RTOS(如 VxWorks、ThreadX、uC/OS-II、Nucleus 等)的实时嵌入式操作系统。有机会尝试下,支持下国产,毕竟国内这样的公司不多。。 这里移植的UCGUI3.90a版本,虽然已经有更新的版本,比如UCGUI3.98、甚至4.04版本。但是目前来说只有这个版本的代码是最全的,包括了JPEG , MULTILAYER , MEMDEV ,AntiAlias等模块。一直想尝试做一个数码相册,JEPG模块自然少不了,所以移植了这个版本。 UCGUI390a 下载 整个移植过程,让LCD显示图案倒是没花多少时间,资料也比较多,但是在移植触摸屏的时候卡了好几天,然后又是 UCGUI 指针图标 移动有重影(LCD读取像素颜色函数有问题)。。。总之移植是个累人的活 首先需要保证你的LCD驱动和触摸屏驱动是有效的,如果你的LCD也是ili93xx 控制器 XPT2046控制器的触摸屏可以参考 stm32 驱动 T F T LCD stm32 驱动 触摸屏 两篇文章 UCGUI的文件数量很大,主要用到UCGUI390a/Start/Con f ig 和 UCGUI390a/Start/GUI两个文件夹下文件,不过文件数量也已经很多了 。。。 相关文件介绍如下:

相关主题
相关文档 最新文档