移植uCOS-II到STM32F103平台详细步骤


目录

一、环境

二、移植uCOS-II准备工作

三、移植uCOS-II

四、下载到开发板及实验操作步骤


 

一、环境

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

硬件:NEWLabM3开发板

 

二、移植uCOS-II准备工作

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

uCOS-II源码下载地址:

(1)百度网盘: http://pan.baidu.com/s/1eRHYeJo                 提取码:d1pj

(2)百度网盘:https://pan.baidu.com/s/1eyU0fEiZf7F_x52fIgVNig       提取码:4yu6 

(3)微信 扫描二维码提取:

         

 

三、移植uCOS-II

1.压缩包解压后如图所示:

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

3.在uCOS-II目录下新建两个目录Ports和Source(已添加)

(1)Source目录包含 与处理器无关操作系统内核代码

(2)Ports目录包含    与处理器有关需要移植代码

4.将准备目录下的Micrium \ uCOS-II \ Source下除 os_cfg_r.h 和 os_dbg_r.c 全部复制到移植工程 STM32F103_Demo \ uCOS-II 目录的Source下(已存在,建议再次进行替换)

复制后(STM32F103_Demo \ uCOS-II 目录的Source下):

5.将准备目录下 Micrium_uC-Eval-STM32F107_uCOS-II \ Software \ uCOS-II \ Ports \ ARM-Cortex-M3 \ Generic \ RealViem 下的全部文件拷贝到移植工程 STM32F103_Demo \ uCOS-II 目录的Ports下(已存在,建议再次进行替换)

复制后(STM32F103_Demo \ uCOS-II 目录的Ports下):

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

四个文件为:

        app_cfg.h、app_hooks.c、includes.h、os_cfg.h

 

复制后(STM32F103_Demo \ uCOS-II 目录的Ports下):

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

移植工程位置::\\ uCOS-II移植准备目录 \ STM32F103_Demo \ Project 目录下

(1)向 Group App 中添加以下四个文件(双击或右键单击)

    四个文件为:

        app_cfg.h、app_hooks.c、includes.h、os_cfg.h

    文件位置:移植工程 STM32F103_Demo 的App目录下

        

(2)打开移植工程,新建Group  uCOS-II_Source

  

    a.为 Group uCOS-II_Source添加对应文件(双击或右键单击)

    文件位置::\STM32F103_Demo \ uCOS-II \ Source

  

    b.剔除 ucos_ii.c文件

    c.添加对应文件后如图所示

(2)打开移植工程,新建Group  uCOS-II_Ports

    

    为 Group uCOS-II_Ports添加对应文件(双击或右键单击)

        文件位置::\STM32F103_Demo \ uCOS-II \ Ports

    

8.修改移植工程配置(选择 STM32F103_Demo ,双击或右键单击)

选择并添加路径:

    

添加 Source 文件夹和 Port 文件夹:

添加后:

9.修改 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  
#include  
#include  
#include  /*
*********************************************************************************************************
*                                              LIBRARIES
*********************************************************************************************************
*///#include  
//#include  
//#include  
//#include  
//#include  
//#include  /*
*********************************************************************************************************
*                                              APP / BSP
*********************************************************************************************************
*/#include  "bsp.h"/*
*********************************************************************************************************
*                                                 OS
*********************************************************************************************************
*/#include /*
*********************************************************************************************************
*                                                 ST
*********************************************************************************************************
*//*
*********************************************************************************************************
*                                            INCLUDES END
*********************************************************************************************************
*/#endif

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

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

(1)第42行:

        EXPORT  OS_CPU_PendSVHandler 修改为 EXPORT  PendSV_Handler

        修改后:

(2)第209行:

        OS_CPU_PendSVHandler 修改为 PendSV_Handler

        修改后:

12.修改 App 下的 stm32f10x_it.c

                第74行:

        注释掉 PendSV_Handler

13.修改 Bsp 下的 bsp_systick.c

(1)第17行:

        添加头文件 include"includes.h"

(2)第106行:

        将 SysTick_Config(SystemCoreClock /1000); 修改为 SysTick_Config(SystemCoreClock /OS_TICKS_PER_SEC); 

        修改后:

(3)第175行:

        函数改为:

void SysTick_Handler(void)
{//sysTickUptime++;if(OSRunning){OSIntEnter();OSTimeTick();OSIntExit();}
}

        修改后:

14.修改 uCOS-II_Ports 下的 os_cpu_c.c 中的关于 systick 的配置初始化及中断处理部分

(1)第45行:(已修改)

(2)第365行添加 #if 0

        第402行添加 #endif:(添加后敲回车,否则会有警告)

15.注释掉 uCOS-II_Ports 下的 os_cpu.h中我们刚才修改过的函数部分

注释掉第123行、126行、127行三个函数声明:

16.编译不报错,无警告

注意:若有此警告,则为对应位置后一行没有打回车。

 

至此移植步骤完成

 

四、下载到开发板及实验操作步骤

main.c中为两个LED任务,下载到开发板中应看到两个灯以不同频率闪烁。

硬件设备准备:

NEWLabM3开发板1套、NEWLabM3核心模块、NEWLab显示模块、杜邦线若干

1.开发板上电并调为通讯模式

2.程序烧写

(1)用实验平台所附带的USB串口线连接PC机和NEWLab实验箱。

(2)下载程序前,需要把NEWLabM3核心模块右上角JP1的跳线帽调至Boot端。

(3)打开程序烧写工具 STMFlashLoader Demo.exe ,按下 NEWLabM3核心模块 复位键。

(4)选择编译生成的 STM32F103_Demo.hex 文件,烧写下载到NEWLabM3开发板

文件位置::\uCOS-II移植准备目录\STM32F103_Demo\Project\Objects

3.实验电路连接

由 LED初始化 代码可知,两端口配置为 PB5 和 PE5。

电路连接如图所示:

4.实验结果、现象

两个LED灯以不同频率闪烁


 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部