您的位置 首页 电源

移植ucosII到STM32F103ZE(二)

三、系统uCOSII简介及库文件介绍:1uCOSII简介:uCOS内核基本可以分为任务调度,任务同步和内存管理三部分:任务调度ucosii为保

三、 体系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库文件后,有六个文件,如下图:


其间 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) 一切文件的树形目录图如下:


f) 下面临该库文件做个简略介绍
LibrariesSTM32F10x_StdPeriph_Driver下的内容很好了解便是 stm32的各个外设模块驱动代码。misc.h和misc.c 是和 CM3 内核有关的NV%&&&&&% 和 SysTick 的驱动代码。
LibrariesCMSIS 下是什么呢?

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/259584.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部