ITRON入门之任务(TASK)的理解

概述

在具有实时操作系统的系统中,程序以任务的概念运行。
了解实时操作系统和ITRON规格时,了解“任务”是一切的开始。
ITRON以此任务为中心运行系统。

程序的运行有点像工人在工作

#include <stdio.h>

int main(void)
{
    
    
	long calc = 0;

	calc = 100 + 200;

	printf("结果:%d", calc);

	return 0;
}

在执行这样的程序的步骤执行的同时,你可能已经运行了一行一行的程序。这个程序一行一行地移动,这就是工人正在实施程序的处理内容。

在C语言中,程序从main函数开始运行。也就是说,程序启动的时候准备了一个工人,对那个工人说:“你来实施main函数这个工作吧!“这意味着程序正在动作。

不配备实时操作系统的程序的挑战

在不配备实时操作系统的系统中,根本就没有任务的概念。尽管如此,实施main函数的劳动力也准备好了,所以硬要说的话也可以说是一个人的任务(单一任务)工作。让我们考虑一下单任务系统中的问题是在什么情况下发生的。软件系统以程序的形式创建和运行各种任务。从现在开始,在制作2个任务的基础上,我们将明确单一任务的难度。

LED闪烁的任务

程序是以顺序处理为基础的,并按照描述的顺序从上到下执行。
例如,让我们看看当前的下一个程序。LED闪烁是因为任务正在执行此任务。

每秒钟闪烁LED的任务

  • 点亮LED橙色。
  • 关闭LED的绿色。
  • 等待1秒钟(1000毫秒)。
  • 关闭LED的橙色。
  • 点亮LED绿色。
  • 等待1秒钟(1000毫秒)
void MAIN(VP_INT exinf)
{
    
    
    while(1)
    {
    
    
        Led_setLight(D_LED_KIND_ORANGE, D_LED_LIGHT_ON);
        Led_setLight(D_LED_KIND_GREEN, D_LED_LIGHT_OFF);
        dly_tsk(1000);

        Led_setLight(D_LED_KIND_ORANGE, D_LED_LIGHT_OFF);
        Led_setLight(D_LED_KIND_GREEN, D_LED_LIGHT_ON);
        dly_tsk(1000);
    }

    return;
}

dly_tsk函数是ITRON规格的函数,是仅在指定时间(毫秒)内停止任务动作的函数。像这样忠实地进行按顺序决定的工作的程序很容易写。

发出声音的任务

那么,接下来让我们做另一个任务。假设每2秒就需要输出两次“啪啪”的嗡嗡声的任务。

蜂鸣声输出的任务

  • 输出“抖”的声音。
  • 等待100毫秒。
  • 停止声音的输出。
  • 等待100毫秒。
    ※输出嘟嘟声是指重复2次这个程序。
void MAIN(VP_INT exinf)
{
    
    
    while(1)
    {
    
    
        int i;

        // 发出400ms的时间蜂鸣声
        for (i=0 ; i < 2 ; i++)
        {
    
    
            Spk_start(E_SPK_SCALE_DO);
            dly_tsk(100);

            Spk_stop();
            dly_tsk(100);
        }

        // 等待2000ms - 400ms
        dly_tsk(1600);
    }

    return;
}

任务、线程和进程的关系

任务

表示实时操作系统中并行处理执行单位的术语。在系统中存在多个任务称为多任务。

线程

表示Windows或Linux中并行处理执行单位的术语。这与ITRON中的任务相同。在系统中存在多个线程称为多线程。

进程

在Windows或Linux中表示应用程序执行单位的术语。例如,当您启动Excel或Word等应用程序时,每个应用程序都将作为不同的进程启动。可以同时启动多个应用程序的机制称为多进程。您可以在进程中属于多个线程。ITRON不存在这个概念。因为它在系统中只能有一个应用程序,所以不需要有一个叫做进程的单位。

进程和线程之间的区别

进程和线程之间的巨大区别是共享或不共享内存空间。由于Windows和Linux以进程为单位独立管理内存,如果进程不同,则无法访问其他进程的内存。

例如,您不能从Excel中运行的程序调用Word中定义的函数。如果有这样的事情,恶意程序可能会破坏各种应用程序的操作。

这是Windows和Linux利用虚拟内存的机制,以进程为单位进行内存保护。另一方面,同一进程中存在的多个线程共享内存。因此,每个进程中的线程都可以自由访问进程中定义的函数和全局变量。

猜你喜欢

转载自blog.csdn.net/qq_18191333/article/details/107524357