RTX51是一个用于8051系列处理器多任务实时操作系统,由Keil自带。有二个版本, Full版和Tiny版。 RTX51 Tiny版是RTX51的一个子集,占用资源极低,采用时间片轮转任务切换和使用信号进行任务切换 ,和full版相比,不支持抢先式的任务切换 ,不包括消息历程 没有存储器池分配程序。下面结合一些实例来分析RTX51Tiny版。编译器Keil3,所有程序在51单片机上测试通过,并采用proteus仿真。那么51单片机上跑操作系统和不跑操作系统有什么区别呢?请看下问

    一.多任务

1单任务程序
嵌入式系统或者是标准 C 程序设计,程序都是从 main 函数开始。在嵌入式系统程序中 main 函数
通常是一个死循环,也可以被看作是一个连续运行的单一任务,下面就是一个例子。
 
void main (void)
{

 Initial();//初始化

while (1)               /* repeat forever */  
  {
  do_something ();      /* execute the do_something 'task' */
  }
}
 
在这个例子中,函数 do_something 可以被看作是一个单任务,因为这里只有一个需要执行的任务,
因此不需要多任务能力或者一个多任务操作系统。

2 多任务程序

如果你采用 RTX51 Tiny ,那么在你的应用中就可以为每一个任务创建一个独立的任务函数,以下
就是一个例子。

 #include <rtx51tny.h>
 
int counter0;  
int counter1;  
 
void job0 (void) _task_ 0 {
  os_create_task (1);  /* mark task 1 as ready */
  while (1) {    /* loop forever */  
    counter0++;    /* update the counter */
  }
}
 
void job1 (void) _task_ 1 {
  while (1) { /* loop forever */  
    counter1++;  /* update the counter */
  }
}

二 时间片轮转

1  关于时间片的问题
  RTX51 Tiny使用的是无优先级时间片轮询法,每个任务使用相同大小的时间片,但是时间片是怎样确定的呢?
  RTX51 Tiny的配置参数(Conf_tny.a51文件中)中有INT_CLOCK和TIMESHARING两个参数。
这两个参数决定了每个任务使用时间片的大小:INT_CLOCK是时钟中断使用的周期数,也就是基本时间片;
TIMESHARING是每个任务一次使用的时间片数目。两者决定了一个任务一次使用的最大时间片。
如假设一个系统中INT_CLOCK设置为10000,即10ms,那么TIMESHARING=1时,一个任务使用的最大时间片是10ms;
TIMESHARING=2时,任务使用最大的时间片是20ms;TIMESHARING=5时,任务使用最大的时间片是50ms;
当TIMESHARING设置为0时,系统就不会进行自动任务切换了,这时需要用os_switch_task函数进行任务切换。
这部分功能是RTX51 Tiny 2.0中新增加的。
2  关于os_wait延时的问题
  os_wait 是RTX51 Tiny中的基本函数之一。它的功能是将当前任务挂起来,等待一个启动信号(K_SIG)或
超时信号(K_TMO)或周期信号(K_IVL)或者是它们之间的组合。虽然os_wait很简单,但是因为涉及到多任务的
操作方式,很容易产生误解。
2.1  关于K_TMO的延时时间
  在RTX51 Tiny中,如果一个任务中使用了os_wait(K_TMO,1,0),那么它的延时时间是多少呢?
很多人都会认为是一个时间片,其实这不完全对。正确的理解是,延时时间与正在运行的任务相关。
因为RTX51 Tiny是一个非占先或多优先级的实时操作系统,是一个平级的时间片轮询实时操作系统,
所有的任务平等运行。K_TMO是等待产生超时信号,当信号产生后,只是将相应的任务置上就绪标志位,任务并不是立即就能够运行。任务需要等到其它任务轮流执行,到自己的时间片后才会执行。

  这就是说,最后的效果是延时时间加上正在运行的任务执行时间,而这个时间是与任务数和任务运行情况相关的。如果其它任务执行的时间短,那么延时可能只是一个时间片;如果其它任务执行的时间长,那么就需要多个时间片了。用os_wait做时钟是不准确的。

  关于延时时间还有一个很容易理解错的地方,那就是os_wait中无论使用K_TMO还是K_IVL参数,延时的时间都只与INT_CLOCK有关,而与TIMESHARING无关。或者说,os_wait函数一次只使用一个基本时间片,而不是任务的时间片。

2.2  关于K_TMO和K_IVL参数的区别

  在os_wait中有三个参数:K_TMO、K_IVL和K_SIG。其中,K_TMO与K_IVL是最容易让人混淆的,特别是搞不清楚K_IVL到底是什么含义,好像使用起来与K_TMO效果差不多。一般的书上和Keil自带的RTX51 Tiny的帮助中,也没有清楚解释K_IVL的含义。

  K_IVL与K_TMO有很大区别,但是在一定环境下最终产生的效果却差不多。

  K_TMO是指等待一个超时信号,只有时间到了,才会产生一个信号。它产生的信号是不会累计的。产生信号后,任务进入就绪状态。K_IVL是指周期信号,每隔一个指定的周期,就会产生一次信号,产生的信号是可以累计的。
这里累计的意思是,如果在指定的时间内没有对信号进行响应,信号的次数会迭加,以后进行信号处理时就不会漏掉信号。比如说,在系统中有几个任务,其中一个任务使用K_TMO方式延时,另外一个任务使用K_IVL延时,延时的时间相同。
如果系统的任务很轻,两个任务都可以及时响应,那么这两种延时的效果是一样的。如果系统的负担比较重,任务响应比较慢,不能及时响应所有的信号,那么使用K_TMO方式的任务就有可能丢失一部分没有及时响应的信号,而使用K_IVL方式的任务就不会丢失信号。只是信号的响应方式会变成这样:在一段时间内不响应信号,然后一次把所有累计的信号都处理完。

  下面的一个例子可以将上面两个关于os_wait的问题解释清楚。

  在x1++和x2++这两个地方加上断点,进行仿真,观察执行到断点的时间。然后,去掉任务job4中的语句“//os_wait(K_TMO,1,0);”这一行前面的注释符号,再次仿真。比较一下运行的结果,就可以清楚地知道它们的细微差别了。

  软件环境:Keil uVision 7.08
  仿真CPU:AT89C52 12MHz
  RTX51 Tiny:使用Keil自带的RTX51 Tiny操作系统,v2.02。
  RTX51 Tiny的参数:INT_CLOCK=10000,TIMESHARING=5

  其它参数使用默认设置。(需要自己建立一个工程文件,再将下面的文件添加到工程文件中。)    */
#include <rtx51tny.h>
#include <reg52.h>
#include <stdio.h>
#include "com.h"
uint x0,x1,x2;
void job0(void) _task_ 0 {
  x0=x1=x2=0;
  com_init(9600);
  sendstr("The different between K_VIL with K_TMO\x0a\x0d");//结尾的两个转义字符起换行作用
  os_create_task(1);
  os_create_task(2);
  os_create_task(3);
  os_create_task(4);
  while(1){
   os_wait(K_TMO,1,0);
   x0++;
  }
}
 void job1(void) _task_ 1{
  while(1) {
  os_wait2(K_IVL,1);//os_wait(K_IVL,1,0);使用RTX51tiny中使用os_wait2效率更高
  x1++;
  }
}
 void job2(void) _task_ 2{
   while(1) {
   os_wait2(K_IVL,1); //os_wait(K_IVL,1,0);
   x2++;
    }
}
void job3(void) _task_ 3{
  while(1) { //取消注释后,系统负担变轻,可以及时响应
 //注释下面一句使系统的负担变得很重,不能及时响应job0和job1的延时信号
  os_wait2(K_TMO,1);
 }
}
void job4(void) _task_ 4{
 uchar StrTmp[18]="";
 while(1)
 {
  os_wait2(K_IVL,50);
  sprintf(StrTmp,"%d %d %d%c%c",x0,x1,x2,10,13);
  sendstr(StrTmp);
 
 }
}
/*
 编译之后进入dubug状态,点击watch and call stack window,添加要监视的三个变量x0 x1 x2 ,然后点run
 或者先点视图,选择serial window#1,在点run
   当job3中os_wait(K_TMO,1,0)的注释不取消时,job0每执行一次,job1就连续执行5次,x1是x0的5倍。
   因为job1中的os_wait(K_IVL,1,0)产生了5次信号,并累计下来;而job0中的os_wait(K_TMO,1,0)虽然
   也产生了5次信号,但是没有累计,只有最后一次是真正有效的。
  当job3中os_wait(K_TMO,1,0)的注释取消时,job0和job1的执行次数是一样的,x0=x1。
*/



     三、进程通信

  RTX51的进程间通信机制很简单,仅能发送一个信号,os_send_signal为任务向任务发送信号, isr_send _signal为中断服务程序向任务发送信号。

采用os_wait接受。

下面为一个简单实例:

      /*
1)rtx51默认的时钟滴答为10000个时钟周期,若晶振12M,则为10ms。最大时间片5个滴答,可修改conf_tny.a51中的宏
INT_CLOCK    EQU    10000    ; default is 10000 cycles   1个时钟滴答的时钟周期
TIMESHARING    EQU     5    ; default is 5 Hardware-Timer ticks.     时间片占的滴答数
*/
/*********************************
*** RTX-51的移植
***  移植到AT89S52
***  此程序是分秒程序
***  有六个数码管来显示毫秒,秒,分钟                                                          
*********************************/
#include <reg51.h>
#include <rtx51tny.h>
#define uchar unsigned char
#define uint unsigned int

uchar min;
uchar sec;
uchar micsec;
uchar minh;
uchar minl;
uchar sech;
uchar secl;
uchar micsech;
uchar micsecl;

 #define P_out P0    //输出引脚
 #define P_sel P2     //位选信号引脚
void led_7seg_disp(uchar num0,uchar num1,uchar num2,uchar num3,uchar num4,uchar num5)
 {
        const unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x00};
        P_sel = 0x20;
        P_out = table[num0];
        os_wait(K_TMO,1,0);
        P_sel = 0x10;
        P_out = table[num1];
        os_wait(K_TMO,1,0);
        P_sel = 0x08;
        P_out = table[num2];
        os_wait(K_TMO,1,0);
        P_sel = 0x04;
        P_out = table[num3];
        os_wait(K_TMO,1,0);
        P_sel = 0x02;
        P_out = table[num4];
        os_wait(K_TMO,1,0);
        P_sel = 0x01;
        P_out = table[num5];
        os_wait(K_TMO,1,0);
 }
void job0 (void) _task_ 0

{
   
   micsec = 0x00;
   sec = 0x00;
   min =0x00;
   micsech = micsec /10;
   micsecl = micsec %10;
   sech = sec /10;
   secl = sec %10;
   minh = min /10;
   minl = min %10;
   os_create_task(1);//创建进程1
   os_create_task(2);//创建进程1
   os_create_task(3);//创建进程1
   os_delete_task(0);//删除任务0
   
}

void job1 (void) _task_ 1

{
   while(1)
     {         
          micsec ++;
        micsech = micsec /10;
           micsecl = micsec %10;
        if(micsec==50)
        {    
            micsec = 0;    
            os_send_signal(2);    //发送Signal信号,激活进程2
        }

        os_wait(K_TMO,2,0);       //时钟滴答为1,大约等待10m。
         // os_wait(K_IVL,1,0); //和K_TMO功能不同,会累加,
     }
}

void job2 (void) _task_ 2

{
    while(1)
    {
        os_wait(K_SIG,0,0);
        sec ++;
        if(sec == 60)
        {
            sec = 0;
            min ++;
        }
        sech = sec /10;
           secl = sec %10;    
        minh = min /10;
        minl = min %10;    
    }
}
void job3 (void) _task_ 3

{
    while(1)
    {
    led_7seg_disp(micsecl,micsech,secl,
                 sech,minl,minh);

    }
}          

     四.扩展信号量

RTX51Tiny版不提供信号量机制,同时不支持任务优先级,如果多个任务同时使用使用同一个资源的话,会出现竞争情况,例如:

#include <rtx51tny.h>
#include <stdio.h>
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define fosc 11059200

void com_init(uint baud)
{
  SCON = 0x50;    //串口工作方式为1,串行允许接受               
  TMOD&=0x0f;
  TMOD|=0x20;     //定时器1工作在方式2    
  if(baud<=9600) TH1=256-fosc/32/12/baud;
  else
   {PCON = 0x80;   //SMOD = 1; 波特率加倍
   TH1=256-fosc/32/12/(baud/2);
    }
    TR1  = 1;            //允许定时器1工作
 // ES   = 1; //开串口中断,必须注释掉该句puts才能输出
  EA   = 1;             //开总中断
  TI=1;//要加上此句,才能用puts输出
}
//注意,在使用系统的库函数puts或printf前首先要关串口中断,其次TI=1
void task0(void) _task_ 0{
com_init(9600); /* 初始化串行口 */
init_semaphore(0, 1, 1); /* 初始化信号量,最大值为1 */
puts("Using semaphore in RTX51tiny"); //puts语句自动在结尾加上换行
os_create_task(1);
os_create_task(2);
os_delete_task(0);
}
//以下为两个任务,通过信号量防止同时使用串口发生冲突
void task1(void) _task_ 1{
while (1) {
puts("task1 is using uart!");
}
}
void task2(void) _task_ 2{
while(1) {

printf("TASK2 IS USING UART!\n");//puts("TASK2 IS USING UART!");

}
}

串口输出结果:
task1 is using uart!
task1 is using uart!
TASK2 IS USING UART!
TASK2 IS USING UART!
TASK2 IStask1 is using uart!
task1 is using uart!
task1 i USING UART!
TASK2 IS USING UART!
TASK2 IS USING Us using uart!
task1 is using uart!
task1 is using ART!
TASK2 IS USING UART!
TASK2 IS USING UART!
TAuart!
task1 is using uart!
task1 is using uart!
tSK2 IS USING UART!
TASK2 IS USING UART!
TASK2 IS Uask1 is using uart!
task1 is using uart!
task1 is SING UART!
TASK2 IS USING UART!
TASK2 IS USING UARusing uart!
task1 is using uart!
task1 is using uaT!
TASK2 IS USING UART!
由于两个任务同时使用串口,发生竞争,导致输出有问题,下面采用信号量改进如下:

semophere.c

/************** RTX51 Tiny中信号量操作的实现 ************************************************
  信号量实际上是一种约定机制,在多任务操作系统内核中普遍使用。信号量可分为二值信号量和计数式信号量。
每一个信号量都有一个计数值,它表示某种资源的可用数目。二值信号量的值只能是0和1;计数式信号量的取
值范围则由所使用的嵌入式操作系统内核决定。内核根据信号量的值,跟踪那些等待信号量的任务。
     对信号量的操作一般有初始化、等待和释放三种,下面简要介绍一下这三种操作过程。
① 初始化信号量:信号量初始化时要给信号量赋初值,并清空等待信号量的任务表。
② 等待信号量:需要获取信号量的任务执行等待操作。如果该信号量值大于0,则信号量值减1,
任务得以继续运行;如果信号量值为0,等待信号量的任务就被列入等待该信号量的任务表。
③ 释放信号量:已经获取信号量的任务在使用完某种资源后释放其信号量。如果没有任务等待
该信号量,信号量值仅仅是简单的加1;如果有任务正在等待该信号量,那么就会有一个任务进
入就绪态,信号量的值也就不加1。至于哪个任务进入就绪态,要看内核是如何调度的。
***************************************************************************************/
#include <rtx51tny.h>
#define uchar unsigned char
#define uint unsigned int
#define MAX_SEMAPHORES 3 /* 使用信号量的最大数目 */
/* 定义信号量 */
struct sem_set{
uchar max_count; /* 该信号量的最大计数值 */
uchar count; /* 该信号量的当前计数值 */
uint pending_tasks; /* 等待该信号量任务表 */
} sem_tab[MAX_SEMAPHORES];
/* 初始化信号量 */
#pragma disable
void init_semaphore(uchar sem_id, uchar max_count, uchar count){
sem_tab[sem_id].max_count = max_count;
sem_tab[sem_id].count = count;
sem_tab[sem_id].pending_tasks = 0;
}
/* 等待信号量 */
#pragma disable
char pend_sem(uchar sem_id){
if (sem_tab[sem_id].count > 0) {
sem_tab[sem_id].count--; /* 获取信号量 */
return (-1);
}
sem_tab[sem_id].pending_tasks
|=(1 << os_running_task_id()); /* 标记为等待状态 */
return (0);
}
void pend_semaphore(sem_id){
if (pend_sem(sem_id) == 0) {
while (os_wait(K_TMO, 255, 0) != RDY_EVENT);
/*等待,直到该任务就绪*/
}
}
/* 释放信号量 */
#pragma disable
char post_sem(uchar sem_id){
uchar i;
uint temp = 1;
if ((sem_tab[sem_id].count > 0)
||(sem_tab[sem_id].pending_tasks == 0)) {
sem_tab[sem_id].count++; /* 释放信号量 */
return (-1);
}
for (i=0; i<16; i++) {
if ((sem_tab[sem_id].pending_tasks & (temp)) != 0){
/* 查找任务表 */
sem_tab[sem_id].pending_tasks &= ~(1 << i);
return (i); /* 返回等待信号量的任务号 */
}
temp <<= 1;
}
}
void post_semaphore(uchar sem_id){
char task_id;
task_id = post_sem(sem_id);
if (task_id != -1) {
os_set_ready(task_id); /* 任务task_id进入就绪状态 */
os_switch_task();
}
}
改进后的主程序main.c:


#include <rtx51tny.h>
#include <stdio.h>
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define fosc 11059200
extern void pend_semaphore(uchar sem_id);
extern void post_semaphore(uchar sem_id);
extern void init_semaphore(uchar sem_id, uchar max_count, uchar count);
void com_init(uint baud)
{
  SCON = 0x50;    //串口工作方式为1,串行允许接受               
  TMOD&=0x0f;
  TMOD|=0x20;     //定时器1工作在方式2    
  if(baud<=9600) TH1=256-fosc/32/12/baud;
  else
   {PCON = 0x80;   //SMOD = 1; 波特率加倍
   TH1=256-fosc/32/12/(baud/2);
    }
    TR1  = 1;            //允许定时器1工作
 // ES   = 1; //开串口中断,必须注释掉该句puts才能输出
  EA   = 1;             //开总中断
  TI=1;//要加上此句,才能用puts输出
}
//注意,在使用系统的库函数puts或printf前首先要关串口中断,其次TI=1
void task0(void) _task_ 0{
com_init(9600); /* 初始化串行口 */
init_semaphore(0, 1, 1); /* 初始化信号量,最大值为1 */
puts("Using semaphore in RTX51tiny"); //puts语句自动在结尾加上换行
os_create_task(1);
os_create_task(2);
os_delete_task(0);
}
//以下为两个任务,通过信号量防止同时使用串口发生冲突
void task1(void) _task_ 1{
while (1) {
pend_semaphore(0);     //等待信号量
puts("task1 is using uart!");
post_semaphore(0);     //释放信号量
}
}
void task2(void) _task_ 2{
while(1) {
pend_semaphore(0); //等待信号量
printf("TASK2 IS USING UART!\n");//puts("TASK2 IS USING UART!");
post_semaphore(0); //释放信号量
}
}


进入调试状态,打开serail window #1 ,点run 按钮,也可采用proteus仿真
该程序中的task1和task2轮流使用串口输出数据。程序执行后循环输出:
    Task1 is using UART!
    Task2 is using UART!





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

相关文章

  1. 双眼皮 辞职

    ...

    2024/5/5 10:24:47
  2. 割完双眼皮多久能跑步

    ...

    2024/5/5 9:56:13
  3. 冬天徐胜利双眼皮费用

    ...

    2024/4/19 19:00:42
  4. Restful Api (实现公司和员工管理系统)大佬杨旭

    文章目录1.MVC映射为API2.看 Program 这个类3.看Starup这个类4.更改配置文件&#xff0c;默认自托管5.建立Model。这里是建立 Entities 类6.建立DBcontext类7.建立 Repository 仓储接口8.配置 EF core 实现迁移9.Rest风格10.用 RestfullAPI 实现 Controller 里面的相关方法11.内…...

    2024/4/20 4:26:08
  5. jquery.vue.js_一个Vue.js简介,面向只了解jQuery的人

    jquery.vue.jsby Matt Rothenberg马特罗森伯格(Matt Rothenberg) 一个Vue.js简介&#xff0c;面向只了解jQuery的人 (A Vue.js introduction for people who know just enough jQuery to get by) I’ve had a love-hate relationship with JavaScript for years.我与JavaScrip…...

    2024/4/28 7:27:23
  6. 计算机专用术语总结--转

    本文帮助一些新手在刚刚接触计算机技术方面而出现的对一些老鸟们说的一些#&#xffe5;%……—叫人看了也不能理解的术语的一个小小的总结。这个总结是需要大家来完善的&#xff0c;我希望这个帖子不要灌水。 1、CPU 3DNow!&#xff08;3D no waiting&#xff09; ALU&#xff…...

    2024/5/5 14:05:47
  7. 计算机英文术语完全介绍

    计算机英文术语完全介绍 1、CPU 3DNow!&#xff08;3D no waiting&#xff09; ALU&#xff08;Arithmetic Logic Unit&#xff0c;算术逻辑单元&#xff09; AGU&#xff08;Address Generation Units&#xff0c;地址产成单元&#xff09; BGA&#xff08;Ball Grid Array&a…...

    2024/4/21 15:14:30
  8. NIST SP 800-90Ar1 Recommendation for Random Number Generation ... 分析与摘选之一

    摘要:本文档对随机数发生器文档NIST SP 800-90系列(包括NIST SP 800-90Ar1、SP 800-90B、SP 800-90C)进行简要分析记录。关键词:密码模块,随机数发生器,密码算法,工作模式,CTR,杂凑算法,HMAC,熵,密码边界。NIST SP 800-90系列包括NIST SP 800-90Ar1 Recommendation…...

    2024/5/5 4:48:29
  9. 关于ROS运行小乌龟中的一些问题说明---话题

    关于ROS运行小乌龟中的一些问题说明 -----话题 注&#xff1a;PPT来源于古月居 建立工作空间 建立一个catkin_ws文件夹 catkin_ws 下建立一个src文件夹 在src 目录下运行 catkin_init_workspace 出现Cmake文件 切换到catkin_ws 目录下 运行编译命令 $ cd ~/catkin_ws/ $ cat…...

    2024/5/5 6:31:47
  10. javascript程序_如何选择用于翻译JavaScript应用程序的库

    javascript程序by Anastasia由Anastasia 如何选择用于翻译JavaScript应用程序的库 (How to choose a library for translating your JavaScript apps) In the previous articles, we have seen how to perform localization on the back-end. Specifically, we’ve covered Ra…...

    2024/5/5 6:17:17
  11. 10个JavaScript代码片段

    10个JavaScript代码片段 毫无疑问&#xff0c;JavaScript是Web开发中最流行的编程语言之一。无论你使用的是React&#xff0c;Vue还是Angular&#xff0c;它们都属于JavaScript。JS围绕着广阔而至关重要的生态系统发展&#xff0c;提供了许多的框架和库&#xff0c;可帮助你快速…...

    2024/4/24 6:50:44
  12. Laravel 6.0

    Laravel 学习交流 QQ 群&#xff1a;375462817 本记录文档前言 Laravel 文档写的很好&#xff0c;只是新手看起来会有点吃力&#xff0c;需要结合经验和网上的文章&#xff0c;多读、细读才能更好的理解。多读、细读官方文档&#xff01;&#xff01;&#xff01;本文类似于一个…...

    2024/5/1 3:45:29
  13. 为什么一段时间后 慢慢变双眼皮手术高低眉

    ...

    2024/4/21 15:14:25
  14. 双眼皮是长的吗

    ...

    2024/4/21 15:14:24
  15. 双眼皮和单眼皮

    ...

    2024/4/21 15:14:22
  16. 双眼皮贴缩鼻翼

    ...

    2024/4/21 15:14:21
  17. 晚上喝碳酸饮料会变双眼皮么

    ...

    2024/4/25 7:47:14
  18. 双眼皮除了割

    ...

    2024/4/28 16:17:15
  19. 全切双眼皮后离眉毛太近了

    ...

    2024/4/25 21:43:49
  20. 长脸女人割重庆 双眼皮 谢主任

    ...

    2024/4/22 3:35:59

最新文章

  1. 2024年4月个人工作生活总结

    本文为 2024年4月工作生活总结。 研发编码 excel创建直方图 因工作需要&#xff0c;在excel学习使用了直方图。下面是文字版。 加载工具库&#xff1a; 直方图可在“数据”->"数据分析"中找到&#xff0c;如无&#xff0c;则要加载之。文件->选项->加载…...

    2024/5/5 16:15:35
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 子传父vue/react

    vue子传父&#xff1a;很多都是结合defineEmit来实现的&#xff0c;这里通过给子组件传递函数&#xff0c;子组件调用传递下来的函数实现传值。 父亲&#xff1a; <template><div>father<Demo :clickChild"clickFather" msg"32434">We…...

    2024/4/29 19:16:05
  4. 与机器对话:ChatGPT 和 AI 语言模型的奇妙故事

    原文&#xff1a;Talking to Machines: The Fascinating Story of ChatGPT and AI Language Models 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 从 ELIZA 到 ChatGPT&#xff1a;会话式人工智能的简史 会话式人工智能是人工智能&#xff08;AI&#xff09;的一个分…...

    2024/5/5 8:50:13
  5. Linux中的shell脚本之流程控制循环遍历

    3 条件判断 4 流程控制语句 1&#xff09;if 语句 案例&#xff0c;用户输入用户名和密码&#xff0c;判断用户名是否是admin,密码是否是123,如果正确&#xff0c;则显示登录成功 首先我创建了shell文件&#xff0c;touch getpawer 其中getpawer 是我自己命的名 #!/bin/bas…...

    2024/5/5 8:44:49
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/4 23:54:56
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/4 23:54:56
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/4 23:55:17
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/4 23:55:16
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/4 18:20:48
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/4 23:55:06
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/4 23:55:01
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57