0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

UCOS2_STM32F1移植详细过程 (三)

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-04-07 11:44 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Ⅰ、概述

上一篇文章是讲述ST芯片相关的配置和OS裁剪相关的配置,接着上一篇文章来讲述关于UCOS的移植,该文主要针对uC/OS-II Ports下面os_cpu_a.asm、os_cpu_c.c和os_cpu.h文件底层端口代码来讲述。

请下载“UCOS2_STM32F1_3个简单任务”作为参考工程。

笔者将“UCOS移植详细过程”分为多篇文章来讲述,敬请关注。

Ⅱ、下载(请到我博客下载)

笔者将F0、F1、F3、F4移植到最新UCOS2.92上。移植好的、独立的4个工程供大家下载学习、研究。建立的任务都是一样的,只是针对芯片不同,Ports目录下相关的源代码有差异、标准外设库也存在差异。每一个系列针对不同型号芯片只需要适当改一下“型号”就行了。

提供下载的软件工程都是在板子上运行,保证没问题才上传至360云盘。

UCOS基于STM32F0系列实例:

https://yunpan.cn/cRCZrQ3dzeVQq访问密码 e73f

UCOS基于STM32F1系列实例:

https://yunpan.cn/cRCZxGFsqHa6Q访问密码 39ff

UCOS基于STM32F3系列实例:

https://yunpan.cn/cRCZqPRCWs8UW访问密码 b305

UCOS基于STM32F4系列实例:

https://yunpan.cn/cRCZPqbFqXSPR访问密码 f177

UCOS源代码工程

官网下载(需要账号):

https://www.micrium.com/downloadcenter/download-results/?searchterm=hm-stmicroelectronics&supported=true

360云盘下载(定期更新至最新):

https://yunpan.cn/cRzcf8eSacEhE访问密码 1235

ST标准外设库

官网下载(需要账号):

http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software.html?querycriteria=productId=SC961

360云盘下载(定期更新至最新):

https://yunpan.cn/cSaCpGejMSfr8访问密码 60ae

参考资料:

https://yunpan.cn/cRCdSt73GwT6j访问密码 499e

Ⅲ、工程目录结构说明

文件结构和工程目录结构对应关系如上图所示。


第一类(标准外设库):

Startup Code:启动代码

STM32F10x_StdPeriph_Driver:标准外设库库驱动

CMSIS:标准接口

第二类(µC/OS-II实时内核):

uC/OS-II Source:内核源代码(与处理器无关)

uC/OS-II Ports:OS端口底层代码(与处理器、编译平台有关)

第三类(用户应用):

Bsp:应用底层代码(初始化、驱动等)

App:应用实现代码(配置OS、应用等)

该文主要针对uC/OS-II Ports进行移植描述。我们不使用UCOS自带的调试功能,这里就不再描述(使用)os_dbg.c文件。

Ⅳ、配置os_cpu_a.asm文件

os_cpu_a.asm文件位于工程uC/OS-II Ports结构下面,主要是系统底层相关的一部分汇编代码。

该文件主要对外部引用(全局变量、函数)做了一个申明,及部分系统相关源代码(汇编)做了一个定义。

下面我将定义的几个源代码做一个描述,移植过程需要修改的我会重点提示出来。

1.全局申明


该文件开头对全局变量和函数进行了一次声明,只是使用的汇编,就如C语言里面的extern。

上面部分是外部(其他源文件)定义的变量和函数,下面部分是申明本文件定义的函数,下面我会对这定义的源代码进行讲述。

将OS_CPU_PendSVHandler改为PendSV_Handler,为了兼容ST标准外设库启动代码(startup_stm32f10x_hd.s)。

2.NVIC配置


这部分是对NVIC(中断控制)寄存器相关进行定义,就如预处理中宏定义一样,对寄存器地址,状态进行定义。

3.代码生成指令


这几条指令主要是针对汇编指令的一个处理。

4.状态保存与恢复


这两个汇编函数是程序运行在临界区,对数据的保存和恢复的函数。主要作用就是保护数据不被破坏。

5.运行最高优先级任务


这个函数在任务切换的时候调用,知道任务切换原来的朋友来说这里不难理解。UCOS是按优先级来执行任务,优先级越高(优先级数值越小),越容易被执行。当执行的任务处于挂起(或删除)时,系统就需要进行任务切换,切换的规则就是切换到最高优先级去执行。

6.上下文切换


系统切换任务可以从两个地方,也就是从任务级和中断级。这两个函数的意思都一样,当需要执行任务切换时,根据条件执行某一个。

7.PendSV_Handler中断


PendSV_Handler中断函数定义于这里,主要是在执行该中断对M3内核寄存器进行一些操作(保存与修改)。

将OS_CPU_PendSVHandler改为PendSV_Handler,为了兼容ST标准外设库启动代码(startup_stm32f10x_hd.s)。

8.总结os_cpu_a.asm

对于UCOS的移植,os_cpu_a.asm文件主要就是修改OS_CPU_PendSVHandler的名称,包含申明时的名称和定义源代码时的名称,其他源代码保持不变。

Ⅴ、配置os_cpu_c.c文件

os_cpu_c.c文件位于工程uC/OS-II Ports结构下面,主要是系统底层相关的一部分C语言接口代码。

该文件有许多HOOK函数,也就是所谓的钩子函数,主要用于系统初始化、与任务相关等,如:系统初始化时OSInitHookBegin()、OSInitHookEnd(); 创建任务时OSTaskCreateHook等。其实我们自己移植,有很多HOOK函数是不需要使用,或者不用去实现函数体里面的代码。下面我将讲述几个重要的函数,有些不重要的HOOK函数不再讲述。

下面我将定义的几个源代码做一个描述,移植过程需要修改的我会重点提示出来。

1.系统滴答


这些都是关于SysTick系统滴答的宏定义和函数体,由于我们使用M3标准(ST库里面有)的SysTick系统滴答函数接口,我们屏蔽掉os_cpu_c.c里面SysTick相关的定义。

2.OSInitHookBegin


这个函数被OSInit()开头调用,也就是我们main函数开始调用OSInit()就会调用它。

注意:

#if OS_CPU_HOOKS_EN> 0u

也就是需要在os_cfg.h文件里面配置OS_CPU_HOOKS_EN>0.

3.OSTaskStkInit初始化任务堆栈


这个函数比较重要,在创建任务的时候调用它。主要是对芯片内核寄存器进行一个配置,并现场保护数据。这个函数根据芯片内核不同,也存在很大不同。

Ⅶ、配置os_cpu.h文件

os_cpu.h文件位于工程uC/OS-II Ports结构下面,主要是系统底层相关的某些定义(堆栈、数据类型)、申明(函数)等。

该文件下面源代码比较简单,有些不使用,即移植过程需要修改的我会重点提示出来。

1.OS数据类型


这部分是为系统定义相关的数据类型,这里不用修改。

2.临界区管理


我们使用默认使用临界区第3模式,这个定义主要是与os_cpu_a.asm文件中定义OS_CPU_SR_Save()函数有关。

3.函数申明


函数申明比较简单,这里有几个函数我们在os_cpu_a.asm和os_cpu_c.c文件中都屏蔽掉了的,这里也将他们屏蔽掉。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5588

    浏览量

    129035
  • STM32F10
    +关注

    关注

    0

    文章

    49

    浏览量

    16126
  • ucos2
    +关注

    关注

    0

    文章

    15

    浏览量

    3696
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    onsemi电平ANPC Q2Pack模块:NXH800A100L4Q2F2S1G/P1G与NXH800A100L4Q2F2S2G/P2G的详细解析

    在电子工程师的日常工作中,选择合适的功率模块对于设计的成功至关重要。今天,我们就来深入探讨一下onsemi推出的电平ANPC Q2Pack模块——NXH800A100L4Q2F2S1G/P1
    的头像 发表于 12-04 15:51 353次阅读
    onsemi<b class='flag-5'>三</b>电平ANPC Q<b class='flag-5'>2</b>Pack模块:NXH800A100L4Q<b class='flag-5'>2F2S1</b>G/P<b class='flag-5'>1</b>G与NXH800A100L4Q<b class='flag-5'>2F2S2</b>G/P<b class='flag-5'>2</b>G的<b class='flag-5'>详细</b>解析

    STM32MP257F-EV1评估板深度解析与技术应用指南

    STM32MP257F-EV1包含一个ST-LINK嵌入式调试工具、LED、按钮、1Gbit/s以太网端口、两个CAN FD端口以及一个USB Type-C™ DRD连接器。此外,该板还设有兼容Raspberry Pi®
    的头像 发表于 10-20 11:49 440次阅读
    <b class='flag-5'>STM32MP257F-EV1</b>评估板深度解析与技术应用指南

    STM32+esp8266连接机智云,上传温湿度数据并控制继电器开关(平台配置、代码生成、代码移植

    本教程将详细介绍如何将STM32微控制器与ESP8266Wi-Fi模块连接到机智云平台,实现温湿度数据的上传与继电器的远程控制。通过此过程,您将学会如何配置机智云平台,烧录ESP8266固件,
    的头像 发表于 07-15 18:54 740次阅读
    <b class='flag-5'>STM32</b>+esp8266连接机智云,上传温湿度数据并控制继电器开关(平台配置、代码生成、代码<b class='flag-5'>移植</b>)

    STM32F10xxx参考手册

    STM32F1XX数据手册中文版
    发表于 07-10 16:09 6次下载

    机智云配网教程第期:单片机代码移植实战

    stm32f103c8t6,WiFi模块:ESP-01s,下载器:ST-LINK2.软件:keil5的工程文件模板,mcu代码包代码资源:未移植移植后(注:本文是基于
    的头像 发表于 07-01 17:32 922次阅读
    机智云配网教程第<b class='flag-5'>三</b>期:单片机代码<b class='flag-5'>移植</b>实战

    STM32F40xxx和STM32f41xx flash编程手册

    PM0081_STM32F40xxx and STM32F41xxx单片机编程手册
    发表于 06-06 17:02 4次下载

    STM32与机智云连接实现步骤与技巧(下篇):机智云代码移植与优化

    机智云SDK,集成API,实现数据传输和设备状态同步,并分享移植过程中的常见问题及解决方法,帮助开发者顺利实现云端连接。机智云相关代码开始移植相关移植步骤
    的头像 发表于 05-23 18:10 794次阅读
    <b class='flag-5'>STM32</b>与机智云连接实现步骤与技巧(下篇):机智云代码<b class='flag-5'>移植</b>与优化

    STM32G431移植FreeModbus

    STM32G431移植FreeModbus 的代码已通过验证,在WeActStudio的STM32G431CoreBoard上进行多次测试,均可正常读取寄存器数值。STM32G431C
    发表于 04-19 16:50 1次下载

    uCOS III v3.08.01 移植PC Dev C++ 免虚拟机移植WinXP,Win7,Win10,Win 11

    uCOS III v3.08.01 移植PC Dev C++ 免虚拟机移植WinXP,Win7,Win10,Win 11。32位系统64位系统都可以。 这里有源码和程序,欢迎下载测试
    发表于 04-15 20:14

    STM32F103x8 STM32F103xB单片机数据手册

    STM32F103x8STM32F103xB单片机数据手册
    发表于 04-14 14:55 6次下载

    STM32F103×8/STM32F103×B MCU手册

    本文提供了STM32F103x8和STM32F103xB中密度高性能系列微控制器的订购信息和机械器件特性。有关整个STMicroelectronics STM32F103xx系列的更多信息,请
    发表于 03-18 16:37 0次下载

    移植LWIP+FREERTOS时遇到的问题怎么解决?

    中断,并且再也没法ping 通的问题,表现的现象是进不去以太网中断,导致 ethernetif_input()接收不到数据 移植过程是这样的:(STM32F407+DP83848) 1
    发表于 03-11 06:48

    STM32F1开发指南

    这本书详细讲述了STM32HAL库开发的配置流程,非常详细
    发表于 01-21 15:33 3次下载

    STM32WL55JC到STM32WLE5CC的LoRaWAN_FUOTA移植

    电子发烧友网站提供《从STM32WL55JC到STM32WLE5CC的LoRaWAN_FUOTA移植.pdf》资料免费下载
    发表于 01-15 15:24 1次下载
    从<b class='flag-5'>STM32</b>WL55JC到<b class='flag-5'>STM32</b>WLE5CC的LoRaWAN_FUOTA<b class='flag-5'>移植</b>

    STM32F101x8/STM32F101xB手册

    电子发烧友网站提供《STM32F101x8/STM32F101xB手册.pdf》资料免费下载
    发表于 12-06 15:45 9次下载