1.uCOS-II简介及移植uCOS-II到STM32F103平台详细步骤

2023-05-16

I.说明

作者:WXP(翱翔云端的鸟)

联系方式:328452854@qq.com || 13100610853(联系请注明CSDN)

申明:个人原创,转载请先经过本人同意!

要说的话:个人水平有限,写之前也看过许多大神的博客,不足之处,还请指正!有疑问欢迎大家联系我交流探讨!

 

 

 

II.环境

软件环境:KEIL-MDK v-5.24a

硬件:STM32F103ZET6最小系统板

 

 

 

III.uCOS-II

 

1.uCOS简介

uCOS(也有人叫uC/OS)由美国人 Jean Labrosse1992年编写的一个实时操作系统

1998年更新到uCOS-II,并于2000年得到美国航天管理局(FAA)认证,可以用于飞行器中.

官方网站:www.micrium.com

 

2.uCOS-II的特点

1)可裁剪

uCOS-II源代码中有一个专门用来裁剪系统的配置文件,通过各种宏的来打开或者

 关闭那些不需要用到系统服务,这样可以大大减小平台移植uCOS-II所需要的存储空间

 

 (2) 便于移植

  uCOS-II基本全部是用C语言写的,只有和微处理器相关的那部分是用汇编写的,汇编

 所占比例极小,从而使得uCOS-II便于移植到各种微处理器上.事实上uCOS-II已经运用

 在了大部分的8位、16位、32位的MCU中了

 

 (3) 抢占式

  uCOS-II是支持抢占式,系统总是运行多个任务中优先级别最高的那个就绪任务,

 优先级会就绪任务会抢占正在运行的任务,实时性得以保证

 

 (4) 多任务

  uCOS-II同时支持255个任务,实际上不会用到这么多,看具体应用来决定

 

 (5) 稳定可靠

  uCOS-II已经被使用在很多的产品上,经过市场产品的实际检测,具有很好的稳定

 性和可靠性

 

3.uCOS-II的内核对象

 

  ⊙ 信号量

  ⊙ 互斥信号量

  ⊙ 事件标志

  ⊙ 消息邮箱

  ⊙ 消息队列

  ⊙ 内存管理

  ⊙ 时钟管理

  ⊙ 任务管理

 

4.uCOS-II的文件结构

  ⊙ 与处理器无关的代码

   os_core.c

   os_flag.c

   os_mbox.c

   os_mem.c

   os_mutex.c

   os_q.c

   os_sem.c

   os_task.c

   os_time.c

   os_tmr.c

   ucos_ii.h

  ⊙ 与处理相关的代码(移植时需要修改)

   os_cpu_c.c

   os_cpu_a.asm

   os_cpu.h

  ⊙ 与应用程序相关的代码

   os_cfg.h

   includes.h

 

 

IV.移植uCOS-IISTM32F103

1. uCOS-II移植准备工作

准备好uCOS-II源码、uCOS-II官方移植到STM32F107DemoSTM32F103裸机Demo

下载地址:

CSDNhttp://download.csdn.net/download/wang328452854/10110946

百度云盘: http://pan.baidu.com/s/1eRHYeJo 密码:d1pj

当然也可以从官网或者论坛下载,然后用你自己的裸机历程也是可以的.

 

 

 

 

 

 

 

2. uCOS-II移植

(1) 若是按照我的代码,解压后如下图所示

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(2) 在裸机代码STM32F103_Demo中添加一个目录uCOS-II

 

 

 

(3)uCOS-II,并在uCOS-II目录下新建两个目录PortsSource

 

 

 

 

(4) 将准备目录下的Micrium\uCOS-II\Source下除os_cfg_c.hos_dbg_r.c全部复制到移植工程目录下的Source

 

 

 

 

 

 

 

 

 

 

 

(5) 将准备目录下Micrium_uC-Eval-STM32F107_uCOS-II\Software\uCOS-II\Ports\ARM-Cortex-M3\Generic\RealViem下的全部文件拷贝到移植目录的Ports

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(6) Micrium_uC-Eval-STM32F107_uCOS-II\Software\EvalBoards\Micrium\uC-Eval-STM32F107\uCOS-下的三个文件拷贝到移植工程的App目录下

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(7) MDK打开移植工程,新建Group  uCOS-II_Source uCOS-II_Ports并添加对应文件如下

 

上图中比之前多了app_hooks.c,主要是一些钩子函数,若是需要从第6步中拷贝到App下添加即可

 

 

 

 

(8) 修改includes.h 如下

/*
*********************************************************************************************************
*                                              EXAMPLE CODE
*
*                          (c) Copyright 2003-2013; Micrium, Inc.; Weston, FL
*
*               All rights reserved.  Protected by international copyright laws.
*               Knowledge of the source code may NOT be used to develop a similar product.
*               Please help us continue to provide the Embedded community with the finest
*               software available.  Your honesty is greatly appreciated.
*********************************************************************************************************
*/
 
/*
*********************************************************************************************************
*
*                                           MASTER INCLUDES
*
*                                     ST Microelectronics STM32
*                                              on the
*
*                                     Micrium uC-Eval-STM32F107
*                                        Evaluation Board
*
* Filename      : includes.h
* Version       : V1.00
* Programmer(s) : EHS
*********************************************************************************************************
*/
 
#ifndef  INCLUDES_PRESENT
#define  INCLUDES_PRESENT
 
 
/*
*********************************************************************************************************
*                                         STANDARD LIBRARIES
*********************************************************************************************************
*/
 
#include  <stdarg.h>
#include  <stdio.h>
#include  <stdlib.h>
#include  <math.h>
 
 
/*
*********************************************************************************************************
*                                              LIBRARIES
*********************************************************************************************************
*/
 
//#include  <cpu.h>
//#include  <lib_def.h>
//#include  <lib_ascii.h>
//#include  <lib_math.h>
//#include  <lib_mem.h>
//#include  <lib_str.h>
 
 
/*
*********************************************************************************************************
*                                              APP / BSP
*********************************************************************************************************
*/
 
#include  "bsp.h"
 
/*
*********************************************************************************************************
*                                                 OS
*********************************************************************************************************
*/
 
#include <ucos_ii.h>
 
 
 
/*
*********************************************************************************************************
*                                                 ST
*********************************************************************************************************
*/
 
 
 
 
/*
*********************************************************************************************************
*                                            INCLUDES END
*********************************************************************************************************
*/
 
 
#endif


 

 

 

 

(9)修改main.c如下

/******************************************************************************
* File       : main.c
* Function   : 主文件
* Description: None          
* Version    : V1.00
* Author     : WXP
* Date       :
* History    :  
******************************************************************************/
 
#include "includes.h"
 
 
//START 任务
//设置任务优先级
#define START_TASK_PRIO      	10 //开始任务的优先级设置为最低
//设置任务堆栈大小
#define START_STK_SIZE  	64
//任务堆栈
OS_STK START_TASK_STK[START_STK_SIZE];
//任务函数
void start_task(void *pdata);
 	   
//LED0任务
//设置任务优先级
#define LED0_TASK_PRIO       	7
//设置任务堆栈大小
#define LED0_STK_SIZE  	    	64
//任务堆栈
OS_STK LED0_TASK_STK[LED0_STK_SIZE];
//任务函数
void led0_task(void *pdata);
 
 
//LED1任务
//设置任务优先级
#define LED1_TASK_PRIO       	6
//设置任务堆栈大小
#define LED1_STK_SIZE  	64
//任务堆栈
OS_STK LED1_TASK_STK[LED1_STK_SIZE];
//任务函数
void led1_task(void *pdata);
 
int main(void)
{
 
Bsp_Init();
OSInit();   
 	OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//创建起始任务
OSStart();	  	 
    
    while(1)
{
 
}	 
}
 
  
//开始任务
void start_task(void *pdata)
{
    OS_CPU_SR cpu_sr=0;
pdata = pdata;
  	OS_ENTER_CRITICAL();	//进入临界区(无法被中断打断)    
 	OSTaskCreate(led0_task,(void *)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);	   
 	OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);	 	   
OSTaskSuspend(START_TASK_PRIO);	//挂起起始任务.
OS_EXIT_CRITICAL();	//退出临界区(可以被中断打断)
}
 
 
 
 
//LED0任务
void led0_task(void *pdata)
{	 
while(1)
{
LED2(ON);
OSTimeDlyHMSM(0,0,0,200);
LED2(OFF);
OSTimeDlyHMSM(0,0,0,200);
}
}
 
//LED1任务
void led1_task(void *pdata)
{	  
while(1)
{
        LED3(ON);
OSTimeDlyHMSM(0,0,0,500);
LED3(OFF);
OSTimeDlyHMSM(0,0,0,500);
}
}


 

 

(10) 修改uCOS-II_Ports下的os_cpu_a.asm


 

 

 

 

 

(11) 编译会出现一个错误,重定义了PendSV_Handler

 

 

 

这个时候只需要把stm32f10x_it.c中的PendSV_Handler注释掉即可

 

 

 

此时编译不会报错但是并未修改完成

 

(12) 修改bsp_systick.c

 

 

 

 

(13) 修改os_cpu_c.c中的关于systick的配置初始化及中断处理部分

 



 

 

 

 

 

(14) 注释掉os_cpu.h中我们刚才修改过的函数部分

 

 

至此移植步骤完成了,main.c中两个LED任务,下载到开发板中可以看到两个灯以不同频率闪烁

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

1.uCOS-II简介及移植uCOS-II到STM32F103平台详细步骤 的相关文章

  • 史上最全的ubuntu16.04安装nvidia驱动+cuda9.0+cuDnn7.0

    本文参考了 http www cnblogs com 5211314jackrose p 7081020 html https jingyan baidu com article 4853e1e55679491909f726f4 html
  • 4、ORB-SLAM闭环检测之通过词袋寻找当前关键帧和闭环候选帧之间的匹配

    目录 1 SearchByBoW 2 图解每一步实现原理 2 1 通过词袋模型寻找匹配 2 2 通过旋转直方图来筛除离群点 3 期待您加入 前面 我们已经了解到了sim3的求解流程 具体计算过程中有三步比较重要 1 寻找两关键帧之间的粗匹配
  • 基于Web服务的物联网-WoT(Web of Things)

    当我们谈到智能手机 xff0c 多样性 往往不是问题 xff0c 主流市场不是基于苹果IOS系统的就是谷歌的Android系统 xff0c 但即将到来的物联网浪潮 xff0c 智能对象是否也能这样 xff1f 这就复杂多了 xff0c 当前
  • 如何选择 catkin_make和catkin_make_isolated

    问题 在编译cartographer的代码包的时候 xff0c 会被建议使用catkin make isolated xff0c 为何不使用catkin make呢 xff1f 原因 catkin make was the first sc
  • 基于共享内存的分布式消息学习笔记

    作者 xff1a 深圳自研业务组 jimwu 编辑 xff1a 上海业务组 alenai 目录 xff1a Tbus 简介 Tbus 原理 Tbus 配置与工具 Tbus 简单应用 Tbus 运维应用 为 python 扩展 总结 Tbus
  • 分享一下工作以来我看过计算机书籍

    由于自工作依赖一直专注于linux 下的c c 43 43 编程工作 xff0c 所以 xff0c 我的书籍也大的都是这方 这边书尽管很经典 xff0c 但是我的能力实在有限 xff0c 只把数据结构的那点看了一下 xff0c 其他的 看的
  • 51单片机定时器初值计算详解

    前言 xff1a 本文详细介绍了51单片机学习过程中定时器的初值计算问题以及相关概念 xff0c 力求把每一个学习过程中的可能会遇到的难点说清楚 xff0c 并举相关的例子加以说明 学习完毕 xff0c 又顺手利用刚学到定时器的相关知识写了
  • STM32平台下官方DMP库6.12超详细移植教程

    前记 Motion Driver官方库 xff1a Motion Driver 6 12 STM32工程源码 xff1a STM32F103C8 软件MPU6050 xff08 DMP xff09 MPU6050软件I2C驱动 xff0c
  • STM32F103C8-平衡小车笔记

    STM32F103C8 平衡小车笔记 1 PID的作用 xff08 1 xff09 比例项 xff1a 提高响应速度 xff0c 减小静差 xff08 2 xff09 积分项 xff1a 消除稳态误差 xff08 3 xff09 微分项 x
  • 嵌入式Linux系统开发笔记(十四)

    U Boot环境变量 uboot 中有两个非常重要的环境变量 bootcmd 和 bootargs xff0c bootcmd 和 bootagrs 是采用类似 shell 脚本语言编写的 xff0c 里面有很多的变量引用 xff0c 这些
  • 嵌入式Linux系统开发笔记(十五)

    Linux内核启动验证 5 1 编译内核 span class token comment 清除工程 span span class token comment make distclean span span class token co
  • 基于ROS搭建机器人仿真环境

    别人的发复现及经验 https blog csdn net qq 38620941 article details 125321347 gazebo默认仿真环境 1 gazebo models 是系统下gazebo放置模型库的默认位置 2
  • 嵌入式Linux系统开发笔记(十六)

    根文件系统rootfs启动验证测试 接下来我们使用测试一下前面创建好的根文件系统 rootfs xff0c 测试方法使用 NFS 挂载 6 1 检查是否在Ubuntu主机中安装和开启了NFS服务 xff08 特别注意 xff1a nfs 配
  • 安卓5.0以上7.0以下使用Termux

    参考 xff1a https zhuanlan zhihu com p 400507701 说明 xff1a Termux支持5 0以上的安卓系统 Termux7 3版本之后 xff0c 仅支持7 0以上的安卓系统 1 安装Termux 设
  • 关于DSP的CCS6.0平台下的工程搭建(完全可移植)

    本工程以CCS6 0下新建TMS320F28335工程为例 xff0c 其他系列处理器工程搭建类似 xff0c 参考本例即可 工程搭建用到的F2833x TI官方库文件 下载链接 也可直接参考笔者搭建好CCS6 0的工程 下载链接 所建工程
  • STM32Fxx JTAG/SWD复用功能重映射

    问题描述 xff1a 在实验室调车过程中 xff0c 遇到的一个问题 xff1a 为了每次下载程序方便 xff0c 队员们往往会把 Jlink 插在板子上 xff0c 可是在调车过程中发现 xff0c 有时程序会莫名死掉 xff0c 而同样
  • VS2012编译RTKLIB——GNSS定位开源库

    RTKLIB 开源库 有着强大的 GPS 数据实时和后处理功能 xff0c 由于 笔者的毕业设计中需要对GPS 载波相位观测量进行 RTK 解算 xff0c 故而 xff0c 对 RTKLIB 开源库进行了学习与研究 RTKLIB 提供了很
  • 51单片机串行口波特率计算

    1 工作方式介绍 xff1a 方式 0 xff1a 这种工作方式比较特殊 xff0c 与常见的微型计算机的串行口不同 xff0c 它又叫 同步移位寄存器输出方式 在这种方式下 xff0c 数据从 RXD 端串行输出或输入 xff0c 同步信
  • 数码管显示问题总结

    1 数码管显示原理 我们最常用的是七段式和八段式 LED 数码管 xff0c 八段比七段多了一个小数点 xff0c 其他的基本相同 所谓的八段就是指数码管里有八个小 LED 发光二极管 xff0c 通过控制不同的 LED 的亮灭来显示出不同
  • 单片机与嵌入式linux 比较

    MCU门槛低 xff0c 入门容易 xff0c 但是灵活 xff0c 其实对工程师的软硬件功底要求更高 xff0c 随着半导体的飞速发展 xff0c MCU能实现很多匪夷所思匪夷所思的功能 xff0c 比如 xff0c 使用GPIO模拟1个

随机推荐

  • rtk 精确定位 简介

    RTK又称载波相位差分 xff1a 基准站通过数据链及时将其载波观测量及站坐标信息一同传送给用户站 用户站接收GPS卫星的载波相位与来自基准站的载波相位 xff0c 并组成相位差分观测值进行及时处理 xff0c 能及时给出厘米级的定位结果
  • STM32开发利器:STM32CubeMX

    这篇博客篇幅不长 xff0c 主要是为大家介绍ST公司推出的STM32CubeMX开发工具 xff0c 当成下周更新STM32 10个项目工程的预备篇 xff0c 同时FPGA FPGA 20个例程篇 xff1a 8 SD卡任意地址的读写
  • ROS命名空间

    ROS命令空间是一个很重要的内容 xff0c 官方文档 xff1a http wiki ros org Names 分为三类 xff1a relative xff0c global xff0c private 下边是一个官网给的示例 Nod
  • STM32CubeMX关于添加DSP库的使用

    前言 人生如逆旅 xff0c 我亦是行人 一 介绍 STM32 系列基于专为要求高性能 低成本 低功耗的嵌入式应用专门设计的 ARM Cortex M3 内核 而 DSP 应该是 TMS320 系列 xff0c TMS320 系列 DSP
  • STM32H750VBT6的DSP使用的学习——基于CubeMX

    前言 人生如逆旅 xff0c 我亦是行人 1 STM32H7的DSP功能介绍 xff08 STMicroelectronics xff0c 简称ST xff09 推出新的运算性能创记录的H7系列微控制器 新系列内置STM32平台中存储容量最
  • ROS中激光雷达数据类型传递转换及自定义点云数据类型介绍

    目录 一 ROS中激光雷达数据类型传递转换 xff1b 二 点云数据解析 三 自定义点云数据类型 一 ROS中激光雷达数据类型传递转换 xff1b ROS中涉及激光雷达传递的消息类型有两种 xff0c 一种是针对2D雷达 sensor ms
  • C/C++优秀书籍清单

    转载自 xff1a https www cnblogs com kimiway p 3225767 html 书籍是码农进步的阶梯 读好书 好读书 干一行爱一行 除了工作还有生活 在陪伴家人同时 也不忘提高自己 为更好的生活努力 1 C程序
  • 打印_battery_status.scale

    在px4的姿态控制中 xff0c publish控制量时代码乘以了一个 battery status scale xff0c scale effort by battery status if params bat scale en amp
  • 无名飞控

    无名飞控Time c文件 由于 无名飞控主要核心 xff1a 传感器滤波 姿态解算 惯导 控制等代码在TIME c里面运行 xff0c 所以先来分析这个文件 打开文件第一个函数 xff1a void Timer4 Configuration
  • 无名飞控姿态解算和控制(一)

    无名飞控的姿态解算和控制 从imu和磁力计 xff0c 气压计拿到数据后 xff0c 进入AHRSUpdate GraDes Delayback函数 xff0c 其中X w av Y w av Z w av来自陀螺仪 xff0c X g a
  • 无名飞控姿态解算和控制(三)

    继续码代码 上一篇主要写了自稳模式下的代码流程 xff0c 这次主要是飞控的定高和定点控制流程 首先是定高 控制模式在Main Leading Control里选择 定高模式代码 xff1a else if Controler Mode 6
  • 无名飞控框架梳理

    打开飞控的main c文件 首先是HardWave Init 飞控板内部资源 相关外设初始化 打开 include 34 Headfile h 34 Sensor Okay Flag Sensor Init Flag void HardWa
  • 无名飞控的时钟和延时

    首先是飞控里面调用了 SystemInit 时钟初始化这个里面 void SystemInit void Reset the RCC clock configuration to the default reset state for de
  • 谈谈bit位序的问题

    Linux内核里面有下面代码 struct iphdr if defined LITTLE ENDIAN BITFIELD u8 ihl 4 version 4 elif defined BIG ENDIAN BITFIELD u8 ver
  • 无名飞控的姿态解算和控制(四)

    上面几篇帖子已经写完控制流程还剩一点没说 if PPM Isr Cnt 61 61 100 PPM接收正常才进行传感器标定检测 Accel Calibration Check 加速度标定检测 Mag Calibration Check 磁力
  • 无名飞控的自抗扰控制

    无名飞控的自抗扰控制 自控制的算法可以见韩京清先生的书点击打开链接 为了自抗扰控制买了无名飞控 xff0c 现在看看它的自抗扰代码 首先初始化 xff1a 从代码上大致可以看出只对俯仰 横滚方向姿态内环角速度控制器采用ADRC自抗扰控制器
  • ARM寄存器与汇编指令详解

    介绍ARM寄存器之前 xff0c 先来介绍一下ARM处理的模式 xff1a 用户模式 User ARM处理器正常的程序执行状态 快速中断模式 FIQ 用于高速数据传输或通道处理 外部中断模式 IRQ 用于通用的中断处理 管理模式 Svc 操
  • STM32定时器---正交编码器模式详解

    编码器分类 xff1a 按工作原理 xff1a 光电式 磁电式和触点电刷式 按码盘的刻孔方式 xff1a 增量式和绝对式两类 由于博主接触面还不是很广 xff0c 一共就用过两个种类的编码器 xff0c 都是属于光电的 差分编码器 一般由8
  • VM虚拟机下给Ubuntu 目录分区增加容量的方法

    最近在编译androdi5 1代码的时候突然发现虚拟机容量不够了 xff0c 很是蛋疼 xff0c 只好摸索如何想办法给相应目录增加容量 xff0c 以下方法亲测可行 xff01 1 第一步当然是增加硬盘容量了 xff0c 这个需要用到VM
  • 1.uCOS-II简介及移植uCOS-II到STM32F103平台详细步骤

    I 说明 作者 xff1a WXP 翱翔云端的鸟 联系方式 328452854 64 qq com 13100610853 联系请注明 CSDN 申明 个人原创 xff0c 转载请先经过本人同意 xff01 要说的话 个人水平有限 写之前也