freeRTOS学习day5

news2024/11/27 18:39:08

 

 

 

 测试demo

创建两个任务 任务一 按键按下 释放二值信号量 任务二获取 并打印执行次数

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "FreeRTOS.h"
#include "task.h"
#include "key.h"
#include "time.h"
#include  "queue.h"
#include "semphr.h"
#define START_TASK_PRIO 1  //任务优先级
#define START_STK_SIZE  120  //任务堆栈
TaskHandle_t Start_Handler;
void start_task(void *pvParameters);

#define Task1_TASK_PRIO 2  //任务优先级
#define Task1_STK_SIZE  120  //任务堆栈
TaskHandle_t Task1_Handler;
void task1_task(void *pvParameters);

#define Task2_TASK_PRIO 3  //任务优先级
#define Task2_STK_SIZE  120  //任务堆栈
TaskHandle_t Task2_Handler;
void task2_task(void *pvParameters);


#define KEYSG_Q_NUM 1 //队列数为1
#define MESSAGE_Q_NUM 4



 
SemaphoreHandle_t erzhixinhaoliang;//二值信号量句柄

//*******************下面注释掉的代码是通过 位带 操作实现IO口控制**************************************

int main(void)
{ 
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4
	delay_init(168);		  //初始化延时函数
	KEY_Init();
  uart_init(115200);
	
	LED_Init();		        //初始化LED端口
	TIM3_Int_Init(5000-1,8400-1);
  while(1)
	{
		 xTaskCreate((TaskFunction_t) start_task,
							    (char *) "start_task",
							    (uint16_t) START_STK_SIZE,
							     (void *) NULL,
							     (UBaseType_t) START_TASK_PRIO,
							     (TaskHandle_t *) &Start_Handler ); /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
			
	   vTaskStartScheduler();//   开启任务调度器  注意一定要开启
									 
		 
	 }
}


//创建开始任务
void start_task(void *pvParameters)
{
	
	taskENTER_CRITICAL();//进入临界区
	
	
	
	erzhixinhaoliang=xSemaphoreCreateBinary();//创建二值信号量
	if(erzhixinhaoliang==NULL)
	{
		printf("Bin sem create failed\r\n");  
	}
	
	//创建task1
	xTaskCreate((TaskFunction_t) task1_task,
							    (char *) "task1_task",
							    (uint16_t) Task1_STK_SIZE,
							     (void *) NULL,
							     (UBaseType_t) Task1_TASK_PRIO,
							     (TaskHandle_t *) &Task1_Handler ); /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
	//创建task2 按键处理任务
	xTaskCreate((TaskFunction_t) task2_task,
							    (char *) "task2_task",
							    (uint16_t) Task2_STK_SIZE,
							     (void *) NULL,
							     (UBaseType_t) Task2_TASK_PRIO,
							     (TaskHandle_t *) &Task2_Handler ); /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
 
 vTaskDelete(Start_Handler); //删除开始任务
 taskEXIT_CRITICAL();//退出临界区									 

}

void task1_task(void *pvParameters)
{
	u8 key;
	
  
	while(1)
	{
		key=KEY_Scan(0);
		if(key==4)
		{
			if(erzhixinhaoliang!=NULL);
			{
				xSemaphoreGive(erzhixinhaoliang);
			}
		}
		LED0=!LED0;
		vTaskDelay(10);//10个时钟节拍 10ms
	}
	
}
void task2_task(void *pvParameters)
{
	u8 key;
	u8 count=0;
	BaseType_t err;
	
	
	while(1)
	{
		  count++;
		  if(erzhixinhaoliang!=NULL)
			{
				xSemaphoreTake(erzhixinhaoliang,portMAX_DELAY);//获取信号量  阻塞时间为死等
				printf("count =%d\r\n",count);
			}
			else
			{
				vTaskDelay(10);
				
			}
		
		
		
	}
	
}




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1146381.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

iis前端代理后台tomcat

1)tomcat服务器配置运行好,服务地址位于 localhost:8080/wechat 2)iis 绑定了域名 api.abc.com 希望访问 api.abc.com/wechat时,实际由tomcat的服务处理; 3)iis上需要添加组件 requestRouter_amd64.msi rewrite_amd64_zh-CN.msi 4)iis进行相关配置…

皮卡搜索-阿里夸克百度网盘资源超级搜索引擎

https://www.pikaso.top INDEX_SEARCH_CTA 少儿 小学 初中 高中 大学 四六级 考研 考公 教资 英语 电影 动漫 美剧 软件 电子书 编程 剪辑 设计 聚合云盘搜索接口地址:https://www.pikaso.top/search/?q%s% 阿里云盘搜索接口地址:https://www.pikaso.…

博彦科技:以金融为起点,凭借创新技术平台真打实干

【科技明说 | 重磅专题】 成立于1995年的博彦科技,已有28年左右的发展历程。 我没有想到,博彦科技也对AIGC领域情有独钟。博彦科技自研的数字人产品SaaS平台,可以接入包括百度文心一言、阿里通义千问等AI大模型产品。可见&#…

8.多线程之阻塞队列

阻塞队列和生产者消费者模型 文章目录 阻塞队列和生产者消费者模型1. 阻塞队列2. Java标准库中的阻塞队列 - BlockingQueue3. 阻塞队列的实现4. 生产者消费者模型 1. 阻塞队列 阻塞队列是什么呢?阻塞队列是一种特殊的队列,满足队列的基本要求 - 先进先出…

CMake学习教程(一)

前言 看到陈皓大神写作的《跟我一起写 Makefile》,我也想出一个CMake学习的专栏。 距离我接触CMake已经过了3年,那是我还是研一,不懂得底层编译的事情,因为导师的项目才突然转到这个方向(项目是做工业软件的&#xf…

问题 R: 超级楼梯(递推,基础DP)查表

得到递推表达式: f(1)0,因为开始就站在第1级台阶上; f(2)1,只能从第1级台阶上1级; f(3)2,只能从第1级台阶上2级,或只能从第2级台阶上1级; f(n)f(n-2)f(n-1),n>3 …

Linux学习第25天:Linux 阻塞和非阻塞 IO 实验(二): 挂起

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 为方便和上一节的衔接,在正式开始学习前,先把本节的思维导图引入: 二、阻塞IO实验 1.硬件原理图分析 2.实验程序 #define I…

Linux两条服务器实现相互免密登录

1.准备两台虚拟机,一台充当服务器端(server),一台充当客户端(client) 服务器端(server):192.168.75.139 客户端(client):192.168.75…

腾讯云和阿里云双11优惠大战,服务器价格相差1块钱?

2023双十一优惠活动来了,同配置轻量应用服务器2核2G3M带宽,阿里云87元一年,腾讯云88元一年,阿里云不限制月流量,腾讯云限制200GB月流量,阿里云系统盘是50GB高效云盘,腾讯云是40GB SSD云硬盘&…

redis6.0源码分析:跳表skiplist

文章目录 前言什么是跳表跳表(redis实现)的空间复杂度相关定义 跳表(redis实现)相关操作创建跳表插入节点查找节点删除节点 前言 太长不看版 跳跃表是有序集合zset的底层实现之一, 除此之外它在 Redis 中没有其他应用。…

LED主流光源-高均匀条形光源

(1)产品特点: ① 高均匀条形照明光源,可制作长度最长为 2000mm 的光源; ② 可用 M3 螺纹孔安装,也可以在三个挤型槽内插入 M3 螺母安装。 (2)应用领域: ① 电子元件识别与…

掌握Python:开启未来的大门

Python,一门以其简洁性和多才多艺而著称的编程语言,正成为未来的关键技能之一。随着数字时代的到来,Python的发展前景愈发广泛,而且其易学性吸引着越来越多的学习者。 1.Python的发展前景: Python在数据科学、人工智能…

任正非说:我们要改善和媒体的关系,而不是要利用媒体,不要自以为聪明。

嗨,你好!这是华研荟【任正非说】系列的第22篇文章,让我们继续聆听任正非先生的真知灼见,学习华为的管理思想和管理理念。 一、我曾经在与一个世界著名公司,也是我司全方位的竞争对手的合作时讲过,我是拉宾的…

【数学基础】【进制转换】十进制转其他进制、其他进制转十进制

十进制转其他进制 JavaScript实现 const convert (num,base2)>{return !num?0:convert(~~(num/base),base)*10(num%base); } convert(8,2) // 1000 convert(8,8) // 10 convert(8,16) // 8其他进制转十进制 JavaScript实现 const reconvert (num,base2,curr1)>{retu…

代码随想录算法训练营第4天| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交 、142.环形链表II

JAVA语言编写 24. 两两交换链表中的节点 谷歌、亚马逊、字节、奥多比、百度 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。…

浙大网新:重视AI驱动,就是重视未来发展

【科技明说 | 重磅专题】 对于浙大网新在AI方面的发展情况,我是看到一个消息之后才开始有了关注,之前总感觉浙大网新在AI方面战略雷声大雨点小,然而当我看到这个消息后才发现,浙大网新其实也非常重视AI方面的发展。 …

【微信小程序】WXML的模板语法与WXSS模板样式

🖥️🖥️🖥️ 博主主页: 👉🏻 👉🏻 👉🏻 糖 -O- 🚩🚩🚩微信小程序专栏:微信小程序 &…

聚量推客升级啦,加入了外卖cps、话费充值等

“聚量推客”升级啦,加入了生活cps模块,包含美团外卖cps、滴滴打车出行cps、电影票推广、话费充值等cps推广场景,聚量推客不止是app地推拉新和网推拉新平台,更是一个 综合性推广平台,未来会接入越来越多的推广场景&…

OpenCV官方教程中文版 —— Hough 直线变换

OpenCV官方教程中文版 —— Hough 直线变换 前言一、原理二、OpenCV 中的霍夫变换三、Probabilistic Hough Transform 前言 目标 • 理解霍夫变换的概念 • 学习如何在一张图片中检测直线 • 学习函数:cv2.HoughLines(),cv2.HoughLinesP() 一、原理…

基础课13——数据异常处理

数据异常是指数据不符合预期或不符合常识的情况。数据异常可能会导致数据分析结果不准确,甚至是错误,因此在进行数据分析之前需要对数据进行清洗和验证。 常见的数据异常包括缺失值、重复值、异常值等。 缺失值是指数据中存在未知值或未定义的值&#…