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);
  }
 
}
相关推荐
郑州光合科技余经理12 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo12312 天前
matlab画图工具
开发语言·matlab
dustcell.12 天前
haproxy七层代理
java·开发语言·前端
norlan_jame12 天前
C-PHY与D-PHY差异
c语言·开发语言
多恩Stone12 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
QQ40220549612 天前
Python+django+vue3预制菜半成品配菜平台
开发语言·python·django
遥遥江上月12 天前
Node.js + Stagehand + Python 部署
开发语言·python·node.js
m0_5312371712 天前
C语言-数组练习进阶
c语言·开发语言·算法
Railshiqian12 天前
给android源码下的模拟器添加两个后排屏的修改
android·开发语言·javascript
雪人不是菜鸡12 天前
简单工厂模式
开发语言·算法·c#