IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> FreeRTOS 操作系统入门---深入理解点灯的那些流程 -> 正文阅读

[系统运维]FreeRTOS 操作系统入门---深入理解点灯的那些流程

本博客主要学习了野火的FreeRTOS的教材,根据创建动态任务时点灯的一些知识做了流程图的理解,能更加深刻地理解点灯背后的处理机制。

包括:优先级抢占、空闲任务、任务调度、动态任务创建过程

这里比较潦草,直接在教材的PDF编辑了

1代表的是任务1:LED1_Task点灯翻转

2代表的是任务2:LED2_Task点灯翻转

且任务2的优先级的是比1的要高

但这两个在翻转过程设置的延时阻塞时间是不一样的,一个是500ms,一个是1000ms

下面主要分析程序的这个翻转过程,包括通过串口打印运行测试的现象理解:

还是比较潦草:直接上截图了

现象:串口打印如下:

?颜色的灯的现象:红黄绿 循环

主函数代码实现,这里主要是源自野火开发平台:

  * 实验平台:野火  STM32 F407 开发板 
  * 论坛    :http://www.firebbs.cn
  * 淘宝    :https://fire-stm32.taobao.com
  *
  ******************************************************************************
  */
/*
*************************************************************************
*                             包含的头文件
*************************************************************************
*/ 
/* FreeRTOS头文件 */
#include "FreeRTOSConfig.h"
#include "FreeRTOS.h"
#include "task.h"
/* 开发板硬件bsp头文件 */
#include "bsp_led.h"
#include "bsp_debug_usart.h"


/*创建任务句柄*/
static TaskHandle_t AppTaskCreate_Handle = NULL;
static TaskHandle_t LED1_Task_Handle = NULL;
static TaskHandle_t LED2_Task_Handle = NULL;
/*函数声明*/
static void BSP_Init(void);
static void LED1_Task(void * parameter);
static void LED2_Task(void * parameter);
static void AppTaskCreate(void);

/**
  * @brief  主函数
  * @param  无
  * @retval 无
  */
int main(void)
{
	 BaseType_t xReturn  = pdPASS;
	/*开发板硬件初始化*/
   BSP_Init();
	 
	/*创建AppTaskCreate 任务*/
	 xReturn = xTaskCreate((TaskFunction_t)AppTaskCreate,
																		 (const char *)"AppTaskCreate",
																		 (uint16_t)512,
																		 (void *)NULL,
																		 (UBaseType_t) 1,
																		 (TaskHandle_t *)&AppTaskCreate_Handle);
		/*判断任务创建成功与否,创建成功再启动调度器*/																 
	if( pdPASS == xReturn)
		vTaskStartScheduler();
	else
		return -1;
	 
	 for(; ;);   /*正常程序不会执行到这里*/
}



static void BSP_Init(void)
{
	/*优先级分组*/
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
	
	/*LED 初始化*/
	LED_GPIO_Config();
	
	/*串口初始化*/
  Debug_USART_Config();
	 
}

/*AppTaskCreate 任务函数*/
static void AppTaskCreate(void)
{
	 BaseType_t xReturn  = pdPASS;
	 /*进入临界区*/
   taskENTER_CRITICAL();  
	
	 /*创建LED1_Task任务*/
   xReturn = xTaskCreate((TaskFunction_t)LED1_Task,
												 (const char *)"LED1_Task",
												 (uint16_t)128,
												 (void *)NULL,
												 (UBaseType_t) 3,
												 (TaskHandle_t *)&LED1_Task_Handle);
	 /*判断LED_Task是否创建成功*/
		if (pdPASS == xReturn)
		   printf("LED1_Task任务创建成功!\n");
		
		/*创建LED2_Task任务*/
		xReturn = xTaskCreate((TaskFunction_t)LED2_Task,
												 (const char *)"LED2_Task",
												 (uint16_t)128,
												 (void *)NULL,
												 (UBaseType_t) 4,
												 (TaskHandle_t *)&LED2_Task_Handle);
	 /*判断LED_Task是否创建成功*/
		if (pdPASS == xReturn)
		   printf("LED2_Task任务创建成功!\n");

		/*删除AppTaskCreate_Handle任务*/
		vTaskDelete(AppTaskCreate_Handle);
		
		/*退出临界区*/
		taskEXIT_CRITICAL();
} 

/*LED_Task 任务函数*/
static void LED1_Task(void * parameter)
{
  for(;;)
	{
	  LED1_ON; //红色
	  vTaskDelay(500);//延时500tick
		printf("LED1_Task running,LED1_ON\r\n");
		
		LED1_OFF;
		vTaskDelay(500);
		printf("LED1_Task running,LED1_OFF\r\n");
	}
 
}

/*LED_Task 任务函数*/
static void LED2_Task(void * parameter)
{
  for(;;)
	{
	  LED2_ON; //绿色
	  vTaskDelay(1000);
		printf("LED2_Task running,LED2_ON\r\n");
		
		LED2_OFF;
		vTaskDelay(1000);
		printf("LED2_Task running,LED2_OFF\r\n");
	}
 
}

?

?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-26 12:31:17  更:2021-08-26 12:32:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 12:46:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码