将uCOS-II移植到STM32F103平台

一、准备工作:

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

下载地址:链接:https://pan.baidu.com/s/1y_v3z5sscQ6kDDGNzNZLtA 
提取码:gg05 

二、文件预处理:

1.下载解压完成后有以下内容:

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

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

4.将准备目录下的Micrium\uCOS-II\Source下除os_cfg_c.h和os_dbg_r.c全部复制到移植工程目录下的Source第3步建成的  \STM32F103_Demo\uCOS-II\Source )

↓↓↓

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

↓↓↓

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

↓↓↓

三、工程移植

1.使用 Keil5 MDK打开移植工程

2.在APP Group下,添加对应的文件

红色方框内是新添加的文件。

3.在工程目录下  新建两个Group  uCOS-II_Source   uCOS-II_Ports

4.向Group UCOS-II_Source    和 uCOS-II_Ports中添加文件,需要添加的文件为 文件预处理部分,第4、5步已经拷贝过的文件,目录对应即可。

注意,uCOS-II_Source Group中不需要 ucos_ii.c文件

文件添加完成后如下图所示

5.修改如下两条 Include Paths

四、程序修改

1.修改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

2.修改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);
	}
}

3.修改uCOS-II_Ports下的os_cpu_a.asm

 

4. 把stm32f10x_it.c中的PendSV_Handler注释掉

5.修改bsp_systick.c

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

注意:文件末尾不要忘了留一个空行

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

五、结果验证

1.编译程序 无Error,有4个Warning(s),无影响

2.程序烧写

将程序生成的 .hex文件,通过 STMFlashLoader Demo.exe 程序串烧工具,烧写到STM32-M3核心模块,使用杜邦线连接核心模块与LED显示模块(PB5和PE5),即可查看结果:两盏LED灯以不同的频率交替闪烁

这里放一个已经成功的文件链接,有困难的同学可以比照着修改吼

链接:https://pan.baidu.com/s/1aP_db5osWhQttSGbJOHw6A 
提取码:zy3d 

 

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值