RTOS:任务的创建与删除

一、实验目的

编写简单的RTOS代码,测试RTOS移植是否成功,同时学习RTOS中任务的创建与删除。

二、实验设计

本次实验创建三个任务,start_task,led0_task,led1_task,分别作为启动任务,LED0以1s间隔闪烁、LED1以2s间隔闪烁。

三、实验代码

#include "FreeRTOS.h"
	#include "task.h"
	#define START_TASK_PRIO					1 	//定义开始任务优先级
	#define START_TASK_STACK_SIZE  			128	//定义开始任务堆栈大小
	TaskHandle_t StartTask_Handler;				//定义开始任务句柄
	void start_task(void *pvParameters);				//声明开始任务函数

	#define LED0_TASK_PRIO					2
	#define LED0_TASK_STACK_SIZE				50
	TaskHandle_t Led0Task_Handler;
	void led0_task (void *pvParameters);

	#define LED1_TASK_PRIO					3
	#define LED1_TASK_STACK_SIZE				50
	TaskHandle_t Led1Task_Handler;
	void led1_task (void *pvParameters);

	int main(void)
	{
		xTaskCreate(
							(TaskFunction_t)start_task,
							(const char *  )"start_task",
							(uint16_t		   )START_TASK_STACK_SIZE,
							(void *			   )NULL,
							(UBaseType_t   )START_TASK_PRIO,
							(TaskHandle_t *)&StartTask_Handler
		);					//创建开始任务
		vTaskStartScheduler();	//开启任务调度
           }
	




void start_task (void *pvParameters)
{
 taskENTER_CRITICAL();//进入临界区(在临界区内中断会被屏蔽,防止打断临界区任务)
			xTaskCreate(
						(TaskFunction_t)led0_task,
						(const char *  )"led0_task",
						(uint16_t		 )LED0_TASK_STACK_SIZE,
						(void *		)NULL,
						(UBaseType_t	)LED0_TASK_PRIO,
						(TaskHandle_t *)&Led0Task_Handler
			);												
			xTaskCreate(
						(TaskFunction_t)led1_task,
						(const char *  )"led1_task",
						(uint16_t		)LED1_TASK_STACK_SIZE,
						(void *		)NULL,
						(UBaseType_t	 )LED1_TASK_PRIO,
						(TaskHandle_t *)&Led1Task_Handler
			);					
		vTaskDelete(StartTask_Handler);//删除开始任务
		
taskEXIT_CRITICAL();	
}
void led0_task(void *pvParameters)
{

	while(1)
	{
		HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_5);
		vTaskDelay(2000);
	}
	
}
void led1_task(void *pvParameters)
{
	while(1)
	{
		HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);
		vTaskDelay(1000);
	}
}

四、实验现象

若RTOS移植没有问题,则可观察LED0以1s间隔闪烁,LED1以2s间隔闪烁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值