嵌入式RTOS多任务程序设计

一、嵌入式实时操作系统(RTOS)

嵌入式实时操作系统(RTOS)是专为嵌入式系统设计的操作系统,它能够满足实时性和可预测性的要求。uc/OS-III(MicroC/OS-III)是一种广泛使用的开源嵌入式实时操作系统之一。

1. uc/OS-III 简介:

1.1 特点:
实时性:uc/OS-III设计用于支持实时系统应用。
多任务支持:支持多任务处理,可以同时执行多个任务。
内核对象:提供了诸如任务、信号量、消息队列等内核对象。
可裁剪性:可以根据应用需求选择性地裁剪功能,以减小内存占用。
1.2 内核对象:
任务(Task):用于执行实际的工作。
信号量(Semaphore):用于任务间的同步和互斥。
消息队列(Message Queue):任务之间通过消息进行通信。
事件标志组(Event Flag Group):用于任务同步。
互斥量(Mutex):提供互斥访问共享资源的机制。
1.3 任务调度:
uc/OS-III使用抢占式优先级调度算法,高优先级任务可以抢占低优先级任务的执行。
2. 使用 uc/OS-III 的基本步骤:
2.1 创建任务:
使用uc/OS-III API创建需要执行的任务。
2.2 初始化内核对象:
初始化信号量、消息队列等内核对象。
2.3 启动 uc/OS-III 内核:
启动uc/OS-III内核后,它将开始执行预定义的任务。
2.4 任务编写:
在任务中编写具体的应用逻辑。
2.5 任务同步和通信:
使用信号量、消息队列等机制进行任务之间的同步和通信。

二、使用STM32CubeMX配置项目

1.在STM32CubeMX中选择相应芯片

这里使用STM32F103C8芯片进行实现
在这里插入图片描述

2.配置RCC

在这里插入图片描述

3.配置SYS

在这里插入图片描述

4.配置USART1

在这里插入图片描述

5.配置引脚

在这里插入图片描述

6.在项目设置中进行如下设置

在这里插入图片描述
在这里插入图片描述

设置完成后,点击右上角GENERATE CODE 进行输出。

三、在keil中进行编程

1.添加文件

1.在文件夹中粘贴文件

在这里插入图片描述

2.在项目中创建文件夹
在这里插入图片描述

3.在CPU中导入以下文件
在这里插入图片描述

在这里插入图片描述
4.在LIB中导入以下文件
在这里插入图片描述
在这里插入图片描述
5.在PORT中导入以下文件
在这里插入图片描述
6.在SOURCE中导入以下文件
在这里插入图片描述
7.在CONFIG中导入以下文件
在这里插入图片描述
8.在BSP中导入以下文件
在这里插入图片描述
9.在BSP中导入以下文件
在这里插入图片描述

10.添加路径
在这里插入图片描述

2.修改代码

1.编写bsp.h
在这里插入图片描述
2.编写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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值