移植操作系统uCOSIII实现点灯


前言

本次移植需要使用到uCOSIII的源码,在此下载。(官方下载地址)

一、建立stm32 hal库工程

1.GPIO配置。此处选择的是PC13和PB0作为输出口
在这里插入图片描述
2.RCC配置
在这里插入图片描述
3.SYS配置
在这里插入图片描述
4.USART1配置
在这里插入图片描述
5.时钟配置
在这里插入图片描述
6.项目文件配置
在这里插入图片描述
在这里插入图片描述
7.至此,项目创建完成

二、uCOSIII文件的引入

1.在项目中创建一个UCOSIII文件,并将uCOSIII源码中的uC-CPU、uCLIB和uCOS-III这三个文件复制进去(此操作是为了之后操作的方便)
在这里插入图片描述
在这里插入图片描述
2.用KEIL打开项目,我们创建如下图的六个文件
在这里插入图片描述

  • 我们在bsp中加入文件。

点击Add Files,进入项目文件中的->Core->Src->OS中,找到bsp.cbsp.h文件加入。同时将OS中的app.c文件添加到Application/User/Core
在这里插入图片描述
在这里插入图片描述

  • 我们在uCOSIII_CPU中加入文件

点击添加文件,进入我们创建的UCOSIII->uC-CPU,文件类型选择All files,将其中的三个文件加入。接着,打开: ARM-Cortex-M3\RealView, 同样选择 ALL files 文件类型,将三个文件添加进 uCOSIII_CPU 组在这里插入图片描述
在这里插入图片描述
uCOS_III中一个有此6个文件
在这里插入图片描述

  • 我们在uCOSIII_LIB中加入文件
    点击 Add Files…按钮, 进入 UCOSIII->uCLIB,选择 ALL files 文件类型,将其中的九个文件添加进 uCOSIII_LIB 组;然后继续打开: Ports/ARM-Cortex-M3/Realview, 添加 lib_mem_a.asm 文件
    在这里插入图片描述
    在这里插入图片描述
    完成后,uCOSIII_LIB中一共有此10个文件
    在这里插入图片描述
  • 我们在uCOSIII_Ports中加入文件

点击 Add Files…按钮,进入 UCOSIII->Ucos-III->Ports->RAM-Cortex-M3->Generic->RealView。选择 ALL files 文件类型, 将其中三个文件添加进 uCOSIII_Ports 组
在这里插入图片描述
在这里插入图片描述

  • 我们在uCOSIII_Sourc中加入文件

点击Add Files…按钮, 进入 UCOSIII->Ucos-III->Source。选择 ALL files 文件类型, 将其中二十个文件添加进 uCOSIII_Sourc 组
在这里插入图片描述

  • 我们在

点击 Add Files…按钮, 进入项目文件中的->Core->Src->OS中。选择 ALLfiles 文件类型, 将图中的八个文件添加进 uCOSIII_Sourc 组
在这里插入图片描述

在这里插入图片描述

  • 添加头文件路径
    在这里插入图片描述
    在这里插入图片描述

三、文件内容修改

1.bsp.c与bsp.h

  • bsp.c
// bsp.c
#include "includes.h"

#define  DWT_CR      *(CPU_REG32 *)0xE0001000
#define  DWT_CYCCNT  *(CPU_REG32 *)0xE0001004
#define  DEM_CR      *(CPU_REG32 *)0xE000EDFC
#define  DBGMCU_CR   *(CPU_REG32 *)0xE0042004

#define  DEM_CR_TRCENA                   (1 << 24)
#define  DWT_CR_CYCCNTENA                (1 <<  0)

CPU_INT32U  BSP_CPU_ClkFreq (void)
{
   
    return HAL_RCC_GetHCLKFreq();
}

void BSP_Tick_Init(void)
{
   
	CPU_INT32U cpu_clk_freq;
	CPU_INT32U cnts;
	cpu_clk_freq = BSP_CPU_ClkFreq();
	
	#if(OS_VERSION>=3000u)
		cnts = cpu_clk_freq/(CPU_INT32U)OSCfg_TickRate_Hz;
	#else
		cnts = cpu_clk_freq/(CPU_INT32U)OS_TICKS_PER_SEC;
	#endif
	OS_CPU_SysTickInit(cnts);
}



void BSP_Init(void)
{
   
	BSP_Tick_Init();
	MX_GPIO_Init();
}


#if (CPU_CFG_TS_TMR_EN == DEF_ENABLED)
void  CPU_TS_TmrInit (void)
{
   
    CPU_INT32U  cpu_clk_freq_hz;


    DEM_CR         |= (CPU_INT32U)DEM_CR_TRCENA;                /* Enable Cortex-M3's DWT CYCCNT reg.                   */
    DWT_CYCCNT      = (CPU_INT32U)0u;
    DWT_CR         |= (CPU_INT32U)DWT_CR_CYCCNTENA;

    cpu_clk_freq_hz = BSP_CPU_ClkFreq();
    CPU_TS_TmrFreqSet(cpu_clk_freq_hz);
}
#endif


#if (CPU_CFG_TS_TMR_EN == DEF_ENABLED)
CPU_TS_TMR  CPU_TS_TmrRd (void)
{
   
    return ((CPU_TS_TMR)DWT_CYCCNT);
}
#endif


#if (CPU_CFG_TS_32_EN == DEF_ENABLED)
CPU_INT64U  CPU_TS32_to_uSec (CPU_TS32  ts_cnts)
{
   
	CPU_INT64U  ts_us;
  CPU_INT64U  fclk_freq;

 
  fclk_freq = BSP_CPU_ClkFreq(
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值