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);
  }
 
}
相关推荐
可峰科技4 分钟前
斗破QT编程入门系列之二:认识Qt:编写一个HelloWorld程序(四星斗师)
开发语言·qt
全栈开发圈9 分钟前
新书速览|Java网络爬虫精解与实践
java·开发语言·爬虫
面试鸭13 分钟前
离谱!买个人信息买到网安公司头上???
java·开发语言·职场和发展
小白学大数据14 分钟前
JavaScript重定向对网络爬虫的影响及处理
开发语言·javascript·数据库·爬虫
Python大数据分析@17 分钟前
python操作CSV和excel,如何来做?
开发语言·python·excel
上海_彭彭42 分钟前
【提效工具开发】Python功能模块执行和 SQL 执行 需求整理
开发语言·python·sql·测试工具·element
334554321 小时前
element动态表头合并表格
开发语言·javascript·ecmascript
沈询-阿里1 小时前
java-智能识别车牌号_基于spring ai和开源国产大模型_qwen vl
java·开发语言
残月只会敲键盘1 小时前
面相小白的php反序列化漏洞原理剖析
开发语言·php
ac-er88881 小时前
PHP弱类型安全问题
开发语言·安全·php