uC/OSII学习笔记(一)任务的增删改查

使用天玛智控的控制器,基础工程文件已移植ucosii。
正常的任务创建流程为:
1.OSInit();
2.OSTaskCreate();
3.OSStart();
但是天玛对其有做修改,任务创建直接调用OSTaskCreate()函数即可,不用在创建任务前调用OSInit()和OSStart()。
OSTaskCreate()函数的四个参数(task,pdata,ptos和prio)分别为:task是任务代码的指针,pdata是任务开始执行时传递给任务的参数的指针,ptos是分配给任务的堆栈的栈顶指针,prio是分配给任务的优先级。
创建任务是否成功,可定义INT8U类型数据观察其返回值,
(因为OSTaskCreate()函数返回值是INT8U)
如:

INT8U err1 = OSTaskCreate(task1, NULL, &task1_STK[task1_STK_NUM - 1], task1_PRIO);
GUI_Printf(0,80,GUI_WHITE,GUI_BLACK|GUI_FONT_16,"%d",err1);

返回值为0即为创建成功;其他情况均为失败,可根据具体值在ucosii.h文件里查询失败原因。
一个任务通常是一个无限的循环,像一个函数一样,有返回类型,有形参变量,但是任务是绝对不会返回的,返回参数必须定义成void,如:

void YourTask (void *pdata)
{while(1){/*你的代码*//*如需要任务调度,还需用OSTimeDlyHMSM();或OSTimeDly();*/}
}

创建任务的正规做法是:
1、先创建你的任务task1、2、3····

#define task1_PRIO      50				//这个是任务优先级,任务优先级的编号,1-63,且不能重复,它代表了任务的唯一性
#define task1_STK_NUM   40  			//指任务的OS_STK的数量
OS_STK task1_STK[task1_STK_NUM];		//有task1_STK_NUM 个4个字节的空间,40*4
void task1(void* p_arg); 				//任务函数#define task2_PRIO      60
#define task2_STK_NUM   40 
OS_STK task2_STK[task2_STK_NUM];
void task2(void* p_arg);void task1 (void *p_arg)
{INT8U err1 = OSTaskStkChk(task1_PRIO,&StackBytes1);GUI_Printf(0,40,GUI_WHITE,GUI_BLACK|GUI_FONT_16,"Task1 FreeStack:%d",StackBytes1.OSFree);GUI_Printf(0,60,GUI_WHITE,GUI_BLACK|GUI_FONT_16,"Task1 UsedStack:%d",StackBytes1.OSUsed);GUI_Printf(0,80,GUI_WHITE,GUI_BLACK|GUI_FONT_16,"Task1 err:%d",err1);while(1){GUI_Printf(0,20,GUI_WHITE,GUI_BLACK|GUI_FONT_16,"任务1");
//		GUI_Printf(0,40,GUI_WHITE,GUI_BLACK|GUI_FONT_16,"Task1 FreeStack:%d",StackBytes1.OSFree);
//		GUI_Printf(0,60,GUI_WHITE,GUI_BLACK|GUI_FONT_16,"Task1 UsedStack:%d",StackBytes1.OSUsed);
//		GUI_Printf(0,80,GUI_WHITE,GUI_BLACK|GUI_FONT_16,"Task1 err:%d",err1);
//		OSTimeDlyHMSM(0, 0, 1, 0);OSTimeDly(50);}
}void task2(void *p_arg) 
{INT8U err2 = OSTaskStkChk(task2_PRIO,&StackBytes2);GUI_Printf(0,140,GUI_WHITE,GUI_BLACK|GUI_FONT_16,"Task2 UsedStack:%d",StackBytes2.OSUsed);GUI_Printf(0,120,GUI_WHITE,GUI_BLACK|GUI_FONT_16,"Task2 FreeStack:%d",StackBytes2.OSFree);GUI_Printf(0,160,GUI_WHITE,GUI_BLACK|GUI_FONT_16,"Task2 err:%d",err2);while(1){GUI_Printf(0,100,GUI_WHITE,GUI_BLACK|GUI_FONT_16,"任务2");
//		GUI_Printf(0,120,GUI_WHITE,GUI_BLACK|GUI_FONT_16,"Task2 FreeStack:%d",StackBytes2.OSFree);
//		GUI_Printf(0,140,GUI_WHITE,GUI_BLACK|GUI_FONT_16,"Task2 UsedStack:%d",StackBytes2.OSUsed);
//		GUI_Printf(0,160,GUI_WHITE,GUI_BLACK|GUI_FONT_16,"Task2 err:%d",err2);
//		OSTimeDlyHMSM(0, 0, 1, 0);OSTimeDly(50);// 其他任务...}
}

2、再创建一个开始任务start,在开始任务中创建你的task1、2、3···

#define Start_PRIO      49           //这个是任务优先级,任务优先级的编号,1-63,且不能重复,它代表了任务的唯一性
#define Start_STK_NUM   128         //指任务的OS_STK的数量
OS_STK Start_STK[Start_STK_NUM];    //有Task1_STK_NUM 个4个字节的空间,128*4
void start_task(void* p_arg);       //任务函数void start_task(void* p_arg) {//禁止任务被打断(主要是被中断打断)OS_ENTER_CRITICAL();    //进入临界状态,关闭了所有中断//可以在这里面进行其他任务开启OSTaskCreate(task1_task, NULL, &Task1_STK[Task1_STK_NUM - 1], Task1_PRIO);OSTaskCreate(task2_task, NULL, &Task2_STK[Task2_STK_NUM - 1], Task2_PRIO);OS_EXIT_CRITICAL();     //退出临界状态,开启中断
}

然而天玛控制器很奇怪,这样做不会报错,但是会是开启不了task1、2、3···,因此OSTaskCreate()函数直接创建任务即可,别创建一个开始任务,然后在开始任务里创建其他任务,会不起作用,原因未知。
3、创建任务时的
OS_ENTER_CRITICAL(); //进入临界状态,关闭所有中断

OS_EXIT_CRITICAL(); //退出临界状态,开启中断
应该是必要的,避免有更高优先级的任务打断了任务的创建。

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

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

相关文章

【日常记录-Mybatis】PageHelper导致语句截断

1. 简介 PageHelper是Mybatis-Plus中的一个插件,主要用于实现数据库的分页查询功能。其核心原理是将传入的页码和条数赋值给一个Page对象,并保存到本地线程ThreadLocal中,接下来,PageHelper会进入Mybatis的拦截器环节,…

Linux入门攻坚——40、Linux集群系统入门-lvs(1)

Cluster,集群,为了解决某个特定问题将多台计算机组合起来形成的单个系统。 这个单个集群系统可以扩展,系统扩展的方式:scale up,向上扩展,更换更好的主机;scale out,向外扩展&…

Canal 深入解析:从原理到实践的全面解读

Canal 深入解析:从原理到实践的全面解读 官网:https://github.com/alibaba/canal Canal 是阿里巴巴开源的一款分布式增量数据同步工具,广泛应用于数据同步、实时数据处理和数据库的增量备份等场景。它可以通过监听 MySQL 数据库的 binlog&am…

Java中的数据存储结构解析与应用

一、引言 在Java编程中,数据存储结构是程序设计的基础。合理选择和使用数据结构可以提高程序的性能和可维护性。本文将带您了解Java中的各种数据存储结构,并探讨其优缺点及适用场景。 二、基本数据类型 Java提供了8种基本数据类型,分别是b…

Home Assistant智能家居盒子用了一段时间发现没有存储空间了,怎么清理释放?

环境: Unbuntu 20.04 Home Assistant 2023.8.0 问题描述: Home Assistant智能家居盒子用了一段时间发现没有存储空间了,怎么清理释放? 解决方案: 1.查看HA日志文件,有比较大,直接删了 2.查…

【NoSQL数据库】MongoDB数据库的安装与卸载

目录 一、MongoDB原理 二、MongoDB的安装和卸载 三、注意事项 一、MongoDB原理 MongoDB 是一个基于分布式文件存储的数据库。由 C 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关…

前缀和:JAVA

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 求fib数列的第n项&#xff0c;前几项是1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5,每一项都等于前面两项的和 输入描述: 输入一个整数n&#xff0c;n<46 输出描述: 输出一个…

【Java】2、集合

目录 CollectionListSet *重点&#xff1a; 底层机制&#xff08;源码&#xff09;应用场景 好处&#xff1a; 数组&#xff08;长度不可改&#xff0c;同一类型&#xff0c;增删不便&#xff09;集合&#xff08;动态保存&#xff0c;多种类型&#xff0c;方便操作&#xff09…

【CSS in Depth 2 精译_068】11.2 颜色的定义(下):CSS 中的各种颜色表示法简介

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 11 章 颜色与对比】 ✔️ 11.1 通过对比进行交流 11.1.1 模式的建立11.1.2 还原设计稿 11.2 颜色的定义 11.2.1 色域与色彩空间11.2.2 CSS 颜色表示法 ✔️ 11.2.2.…

JavaScript 进销存计算错误——

一、js错误 二、正确操作 var 税率修正 parseFloat(data.tax_rate);

Neo4j:图数据库使用入门

文章目录 一、Neo4j安装1、windows安装&#xff08;1&#xff09;准备环境&#xff08;2&#xff09;下载&#xff08;3&#xff09;解压&#xff08;4&#xff09;运行&#xff08;5&#xff09;基本使用 2、docker安装 二、CQL语句1、CQL简介2、CREATE 命令&#xff0c;创建节…

云标准:云计算标准

云计算标准是确保云计算技术、服务和应用发展的重要规范&#xff0c;它们对于提高云计算系统的互操作性、可靠性和安全性至关重要。以下是对云计算标准的详细解释&#xff1a; 1.云计算标准的定义和分类 云计算标准是指云计算领域的技术规范和标准&#xff0c;包括云计算基础…

沃丰科技智能客服在电商独立站中有哪些核心功能?

在数字化飞速发展的今天&#xff0c;电商独立站作为企业与消费者沟通的重要桥梁&#xff0c;其客户服务的质量和效率直接关系到企业的竞争力和市场地位。沃丰科技智能客服以其全面的功能&#xff0c;成为了电商独立站接入的首选&#xff0c;为电商企业提供了全新的解决方案。 …

【初阶数据结构与算法】二叉树链式结构的定义与实现万字笔记(附源码)

文章目录 一、二叉树链式结构的定义二、二叉树链式结构功能的基本实现1.链式二叉树的手动创建2.链式二叉树的前中后序遍历前序遍历中序遍历后序遍历 3.链式二叉树节点的个数4.链式二叉树叶子节点的个数5.链式二叉树的高度/深度6.链式二叉树第k层节点的个数7.链式二叉树的查找8.…

基于Pyhton的人脸识别(Python 3.12+face_recognition库)

使用Python进行人脸编码和比较 简介 在这个教程中&#xff0c;我们将学习如何使用Python和face_recognition库来加载图像、提取人脸编码&#xff0c;并比较两个人脸是否相似。face_recognition库是一个强大的工具&#xff0c;它基于dlib的深度学习模型&#xff0c;可以轻松实…

php简单抽奖算法

注意: probability(概率)之和必须100 public function draw(){$goods_list [["name" > "空奖(0-80)","probability" > "80.00"],["name" > "5积分(80-90)","probability" > "10.00&…

nginx4层限速

Nginx的功能概述 Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;也可以作为邮件代理服务器等。它主要工作在7层&#xff08;应用层&#xff09;&#xff0c;但在某些场景下也可以实现部分4层&#xff08;传输层&#xff09;的功能。 关于4层限速 Nginx自身的限制&#x…

RabbitMq死信队列延迟交换机

架构图 配置 package com.example.demo.config;import org.springframework.amqp.core.*; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Configuration public class DeadLetterConfig {public String …

十、JavaScript的应用的习题

题目一 在网页中显示一个工作中的 “ 数字时钟 ”&#xff0c;如图所示 运行效果 代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>动态时钟</title><style>.all{width: 660px;height: 350px;margin: 60p…

leetcode 1853 转换日期格式(postgresql)

需求 表: Days ----------------- | Column Name | Type | ----------------- | day | date | ----------------- day 是这个表的主键。 给定一个Days表&#xff0c;请你编写SQL查询语句&#xff0c;将Days表中的每一个日期转化为"day_name, month_name day, year"…