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);
  }
 
}
相关推荐
萧瑟余晖19 分钟前
Java深入解析篇三十六之分布式系统详解
java·开发语言·分布式
ZJU_统一阿萨姆1 小时前
【推理优化进阶】调度器的数学内核:排队论、SLO 与在线决策
开发语言·人工智能·语言模型·系统架构·vllm
SomeB1oody1 小时前
【RustyML入门】5.2. 分类指标
开发语言·后端·机器学习·rust·教程
ZJU_统一阿萨姆2 小时前
【推理优化进阶】图编译与运行时:动态形状、CUDA Graph 与内存规划
开发语言·人工智能·语言模型·架构·开源
@呱呱爱学习2 小时前
C++大成之路_ STL容器_ Vector
开发语言·c++
码匠许师傅2 小时前
【C++ 面试真题】19. 聊聊 C++ 的迭代器
开发语言·c++·面试
AI情绪识别开源2 小时前
检信ALLEMOTION VibrationAI 2.4.0 12维度情绪识别开源源代码
开发语言·python
Dovis(誓平步青云)2 小时前
DevEco Studio 6.1.1 Windows 安装实录:从下载校验到首次启动
android·开发语言·数据库·人工智能·windows·harmonyos
qeen872 小时前
【数据结构】红黑树的算法原理解析与实现
开发语言·数据结构·c++·算法·红黑树
Logintern093 小时前
什么时候应该用多进程什么时候用多线程呢?
开发语言·python