武汉绘芯科技有限公司欢迎您!
10余年经验沉淀展览展示运动控制的专家
全国咨询热线:027-87052087
联系我们
武汉绘芯科技有限公司
电话:027-87052087
手机:13329706647
邮箱:956693667@qq.com
地址:武汉市江夏区藏龙岛谭湖一路8号
联系人:黄先生
您的位置: 滑轨屏|绘芯科技 > 知识库 >
知识库

UCOSII在STM32微控制器上的移植分析

日期:1970-01-01 08:00:00 来源:未知 点击

1         前言

1.1  嵌入式系统简介

随着计算机技术的发展,嵌入式系统(Embedded Systems)已成为计算机领域的一个重要组成部分,并成为近年来新兴的研究热点。虽然嵌入式系统是近几年才风靡起来的,但是这个概念并非新近才出现。从20世纪70年代单片机的出现到今天各式各样的嵌入式微处理器(MPU)、微控制器(MCU)的大规模应用,嵌入式系统已经有了近30年的发展历史。作为一个系统,往往是在硬件和软件双螺旋式交替发展的支撑下逐渐趋于稳定和成熟,嵌入式系统的发展也不例外。嵌入式系统最初的应用是基于单片机的,虽然初步具备了嵌入式的应用特点,但是那时的应用只是使用8位的芯片执行一些单线程的程序,还谈不上系统的概念。从20世纪80年代早期开始,才慢慢有了利用商业级的操作系统编写嵌入式应用软件,使得开发人员可以进一步缩短开发周期,降低开发成本并提高开发效率。时至今天,谈到嵌入式系统的概念,更多的是侧重于在高性能的芯片(如32位微处理器)上运行嵌入式操作系统的应用设计。

根据IEEE(国际电气和电子工程师协会)的定义,嵌入式系统是控制、监视或者辅助设备、机器和车间运行的装置(原文为devices used to control, monitor, or assist the operation of equipment, machinery or plants)。不过,上述定义并不能充分体现出嵌入式系统的精髓。目前国内一个普遍被认同的定义是:以应用为中心、以计算机技术为基础,软、硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。不难看出,嵌入式系统具有以下几个重要特点:系统内核小,资源相对有限;专用性强;系统精简,以利于控制成本和实现系统安全;高实时性和高可靠性。   

今天,或许对嵌入式的概念还相当陌生,事实上,任何人都可能拥有从小到大的、各种基于嵌入式技术的电子产品,小到MP3PDA等微型数字化产品,大到网络家电、车载设备、工业控制等。嵌入式系统技术已经应用于包括工业控制、家电设备、网络通讯产品、消费电子、国防科技等不同领域。进入20世纪90年代,嵌入式技术全面展开,目前己成为通信和消费类产品的共同发展方向。各大公司的微处理器芯片不断推陈出新,国内外的嵌入式实时操作系统也变得成熟多样。在信息时代、数字时代的发展潮流中,嵌入式系统技术获得了巨大的发展机遇,同时亦暗藏新的挑战。相信未来的嵌入式系统将会向系统工程、网络互联、片上系统(SoC)和国际标准化方向发展。

1.1为嵌入式系统的体系结构。

1.1  嵌入式系统体系结构

1.2  选择STM32uC/OS-II的原因

嵌入式系统的发展是在硬件和软件双螺旋式交替发展下的产物。没有微处理器的推陈出新,不可能有嵌入式操作系统的普及;没有嵌入式操作系统的出现,不可能有更快、更强的嵌入式产品的面世。经过多年的积累,硬件和软件日趋成熟稳定、功能强大。微处理器从8位到32位甚至64位,体系结构从低档的51系列到X86ARMPowerPCMIPS等,生产厂家从传统的IntelIBMMotorolaSamsungPhilipsAtmel等等,选择是广泛的。同样,国外商业化的嵌入式操作系统已进入我国市场的有VxWorksWindows  CEQNXLynxOSOS-9等产品,此外还有源代码开放的各类嵌入式操作系统如LinuxuC/OS等。中国也有厂商开始提供自主研发的嵌入式操作系统,典型的有HopenDelta

值得注意的是,不是所有的微处理器都可以正常运行嵌入式操作系统,当然也不是所有的嵌入式应用都有必要运行嵌入式操作系统。前者是运行嵌入式操作系统对微处理器是有要求的(包括CPU性能和片上资源),不同的嵌入式操作系统对微处理器要求不同,有高有低。事实上,嵌入式操作系统更多是运行在高性能的微处理器上的,如32位的微处理器。后者更多的涉及到具体应用的需要,最早的嵌入式应用是运行在8位单片机上的单线程程序,并没有嵌入式操作系统的参与。时至今天,基于8位单片机的单线程应用在中低端的嵌入式市场依然占据半壁江山。但是,选择性能更强、更成熟稳定的微处理器和嵌入式操作系统,将会是未来嵌入式系统领域发展的主流。

对于刚涉足嵌入式系统设计领域的爱好者来说,选用一款流行通用的微处理器和源码开放、简单易学的嵌入式操作系统,无疑是最好的开发平台选择。本文选择STM32体系结构的微处理器,主要原因是由于它在32 位嵌入式RISC领域有着极大的影响力,就像在8位世界中8051的广泛应用一样。目前,32 位的STM32微处理器的市场占有率超过了75%,它广泛应用在消费电子如个人数字助理(PDA)、可视电话、移动电话、TV机顶盒、数码相机等嵌入式设备。STM32已成为移动通信、手持计算、多媒体数字消费等嵌入式解决方案的RISC标准。嵌入式操作系统选择uC/OS-II也是基于上述原因。uC/OS-II是一个源代码开放,结构简单,功能完备和实时性很强的嵌入式实时操作系统内核。相比昂贵的、不公开源码的商业化嵌入式操作系统,源码开放的uC/OS-II让你不需要花费什么钱就能获得一些RTOS的使用经验;但相比同样源码开放的嵌入式Linux操作系统,结构简单、功能完备和实时性很强的uC/OS-II更应该是嵌入式操作系统的入门教程。事实上,uC/OS-II更适合中小型的嵌入式系统应用和大中院校的教学科研使用。

uC/OS-II是一个优秀的嵌入式实时操作系统,基于STM32体系结构的32位微处理器也在嵌入式领域获得了广泛的应用。嵌入式系统是在软件和硬件交替发展支撑下发展的,相信基于uC/OS-IISTM32的嵌入式应用前景将会变的更加美好。

2          核心技术介绍

2.1  嵌入式系统开发平台选型

嵌入式开发的硬件平台的选择主要是嵌入式处理器的选择。在一个系统中使用什么样的嵌入式处理器的内核主要取决于应用的领域、用户的需求、成本、开发的难易程度等因数。在嵌入式系统的开发中,嵌入式软件是实现各种系统功能的关键。嵌入式实时操作系统(RTOS)是整个嵌入式实时系统的核心,负责实现时钟及定时器管理、储存器管理、中断处理、任务调度、任务间通信与同步等功能。有实时操作系统的支持,构造嵌入式实时系统的复杂性将大大降低。

所以,嵌入式微处理器和嵌入式操作系统的选择是否适合设计需要,对整个嵌入式系统开发过程有决定性作用。

2.1.1  嵌入式微处理器概述

嵌入式微处理器有许多流行的处理器核,芯片生产厂家一般都基于这些处理器核生产不同型号的芯片。下面主要介绍几种嵌入式处理器的架构,以及典型芯片制造商生产的芯片型号。

1 STM32处理器架构   STM32公司是全球领先的16/32RISC微处理器知识产权设计供应商,目前有以下几个系列:STM327STM329STM329ESTM3210SecurCoreStrongSTM32Intel XScale。与其它芯片制造商(例如IBMMotorolaIntel)不同的是,STM32公司不会制造自己的处理器,只是依据STM32核为客户设计CPU核,通过转让高性能、低成本、低功耗的RISC微处理器、外围和系统芯片设计技术给合作伙伴,使他们能用这些技术来生产各具特色的芯片。STM32已成为移动通信、手持设备、多媒体数字消费嵌入式解决方案的RISC标准。

2MIPS处理器架构   MIPS是斯坦福大学的Microprocessor without Interlocked Pipeline Stages计划的研究成果。著名的MIPS应用包括SGI销售的工作站和服务器,以及Nintendo64位系统和Sony Playstations 12等游戏机。与STM32非常类似,MIPS由控制它的MIPS Technologies Inc.公司为第三方颁发CPU内核许可。MIPSRISC处理器方面占有重要地位。

3PowerPC处理器架构   PowerPC架构是IBMMotorolaApple共同合作的成果。PowerPC继承了这三家公司的技术,尤其是IBMPerformance Optimization With Enhanced RISCPOWER)架构。PowerPC主要是因“使用在AppleMac计算机上”而闻名,实际上PowerPC处理器品种很多,既有通用的处理器,又有嵌入式控制器和内核,应用范围非常广泛,从高端的工作站、服务器到桌面计算机系统,从消费类电子产品到大型通信设备等各个方面。

4 x86处理器架构   x86系列处理器是我们最熟悉的了,它起源与Intel架构的8080,再发展出286386486,直到现在的Pentium系列,以及其他厂商(如AMDNational Semiconductor)的兼容处理器。但是,Intel仍是x86系列的主要参考对象,也仍是此系列处理器的最大供货商。

5 68K/Coldfire处理器架构   Motorola 6800068K)是出现得比较早的一款CISC嵌入式处理器,20世纪80年代的68K的市场占有率仅次于x86,除了曾被AtariAppleAmiga应用在许多主流的系统上,以及曾被HPSunApollo应用在流行的工作站系统上,它还是嵌入式系统开发选用的平台之一,199268K系列芯片的销售量达到二千万片,几乎是当时市场上所有其他嵌入式微处理器(包括STM32MIPSPowerPC等)销量的总和。1994年,Motorola推出了基于RISC结构的68K/ColdFire系列微处理器。然而,近来嵌入式系统开发者的兴趣已经从68K转移至较新的架构,例如STM32MIPSSHPowerPC

2.1.2  STM32微处理器介绍

STM32Advanced RISC Machines的缩写。STM32处理器具有小体积、低功耗、低成本、高性能等特点,并且具有16/32位双指令集。STM32广泛应用在16/32位嵌入式RISC解决方案中,其片上系统(SoC)解决方案推动了当今市场中最热门的一系列终端产品的技术发展,占据嵌入式RISC微处理器市场份额的75%。

STM32体系结构支持7种处理器模式,如表2.1所示。软件控制、外部中断和异常处理都可以使模式发生改变。

2.1  STM32处理器模式

处理器模式

说明

用户  usr

正常程序执行模式

FIQ  fir

支持高速数据传送或通道处理

IRQ  irq

用于通用中断处理

管理  svc

操作系统保护模式

中止  abt

实现虚拟存储器或存储器保护

未定义und

支持硬件协处理器的软件仿真

系统  sys

运行特权操作系统任务(STM32v4及以上版本)

 

大多数应用程序运行在用户模式下,除用户模式外的其他模式可以自由的访问系统资源和改变模式,称作特权模式。其中FIQ(Fast Interrupt Quest)IRQ(Interrupt Request)、管理(Supervisor)、中止(Abort)和未定义(Undefined)5种模式被称为异常模式,分别对应特定的异常出现时进入的模式,如表2.2所示。每种特权模式都有某些附近的寄存器,已避免异常出现时用户模式下的状态不可靠。

2..2  异常模式

异常类型

模式

正常地址

高向量地址

复位

管理

0x00000000

0xFFFF0000

未定义指令

未定义

0x00000004

0xFFFF0004

软件中断

管理

0x00000008

0xFFFF0008

预取指令存储器中止

中止

0x0000000C

0xFFFF000C

数据访问存储器中止

中止

0x00000010

0xFFFF0010

IRQ(中断)

IRQ

0x00000018

0xFFFF0018

FIQ(快速中断)

FIQ

0x0000001C

0xFFFF001C

 

STM32处理器共有37个寄存器:3132位的通用寄存器,包括程序计数器(PC)632位的状态寄存器,目前只使用了其中的12位,如表2.3所示。寄存器被安排成部分重叠的组,每种处理器模式都使用不同的寄存器组,但任何时候,15个通用寄存器(R0~R14)、状态寄存器CPSR以及程序计数器(R15)都是可见的,如表2.4所示。

2.3  程序状态寄存器

31   30    29   28    27   26          7     6    5     4     3    2     1    0

N

Z

C

V

.

.

I

F

T

M4

M3

M2

M1

M0

 

 

 

 

 

2.4  STM32状态下寄存器组织

System & User

FIQ

Supervisor

Abort

IRQ

Undefined

R0

R0

R0

R0

R0

R0

R1

R1

R1

R1

R1

R1

R2

R2

R2

R2

R2

R2

R3

R3

R3

R3

R3

R3

R4

R4

R4

R4

R4

R4

R5

R5

R5

R5

R5

R5

R6

R6

R6

R6

R6

R6

R7

R7

R7

R7

R7

R7

续表 2.4  STM32状态下寄存器组织

 
 


 

R8

*R8_fiq

R8

R8

R8

R8

R9

*R9_fiq

R9

R9

R9

R9

R10

*R10_fiq

R10

R10

R10

R10

R11

*R11_fiq

R11

R11

R11

R11

R12

*R12_fiq

R12

R12

R12

R12

R13

*R13_fiq

*R13_svc

*R13_abt

*R13_irq

*R13_und

R14

*R14_fiq

*R14_svc

*R14_abt

*R14_irq

*R14_und

R15(PC)

R15(PC)

R15(PC)

R15(PC)

R15(PC)

R15(PC)

 

R??

 =分组的寄存器

 

STM32指令集有6种类型指令,分别为分支指令、数据处理指令、状态寄存器指令、寄存器加载/存储指令、协处理指令和异常产生指令。下面只列出与移植有关的部分指令,如表2.5所示。

 

2.5  STM32指令集列表

指令

意义

指令

意义

B

分支

BL

分支链接

BLX

带链接分支并可选交换

BIC

位清零

MOV

传送值/寄存器到一个寄存器

CMP

比较

TST

测试并屏蔽

TEQ

测试等价

MRS

传送状态标志到一个寄存器

MSR

传送一个寄存器到状态标志

LDR

从内存中加载寄存器

STR

存储一个寄存器到内存

LDM

加载多个寄存器

STM

存储多个寄存器

 

几乎所有的STM32指令均包含一个可选的条件码,句法说明中以{cond}表示。只有在CPSR中的条件码标志满足指定条件时,带条件码的指令才被执行。可以使用的条件码如表2.6所示。

2.6  条件执行

条件码标志[31:28]

助记符后缀

标志

含义

0000

EQ

Z置位

相等

 

 

续表2.6  条件执行

 

 

 

0001

NE

Z清零

不等

0010

CS/HS

C置位

大于或等于

0011

CC/LO

C清零

小于

0100

MI

N置位

0101

PL

N清零

正或零

0110

VS

V置位

溢出

0111

VC

V清零

未溢出

1000

HI

C置位且Z清零

大于

1001

LS

C清零且Z职位

小于或等于

1010

GE

NV相同

带符号>=

1011

LT

NV不同

带符号<

1100

GT

Z清零且NV相同

带符号>

1110

LE

Z置位且NV不同

带符号<=

1111

AL

任何

总是

 

2.1.3  嵌入式操作系统概述

经过多年发展,目前世界上已经有一大批十分成熟的实时嵌入式操作系统。实时嵌入式操作系统的种类繁多,大体上可分为两种:商用型和免费型。商用型的实时操作系统功能稳定、可靠,有完整的技术支持和售后服务,但往往价格昂贵。免费型的实时操作系统在价格方面具有优势,目前主要有LinuxuC/OS-II

1VxWorks   VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种实时嵌入式操作系统(RTOS),由于具有高性能的内核和友好的用户开发环境,在实时嵌入式操作系统领域牢牢占据着一席之地。美国JPL实验研制的著名的“索杰纳”火星车采用的就是VxWorks操作系统。VxWorks的突出特点是:可靠性、实时性和可裁剪性。它是目前嵌入式系统领域中使用最广泛、市场占有率最高的操作系统。

2Windows Embedded   Windows Embedded产品家族主要用于建立支持具有丰富应用程序和服务的32位嵌入式系统,针对广泛的客户需求提供灵活解决方案。优点是基于Windows背景,支持更快的“产品上市速度”并降低开发成本,保证开发人员立于竞争前沿。

3PSOS   PSOS原属ISI公司的产品,但ISI已经被WindRiver公司兼并,现在pSOS属于WindowRiver公司的产品。该系统是一个模块化、高性能的实时操作系统,专为嵌入式微处理器设计。开发者可以利用它来实现从简单的单个独立设备到复杂的、网络化的多处理系统。

4QNX   QNX是一个实时的、可扩充的操作系统,它提供了一个很小的微内核以及一些可选的配合进程。其内核仅提供4种服务:进程调度、进程间通信、底层网络通信和中断处理,其进程在独立的地址空间运行。所有其它OS服务,都实现为协作的用户进程,因此QNX内核非常小巧(QNX4.x大约为12Kb)而且运行速度极快。

5Palm OS   Palm OS是著名的网络设备制造商3COM旗下的Palm Computing掌上电脑公司的产品,在PDA市场上占有很大的市场份额。Palm OS的优势在于具有开放的操作系统应用程序接口(API),可以让用户灵活方便的定制操作系统以适应自己的习惯。

6OS-9   MicrowaveOS-9是为微处理器的关键实时任务而设计的操作系统,广泛应用于高科技产品中,包括消费电子产品、工业自动化、无线通信产品、医疗仪器、数字电视/多媒体设备。与其他的嵌入式系统相比,它的灵活性和可升级性非常突出。

7LynxOS   Lynx Real-time SystemsLynxOS是一个分布式、嵌入式、可规模扩展的实时操作系统。

8、嵌入式Linux   Linux是一种很受欢迎的开放源码操作系统,原先被设计应用于桌面系统,后被广泛应用于服务器。由于其开放源码和内核可裁减等特性,Linux逐渐被修改用于嵌入式领域。除了基于Linux内核进行裁剪作嵌入式操作系统外,目前还有多个特定嵌入式应用的版本:(1μClinux 最早被设计应用于微控制领域。其最大特征就是没有MMU(内存管理单元),很适合于许多低端的、没有MMU的嵌入式处理器;(2)新墨西哥工学院的RTLinux 是一个嵌入式硬实时操作系统,实现了一个小的实时核心,原来的非实时Linux核心作为一个可抢先的任务运行于这个小核心之上。

9uC/OS-II   uC/OS是源码开放的嵌入式实时操作系统,后来推出的uC/OS-IIuC/OS的升级版本,其性能可以与许多高端商业软件产品媲美。自1992年以来,uC/OS-II已经有很多成功的商业应用,包括诸多领域,如手机、路由器、集线器、不间断电源(UPS)、飞行器、医疗设备及工业控制等。

2.1.4  uC/OS-II介绍

uC/OS-II是像Linus Torvalds实现Linux一样,完全出于Labrosse个人对实时内核的研究兴趣而产生的,并且开放源码,在网上供使用者下载。目前,uC/OS-II已经移植到大多数微处理器上,在世界范围内得到广泛应用,包括诸多领域,如手机、小型网络设备、不间断电源(UPS)、飞行器、医疗设备及工业控制等。uC/OS-II一直在不断的向前发展,新版本更新很快。作为学习研究,选择了稳定的V2.52版本,虽然版本不是最新的,但uC/OS-II的原理思想还是一样的。图2.1列出uC/OS-II硬件/软件体系架构图。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


2.1  uC/OS-II硬件/软件体系架构

2.2  嵌入式操作系统移植

2.2.1  移植的思想

嵌入式操作系统移植的目的是指使操作系统能在某个微处理器或微控制器上运行。将操作系统与处理器相关的部分代码分离出来,那么移植到新的处理器上将会是可能的。世界上很多优秀的嵌入式操作系统,基于应用的需要,大多移植到各种不同架构的处理器上。基于同一架构的微处理器的不同操作系统移植工作是不同的,基于不同架构的微处理器的同一操作系统移植工作也是不同的。前者是因不同操作系统与处理器相关的代码设计因不同操作系统的结构化设计不同而异,后者是不同架构的处理器的对应汇编代码往往是不同的。

2.2.2  uC/OSII移植要点

一般来说, 移植uC/OS-IICPU 必须满足以下条件: 1、处理器的C 编译器能产生可重入代码;2、处理器支持中断, 并且能产生定时中断; 3、用C 语言就可以打开和关闭中断;4、处理器支持能够容纳一定量数据的硬件堆栈;5、处理器有将堆栈指针和其他CPU 寄存器读出和存储到堆栈或内存中的指令。STM32处理器完全满足上述要求,在STM32微处理器上正常运行uC/OS-II是可行的。

实际上, uC/OS-II 90%的代码是用C语言写的,但是仍需要用C语言和汇编语言编写一些与处理器硬件相关的代码,这是因为uC/OS-II在读/写处理器寄存器时,只能通过汇编语言来实现。uC/OS-II的全部源代码量大约是60007000 行,共16个文件,将uC/OS-II移植到STM32处理器上,需要用C语言和汇编语言修改3个与STM32体系结构相关文件: OS_CPU .HOS_CPU_A.ASMOS_CPU_C.C,代码量大约是500行。

OS_CPU.H文件包括数据类型定义、堆栈单位定义、堆栈增长方向定义、关中断和开中断的宏定义以及进行任务切换的宏定义等。

OS_CPU_A.ASM文件部分需要对处理器的寄存器进行操作, 所以必须用STM32汇编语言来编写, 包括4个子函数:OSStartHighRdy( )OSCtxSw( )OSIntCtsSw( )OSTickISR( )OSStartHighRdy( )在多任务系统启动函数OSStart( )中调用, 负责从最高优先级任务的TCB控制块中获得该任务的堆栈指针sp,通过sp依次将CPU现场恢复。OSCtxSw( )在任务级的任务上下文切换中调用。OSIntCtxSw( )在退出中断服务函数OSIntExit( )中调用, 实现中断级的任务上下文切换。OSTickISR( )是系统时钟节拍中断服务函数,为内核提供时钟节拍。频率越高,系统负荷越重,其周期的大小决定了内核所能给应用系统提供的最小时间间隔服务。

OS_CPU_C.C文件共定义了10个简单的C语言函数。其中OSTaskStkInit( )是任务堆栈初始化函数,在用户建立任务时系统内部自己调用的,对用户任务的堆栈进行初始化。其他5个函数都是Hook函数,分别是OSTaskCreateHook( )OSTaskDelHook( )OSTaskSwHook( )OSTaskIdleHook( )OSTaskStatHook( )OSTimeTickHook( ) OSInitHookBegin( )OSInitHookEnd( )OSTCBInitHook( )。这9个函数一般作为功能扩展用的,若无特殊需求,可以将它们都设成空函数。

3          基于STM32uC/OS-II移植过程

3.1  移植背景

uc/OS-II版本号为2.84,使用的编译和调试环境为IAR Embedded Workbench For ARM Evaluation 4.42A,目标芯片为 STM32F103VB,目标板为从北京微芯力科公司购买的 NE-STR750 开发板。

3.1.1  开发工具

如前所述,因为uC/OS-II绝大部分是用标准的ANSI C编写的,移植uC/OS-IIC编译器必需满足如下要求:1、针对要移植的CPU架构,选用相应的C交叉编译器;2C编译器应支持汇编语言程序,因为一些对CPU寄存器的操作只能通过汇编语言实现;3C编译器必须提供一种机制,能在C语言中开中断和关中断。要么编译器允许在C语言源代码中插入汇编语句,要么可以直接在C语言中开中断和关中断。

“工欲善其事,必先利其器”。掌握嵌入式开发工具的使用是进行嵌入式开发的前提条件之一,能够熟练、灵活应用各种嵌入式开发工具,则在嵌入式开发过程中起到事半功倍的效果。GNU ToolsLinux环境下最主要的开发工具集,一款优秀的开源软件。很多人会把GCC看成只是一个简单的C编译器,其实GCCGNU Compiler Collection的简称,目前GCC可以支持CC++AdaObject CJavaFortranPascal等多种高级语言。

    或许很多人还不习惯在Linux环境下的开发,或许更习惯Windows下的集成开发环境(IDE),事实上,除了GNU Tools外,还有很多IDE选择的,STM32公司官方的集成开发环境ADS就是一个不错的选择。

3.1.2  ucOS-II 的裁剪

当前的系统文件中,统计任务被关闭,若实际中需要使用,可通过更改Source\os_cfg.h 文件中的 OS_TASK_STAT_EN 和相关设置来恢复;此外,空闲 任务的堆栈长度、消息队列、邮箱、信号量等的设置也在这个文件中,可根据实 际情况适当更改。相关设置和使用请详见邵贝贝编写的 ucOS-II 中文手册。

本次移植裁掉了系统的 FLAGMUTEX 和存储管理的部分,由于它们的源文件已被删除,即使修

在线客服
联系方式

热线电话

13329706647

上班时间

周一到周五

公司电话

027-87052087

二维码
线