文章目录

  • 移植uCOS-II到STM32F103平台
    • 感谢声明
    • 移植前准备工作
    • 移植过程
    • 下载到开发板操作

移植uCOS-II到STM32F103平台

感谢声明

首先感谢wang328452854博主的博客指导,为本次实验提供的帮助。
此外,本篇博客是在此博主的博客uCOS-II简介及移植uCOS-II到STM32F103平台详细步骤的基础进行进一步的完善修改。

移植前准备工作

  1. uCOS-II源码
  2. uCOS-II官方移植到STM32F107的Demo
  3. STM32F103裸机Demo
  4. 环境:Keil uVision5
  5. 硬件:M3核

下载地址:
CSDN:http://download.csdn.net/download/wang328452854/10110946

百度云盘: http://pan.baidu.com/s/1eRHYeJo 密码:d1pj
上述材料也均可从官网或者论坛下载

移植过程

若是从百度网盘下载的压缩包可在解压后直接跳到第6步

  1. 解压压缩包,如下图所示

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

  3. 在uCOS-II目录下新建两个目录Ports和Source

  4. 将路径:\uCOS-II移植准备目录\Micrium\uCOS-II\Source下的除os_cfg_c.h和os_dbg_r.c全部复制到路径:uCOS-II移植准备目录\STM32F103_Demo\uCOS-II\Source

    此时uCOS-II移植准备目录\STM32F103_Demo\uCOS-II\Source中文件为下图所示

  5. 将路径:uCOS-II移植准备目录\Micrium_uC-Eval-STM32F107_uCOS-II\Software\uCOS-II\Ports\ARM-Cortex-M3\Generic\RealView下的所有文件拷贝到路径:uCOS-II移植准备目录\STM32F103_Demo\uCOS-II\Ports
    此时移植目录的Ports的内容为

  6. 将路径:uCOS-II移植准备目录\Micrium_uC-Eval-STM32F107_uCOS-II\Software\EvalBoards\Micrium\uC-Eval-STM32F107\uCOS-II下的三个文件拷贝到路径uCOS-II移植准备目录\STM32F103_Demo\App
    此时路径uCOS-II移植准备目录\STM32F103_Demo\App中的文件如下

  7. 打开路径:uCOS-II移植准备目录\STM32F103_Demo\Project下的工程
    此时工程如下:

  8. 右键单击APP,点击Add Exiting Files to Group ‘App’,添加路径 :uCOS-II移植准备目录\Micrium_uC-Eval-STM32F107_uCOS-II\Software\EvalBoards\Micrium\uC-Eval-STM32F107\uCOS-II下的这四个文件

  9. 右键单击STM32F103_Demo,点击Add Group,创建uCOS-II_Source,重复此操作创建uCOS-II_Ports,对应添加路径:uCOS-II移植准备目录\STM32F103_Demo\uCOS-II\SourceuCOS-II移植准备目录\STM32F103_Demo\uCOS-II\Ports下的文件
    注意 :添加Source中的文件时不添加ucos_ii.c文件
    添加后如图:

  10. 修改 APP下的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
  1. 修改APP下的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);
}
}
  1. 修改uCOS-II_Ports下的os_cpu_a.asm
    EXPORT OS_CPU_PendSVHandler修改为
  EXPORT  PendSVHandler

修改的位置

修改后

  1. 修改Bsp下的bsp_systick.c
    添加头文件
#include"includes.h"


修改void SysTick_Init(void)函数
函数位置如下

更改的地方:

SysTick_Config(SystemCoreClock /1000);   //滴答时钟定时周期为1ms

更改为:

SysTick_Config(SystemCoreClock /OS_TICKS_PRE_SEC);

修改void SysTick_Handler(void)函数
函数位置如下:

将函数替换为

void SysTick_Handler(void)
{//sysTickUptime++;if(OSRunning){OSIntEnter();OSTimeTick();OSIntExit();}
}
  1. 修改uCOS-II Ports下的os_cpu_c.c中的关于systick的配置初始化及中断处理部分
    位置

    将此处更改为
#if 0
#define  OS_CPU_CM3_NVIC_ST_CTRL    (*((volatile INT32U *)0xE000E010uL))/* SysTick Ctrl & Status Reg. */
#define  OS_CPU_CM3_NVIC_ST_RELOAD  (*((volatile INT32U *)0xE000E014uL))/* SysTick Reload  Value Reg. */
#define  OS_CPU_CM3_NVIC_ST_CURRENT (*((volatile INT32U *)0xE000E018uL))/* SysTick Current Value Reg. */
#define  OS_CPU_CM3_NVIC_ST_CAL     (*((volatile INT32U *)0xE000E01CuL))/* SysTick Cal     Value Reg. */
#define  OS_CPU_CM3_NVIC_PRIO_ST    (*((volatile INT8U  *)0xE000ED23uL))/* SysTick Handler Prio  Reg. */#define  OS_CPU_CM3_NVIC_ST_CTRL_COUNT                    0x00010000uL/* Count flag.                */
#define  OS_CPU_CM3_NVIC_ST_CTRL_CLK_SRC                  0x00000004uL/* Clock Source.              */
#define  OS_CPU_CM3_NVIC_ST_CTRL_INTEN                    0x00000002uL/* Interrupt enable.          */
#define  OS_CPU_CM3_NVIC_ST_CTRL_ENABLE                   0x00000001uL/* Counter mode.              */
#define  OS_CPU_CM3_NVIC_PRIO_MIN                               0xFFu/* Min handler prio.          */
#endif

更改后

将此处内容

更改为

#if 0
void  OS_CPU_SysTickHandler (void)
{OS_CPU_SR  cpu_sr;OS_ENTER_CRITICAL();                         /* Tell uC/OS-II that we are starting an ISR          */OSIntNesting++;OS_EXIT_CRITICAL();OSTimeTick();                                /* Call uC/OS-II's OSTimeTick()                       */OSIntExit();                                 /* Tell uC/OS-II that we are leaving the ISR          */
}


将此处位置(最后)

更改为


void  OS_CPU_SysTickInit (INT32U  cnts)
{OS_CPU_CM3_NVIC_ST_RELOAD = cnts - 1u;/* Set prio of SysTick handler to min prio.           */OS_CPU_CM3_NVIC_PRIO_ST   = OS_CPU_CM3_NVIC_PRIO_MIN;/* Enable timer.                                      */OS_CPU_CM3_NVIC_ST_CTRL  |= OS_CPU_CM3_NVIC_ST_CTRL_CLK_SRC | OS_CPU_CM3_NVIC_ST_CTRL_ENABLE;/* Enable timer interrupt.                            */OS_CPU_CM3_NVIC_ST_CTRL  |= OS_CPU_CM3_NVIC_ST_CTRL_INTEN;
}
#endif

  1. 注释掉uCOS-II Ports下的os_cpu.h更改过的部分

    注释后

  2. 更改工程配置




17. 此时编译成功

下载到开发板操作

  1. 连线
    本实验需要三条杜邦线,一条接3.3v电源
    另外两条连接LED灯和引脚PB5、PE5

  1. 通过STMicroelectronics flash loader下载到开发板,下载前需要按下复位,防止下载软件死机。

  2. 按下复位即可观察到内容
    可通过修改main.c中的程序,更改LED灯亮暗的频率

//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,1000);
LED3(OFF);
OSTimeDlyHMSM(0,0,0,1000);
}
}

此时能观察到更加明显的效果
如下图

移植uCOS-II到STM32F103平台攻略相关推荐

  1. Amazon Web Service 雲端運算平台攻略 【3】:免費架WordPress部落格的虛擬主機

    本文目的 如果你需要一個能自己管理控制的部落格平台,基本上需要的是租用一台伺服器加上安裝部落格軟體.本文要告訴你,如何運用Amazon的雲端平台AWS提供的一年免費Free Tier,來安裝使用屬於你 ...

  2. 用C语言写ucos中断服务程序,在ARM处理器上移植uCOS II的中断处理

    uCOS II是一个源码公开.可移植.可固化.可剪裁和抢占式的实时多任务操作系统,其大部分源码是用ANSI C编写,与处理器硬件相关的部分使用汇编语言编写.总量约200行的汇编语言部分被压缩到最低限度 ...

  3. IAR中移植UCOS II系统以及sourceInsight 使用

    ucos 学习笔记 1 sourceInsight 使用 CSDN参考链接 新建工程 第一步:project中new project 第二步:在高亮部分输入工程的地址,工程文件夹与IAR工程文件夹放在 ...

  4. 一份可以同时满足传统与互联网业务的Dev平台攻略

    来自:DBAplus社群 作者介绍 胥建英,拥有八年云计算领域.云自动化运维.DevOps及微服务建设经验. DevOps(Development和Operations的组合词)是一组过程.方法与系统 ...

  5. 免費玩雲端運算,Amazon Web Service 雲端運算平台攻略 【1】

    Amazon是全球雲端運算平台提供商的領頭羊之一.其雲端服務透過AWS(Amazon Web Services)網站 平台註冊.登入.使用.付費,單一入口相當便利. AWS平台提供了運算用的EC2 , ...

  6. ios, android平台手机游戏,《王者荣耀》ios和安卓怎么转平台 ios和安卓转平台攻略...

    导 读 因为目前安卓和苹果之间的数据是不互通的,所以给许多玩家造成了一定的困扰,但是官方在最近发布的消息中提到了安卓和苹果转平台的事情,下面让我们一起去了解一下吧. 王者荣耀ios和安卓怎么转平台 现 ...

  7. Amazon Web Service 雲端運算平台攻略 【2】

    Sting Tao   5 November 2010 請確認 並且,已經開通了AWS帳號及收到Amazon的Signup confirmation的電子郵件. 本文目標 在免費的AWS帳號下,建立一 ...

  8. 查询手机号码注册和绑定的平台攻略

             " 随着互联网发展,我们用的互联网产品越来越多,QQ.微信.支付宝.脉脉--互联网给我们带来了便利,同时也在泄露着我们的信息." 0x00-37K ------- ...

  9. UCOS II移植到STM32F103开发板

    早期嵌入式开发没有嵌入式操作系统的概念 ,直接操作裸机,在裸机上写程序,比如用51单片机基本就没有操作系统的概念.通常把程序分为两部分:前台系统和后台系统. 简单的小系统通常是前后台系统,这样的程序包 ...

最新文章

  1. huffman java_详解Huffman编码算法之Java实现
  2. motan源码分析二:使用spi机制进行类加载
  3. python怎么安装matplotlib-如何安装Python绘图库Matplotlib?
  4. getline读取不等待输入的问题
  5. cad记忆口诀_CAD制图口诀你值得拥有!
  6. linux下指数函数,用GeoGebra画指数函数图像、查看函数变化轨迹
  7. paramterType和resultType的区别
  8. python1080p壁纸高清图片_Python爬取高清桌面壁纸(附源码),直接运行即可
  9. 来和 webpack 谈场恋爱吧!这课程好甜!
  10. tomcat闪退没有报错_Appium在Android平台几种常见报错的解决方案
  11. css flexbox模型_Flexbox教程:了解如何使用CSS Flexbox编写响应式导航栏
  12. jdk的selector(2)channel的注册
  13. 【Python3网络爬虫开发实战】1.5.2-PyMongo的安装
  14. 程序设计 关键字解释
  15. html2canvas截图只截取当前可视区域的问题
  16. Tomcat-日志格式配置
  17. 使用批处理进行批量重命名
  18. ubuntu下安装 julia-1.4.2
  19. [转]计算机视觉入门
  20. MotionEvent 事件解读

热门文章

  1. 模拟电路29(实际集成运放的主要参数)
  2. Android Editable
  3. 上海贝尔2452交换机_通信网络-OmniSwitch 6250可堆叠的快速以太网交换机系列.pdf
  4. Kafka实践指南:快速掌握部署使用与常用命令
  5. 新版PMBOK中项目管理十二原则,你知道了吗?
  6. 中国代表性Fintech企业动态观察
  7. 【LeetCode 5-中等】最长回文子串(高清截图)
  8. 业务系统里的Office文档如何在线编辑
  9. 《optimizing software in c++》读书笔记(一)
  10. 【技术美术图形部分】PBR直接光部分:Disney原则的BRDF和次表面散射模型