FreeRTOS知识梳理

一、RTOS:Real time operating system,中文意思为 实时操作系统,它是一类操作系统,比如uc/OS、FreeRTOS、RTX、RT-Thread 这些都是实时操作系统。

二、移植FreeRTOS到STM32F103C8T6上

interface选择CMSIS_V1,RCC选择Crystal Ceramic Resonator 。

FreeRTOS相关创建部分

三、任务的创建与删除相关函数,FreeRTOS任务的状态

五、任务小实验

LED1和LED2引脚设置成Ooutput,KEY1和KEY2引脚设置成Input

LED1和LED2功能实现代码:

cpp 复制代码
void StartTaskLED1(void const * argument)
{
 
  for(;;)
  {
		HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);//HAL_GPIO_TogglePin实现电平反转,PB8控制LED1
    osDelay(500);
  }

}

void StartTaskLED2(void const * argument)
{
  for(;;)
  {
		HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
    osDelay(1000);
  }
}

KEY1和KEY2功能实现:

cpp 复制代码
void StartTaskKEY1(void const * argument)
{

  for(;;)
  {
		if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET)//KEY1为PA0
		{
		osDelay(20);
			if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET)
				{	
			printf("key1被按下!!!\r\n");// \r为回车符,\n为换行符
					if( taskLED1Handle == NULL){
					printf("任务1不存在,准备创建任务1\r\n");
						 osThreadDef(taskLED1, StartTaskLED1, osPriorityNormal, 0, 128);
  taskLED1Handle = osThreadCreate(osThread(taskLED1), NULL);
						if(taskLED1Handle != NULL)
						printf("任务1创建成功\r\n");
					}else{
					printf("删除任务1\r\n");
						osThreadTerminate(taskLED1Handle);
						taskLED1Handle = NULL;
					}
			}
				while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET);//设置死循环,防止按键按下后一直执行下去
		}
    osDelay(1);
  }
}

void StartTaskKEY2(void const * argument)
{

	static int flag = 0;//设置标志位
  for(;;)
  {
		if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)==GPIO_PIN_RESET)
		{
		osDelay(20);
			if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)==GPIO_PIN_RESET)
				{	
			printf("key2被按下!!!\r\n");
					if( flag == 0){
					osThreadSuspend(taskLED2Handle);
						printf("任务2已暂停\r\n");
						flag = 1;
					}else{
					osThreadResume(taskLED2Handle);
							printf("任务2已恢复!!!\r\n");
						flag = 0;
					}
			}
				while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)==GPIO_PIN_RESET);
		}
		
    osDelay(1);
  }
 
}
相关推荐
哥不想学算法1 小时前
【C++】字符串字面量拼接
开发语言·c++
gugucoding3 小时前
21. 【C语言】打包不同类型:结构体
c语言·开发语言
Brookty3 小时前
【JavaEE】线程安全(一).4:写块串行保安全、CAS
java·开发语言·java-ee·多线程·线程安全
F20226974863 小时前
西门子 PLC 与 C# 通信
开发语言·c#
gugucoding4 小时前
31. 【C语言】堆栈与队列的实现
c语言·开发语言·数据结构·链表
万联WANFLOW5 小时前
多分支企业组网,IP 网段到底该怎么规划
开发语言·php
阿里嘎多学长5 小时前
2026-07-07 GitHub 热点项目精选
开发语言·程序员·github·代码托管
cookies_s_s6 小时前
C++ 字符串动态创建对象 -- 工厂模式、自动注册、模板递归动态调用
服务器·开发语言·c++
盐焗鹌鹑蛋7 小时前
【C++】继承
开发语言·c++