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

【小黑嵌入式系统第十一课】μC/OS-III程序设计基础(一)——任务设计、任务管理(创建基本状态内部任务)、任务调度、系统函数

上一课:
【小黑嵌入式系统第十课】μC/OS-III概况——实时操作系统的特点、基本概念(内核&任务&中断)、与硬件的关系&实现

文章目录

    • 一、任务设计
      • 1.1 任务概述
      • 1.2 任务的类型
        • 1.2.1 单次执行类任务(运行至完成型)
        • 1.2.2.周期执行类任务(无限循环型)
        • 1.2.3 事件触发执行类任务(一种无限循环型)
      • 1.3 任务的划分
        • 1.3.1 任务划分的目标
        • 1.3.2 任务的优先级
    • 二、任务管理
      • 2.1 任务创建
      • 2.2 任务的基本状态
      • 2.3 系统内部任务
        • 2.3.1 空闲任务 `OS_IdleTask()` (`os_core.c`)
        • 2.3.2 时钟节拍任务 `OS_TickTask() `(os_tick.c)
        • 2.2.3 定时器任务 `OS_TmrTask()` (os_tmr.c)
    • 三、任务调度
      • 3.1 任务调度器
      • 3.2 调度点
    • 四、系统函数概述
      • 4.1 基本原则
        • 4.1.1 配对性原则
        • 4.1.2 中断服务程序调用函数的限制
        • 4.1.3 任务必须调用某个系统函数
      • 4.2 系统函数的分类


一、任务设计

1.1 任务概述

在基于实时操作系统的应用程序设计中,通常需要把要完成的工作分成多个任务(也称线程)来实现,每个任务只负责其中的一部分相对独立的工作,它可以认为在独享CPU。

在只有一个CPU时,任何时刻都只能有一个任务得到执行。操作系统通过任务调度将CPU执行时间在不同任务之间快速切换,以达到多任务“同时”运行的效果。

μC/OS-III允许应用程序有任意多个任务(仅受存储器容量限制),任务优先级数量可由用户配置,不同的任务允许拥有相同的优先级。

对于不同优先级的任务,采用抢占式(可剥夺式)任务调度方式;对于相同优先级的任务,采用时间片轮转调度方式。

在基于实时操作系统的应用程序设计中,任务设计是整个应用程序的基础,其它软件设计工作都是围绕任务设计来展开。

在这里插入图片描述


1.2 任务的类型

按照执行方式分类:

在这里插入图片描述

1.2.1 单次执行类任务(运行至完成型)

在这里插入图片描述


1.2.2.周期执行类任务(无限循环型)

在这里插入图片描述


1.2.3 事件触发执行类任务(一种无限循环型)

在这里插入图片描述


无限循环型的任务中,必须调用等待某个事件或延时的系统API函数(而非自己编写的不受操作系统管理的等待函数,如CyDelay() ),否则将会导致其它优先级更低的任务无法得到执行。(原因见“任务调度”部分)

当任务在等待一个事件或延时时,它不会占用CPU时间,此期间CPU可被系统分配给其它任务执行。


1.3 任务的划分

1.3.1 任务划分的目标

在对一个具体的嵌入式应用系统进行任务划分时,可以有不同的任务划分方案。为了选择最佳划分方案,就必须知道任务划分的目标。

  1. 首要目标是满足“实时性”指标:即使在最坏的情况下,系统中所有对实时性有要求的功能都能够正常实现;

  2. 任务数目合理:对于同一个应用系统,合理的合并一些任务,使任务数目适当少一些还是比较有利;但任务数目少并不一定能保证设计是多么优秀或多么有效率。

  3. 简化软件系统:一个任务要实现其功能,除了需要操作系统的调度功能支持外,还需要操作系统的其它服务功能支持,合理划分任务,可以减少对操作系统的服务要求,简化软件系统;

  4. 降低资源需求:合理划分任务,减少或简化任务之间的同步和通信需求,就可以减少相应数据结构的内存规模,从而降低对系统资源的需求。


1.3.2 任务的优先级

任务的优先级安排原则如下:

在这里插入图片描述

  1. 中断关联性:与中断服务程序(ISR)有关联的任务应该安排尽可能高的优先级,以便及时处理异步事件,提高系统的实时性。
    如果优先级安排得比较低,CPU有可能被优先级比较高的任务长期占用,以致于在第二次中断发生时连第一次中断还没有处理,产生信号丢失现象。

  2. 关键性:任务越关键安排的优先级越高,以保障其执行机会;

  3. 频繁性:对于周期性任务,执行越频繁,则周期越短,允许耽误的时间也越短,故应该安排的优先级也越高,以保障及时得到执行;

  4. 快捷性:在前面各项条件相近时,越快捷(耗时短)的任务安排的优先级越高,以使其它就绪任务的延时缩短;

  5. 传递性:信息传递的上游任务的优先级高于下游任务的优先级。如信号采集任务的优先级高于数据处理任务的优先级。


二、任务管理

2.1 任务创建

为了使μC/OS-III知道一个任务的存在,必须先创建该任务,通过调用系统API函数OSTaskCreate()来创建一个任务。

在这里插入图片描述

  • 任务可以在多任务调度开始前建立,也可以在其它任务的执行过程中建立。
  • 在开始多任务调度之前,用户必须至少创建一个用户任务。
  • 任务不能在中断服务程序(ISR)中建立。
  • μC/OS-III通过任务控制块(TCB)对任务进行管理,创建任务实际上就是给任务代码分配一个任务控制块。
  • 任务控制块是一个基于链表的数据结构体,任务控制块主要用于记录任务的堆栈栈顶指针、指向下一个任务控制块的指针、任务等待的延迟时间、任务的当前状态标志与任务的优先级别等一些与任务管理有关的属性。
  • 当任务的CPU使用权被剥夺时,μC/OS-III用任务控制块来保存该任务的状态,从而保证任务重新获得CPU使用权时能从断点处恢复继续执行。

任务的相关资源(图中未含任务控制块):

在这里插入图片描述

  • 任务栈是一个后进先出(LIFO)的线性表。
    每个任务均需有一个栈(任务栈),用于存储局部变量、传递的函数参数、返回地址及CPU寄存器的值。
  • 每个任务均需有一个优先级,取值范围0~OS_CFG_PRIO_MAX-1,用户不能使用最高优先级0和最低优先级 。
  • 任务的具体实现对应于任务函数,任务函数的参数p_arg值由任务创建函数OSTaskCreate()传递而来。
    任务函数由系统择机调用,而不能由用户主动调用。

2.2 任务的基本状态

任务的5种基本状态及转换关系:

在这里插入图片描述

简化地说,任务的状态有5种:休眠态就绪态运行态等待态中断服务态
任务被创建后,将由不受操作系统管理的休眠态转换为就绪态,由任务调度器决定何时使用CPU运行(运行态)。

任务状态的转换由执行了某些特定的OS API函数(或中断进入退出)引起。


2.3 系统内部任务

μC/OS-III共有5个系统内部任务:

  • 空闲任务 OS_IdleTask()
  • 时钟节拍任务 OS_TickTask()
  • 统计任务 OS_StatTask()
  • 定时器任务 OS_TmrTask()
  • 中断服务管理任务 OS_IntQTask()

2.3.1 空闲任务 OS_IdleTask()os_core.c

当所有其它任务都未就绪时,由于CPU仍需执行指令不能停止运行,此时将运行空闲任务。

它是系统创建的第一个任务,必须创建。空闲任务的优先级为最低优先级OS_CFG_PRIO_MAX-1,其它任务不能使用该最低优先级。


2.3.2 时钟节拍任务 OS_TickTask() (os_tick.c)

任务中的延时、等待某事件时的超时,这些都需要依赖一个周期性的时钟源来计时,称为时钟节拍或系统节拍。经历一个周期称为一个时钟节拍。

时钟节拍任务必须创建,其优先级由OS_CFG_TICK_TASK_PRIO(os_cfg_app.h)设定,通常设为只比最重要的用户任务的优先级略低一点。时钟节拍任务负责判定其它任务中的所有延时、超时的结束。

在这里插入图片描述

  • 需配备一个硬件定时器(时钟节拍定时器),工作频率由OS_CFG_TICK_RATE_HZ设定在10~1000(Hz)之间。
  • 时钟节拍任务收到时钟节拍定时器ISR周期发送的信号量时,才开始它的处理工作。否则处于等待态。

2.2.3 定时器任务 OS_TmrTask() (os_tmr.c)

用于向用户提供较粗的定时服务。该任务可选,由OS_CFG_TMR_EN(os_cfg.h)使能。

定时器任务是一个周期运行的任务,它和时钟节拍任务使用相同的硬件定时器。通过软件方式的分频,定时器任务可实现(比时钟节拍定时器)定时精度低的软件定时器(数量仅受存储器容量限制)。

定时器任务提供的(软件)定时器为递减计数器,计数值减为0时,会引发一个操作,该操作由操作系统调用一个用户定义的回调函数(运行在定时器任务环境中)来实现。

定时器任务的优先级一般设置为中等优先级,由宏OS_CFG_TMR_TASK_PRIO(os_cfg_app.h)来设定。

时钟节拍ISR和定时器任务的关系:

在这里插入图片描述
与时钟节拍任务共用时钟节拍硬件定时器。

定时器任务每收到 N个 时钟节拍定时器ISR周期发送的信号量时,才开始它的处理工作。相当于对时钟节拍定时器进行软件分频。

由定时器任务管理的所有定时器都拥有同样的时间分辨率,即1/OS_CFG_TMR_TASK_RATE_HZ秒,其常用推荐值为0.1秒。


三、任务调度

3.1 任务调度器

任务调度器(简称调度器)负责确定CPU下一个要执行的任务。

μC/OS-III支持两种任务调度算法:抢占式(可剥夺式)调度时间片轮转调度

  • 抢占式(可剥夺式)调度:CPU执行进入就绪态的优先级最高的任务(若当前正运行的任务优先级最高,仍执行它)。

当一个事件的发生使得一个更高优先级的任务就绪时,调度器会“立即”将CPU的控制权剥夺,转交给该更高优先级的任务使用,看起来像是高优先级任务“抢占”了CPU。

  • 时间片轮转调度:有多个就绪任务(以及当前正运行的任务)处于同一优先级时,这些任务轮流运行一段指定的时间(又称时间片),一个时间片包含若干个时钟节拍。

默认各任务有相等的时间片,也可用户指定各任务的时间片长度。

抢占式调度中,任务级的任务调度由OS_Sched()函数完成,而中断级的任务调度由ISR结束时的OSIntExt()函数完成。
时间片轮转任务调度由OS_SchedRoundRobin()函数完成。


3.2 调度点

μC/OS-III 任务调度不可能随时都在进行,当程序调用某些系统服务函数时,调度器才会自动启动,这些时间点称为调度点。

由于调度点很多,几乎可以认为“随时”都在进行任务调度。

在这里插入图片描述


四、系统函数概述

4.1 基本原则

4.1.1 配对性原则

对于μC/OS-III来说,大多数API是设计成成对出现的,而且一部分必须配对使用。部分API如延时,不需要配对使用。配对的函数见下表。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


4.1.2 中断服务程序调用函数的限制

中断服务程序不能调用可能会导致任务调度的函数,它们主要是一些等待事件的函数,这些函数见下表。

在这里插入图片描述

注意:未列入表中的函数OSTaskCreate()OSTaskDel()OSTaskResume()OSTaskSuspend()OSTimeDly()OSTimeDlyHMSM()OSTimeResume()都属于在中断服务程序中禁止调用的函数。

一些函数虽然没有明确地规定不能被中断服务程序调用,但因为中断服务程序的特性,一般不会使用。

  • 1.创建事件和删除事件的函数。
  • 2.与任务相关的函数OSTaskChangePrio()OSTaskTimeQuantaSet()OSTaskStkChk()。至于函数OSSchedLock()OSSchedUnlock(),在中断服务程序中使用没有任何意义。

4.1.3 任务必须调用某个系统函数

因为μC/OS-III是完全基于优先级的操作系统,所以在一定的条件下必须出让CPU占有权以便比自己优先级更低的任务能够运行,这是通过调用部分系统函数来实现的,这些函数见下表。一般的任务必须调用表中至少一个函数,只有一种情况例外,即单次执行的任务,因为任务删除后肯定出让CPU,所以可以不调用表中的函数。

在这里插入图片描述


4.2 系统函数的分类

在这里插入图片描述


系统管理函数是一些与μC/OS-III内核或功能相关的一些函数,详见下表:

在这里插入图片描述
μC/OS-III的初始化函数有2个:OSInit()OSStart(),它们不能在任何任务和中断服务程序中使用,仅在main()函数中按照一定的规范被调用,其中OSInit()函数初始化μC/OS-III内部变量,OSStart()函数启动多任务环境。


μC/OS-III具有简单的动态内存管理能力。μC/OS-III的动态内存管理函数见下表:

在这里插入图片描述


任务管理函数是操作与任务相关功能的函数,详见下表:

在这里插入图片描述
μC/OS-III把信号量等都称为事件,管理它们的就是事件管理函数。μC/OS-III具有的事件有普通信号量、互斥信号量、事件标志组和消息队列,这些都是μC/OS-III用于同步与通讯的工具。


一般的操作系统都提供时间管理的函数,最基本的就是延时函数,μC/OS-III也不例外,μC/OS-III所具有的时间管理函数见下表:

在这里插入图片描述

相关文章:

【小黑嵌入式系统第十一课】μC/OS-III程序设计基础(一)——任务设计、任务管理(创建基本状态内部任务)、任务调度、系统函数

上一课: 【小黑嵌入式系统第十课】μC/OS-III概况——实时操作系统的特点、基本概念(内核&任务&中断)、与硬件的关系&实现 文章目录 一、任务设计1.1 任务概述1.2 任务的类型1.2.1 单次执行类任务(运行至完成型&#…...

Redis一些常用的技术

文章目录 第1关:Redis 事务与锁机制第2关:流水线第3关:发布订阅第4关:超时命令第5关:使用Lua语言 第1关:Redis 事务与锁机制 编程要求 根据提示,在右侧编辑器Begin-End补充代码,根据…...

基于QPainter 绘图图片绕绘制设备中心旋转

项目地址:https://gitcode.com/m0_45463480/QPainter/tree/main 获取途径:进入CSDN->GitCode直接下载或者通过git拉取仓库内容。 QPainter是Qt框架中的一个类,用于在QWidget或QPixmap等设备上进行绘图操作。它提供了丰富的绘图功能,可以用于绘制线条、图形、文本等。Q…...

计算机网络(4):网络层

网络层提供的两种服务 虚电路服务(Virtual Circuit Service)和数据报服务(Datagram Service)是在网络层(第三层)提供的两种不同的通信服务。它们主要区别在于建立连接的方式和数据传输的方式。 虚电路服务…...

动态内存分配(malloc和free​、calloc和realloc​)

目录 一、为什么要有动态内存分配​ 二、C/C中程序内存区域划分​ 三、malloc和free​ 2.1、malloc 2.2、free​ 四、calloc和realloc​ 3.1、calloc​ 3.2、realloc​ 3.3realloc在调整内存空间的是存在两种情况: 3.4realloc有malloc的功能 五、常见的动…...

C语言---井字棋(三子棋)

Tic-Tac-Toe 1 游戏介绍和随机数1.1 游戏介绍1.2 随机数的生成1.3 棋盘大小和符号 2 设计游戏2.1 初始化棋盘2.2 打印棋盘2.3 玩家下棋2.4 电脑下棋2.5 判断输赢2.6 game()函数2.7 main()函数 3 完整三子棋代码3.1 Tic_Tac_Toe.h3.2 Tic_Tac_Toe.c3.3 Test.c 4 游戏代码的缺陷 …...

[Kubernetes]3. k8s集群Service详解

在上一节讲解了k8s 的pod,deployment,以及借助pod,deployment来部署项目,但会存在问题: 每次只能访问一个 pod,没有负载均衡自动转发到不同 pod访问还需要端口转发Pod重创后IP变了,名字也变了针对上面的问题,可以借助Service来解决,下面就来看看Service怎么使用 一.Service详…...

C++ 指定范围内递增初始化一个vector<int> | Python: list(range(31, 90))

通过lambda表达式 std::iota()实现&#xff1a; template <typename Tp> inline void print_vec(const std::vector<Tp>& vec) {fmt::print("[{}]\n", fmt::join(vec, ", ")); }// 相当于Python的lst list(range(31, 90))const std::ve…...

【Java之数据结构与算法】

选择排序 package Code01;public class Code01_SelectionSort {public static void selectionSort(int[] arr) {if(arrnull||arr.length<2) {return;}for(int i0;i<arr.length;i) {int minIndex i;for(int ji1;j<arr.length;j) {minIndex arr[minIndex] > arr[j…...

爬虫scrapy中间件的使用

爬虫scrapy中间件的使用 学习目标&#xff1a; 应用 scrapy中使用间件使用随机UA的方法应用 scrapy中使用代理ip的的方法应用 scrapy与selenium配合使用 1. scrapy中间件的分类和作用 1.1 scrapy中间件的分类 根据scrapy运行流程中所在位置不同分为&#xff1a; 下载中间件…...

普冉(PUYA)单片机开发笔记 [完结篇]:使用体会

失败的移植&#xff1a;FreeRTOS 当使用了 PY32F003 的各种接口和功能后&#xff0c;手痒痒想把 FreeRTOS 也搬到这个 MCU 上&#xff0c;参考 STM32 和 GD32 对 FreeRTOS 的移植步骤&#xff0c;把 FreeRTOS v202212.00 版本的源码搬到了 Keil 工程中&#xff0c;编译倒是通过…...

Elasticsearch:生成 AI 中的微调与 RAG

在自然语言处理 (NLP) 领域&#xff0c;出现了两种卓越的技术&#xff0c;每种技术都有其独特的功能&#xff1a;微调大型语言模型 (LLM) 和 RAG&#xff08;检索增强生成&#xff09;。 这些方法极大地影响了我们利用语言模型的方式&#xff0c;使它们更加通用和有效。 在本文…...

ip静态好还是dhcp好?

选择使用静态 IP 还是 DHCP&#xff08;动态主机配置协议&#xff09;取决于您的网络需求和环境。下面是它们的一些特点和适用场景&#xff1a; 静态 IP&#xff1a; 固定的 IP 地址&#xff1a;静态 IP 是手动配置在设备上的固定 IP 地址&#xff0c;不会随时间或网络变化而改…...

PolarDB-X、OceanBase、CockroachDB、TiDB二级索引写入性能测评

为什么要做这个测试 二级索引是关系型数据库相较于NoSQL数据库的一个关键差异。二级索引必须是强一致的&#xff0c;因此索引的写入需要与主键的写入放在一个事务当中&#xff0c;事务的性能是二级索引性能的基础。 目前市面上的分布式数据库中&#xff0c;从使用体验的角度看…...

Convolutional Neural Network(CNN)——卷积神经网络

1.NN的局限性 拓展性差 NN的计算量大性能差&#xff0c;不利于在不同规模的数据集上有效运行若输入维度发生变化&#xff0c;需要修改并重新训练网络容易过拟合 全连接导致参数量特别多&#xff0c;容易过拟合如果增加更多层&#xff0c;参数量会翻倍无法有效利用局部特征 输入…...

鸿蒙开发基本概念

1、开发准备 1.1、UI框架 HarmonyOS提供了一套UI开发框架&#xff0c;即方舟开发框架&#xff08;ArkUI框架&#xff09;。方舟开发框架可为开发者提供应用UI开发所必需的能力&#xff0c;比如多种组件、布局计算、动画能力、UI交互、绘制等。 方舟开发框架针对不同目的和技术…...

Open CV 图像处理基础:(二)从基本概念到实践操作

Open CV 图像处理基础&#xff1a;从基本概念到实践操作 一、引言 图像处理是计算机视觉领域的一个重要分支&#xff0c;它涉及对图像的各种操作和处理。了解图像的基本概念、读取和显示方法以及基本操作是图像处理的基础。本文将通过示例文章的形式&#xff0c;帮助初学者逐…...

【MAC】M2 安装docker 与 mysql

一、docker下载地址 下载地址 二、安装docker完成 罗列一下docker常用命令 # 查看docker版本 docker --version# 拉取镜像 docker pull 镜像名# 查看当前所有镜像 docker images# 查看运行中的容器 docker ps -a docker ps grep| 镜像名#镜像启动操作&#xff1a; sudo dock…...

轻量级web开发框架Flask本地部署及无公网ip远程访问界面

文章目录 前言1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 前言 本篇文章讲解如何在本地安装Flask&#xff0c;以及如何将其web界面发布到公网上并进行远程访问。 Flask是目前十分流行的web框架&#xff0c;采用P…...

用最通俗的语言讲解 TCP “三次握手,四次挥手”

目录 一. 前言 二. TCP 报文的头部结构 三. 三次握手 3.1. 三次握手过程 3.2. 为什么要三次握手 四. 四次挥手 4.1. 四次挥手过程 4.2. 为什么要四次挥手 五. 大白话说 5.1. 大白话说三次握手 5.2. 大白话说四次挥手 六. 总结 一. 前言 TCP 是一种面向连接的、可靠…...

使用RedisCacheWriter#clean在线异步地批量扫描匹配删除缓存数据-spring-data-redis

1.背景 生产环境&#xff0c;某云的某个业务Redis实例&#xff0c;触发内存使用率&#xff0c;连续 3 次 平均值 > 85 %告警。 运维同学告知&#xff0c;看看需要怎么优化或者升级配置&#xff1f;分享了其实例RDB的内存剖析链接。 通过内存剖析详情发现&#xff0c;存在某…...

机器视觉:AI赋能缺陷检测,铸就芯片产品的大算力与高能效

导言&#xff1a;近年来&#xff0c;国内芯片行业快速发展&#xff0c;市场对芯片需求的不断增大&#xff0c;芯片的缺陷检测压力也越来越大。芯片产品在生产制造过程中&#xff0c;需要经历数道工序&#xff0c;每个生产环节的材料、环境、工艺参数等都有可能造成产品缺陷。不…...

(9)Linux Git的介绍以及缓冲区

&#x1f4ad; 前言 本章我们先对缓冲区的概念进行一个详细的探究&#xff0c;之后会带着大家一步步去编写一个简陋的 "进度条" 小程序。最后我们来介绍一下 Git&#xff0c;着重讲解一下 Git 三板斧&#xff0c;一般只要掌握三板斧就基本够用了。 缓冲区&#xff…...

华为云之ECS云产品快速入门

华为云之ECS云产品快速入门 一、ECS云服务器介绍二、本次实践目标三、创建虚拟私有云VPC1.虚拟私有云VPC介绍2.进入虚拟私有云VPC管理页面3.创建虚拟私有云4.查看创建的VPC 四、创建弹性云服务器ECS——Linux1.进入ECS购买界面2.创建弹性云服务器(Linux)——基础配置步骤3.创建…...

tcp 的限制 (TCP_WRAPPERS)

#江南的江 #每日鸡汤&#xff1a;青春是打开了就合不上的书&#xff0c;人生是踏上了就回不了头的路&#xff0c;爱情是扔出了就收不回的赌注。 #初心和目标&#xff1a;拿到高级网络工程师 TCP_WRAPPERs Tcp_wrappers 对于七层模型中是位于第四层的安全工具&#xff0c;他…...

如何保证架构的质量

1. 如何保证架构的质量: ①. 稳定性、健壮性(1). 系统稳定性: ①. 定义:a. 当一个实际的系统处于一个平衡的状态时,如果受到外来作用的影响时,系统经过一个过渡过程仍然能够回到原来的平衡状态.b. 可以说这个系统是稳定的,否则系统不稳定c. 如一根绳子绑着小球,处于垂直状态,…...

JavaWeb笔记之前端开发JavaScript

一、引言 1.1 简介 JavaScript一种解释性脚本语言&#xff0c;是一种动态类型、弱类型、基于原型继承的语言&#xff0c;内置支持类型。 它的解释器被称为JavaScript引擎&#xff0c;作为浏览器的一部分&#xff0c;广泛用于客户端的脚本语言&#xff0c;用来给HTML网页增加…...

SCAU:18063 圈中的游戏

18063 圈中的游戏 时间限制:1000MS 代码长度限制:10KB 提交次数:0 通过次数:0 题型: 编程题 语言: G;GCC;VC Description 有n个人围成一圈&#xff0c;从第1个人开始报数1、2、3&#xff0c;每报到3的人退出圈子。编程使用链表找出最后留下的人。输入格式 输入一个数n&a…...

.NET Core中鉴权 Authentication Authorization

Authentication: 鉴定身份信息&#xff0c;例如用户有没有登录&#xff0c;用户基本信息 Authorization: 判定用户有没有权限 使用框架提供的Cookie鉴权方式 1.首先在服务容器注入鉴权服务和Cookie服务支持 services.AddAuthentication(options > {options.DefaultAuthe…...

PyTorch深度学习实战(26)——卷积自编码器(Convolutional Autoencoder)

PyTorch深度学习实战&#xff08;26&#xff09;——卷积自编码器 0. 前言1. 卷积自编码器2. 使用 t-SNE 对相似图像进行分组小结系列链接 0. 前言 我们已经学习了自编码器 (AutoEncoder) 的原理&#xff0c;并使用 PyTorch 搭建了全连接自编码器&#xff0c;但我们使用的数据…...

做搜狗pc网站优化/百度关键词优化工具

Word中分节符的奇妙用法(转)在对Word文档进行排版时&#xff0c;经常会要求对同一个文档中的不同部分采用不同的版面设置&#xff0c;例如要设置不同的页面方向、页边距、页眉和页脚&#xff0c;或重新分栏排版等。这时&#xff0c;如果通过“文件”菜单中的“页面设置”来改变…...

网站后台如何上传ico图标/seo优化标题

精彩LINUX软件推荐发布时间:2011-09-13 22:07:21来源:红联作者:ICEENclementine #音乐播放器osdlyrics #歌词显示sudo add-apt-repository ppa:osd-lyrics/ppasudo apt-get update && sudo aptitude install osdlyricsUMPlayer #视频播放器Xchatsudo apt-get install s…...

英国T4学生签证 可以做网站吗/个人优秀网页设计

树莓派zero系统里不知道为什么没有pip3 手动安装很麻烦 运行以下指令 可以快速完成安装 sudo apt-get install python3-pip...

网站制作乌鲁木齐/营销软件哪个好

如果您解决了有关Neumann随机生成器的任务&#xff0c;您已经知道并不是所有生成伪随机序列的方法都是好的。 特别是&#xff0c;Neumann的方法除了编程练习外&#xff0c;不适合其他任何方法。 这是另一种更普遍的方法&#xff08;已在大多数编程语言和库中实现&#xff09;并…...

郑州网站建设选微锐x/商业软文案例

(1)String类是不可变类&#xff0c;即创建一个String对象后&#xff0c;包含在此对象中的字符序列是不可改变的&#xff0c;直至对象被销毁 String a”123”; a”456”; System.out.println(a);//结果是456 解释&#xff1a;重新对a赋值&#xff0c;并不是改变原来堆中实例对…...

张家港网站建设培训学校/it培训

1、逐步回归法&#xff0c;班级&#xff1a;研1614&#xff0c;学生&#xff1a;秦培歌&#xff0c;认为社会学家犯罪和收入低&#xff0c;与失业和人口规模有关&#xff0c;20个城市的犯罪率(每10万人的犯罪人数)和年收入在5000美元以下的家庭的百分比1&#xff0c;失业率2和人…...