一、获取uC/OS-|||源码
链接:https://pan.baidu.com/s/1_Wk-hbeQ7KrvnoA0GwJXdA
提取码:qwer
二、整理文件夹
2.1新建文件夹
在下载的文件夹中新建两个文件夹uC-BSP和uC-CONFIG,后续操作会使用。
2.2创建空文件
用vc、dev或者其他变成软件创建bsp.c和bsp.h文件
2.3导入源码
2.4设置STM32cubemx环境
设置gpio管脚PB0,PB1来观察两个task任务下的led闪烁,并且设置串口usart1,中断不用开启。同时要设置sys,rcc,以及clock72MHZ
关于详情的管脚设置请参考以前的博客:https://blog.csdn.net/qq_45917157/article/details/121161981?spm=1001.2014.3001.5502
配置Rcc
设置PB0,PB1为GPIO_Output
设置串口USART1
设置时钟参数
建立工程
2.5导入文件和增加头函数路径
2.6打开keil,增加item
添加如下六个groups
2.6.1 在BSP,file下添加前文创建的空白文件bsp.c,bsp.h
2.6.2在CONFIG添加file,共8个
2.6.3在SOURCE添加20个
2.6.4 PORT下添加3个
2.6.5CPU下添加6个
其中包括uC-CPU下的3个和realview下的3个
2.6.6LIB下添加10个
和2.6.6CPU操作相似
2.7加入文件编译路径
三、改写代码
3.1 修改startup文件
PendSV_Handler -----> OS_CPU_PendSVHandler
SysTick_Handler -----> OS_CPU_SysTickHandler
共四处需要修改
3.2修改CONFIG/app_cfg.h
#define APP_CFG_SERIAL_EN DEF_ENABLED ------>
#define APP_CFG_SERIAL_EN DEF_DISABLED
#define APP_TRACE BSP_Ser_Printf --------> #define APP_TRACE (void)
3.3修改CONFIG/includes.h
在#include<bsp.h>后加上
#include “gpio.h”
#include “app_cfg.h”
将#include <stm32f10x_lib.h> 改为 #include “stm32f1xx_hal.h”
3.4 修改BSP/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