当前位置: 首页 > article >正文

05_任务的删除

 一、声明

         参考外部中断的文章(我还没有学过外部中断,第一次用)

https://leung-manwah.blog.csdn.net/article/details/112508465?fromshare=blogdetail&sharetype=blogdetail&sharerId=112508465&sharerefer=PC&sharesource=2301_81764359&sharefrom=from_link

        写这篇文章的时候红外遥控器还没到,所以不知道CubeMx的配置是否完全正确,也不知道keil5的代码是否编写正确 

二、CubeMx的配置

 (1)基础配置

        配置时钟 

        配置调试器 

(2)OLED的配置

(3)C8T6板子上LED的配置 

        可以只开一个GPIO_Output,其它的配置都系统默认配置好了 

(4)RGBLED 

(5) 红外遥控器配置

 

(6)蜂鸣器配置

三、keil5代码的编写

(1)头文件的包含

 

#include "driver_led.h"
#include "driver_lcd.h"
#include "driver_color_led.h"
#include "driver_passive_buzzer.h"
#include "driver_timer.h"
#include "driver_ir_receiver.h"

(2)创建光和色的任务

 

	static StackType_t g_pucStackOfLightTask[128];
	static StaticTask_t g_TCBofLightTask;
	static TaskHandle_t xLightTaskHandle;

	static StackType_t g_pucStackOfColorTask[128];
	static StaticTask_t g_TCBofColorTask;
	static TaskHandle_t xColorTaskHandle;
	


  /* 创建任务: 光 */
  xLightTaskHandle = xTaskCreateStatic(Led_Test, "LightTask", 128, NULL, osPriorityNormal, g_pucStackOfLightTask, &g_TCBofLightTask);

  /* 创建任务: 色 */
  xColorTaskHandle = xTaskCreateStatic(ColorLED_Test, "ColorTask", 128, NULL, osPriorityNormal, g_pucStackOfColorTask, &g_TCBofColorTask);  

(3)创建和删除声的任务

        不要删除默认任务,因为这个时候需要使用默认任务 

 

void StartDefaultTask(void *argument)
{
  /* USER CODE BEGIN StartDefaultTask */
  /* Infinite loop */

	uint8_t dev,data;
	int len;
	
	TaskHandle_t xSoundTaskHandle = NULL;
	BaseType_t ret;
	
	LCD_Init();
	LCD_Clear();
	IRReceiver_Init();
	
	LCD_PrintString(0,0,"Waiting control");
	
	while(1)
	{
		/*  读取红外遥控器  */
		if(0==IRReceiver_Read(&dev,&data))
		{
			if(data == 0xa8)/*  按下Play键  */
			{
				/*  创建播放音乐的任务  */
				extern void PlayMusic(void *params);
				if(xSoundTaskHandle == NULL)
				{
					LCD_ClearLine(0,0);//这个是执行清屏操作
					LCD_PrintString(0,0,"Creat Task");//打印
					ret = xTaskCreate(PlayMusic,"SoundTask",128,NULL,osPriorityNormal,&xSoundTaskHandle);
					//因为播放声音已经执行,所以xSoundTaskHandle这个就不等于NULL
				}
			}
			else if(data == 0xa2)/*  按下power键  */
			{
				/*  删除播放任务  */
				if(xSoundTaskHandle !=NULL )
				{
					LCD_ClearLine(0,0);
					LCD_PrintString(0,0,"Delete Task");
					vTaskDelete(xSoundTaskHandle);//删除任务,只是任务停止在那一步但还是在继续执行
					PassiveBuzzer_Control(0);//关掉声音
					xSoundTaskHandle = NULL;
					//关掉声音之后让xSoundTaskHandle这个就等于NULL
				}
			}
		}
		
	}
	
  /* USER CODE END StartDefaultTask */
}

 四、删除任务的知识点

五、外部中断

首先要找到使用外部中断的引脚,选择 GPIO_EXTIx

这里的 x 是指挂载在中断线几上,如 GPIO_EXTI0 就是挂载在中断线0上

开启下降沿触发中断:即在 按下按键时 电平由高变为低时触发,则在 GPIO mode 中选择 External Interrupt Mode with Falling edge trigger detection

开启上升沿触发中断:即在 按下按键后松开时 电平由低变为高时触发,则在 GPIO mode 中选择 External Interrupt Mode with Rising edge trigger detection

开启下降沿上升沿都触发中断:即在 按下时触发,松开时再次触发,则在 GPIO mode 中选择 External Interrupt Mode with Rising/Falling edge trigger detection

如果硬件上已外部上拉或下拉,则在GPIO Pull-up/Pull-down 中选择 No pull-up and no pull-down 既不上拉也不下拉。

如果硬件外部没有上拉,则在GPIO Pull-up/Pull-down 中选择 Pull-up 内部上拉电阻。

配置 NVIC
中断优先级分组规则 Priority Group 默认为4个比特位,一般情况下不改。
勾选刚刚配置的外部中断线0和13,并配置抢占优先级 Preemption Priority 和响应优先级 Sub Priority。

抢占优先级,数字越小,优先级越高
若抢占优先级相同,判断子优先级,同样,数字越小,优先级越高

 

 

HAL_GPIO_EXTI_Callback() 按照官方提示我们应该再次定义该函数,__weak 是一个弱化标识,带有这个的函数就是一个弱化函数,就是你可以在其他地方写一个名称和参数都一模一样的函数,编译器就会忽略这一个函数,而去执行你写的那个函数;而 UNUSED(GPIO_Pin) ,这就是一个防报错的定义,当传进来的GPIO端口号没有做任何处理的时候,编译器也不会报出警告

 


http://www.kler.cn/a/523303.html

相关文章:

  • LeetCode热题100中 17. 20. 53. 78. 215.
  • Kmesh v1.0 正式发布
  • 分享| RL-GPT 框架通过慢agent和快agent结合提高AI解决复杂任务的能力-Arxiv
  • 机器人基础深度学习基础
  • CAPL编程常见问题与解决方案深度解析
  • Qt文件操作
  • 【第十天】零基础入门刷题Python-算法篇-数据结构与算法的介绍-两种常见的字符串算法(持续更新)
  • JavaScript系列(48)-- 3D渲染引擎实现详解
  • week08_文本匹配任务
  • 嵌入式知识点总结 Linux驱动 (一)-指令-常用Linux指令 GCC指令 GDB调试指令 驱动开发指令
  • 个人通知~~~
  • 【愚公系列】《循序渐进Vue.js 3.x前端开发实践》030-自定义组件的插槽Mixin
  • Julius AI 人工智能数据分析工具介绍
  • Ubuntu20.04 磁盘空间扩展教程
  • 安卓入门四十三 转场动画
  • LSQL导入器的使用教程-保姆级
  • 中国现代篆刻
  • 全面解析文件上传下载删除漏洞:风险与应对
  • OpenBMC:编译
  • (2023 RESS ) Federated multi-source domain adversarial adaptation framework
  • C++中类成员的访问权限
  • 网络管理功能实现:从协议到工程实践
  • C++ Lambda 表达式的本质及原理分析
  • 大话特征工程:2.特征组合与描述
  • Games104——游戏引擎中物理系统的基础理论算法和高级应用
  • 03:Heap代码的分析