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);
  }
 
}
相关推荐
BuHuaX12 小时前
Lua 与 ToLua:运行机制及热更新原理
开发语言·unity·junit·c#·lua
xys_67812 小时前
深挖C++:C++入门基础
开发语言·c++
幻境如梦丶皆为虚13 小时前
从零写一个 DSH 插件:在左侧菜单栏加一个「测试」
开发语言·javascript·ecmascript
LabVIEW开发13 小时前
LabVIEW 局部变量与数据流:这道 CLAD 题为什么答案是 Undefined
java·开发语言·labview
路溪非溪13 小时前
C++标准库之智能指针
linux·开发语言·c++
衍生星球14 小时前
【Java 语言】— 面向对象:构造方法(无参、有参构造)
java·开发语言
yuniko-n14 小时前
【JVM】对象内存布局
java·开发语言·jvm
何中应14 小时前
【Go-1】变量&常量定义
开发语言·后端·golang
CarIise14 小时前
Spring 框架AOP与 XML 基础
java·开发语言