移植uCOS-II到STM32F103平台攻略
文章目录
- 移植uCOS-II到STM32F103平台
- 感谢声明
- 移植前准备工作
- 移植过程
- 下载到开发板操作
移植uCOS-II到STM32F103平台
感谢声明
首先感谢wang328452854博主的博客指导,为本次实验提供的帮助。
此外,本篇博客是在此博主的博客uCOS-II简介及移植uCOS-II到STM32F103平台详细步骤的基础进行进一步的完善修改。
移植前准备工作
- uCOS-II源码
- uCOS-II官方移植到STM32F107的Demo
- STM32F103裸机Demo
- 环境:Keil uVision5
- 硬件:M3核
下载地址:
CSDN:http://download.csdn.net/download/wang328452854/10110946
百度云盘: http://pan.baidu.com/s/1eRHYeJo 密码:d1pj
上述材料也均可从官网或者论坛下载
移植过程
若是从百度网盘下载的压缩包可在解压后直接跳到第6步
解压压缩包,如下图所示
在裸机代码STM32F103_Demo中添加一个目录uCOS-II
在uCOS-II目录下新建两个目录Ports和Source
将路径:\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中文件为下图所示
将路径: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的内容为
将路径: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中的文件如下
打开路径:uCOS-II移植准备目录\STM32F103_Demo\Project下的工程
此时工程如下:
右键单击APP,点击Add Exiting Files to Group ‘App’,添加路径 :uCOS-II移植准备目录\Micrium_uC-Eval-STM32F107_uCOS-II\Software\EvalBoards\Micrium\uC-Eval-STM32F107\uCOS-II下的这四个文件
右键单击STM32F103_Demo,点击Add Group,创建uCOS-II_Source,重复此操作创建uCOS-II_Ports,对应添加路径:uCOS-II移植准备目录\STM32F103_Demo\uCOS-II\Source和uCOS-II移植准备目录\STM32F103_Demo\uCOS-II\Ports下的文件
注意 :添加Source中的文件时不添加ucos_ii.c文件
添加后如图:
修改 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
- 修改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);
}
}
- 修改uCOS-II_Ports下的os_cpu_a.asm
将 EXPORT OS_CPU_PendSVHandler修改为
EXPORT PendSVHandler
修改的位置
修改后
- 修改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();}
}
- 修改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
注释掉uCOS-II Ports下的os_cpu.h更改过的部分
注释后
更改工程配置
17. 此时编译成功
下载到开发板操作
- 连线
本实验需要三条杜邦线,一条接3.3v电源
另外两条连接LED灯和引脚PB5、PE5
通过STMicroelectronics flash loader下载到开发板,下载前需要按下复位,防止下载软件死机。
按下复位即可观察到内容
可通过修改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平台攻略相关推荐
- Amazon Web Service 雲端運算平台攻略 【3】:免費架WordPress部落格的虛擬主機
本文目的 如果你需要一個能自己管理控制的部落格平台,基本上需要的是租用一台伺服器加上安裝部落格軟體.本文要告訴你,如何運用Amazon的雲端平台AWS提供的一年免費Free Tier,來安裝使用屬於你 ...
- 用C语言写ucos中断服务程序,在ARM处理器上移植uCOS II的中断处理
uCOS II是一个源码公开.可移植.可固化.可剪裁和抢占式的实时多任务操作系统,其大部分源码是用ANSI C编写,与处理器硬件相关的部分使用汇编语言编写.总量约200行的汇编语言部分被压缩到最低限度 ...
- IAR中移植UCOS II系统以及sourceInsight 使用
ucos 学习笔记 1 sourceInsight 使用 CSDN参考链接 新建工程 第一步:project中new project 第二步:在高亮部分输入工程的地址,工程文件夹与IAR工程文件夹放在 ...
- 一份可以同时满足传统与互联网业务的Dev平台攻略
来自:DBAplus社群 作者介绍 胥建英,拥有八年云计算领域.云自动化运维.DevOps及微服务建设经验. DevOps(Development和Operations的组合词)是一组过程.方法与系统 ...
- 免費玩雲端運算,Amazon Web Service 雲端運算平台攻略 【1】
Amazon是全球雲端運算平台提供商的領頭羊之一.其雲端服務透過AWS(Amazon Web Services)網站 平台註冊.登入.使用.付費,單一入口相當便利. AWS平台提供了運算用的EC2 , ...
- ios, android平台手机游戏,《王者荣耀》ios和安卓怎么转平台 ios和安卓转平台攻略...
导 读 因为目前安卓和苹果之间的数据是不互通的,所以给许多玩家造成了一定的困扰,但是官方在最近发布的消息中提到了安卓和苹果转平台的事情,下面让我们一起去了解一下吧. 王者荣耀ios和安卓怎么转平台 现 ...
- Amazon Web Service 雲端運算平台攻略 【2】
Sting Tao 5 November 2010 請確認 並且,已經開通了AWS帳號及收到Amazon的Signup confirmation的電子郵件. 本文目標 在免費的AWS帳號下,建立一 ...
- 查询手机号码注册和绑定的平台攻略
" 随着互联网发展,我们用的互联网产品越来越多,QQ.微信.支付宝.脉脉--互联网给我们带来了便利,同时也在泄露着我们的信息." 0x00-37K ------- ...
- UCOS II移植到STM32F103开发板
早期嵌入式开发没有嵌入式操作系统的概念 ,直接操作裸机,在裸机上写程序,比如用51单片机基本就没有操作系统的概念.通常把程序分为两部分:前台系统和后台系统. 简单的小系统通常是前后台系统,这样的程序包 ...
最新文章
- huffman java_详解Huffman编码算法之Java实现
- motan源码分析二:使用spi机制进行类加载
- python怎么安装matplotlib-如何安装Python绘图库Matplotlib?
- getline读取不等待输入的问题
- cad记忆口诀_CAD制图口诀你值得拥有!
- linux下指数函数,用GeoGebra画指数函数图像、查看函数变化轨迹
- paramterType和resultType的区别
- python1080p壁纸高清图片_Python爬取高清桌面壁纸(附源码),直接运行即可
- 来和 webpack 谈场恋爱吧!这课程好甜!
- tomcat闪退没有报错_Appium在Android平台几种常见报错的解决方案
- css flexbox模型_Flexbox教程:了解如何使用CSS Flexbox编写响应式导航栏
- jdk的selector(2)channel的注册
- 【Python3网络爬虫开发实战】1.5.2-PyMongo的安装
- 程序设计 关键字解释
- html2canvas截图只截取当前可视区域的问题
- Tomcat-日志格式配置
- 使用批处理进行批量重命名
- ubuntu下安装 julia-1.4.2
- [转]计算机视觉入门
- MotionEvent 事件解读
热门文章
- 模拟电路29(实际集成运放的主要参数)
- Android Editable
- 上海贝尔2452交换机_通信网络-OmniSwitch 6250可堆叠的快速以太网交换机系列.pdf
- Kafka实践指南:快速掌握部署使用与常用命令
- 新版PMBOK中项目管理十二原则,你知道了吗?
- 中国代表性Fintech企业动态观察
- 【LeetCode 5-中等】最长回文子串(高清截图)
- 业务系统里的Office文档如何在线编辑
- 《optimizing software in c++》读书笔记(一)
- 【技术美术图形部分】PBR直接光部分:Disney原则的BRDF和次表面散射模型