【UCOS-III】自我学习笔记→第20讲→时间管理

news2024/11/18 14:36:06

文章目录

    • 前言
      • 实验步骤
        • 1.复制任务创建和删除工程文件并删除task3任务,修改任务1和任务2的优先级为2
        • 2.修改任务1和任务2的内容
        • 3.查看示波器现象
      • 测试代码
      • 工程文件
      • 总结

前言

无,仅作记录,不具有参考价值,所用开发板为STM32F411RET6nucleo开发板。

实验步骤

1.复制任务创建和删除工程文件并删除task3任务,修改任务1和任务2的优先级为2

在这里插入图片描述

2.修改任务1和任务2的内容

在这里插入图片描述

3.查看示波器现象

在这里插入图片描述

测试代码

us-os3_demo.c:

/**
 ****************************************************************************************************
 * @file        uc-os3_demo.c
 * @author      ÕýµãÔ­×ÓÍŶÓ(ALIENTEK)
 * @version     V1.0
 * @date        2022-04-13
 * @brief       uC/OS-III ÒÆֲʵÑé
 * @license     Copyright (c) 2020-2032, ¹ãÖÝÊÐÐÇÒíµç×ӿƼ¼ÓÐÏÞ¹«Ë¾
 ****************************************************************************************************
 * @attention
 *
 * ʵÑéƽ̨:ÕýµãÔ­×Ó Ì½Ë÷Õß F407¿ª·¢°å
 * ÔÚÏßÊÓƵ:www.yuanzige.com
 * ¼¼ÊõÂÛ̳:www.openedv.com
 * ¹«Ë¾ÍøÖ·:www.alientek.com
 * ¹ºÂòµØÖ·:openedv.taobao.com
 *
 ****************************************************************************************************
 */

#include "uc-os3_demo.h"
#include "./MALLOC/malloc.h"
#include "./SYSTEM/delay/delay.h"
/*uC/OS-III*********************************************************************************************/
#include "os.h"
#include "cpu.h"
#include "main.h"
#include "key.h"
#include "stdio.h"
#include "interrupt.h"

extern struct keys key[4];
/******************************************************************************************************/
/*uC/OS-IIIÅäÖÃ*/

/* START_TASK ÈÎÎñ ÅäÖÃ
 * °üÀ¨: ÈÎÎñÓÅÏȼ¶ ÈÎÎñÕ»´óС ÈÎÎñ¿ØÖÆ¿é ÈÎÎñÕ» ÈÎÎñº¯Êý
 */
#define START_TASK_PRIO				5
#define START_TASK_STACK_SIZE 256
CPU_STK start_task_stack[START_TASK_STACK_SIZE];
OS_TCB start_task_tcb;

void start_task(void * p_arg);

/* TASK1 ÈÎÎñ ÅäÖÃ
 * °üÀ¨: ÈÎÎñÓÅÏȼ¶ ÈÎÎñÕ»´óС ÈÎÎñ¿ØÖÆ¿é ÈÎÎñÕ» ÈÎÎñº¯Êý
 */
#define TASK1_PRIO				2
#define TASK1_STACK_SIZE 256
CPU_STK * task1_stack;
OS_TCB task1_tcb;

void task1(void * p_arg);

/* TASK2 ÈÎÎñ ÅäÖÃ
 * °üÀ¨: ÈÎÎñÓÅÏȼ¶ ÈÎÎñÕ»´óС ÈÎÎñ¿ØÖÆ¿é ÈÎÎñÕ» ÈÎÎñº¯Êý
 */
#define TASK2_PRIO 2 //1.¶¨ÒåÓÅÏȼ¶ºê¶¨Òå
#define TASK2_STACK_SIZE 256 //2.¶¨Òå¶ÑÕ»´óС
CPU_STK task2_stack[TASK2_STACK_SIZE]; //3.¿ª±Ù¶ÑÕ»¿Õ¼ä
OS_TCB task2_tcb; //4.´´½¨ÈÎÎñÖ¸Õë

void task2(void * p_arg);

/**
 * @brief       uC/OS-IIIÀý³ÌÈë¿Úº¯Êý
 * @param       ÎÞ
 * @retval      ÎÞ
 */
void uc_os3_demo(void)
{
    OS_ERR err;
    
    /* ³õʼ»¯uC/OS-III */
    OSInit(&err);
    OSTaskCreate (  (OS_TCB        *) &start_task_tcb,
                    (CPU_CHAR      *) "start_task",
                    (OS_TASK_PTR    ) start_task,
                    (void          *) 0,
                    (OS_PRIO        ) START_TASK_PRIO,
                    (CPU_STK       *) start_task_stack,
                    (CPU_STK_SIZE   ) START_TASK_STACK_SIZE / 10,
                    (CPU_STK_SIZE   ) START_TASK_STACK_SIZE,
                    (OS_MSG_QTY     ) 0,
                    (OS_TICK        ) 0,
                    (void          *) 0,
                    (OS_OPT         ) (OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
                    (OS_ERR        *) &err);
    /* ¿ªÊ¼ÈÎÎñµ÷¶È */
    OSStart(&err);
}

void start_task(void * p_arg)
{
	OS_ERR err;
	CPU_INT32U cnts = 0;
	CPU_Init();
	CPU_SR_ALLOC();
	
	cnts = HAL_RCC_GetSysClockFreq() / OS_CFG_TICK_RATE_HZ;
	OS_CPU_SysTickInit(cnts);
	
	OSSchedRoundRobinCfg (OS_TRUE, 10, &err);/* ʹÄÜʱ¼äƬµ÷¶È£¬²¢ÉèÖÃʱ¼äƬĬÈϳ¤¶ÈΪ10¸öʱ¼äƬ */
	
	CPU_CRITICAL_ENTER(); /* ½øÈëÁÙ½çÇø */
	task1_stack = mymalloc(SRAMIN, TASK1_STACK_SIZE * sizeof(CPU_STK));
	/* ´´½¨task1 */
	OSTaskCreate ((OS_TCB        *) &task1_tcb,
								(CPU_CHAR      *) "task1",
								(OS_TASK_PTR    ) task1,
								(void          *) 0,
								(OS_PRIO        ) TASK1_PRIO,
								(CPU_STK       *) task1_stack,
								(CPU_STK_SIZE   ) TASK1_STACK_SIZE / 10,
								(CPU_STK_SIZE   ) TASK1_STACK_SIZE,
								(OS_MSG_QTY     ) 0,
								(OS_TICK        ) 0, /* ĬÈÏʱ¼äƬ³¤¶ÈΪ10 */
								(void          *) 0,
								(OS_OPT         ) (OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
								(OS_ERR        *) &err);
		
		OSTaskCreate ((OS_TCB        *)&task2_tcb,
									(CPU_CHAR      *)"task2",
									(OS_TASK_PTR    )task2,
									(void          *)0,
									(OS_PRIO        )TASK2_PRIO,
									(CPU_STK       *)task2_stack,
									(CPU_STK_SIZE   )TASK2_STACK_SIZE / 10,
									(CPU_STK_SIZE   )TASK2_STACK_SIZE,
									(OS_MSG_QTY     )0,
									(OS_TICK        )5,
									(void          *)0,
									(OS_OPT         )OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR,
                  (OS_ERR        *)err);

		CPU_CRITICAL_EXIT(); /* Í˳öÁÙ½çÇø */
		printf("ÕýÔÚ´´½¨ÖÐ\r\n");
		OSTaskDel((OS_TCB*)0, &err); //±ðÍüÁËɾ³ýÈÎÎñStart
}

/* չʾÑÓʱº¯ÊýOSTimeDly */
void task1(void * p_arg)
{
	OS_ERR err;
	while(1)
	{
		HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_4);
		delay_ms(200);
		OSTimeDly(500, OS_OPT_TIME_PERIODIC, &err);
	}
}

/* չʾÑÓʱº¯ÊýOSTimeDlyHMSM */
void task2(void * p_arg)
{
	OS_ERR err;
	unsigned char PrintType = 0;
	while(1)
	{
		HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_1);
		delay_ms(200);
		OSTimeDlyHMSM (0, 0, 0, 500, OS_OPT_TIME_HMSM_NON_STRICT | OS_OPT_TIME_DLY, &err);
	}
}


工程文件

时间管理实验

总结

学习视频:【正点原子】手把手教你学UCOS-III实时操作系统第20讲时间管理

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

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

相关文章

计算机视觉:分割一切AI大模型segment-anything

1 segment-anything介绍 Segment Anything Model (SAM)来源于Facebook公司Meta AI实验室。据Mata实验室介绍,SAM 已经学会了关于物体的一般概念,并且它可以为任何图像或视频中的任何物体生成 mask,甚至包括在训练过程中没有遇到过的物体和图…

刷题日记《链表01》

题目概述(力扣) 给定循环单调非递减列表中的一个点,写一个函数向这个列表中插入一个新元素 insertVal ,使这个列表仍然是循环升序的。 给定的可以是这个列表中任意一个顶点的指针,并不一定是这个列表中最小元素的指针。…

SpringCloud-13_Alibaba OSS

对象存储 OSS 就是所谓的“图床”吗?(致敬yupi /捂脸) 一图说明: 阿里云对象存储oos 阿里云对象存储 OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,提供最高可达 …

汉王人脸考勤管理系统 万能密码登录 漏洞复现

fofa:title“汉王人脸考勤管理系统” 漏洞复现 登录页面: 使用万能密码登录 用户名:or’ or 11– 密码:or

Minio的使用

今天学习的时候用到了阿里云的OSS,由于在公司项目上用到了Minio作为云端文件服务器,因此学习了以下Minio,打算替换掉阿里云的OSS 1.Minio的安装 在这里提供了Docker-compose的模式作为Minio的下载(其中9002作为API请求接口端,90…

Matlab【旅行商问题】—— 基于模拟退火算法的无人机药品配送路线最优化

文章目录 问题描述模拟退火算法Metropolis准则算法流程图: Demo1:只考虑累计距离,通过模拟退火算法求解最短路径matlab代码:最优解之一:适应度进行曲线: Demo1:考虑每个站点的病人数量&#xff…

Visual modflow Flex地下水数值模拟及参数优化、抽水实验设计与处理、复杂的饱和/非饱和地下水流分析

专题一 地下水数值软件的操作流程、建模步骤和所需资料处理及相关注意事项 [1] Visual MODFLOW Flex特征 [2] Visual MODFLOW Flex软件界面及模块 [3] 地下水数值模拟的建模步骤及数据需求 专题二 模型建模操作方法 技巧、真实案例演练、特殊问题处理 [1] 直接模型建模的操…

深入浅出设计模式 - 装饰者模式

博主介绍: ✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌ Java知识图谱点击链接:体系化学习Java(Java面试专题) 💕💕 感兴趣的同学可以收…

Python桌面应用开发之PyQt

文章目录 引言:桌面应用开发三大框架介绍一、PyQT介绍二、安装三、使用教程(1)基础窗口(2)分区布局窗口(类似于html中div的使用)(3)栅格布局窗口(类似于html中的table)(4)表单布局窗口(类似于html中的form)(5)事件函数与事件过滤器(6)信号和槽四、实战示例(1)状态栏…

跨链协议悄然升级

当前加密产业公链百家争鸣,群雄割据,每条公链都拥有自身的忠实用户。 然而,公链与公链之间仿佛一座座孤岛,无法进行无缝的交流和联系,仅能通过跨链桥经由在两条不同的链上运用不同处理机制来协助转移用户的资产。但&a…

【深度学习 | CNN】“深入解析卷积神经网络与反卷积:从原理到应用的全面指南” (从一维、二维、三维讲解)

🤵‍♂️ 个人主页: @AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍 🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩…

MySQL数据库的MHA高可用集群部署及故障切换(图文详解!绝对详细!!)

目录 一、MHA概述 1、MHA简介 2、MHA 的组成 (1)MHA Node(数据节点) (2)MHA Manager(管理节点) 3、MHA 的特点 二、 搭建MySQLMHA 1、实验思路 2、修改mysql节点的主机名 3&…

JS 事件委托

JavaScript事件委托(Event delegation)又叫事件代理,是一种在父元素上监听事件,然后通过事件冒泡机制来处理子元素的事件的技术。通过事件委托,可以避免为每个子元素都绑定事件处理程序,提高性能并简化代码…

SC7504运算放大器(OPA)可pin对pin兼容OPA4350

SC750x 系列轨至轨 CMOS 运算放大器针对低电压单电源运行进行了优化。轨至轨输入和输出、低噪声(5nV/√Hz) 和高速运行(38MHz, 22V/μs) 使得运算放大器非常适合驱动模数 (A/D) 转换器。可pin对pin兼容OPA4350。而且也适用于手机功率放大器 (PA) 控制环路和视频处理&#xff08…

【嵌入式Qt开发入门】初识Qt——Linux下安装Qt

Qt 是什么? Qt 是一个跨平台的 C开发库。主要用来开发图形用户界面(Graphical User Interface,简 称 GUI)程序。 Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部&#xff1b…

Win11总是出现BitLocker恢复,想要彻底关闭它该如何操作?

win11解除bitlocker加密方法一: 1、首先按下键盘“WinR”打开运行(如图所示)。 2、打开运行后,在其中输入“control”并点击“确定”打开控制面板(如图所示)。 3、打开后,进入“bitlocker驱动器加密”(如图所示)。 4、随后展开被加密的磁盘&…

Pycharm报错Non-zero exit code (2)

问题现象: 通常我们拿到一个Python项目后,项目中有requirement.txt文件,里面有列出需要安装的三方库,使用pycharm直接安装这些库时,报错:Non-zero exit code (2) 解决方案: 第一种临时解决方案&…

模糊图片秒转高清图,分享几个免费方法!

相信大家都曾经遇到过拍摄的老旧照片放大后变得模糊不清的情况。然而,由于这些照片是我们自己拍摄的,我们也无法在网上找到并下载原始高清图像。那么,有没有什么方法可以修复这种模糊不清的照片呢?当然,很多人可能会说…

计算机硬件

硬盘 固态硬盘(SSD)拥有比机械硬盘(HDD)更快的读写速度。目前大多数机器使用的是SATA总线标准,实际最高传输约为600MB/s。而支持PCIe总线,NVMe协议的SSD,实际传输速度将超过1000MB/s。 当前采…

KDG5V-8-33C330N200-EX-H-M-U-H1-20比例方向阀控制器

与外置电子放大器一起使用,在智能控制系统和液压系统之间提供接口。这是一种非常实用的方法,用于控制执行器的方向和速度,同时消除了机器负载的快速加速和减速所引起的冲击。除了提高机器的性能和寿命外,通过将方向和流量控制能力…