移植ucosII到STM32F103ZE(二)

发布者:TranquilDreams最新更新时间:2015-10-23 来源: eefocus关键字:移植  ucosII  STM32F103ZE 手机看文章 扫描二维码
随时随地手机看文章
三、        系统uC/OSII简介及库文件介绍:
1.      uC/OSII简介:
uC/OS 内核基本可以分为任务调度,任务同步和内存管理三部分:
任务调度
ucosii为保证实时性,给每个任务分配一个不同的优先级。当发生任务切换时,总是切换到就绪的最高优先级任务。有2种情况会发生任务切换。
1.任务等待资源就绪或自我延时;
2.退出中断;
情况1可以理解为任务主动放弃cpu的使用权。情况2可以理解为中断后,某种资源可能就绪了,需要任务切换。
需要注意的是SysTick中断,这个中断是os的“心跳”,必须得有。这样就使得cpu会发生周期性地任务切换。由于ucosii 不支持时间片轮转调度,因此在该中断中必须做的工作仅有os的时间管理。也就是调用OSTimeTick()
任务同步
任务同步和大多数操作系统的做法差不多,如果学过操作系统或是有多线程编程经验的话,应该很好理解。无非是任务A 因为某个资源未就绪,就放弃 cpu 使用权,等任务 B 或是中断使该资源就绪,当再次任务进行切换时如果任务 A 优先级最高,则任务A 继续执行。具体怎么实现就看上面推荐的书吧。
内存管理
ucosii的内存管理,之前应该讲过的。
ucosii 代码组成
os_core.c 是ucosii 的核心,它包含了内核初始化,任务切换,事件块管理等,其中事件块是各个同步量(这里我把互斥量,信号量,邮箱,队列统称为同步量,不是很科学,图个方便。事件标志组不是以事件块为基础的,不过原理也差不多)的基础。
os_task.c     任务管理代码
os_flag.c      事件标志管理代码
os_mbox.c    消息邮箱管理代码
os_mutex.c   互斥型信号量管理代码
os_q.c       消息队列管理代码
os_sem.c     同步量管理代码。
os_mem.c    内存管理代码。
os_time.c     时间管理代码,主要做各种延时。
os_tmr.c      定时器管理代码
定时器管理代码,这部分代码时从V2.81 版才开始有的,邵老师的书讲的是V2.55 版的代码,是没有这部分内容的。如果前面的代码都理解的话,这部分代码也是不难理解的。一个定时器大体由3 部分组成:定时时间,回调函数和属性。当定时时间到了的话,就进行一次回调函数的处理,定时器属性说明定时器是周期性的定时还是只做一次定时。如果用户使能了OS_TMR_EN,ucosii 会在内部创建一个定时器任务,负责处理各个定时器。这个任务一般应该由硬件定时器的中断函数中调用OSTmrSignal()去激活。所以从本质上说os_tmr.c 中的定时器是由一个硬件定时器分化出来的。
默认情况下是由SysTick 中断里通过OSTimeTickHook()去激活定时器任务的。
移植相关文件
os_cpu.h:       进行数据类型定义,处理器相关代码和几个函数原型。
os_cpu_c.c:     定义一些用户hook函数。
os_cpu_a.asm:  移植需要用汇编代码完成的函数,主要就是任务切换函数。
os_dbg.c:       内核调试相关数据和函数,可以不改。
ucosii 内核就介绍到这里。
2.      STM32F10x库文件简介:
解压从ST官网下载的stm32f10x_stdperiph_lib.zip库文件后,有六个文件,如下图:
移植ucosII到STM32F103ZE(二)


 
其中 Libraries 包含库的源代码,Project 包含stm32 各个外设的使用范例和一个工程模板,Utilitiess 是使用 st 公司评估板的例子,_htmresc是两个图标stm32f10x_stdperiph_lib_um.chm教我们怎么用标准外设库。我们主要关心 Libraries和Project 文件夹,等会我们要从中拷取需要的资料。
1)      建立工程文件夹结构:
准备使用 32 位单片机,应该是个不小项目,因此工程目录也应做个规划。这里推荐一下所使用的目录结构。
Ø  假设建立了一个名为stm32-ucosII-demo的文件夹,该目录下有 6个文件夹App, Bsp, Libraries, OS-uCOSII, Project, Readme。
App 用来存放应用程序文件,Bsp 用来存放版级驱动文件,Libraries 用来存放 STM32 的标准外设库文件,OS-uCOSII 用来存放uCOS 文件,Project用来存放工程文件,Readme用来存放TXT 格式的本项目自述或说明文件。
Ø  Project 下再建立两个子文件夹Output 和List。
Ø  OS-uCOSII下再建立两个子文件夹core和port。
2)      整理库代码:
由于 Libraries 下的 CMSIS 文件夹中很多代码是和编译器及芯片相关的,导致文件夹多且深度大,不利于工程维护,实际上一个项目往往是用固定的编译器和芯片,因此有必要对库进行整理。
a)      把刚解压的STM32F10x_StdPeriph_Lib_V3.5.0Libraries下的STM32F10x_StdPeriph_Driver文件夹拷贝到新文件夹Stm32-ucosII-demoLibraries 中。
b)      在新文件夹Stm32-ucosII-demo Libraries 目录下建立CM3 文件夹,把
STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3CoreSupport下的core_cm3.c ,core_cm3.h和
STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10x 下的stm3210x.h,system_stm32f10x.c,system_stm32f100x.h 拷贝到新 LibrariesCM3 文件夹中,并去掉这 3个文件的只读属性。
c)      在新文件夹LibrariesCM3 目录下建立 startup文件夹,并根据你所选的芯片类型,将LibrariesCMSISCM3DeviceSupportSTSTM32F10xstartuparm 下对应的启动文件拷贝到 startup 文件夹中。这里拷贝的是 startup_stm32f10x_hd.s。
d)      把STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_Template 下的stm32f10x_it.c,stm32f10x_it.h,stm32f10x_conf.h拷贝到新Stm32-ucosII--demoApp 中。
e)      所有文件的树形目录图如下:
移植ucosII到STM32F103ZE(二)

 
f)       下面对该库文件做个简单介绍
LibrariesSTM32F10x_StdPeriph_Driver下的内容很好理解就是 stm32的各个外设模块驱动代码。misc.h和misc.c 是和 CM3 内核有关的NVIC 和 SysTick 的驱动代码。
LibrariesCMSIS 下是什么呢?[page]
CMSIS 英文全称:Cortex Microcontroller Software Interface Standard,是Cortex 系列处理器硬件抽象层,可以理解为 cortex 内核的软件接口。
core_cm3.c, core_cm3.h 它们的目录名为CoreSupport,说明这两个文件是 CCM3 内核支撑文件,其他使用CM3内核的芯片也可以用,不一定是 stm32。这两个文件用来获取设置CM3内核,配置一些内核寄存器。
stm32f10x.h, system_stm32f10x.c, system_stm32f10x.h和startup_stm32f10x_hd.s在DeviceSupport 目录下,说明这几个文件是和具体的芯片有关的,也就是 stm32 芯片的支撑文件。其中stm32f10x.h是标准外设库的入口,使用标准外设库的代码中必须包含该头文件。
system__stm32f10x.c, system__stm32f10x.h 是芯片级初始化库函数文件,他们提供库函数来初始化stm32芯片,配置 PLL、系统时钟和内置 flash接口。
                            startup_stm32f10x_hd.s是 stm32 芯片的启动文件,hd表明是高密度型芯片。
                   OK,ST 官方库文件夹 STM32F10x_StdPeriph_Lib_V3.5.0 已经没用了,可以关闭了。
3)      建立 keiil 开发工程
使用keil MDK 新建名为stm32-ucosii-demo的工程,并保存到stm32-ucosII-demoProject文件夹下。该过程中会要求选一个stm32 系列的芯片(我选的是STM32F103ZE,因为我的板子就用这个芯片),接下来要注意的是当弹出是否拷贝启动代码到工程文件夹时要选 No,因为标准外设库里已经有启动代码了。将UV4 中project window 里的顶层目录Target 1 改名为 STM32-uCOSII-DEMO (右键单击 Target 1,属性中调出Manage Components 菜单即可设置),并将第一个Source Group 1删除。接下来在该工程中建立如下子目录:
STM32-uCOSII-DEMO,STM32F10x_StdPeriph_Driver,STM32F10x_CM3,APP,BSP,
uCosII_core,uCosII_port
  移植ucosII到STM32F103ZE(二)

 把LibrariesSTM32F10x_StdPeriph_Driversrc 目录下所有(或部分必须的).c文件加载到工程里的 STM32F10x_StdPeriph_Driver 下。
把LibrariesCM3目录下所有.c 和 .h文件和LibrariesCMSISstartup 目录下相应.s文件加载到工程里的STM32F10x_CM3 下。
推荐keil 树形工程目录图:
移植ucosII到STM32F103ZE(二)
 

关键字:移植  ucosII  STM32F103ZE 引用地址:移植ucosII到STM32F103ZE(二)

上一篇:移植ucosII到STM32F103ZE(三)
下一篇:移植ucosII到STM32F103ZE(一)

推荐阅读最新更新时间:2024-03-16 14:37

linux-3.0移植到FL2440(只做基本的移植
首先补丁包来自凌云实验室: 1.先打补丁: patch -p1 ../linux-3.0-s3c2440.patch 2.修改 Makefile: ARCH ?= arm CROSS_COMPILE ?= arm-linux- 3.修改补丁的错误: 在/arch/arm/plat-s3c24xx/devs.c //#ifdef CONFIG_SND_SOC_SAMSUNG_S3C24XX_UDA134X /* UDA1341 add by guowenxue, 2012.03.30 */ //注释掉 . . . //#endif 4.make s3c2410_defconfig 5.裁剪
[单片机]
S3C2416裸机开发系列十七_GCC下Fatfs的移植
对于固态存储器,其存储容量可以很大,往往需要一款文件系统对存储器用户数据进行组织文件的管理。它对文件存储器空间进行组织和分配,负责文件的存储并对存入的文件进行保护和检索。在嵌入式系统中,往往需要采用windows兼容的文件系统,像相机的照片、视频监控、语音产品等,很多都需要从windows计算机上提取资源或在windows计算机上进一步处理。Fatfs由于其开源免费,支持fat32,受到了广泛的应用,笔者此处就s3c2416移植Fatfs,对sd卡进行读写访问作一个简单的介绍。 1. Fatfs概述 Fatfs是由日本工程师ChaN所编写的fat文件系统模块,从06年发布第一个Fatfs版本开始,作者就从未停止维护和更新。Fat
[单片机]
STM32F103移植到AT32F403A之MDK(二)
上一篇我们已经实现了不改硬件,只改软件情况下将STM32F103C8T6替换为AT32F403ACGT7的过程,但毕竟STM32F103C8T6已经是10多年前的东西了,用现在的AT32F403ACGT7替换实在是大材小用了,毕竟这颗是主频能到240M的M4。 上篇我们解决了替换能用的问题,本篇我们来结合AT32F403ACGT7的优势,实现不改硬件只改BOM降成本的方法。 从接触MCU开始,MCU外围电路中就缺少不了很重要的器件,那就晶振,晶振是MCU的时钟源。随着技术的不断发展,越来越多的MCU将晶振集成到了MCU内部,但集成到内部后真的就能够省略掉外部晶振吗,当然不是,由于技术和工艺问题,前些年的MCU还无法完全摆脱
[单片机]
STM32F103<font color='red'>移植</font>到AT32F403A之MDK(二)
一文了解移植3.4.2的Kernel到JZ2440
本文将介绍如何移植linux-3.4.2内核到JZ2440开发板上的全过程,使用的交叉编译工具版本为 arm-linux-gcc-4.3.2.tar.bz2 下面来一步一步介绍如何移植。 由于kernel的启动参数是由Uboot传递的,关键的参数有 R0=0 R1=Mach-Type R2=Tag参数地址 其中,Mach-Type为内核支持板子的硬件型号,tag参数为Uboot存放传递给Kernel参数的内存地址。 内核启动时,根据传入的Mach-Type参数选择对应的板级初始化函数来初始化,然后解析tag参数,设置相应系统状态值,装载驱动程序,最后挂载根文件系统。 1. 编译内核 修改根目录下面的Make
[单片机]
移植u-boot-2010.09到S3C2440(一)——硬件初始化与测试
在u-boot的代码选择中,只有201009是最近的可直接编译通过的,不带memset.s的u-boot版本。 屏蔽lowlevel_init的调用之后,将我在u-boot-201112版本中所做的硬件初始化全部挪到本版本中,包括串口驱动的修改,时钟设置,LED的点亮。 这个时候通过开发板自带的u-boot写到SDRAM调试就直接有串口输出与提示符。 注:本系列文档只注释难点部分,其它略过。
[单片机]
人体器官移植突破:男子植入3D打印椎骨获新生
如今已经两个多月过去了,约塞夫斯基的恢复情况相当不错。    据外媒报道,人体器官移植频传福音,3D打印再写医疗新里程。澳大利亚医生为一名患了癌症的男子进行一项全球第一例手术,替他移除被癌细胞严重破坏的椎骨,再为他植入一条用3D打印技术打印出来旳椎骨。该病人现时康复的进展良好,重获新生。   据报道,病人约塞夫斯基患了脊索瘤,是一种十分罕见的癌症。癌细胞攻击他的脊椎和头骨,并在他的颈项上方位置生长,令他饮食和说话都有困难。医学界估计,每100万人当中,只有一人患上这种病。   去年12月,神经科医生莫布斯为他进行长达15小时的手术,移除本来的椎骨,植入3D打印的脊骨。   莫布斯称,“如果不动手术,又不进行
[医疗电子]
Fedora8上交叉编译qtopia4移植成功到s3c2410开发板
教程是这样的: 一.硬件平台 1.主机: PC机,512M内存以上。 2.目标机: UP-NetARM2410-S实验平台。 二.移植软件资源 1.Red Hat Linux 9.0(主机操作系统) 2.gcc-3.4.1.tar.gz(主机编译器) 3.arm-linux-gcc-3.4.1.tar.bz2(交叉编译器) 4.tslib-1.3.tar.bz2(管理目标平台的触摸屏) 5.qtopia-opensource-src-4.2.1.tar.gz(包含Qt, Qtopia core) 2 . GUI(QT)的移植过程 编译前的约定: 1)我的工作目录为:/mnt/nfs。 2)qtopia-o
[单片机]
U-Boot在基于ADSP BF533的嵌入式Linux系统上的移植
1 引言 Boot Loader(内核引导程序)是在操作系统内核运行之前运行的一段自举程序,用于初始化硬件设备、改变处理器运行模式、重组中断向量和建立内存空间映射图,从而将系统的软硬件带到一个合适的状态或者用户定制的特定状态,以便为最终加载操作系统内核准备好正确的环境 。 嵌入式Linux系统常用的Boot Loader有arm-boot、redboot、U-Boot等。U-Boot (全称Universal Boot Loader)是当前比较流行的遵循GPL条件的开放源码项目。U-Boot具有源码公开的特点,开发人员可根据自身需要进行裁减;支持多种处理器和嵌入式操作系统内核;具有多种设备驱动源码:支持种引导方式;具有功能强大
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved