5¡¥¥Þ¥ë¥Á¥¿¥¹¥¯ TOP¤Ø

6¡¥¥¿¥¹¥¯´Ö¤ÎÇÓ¾À©¸æ


Á°¾Ï¤Ç¤Ï¡¢¥Þ¥ë¥Á¥¿¥¹¥¯¤Ë¤Ä¤¤¤Æ³Ø½¬¤·¤Þ¤·¤¿¡£
¤·¤«¤·¡¢¥Þ¥ë¥Á¥¿¥¹¥¯¤Î¥×¥í¥°¥é¥à¤òºî¤ëºÝ¤Ë¤Ï¡¢º£¤Þ¤Ç̵¤«¤Ã¤¿ÌäÂ꤬ȯÀ¸¤·¤Þ¤¹¡£
ºÇ¤âÂåɽŪ¤ÊÎ㤬¥¿¥¹¥¯¤¬Â¾¤Î¥¿¥¹¥¯¤Î¼Â¹Ô¤ò˸³²¤¹¤ë¤³¤È¤Ç¤¹¡£
¤½¤ì¤¬¤É¤ó¤Ê¤È¤­È¯À¸¤¹¤ë¤«¡¢¤É¤¦²ò·è¤¹¤ë¤«¤ò³Ø¤Ó¤Þ¤¹¡£



1¡¥Æ°ºî¤Î˸³²

¥Þ¥ë¥Á¥¿¥¹¥¯ÆÃÍ­¤ÎÌäÂê¤òÂ賤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£
¼¡¤Î¥×¥í¥°¥é¥à¤òºîÀ®¤·¤Æ¤¯¤À¤µ¤¤¡£¤³¤³¤Ç¤Ïresource1.c¤È¤·¤Þ¤·¤¿¡£
resource1.c
#include "kernel.h"
#include "kernel_id.h"
#include "ecrobot_interface.h"
#include "myrobot_interface.h"

DeclareCounter(SysTimerCnt);
DeclareTask(Task1);				/* Task1¤òÀë¸À */
DeclareTask(Task_bg);				/* Task_bg¤òÀë¸À */

int i=0;

void ecrobot_device_initialize(){		/* OSEKµ¯Æ°»þ¤Î½èÍý¡Ê¥â¡¼¥¿Ää»ß¡Ë*/
nxt_motor_set_speed(NXT_PORT_B,0,0);
nxt_motor_set_speed(R_MOTOR,0,0);
}

void ecrobot_device_terminate(){		/* OSEK½ªÎ»»þ¤Î½èÍý¡Ê¥â¡¼¥¿Ää»ß¡Ë*/
nxt_motor_set_speed(L_MOTOR,0,0);
nxt_motor_set_speed(R_MOTOR,0,0);
}

void user_1ms_isr_type2(void){
    SignalCounter(SysTimerCnt);		/* ¥«¥¦¥ó¥¿´Ê°×ÈÇ */
}
#define SPEED 60
#define TURN_CNT 40
#define MOVE_CNT 120

#define TURN_TIME 500
#define MOVE_TIME 1000

TASK(Task1)
{
	if(i <= MOVE_CNT){
		nxt_motor_set_speed(L_MOTOR,SPEED,1);
		nxt_motor_set_speed(R_MOTOR,SPEED,1);
	}else if(i > MOVE_CNT && i <= TURN_CNT+MOVE_CNT){
		nxt_motor_set_speed(L_MOTOR,SPEED,1);
		nxt_motor_set_speed(R_MOTOR,-1*SPEED,1);	
	}else{
		i=0;
	}
	
	display_clear(0);
	display_goto_xy(0,1);
   	display_string("I=");		/* ÊÑ¿ô¤ÎÆâÍÆ¤òɽ¼¨ */
	display_int(i, 5);
	display_update();
	
	i++;
	
	TerminateTask();					/* ½èÍý½ªÎ» */
}

TASK(Task_bg){
	while(1){
		if(ecrobot_get_touch_sensor(PORT_TOUCH) == 1){
			nxt_motor_set_speed(L_MOTOR,-1*SPEED,1);
			nxt_motor_set_speed(R_MOTOR,-1*SPEED,1);
			systick_wait_ms(MOVE_TIME);
			nxt_motor_set_speed(L_MOTOR,SPEED,1);
			nxt_motor_set_speed(R_MOTOR,-1*SPEED,1);
			systick_wait_ms(TURN_TIME);
			nxt_motor_set_speed(L_MOTOR,0,1);
			nxt_motor_set_speed(R_MOTOR,0,1);
		}
	}
	
	TerminateTask();
}


resource1.oil
#include "implementation.oil"

CPU ATMEL_AT91SAM7S256
{
  OS LEJOS_OSEK
  {
    STATUS = EXTENDED;
    STARTUPHOOK = FALSE;
    SHUTDOWNHOOK = FALSE;
    PRETASKHOOK = FALSE;
    POSTTASKHOOK = FALSE;
    USEGETSERVICEID = FALSE;
    USEPARAMETERACCESS = FALSE;
    USERESSCHEDULER = FALSE;
  };

  /* Definition of application mode */
  APPMODE appmode1{}; 

   TASK Task1						/* Task1 ¤òÄêµÁ¤¹¤ë */
  {
    AUTOSTART = FALSE;
    PRIORITY = 2;
    ACTIVATION = 1;
    SCHEDULE = FULL;
    STACKSIZE = 512;
  };

  TASK Task_bg						/* Task_bg ¤òÄêµÁ */
  {
    AUTOSTART = TRUE { APPMODE = appmode1; };
    PRIORITY = 1;
    ACTIVATION = 1;
    SCHEDULE = FULL;
    STACKSIZE = 512;
  };

  COUNTER SysTimerCnt			/* SysTimerCnt¤òÄêµÁ */
  {
    MINCYCLE = 1;
    MAXALLOWEDVALUE = 10000;
    TICKSPERBASE = 1; /* One tick is equal to 1msec */ 
  };

  ALARM cyclic_alarm1		/* ¼þ´ü¥¢¥é¡¼¥à1¤òÄêµÁ */
  {
    COUNTER = SysTimerCnt;
    ACTION = ACTIVATETASK
    {
      TASK = Task1;
    };
    AUTOSTART = TRUE
    {
      ALARMTIME = 1;
      CYCLETIME = 10; /* Task1¤Ï10msec¤´¤È¤Ëµ¯Æ° */
      APPMODE = appmode1;
    };
  };

};



¤³¤Î¥×¥í¥°¥é¥à¤Ç¤Ï£²¤Ä¤Î¥¿¥¹¥¯¤Ï°Ê²¼¤Î¤è¤¦¤Êưºî¤ò¤¹¤ë¤è¤¦¤Ë¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
¥×¥í¥°¥é¥à¤¬Àµ¤·¤¯Æ°ºî¤¹¤ë¤«³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡¦¡¦¡¦¡¦Àµ¤·¤¯Æ°ºî¤·¤Þ¤»¤ó¡£
¤³¤Î¥×¥í¥°¥é¥à¤Ç¤Ï¡¢Task1¤Î¤Û¤¦¤¬Task_bg¤è¤êÍ¥ÀèÅÙ¤¬¹â¤¯ÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹¡£
¤¹¤ë¤È¡¢¥×¥í¥°¥é¥à¤Îή¤ì¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

resource1.png(9799 byte)

Task_bg¤Îή¤ì¤ò¸«¤ë¤È¡¢¼Â¹Ô¤¬ÅÓÀÚ¤ìÅÓÀÚ¤ì¤Ë¤Ê¤Ã¤Æ¤¤¤Æ¡¢¤½¤Î´Ö¤ËTask1¤¬¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë¤³¤È¤¬¤ï¤«¤ê¤Þ¤¹¡£ Task_bg¤Îưºî¤Ï¡¢¥â¡¼¥¿¤Ë»ØÎá¤ò½Ð¤·¤Æ»ØÄꤵ¤ì¤¿»þ´ÖÂԤġ¢¤È¤¤¤¦Æ°ºî¤Ç¤¹¡£
¤·¤«¤·¡¢ÀÞ³ÑTask_bg¤¬¥â¡¼¥¿¤Ë»ØÎá¤ò½Ð¤·¤Æ¤â¡¢¤½¤Î¸åTask1¤«¤é¤Î¥â¡¼¥¿¤Ø¤Î»ØÎá¤Ë¤è¤Ã¤Æ¾Ã¤µ¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£
¤³¤ì¤¬¹â®¤Ç·«¤êÊÖ¤µ¤ì¤ë¤Î¤Ç¡¢Task_bg¤Ïưºî¤·¤Æ¤¤¤Ê¤¤¤è¤¦¤Ë´¶¤¸¤ë¤Î¤Ç¤¹¡£

¤Ê¤é¤Ð¡¢Task_bg¤ÎÍ¥ÀèÅÙ¤òTask1¤è¤ê¹â¤¯¤¹¤ì¤ÐÎɤ¤¤Î¤Ç¤·¤ç¤¦¤«¡£¤½¤Î¤È¤­¤Î¥×¥í¥°¥é¥à¤Îή¤ì¤Ï¤³¤¦¤Ê¤ê¤Þ¤¹¡£

resource2.png(9799 byte)

Task1¤¬¼Â¹Ô¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£¤³¤ì¤Ç¤Ï¡¢ÌÜŪ¤Îưºî¤ò¤·¤Ê¤¤¤Î¤ÏÌÀ³Î¤Ç¤¹¡£
¤ä¤Ï¤ê¡¢Â¾¤Ë²¿¤«¹©Éפ¬É¬ÍפǤ¹¡£



2¡¥¥¿¥¹¥¯´Ö¤ÎÇÓ¾À©¸æ

ÌäÂê¤Î¸¶°ø¤¬Ê¬¤«¤Ã¤¿½ê¤Ç¡¢²ò·èË¡¤ò³Ø½¬¤·¤Þ¤·¤ç¤¦¡£
¼¡¤Î¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤
resource2.c
#include "kernel.h"
#include "kernel_id.h"
#include "ecrobot_interface.h"
#include "myrobot_interface.h"

DeclareCounter(SysTimerCnt);
DeclareResource(resource1);
DeclareTask(Task1);				/* Task1¤òÀë¸À */
DeclareTask(Task_bg);				/* Task_bg¤òÀë¸À */

int i=0;

void ecrobot_device_initialize(){		/* OSEKµ¯Æ°»þ¤Î½èÍý¡Ê¥â¡¼¥¿Ää»ß¡Ë*/
nxt_motor_set_speed(NXT_PORT_B,0,0);
nxt_motor_set_speed(R_MOTOR,0,0);
}

void ecrobot_device_terminate(){		/* OSEK½ªÎ»»þ¤Î½èÍý¡Ê¥â¡¼¥¿Ää»ß¡Ë*/
nxt_motor_set_speed(L_MOTOR,0,0);
nxt_motor_set_speed(R_MOTOR,0,0);
}

void user_1ms_isr_type2(void){
    SignalCounter(SysTimerCnt);		/* ¥«¥¦¥ó¥¿´Ê°×ÈÇ */
}
#define SPEED 60
#define TURN_CNT 40
#define MOVE_CNT 120

#define TURN_TIME 500
#define MOVE_TIME 1000

TASK(Task1)
{
	if(i <= MOVE_CNT){
		nxt_motor_set_speed(L_MOTOR,SPEED,1);
		nxt_motor_set_speed(R_MOTOR,SPEED,1);
	}else if(i > MOVE_CNT && i <= TURN_CNT+MOVE_CNT){
		nxt_motor_set_speed(L_MOTOR,SPEED,1);
		nxt_motor_set_speed(R_MOTOR,-1*SPEED,1);	
	}else{
		i=0;
	}
	
	display_clear(0);
	display_goto_xy(0,1);
   	display_string("I=");		/* ÊÑ¿ô¤ÎÆâÍÆ¤òɽ¼¨ */
	display_int(i, 5);
	display_update();
	
	i++;
	
	TerminateTask();					/* ½èÍý½ªÎ» */
}

TASK(Task_bg){
	while(1){
		if(ecrobot_get_touch_sensor(PORT_TOUCH) == 1){
			GetResource(resource1);
			nxt_motor_set_speed(L_MOTOR,-1*SPEED,1);
			nxt_motor_set_speed(R_MOTOR,-1*SPEED,1);
			systick_wait_ms(MOVE_TIME);
			nxt_motor_set_speed(L_MOTOR,SPEED,1);
			nxt_motor_set_speed(R_MOTOR,-1*SPEED,1);
			systick_wait_ms(TURN_TIME);
			nxt_motor_set_speed(L_MOTOR,0,1);
			nxt_motor_set_speed(R_MOTOR,0,1);
			ReleaseResource(resource1);
		}
	}
	
	TerminateTask();
}

resource2.oil
#include "implementation.oil"

CPU ATMEL_AT91SAM7S256
{
  OS LEJOS_OSEK
  {
    STATUS = EXTENDED;
    STARTUPHOOK = FALSE;
    SHUTDOWNHOOK = FALSE;
    PRETASKHOOK = FALSE;
    POSTTASKHOOK = FALSE;
    USEGETSERVICEID = FALSE;
    USEPARAMETERACCESS = FALSE;
    USERESSCHEDULER = FALSE;
  };

  /* Definition of application mode */
  APPMODE appmode1{}; 

   TASK Task1						/* Task1 ¤òÄêµÁ¤¹¤ë */
  {
    AUTOSTART = FALSE;
    PRIORITY = 2;
    ACTIVATION = 1;
	RESOURCE = resource1;
    SCHEDULE = FULL;
    STACKSIZE = 512;
  };

  TASK Task_bg						/* Task_bg ¤òÄêµÁ */
  {
    AUTOSTART = TRUE { APPMODE = appmode1; };
    PRIORITY = 1;
    ACTIVATION = 1;
	RESOURCE = resource1;
    SCHEDULE = FULL;
    STACKSIZE = 512;
  };

  COUNTER SysTimerCnt			/* SysTimerCnt¤òÄêµÁ */
  {
    MINCYCLE = 1;
    MAXALLOWEDVALUE = 10000;
    TICKSPERBASE = 1; /* One tick is equal to 1msec */ 
  };

  ALARM cyclic_alarm1		/* ¼þ´ü¥¢¥é¡¼¥à1¤òÄêµÁ */
  {
    COUNTER = SysTimerCnt;
    ACTION = ACTIVATETASK
    {
      TASK = Task1;
    };
    AUTOSTART = TRUE
    {
      ALARMTIME = 1;
      CYCLETIME = 10; /* Task1¤Ï10msec¤´¤È¤Ëµ¯Æ° */
      APPMODE = appmode1;
    };
  };

  RESOURCE resource1
  {
    RESOURCEPROPERTY = STANDARD;
  };

};

¥×¥í¥°¥é¥à¤òưºî¤µ¤»¤Æ¸«¤Þ¤·¤ç¤¦¡£
º£ÅÙ¤ÏÀµ¤·¤¯Æ°¤¯¤Ï¤º¤Ç¤¹¡£
¤½¤ì¤Ç¤Ï¡¢¿·¤·¤¯ÍѤ¤¤Æ¤¤¤ë´Ø¿ô¤Î²òÀâ¤ò¤·¤Æ¤¤¤­¤Þ¤¹

¡¦ ¥½¡¼¥¹¥Õ¥¡¥¤¥ë

DeclareResource(resource1)
¥ê¥½¡¼¥¹¤òÀë¸À¤·¤Þ¤¹¡£

GetResource(resource1)
¥ê¥½¡¼¥¹¤Ë³ä¤êÅö¤Æ¤é¤ì¤¿¥¯¥ê¥Æ¥£¥«¥ë¥»¥¯¥·¥ç¥ó¤ËÆþ¤ê¤Þ¤¹¡£
ReleaseResource(resource1)
¥ê¥½¡¼¥¹¤Ë³ä¤êÅö¤Æ¤é¤ì¤¿¥¯¥ê¥Æ¥£¥«¥ë¥»¥¯¥·¥ç¥ó¤«¤éÈ´¤±¤Þ¤¹¡£

¡¦ oil¥Õ¥¡¥¤¥ë

RESOURCE = resource1
³ÍÆÀ¤¹¤ë¥ê¥½¡¼¥¹¤Î¥ê¥¹¥È¤Ç¤¹¡£¥ê¥½¡¼¥¹¤ò³ÍÆÀ¤·¤¨¤ë¥¿¥¹¥¯¤¹¤Ù¤Æ¤ËÄêµÁ¤·¤Þ¤¹¡£
RESOURCE resource1{¡Ä}
¥ê¥½¡¼¥¹¥ª¥Ö¥¸¥§¥¯¥È¤òÄêµÁ¤·¤Þ¤¹¡£

RESOURCEPROPERTY = STANDARD
STANDARD¤Î¤Û¤«¤Ë¡¢LINKED, INTERNAL¤¬»ØÄê¤Ç¤­¤Þ¤¹¡£
Ä̾ï¤ÏSTANDARD¤ò»ÈÍѤ·¤Þ¤¹¡£

¥×¥í¥°¥é¥à¤Îή¤ì¤Ï¤³¤¦¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£

resource3.png(9799 byte)

½ç¤òÄɤäÆÀâÌÀ¤¹¤ë¤È¡¢

­¡Task_bg¤¬GetResource¤¹¤ë¤È¡¢Task_bg¤ÏÇÓ¾Ū½èÍý¤È¤Ê¤ë¡£
­¢Task_bg¤ÏÇÓ¾Ū½èÍý¾õÂ֤ˤ¢¤ë¤Î¤Ç¡¢Task1¤Ï¼Â¹ÔÂÔ¤Á¤È¤Ê¤ë¡£
­£Task_bg¤¬ReleaseResource¤¹¤ë¤È¡¢Ä̾ï¤Î½èÍý¤ËÌá¤ë¡£
­¤Í¥ÀèÅ٤ι⤤Task1¤Ë¼Â¹Ô¸¢¤¬ÅϤµ¤ì¤ë¡£
­¥Task1¤Î½èÍý¤¬½ª¤ï¤ë¤È¡¢Task_bg¤¬¼Â¹Ô¤µ¤ì¤ë¡£¤¢¤È¤ÏÉáÄÌ¤ÎÆ°ºî¤ò¤¹¤ë¡£

¥ê¥½¡¼¥¹¤ò¼èÆÀ¤¹¤ë¤È¡¢Â¾¤ÎTask¥ª¥Ö¥¸¥§¥¯¥È¤ÎÃæ¤Ç¥ê¥½¡¼¥¹¤ò»ØÄꤷ¤Æ¤¤¤ë¥¿¥¹¥¯¤Ï¼Â¹Ô¤µ¤ì¤Þ¤»¤ó¡£
¤³¤ì¤Ï¡¢¥ê¥½¡¼¥¹¤ò¼èÆÀ¤·¤¿ºÝ¤ËÍ¥ÀèÅÙ¤¬Â¾¤è¤ê¹â¤¯¤Ê¤ë¤³¤È¤Ë¤è¤ê¼Â¸½¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
¥â¡¼¥¿¤Ê¤É¡¢Æ±¤¸»ñ¸»¤ò¶¦Í­¤¹¤ë¥¿¥¹¥¯¤ËƱ¤¸¥ê¥½¡¼¥¹¤ò»ØÄꤷ¤Æ¤ª¤±¤Ð¡¢¥Þ¥ë¥Á¥¿¥¹¥¯¤Ë¤è¤ëÌäÂê¤òËɤ°¤³¤È¤¬½ÐÍè¤Þ¤¹¡£


¢¨ÉáÄ̤νèÍý·Ï¤Ë¤â¾Ü¤·¤¤Êý¤Ø
ÉáÄ̤νèÍý·Ï¤Ë¤ª¤¤¤ÆÇÓ¾À©¸æ¤ò¼Â¸½¤¹¤ë¤Ë¤Ï¡¢¥»¥Þ¥Õ¥©¤ä¥ß¥å¡¼¥Æ¥Ã¥¯¥¹¤Ê¤É¤¬¤¢¤ê¤Þ¤¹¡£
nxtOSEK¤Î¾ì¹ç¡¢¥é¥¦¥ó¥É¥í¥Ó¥ó¤Ê¤É¤Îµ¡Ç½¤¬Ìµ¤¯¡¢¥¿¥¹¥¯ÀÚ¤êÂØ¤¨¤Î¥¿¥¤¥ß¥ó¥°¤¬ÌÀ³Î¤Ç¤¢¤ë°Ù¤«¤é¤«¡¢¥»¥Þ¥Õ¥©¤ä¥ß¥å¡¼¥Æ¥Ã¥¯¥¹¤Îµ¡Ç½¤ÏÄ󶡤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£
¤Þ¤¿¡¢Â¿½Åµ¯Æ°¤Ïoil¥Õ¥¡¥¤¥ëÃæ¤Î¥¿¥¹¥¯ÄêµÁ¤Ë¤è¤êËɻߤǤ­¤ë¤¿¤á¡¢Â¿½Åµ¯Æ°Ëɻߤ¿¤á¤Ë¥ß¥å¡¼¥Æ¥Ã¥¯¥¹Åù¤òƳÆþ¤¹¤ë¤³¤È¤â¤¢¤ê¤Þ¤»¤ó¡£
¤³¤ì¤¬¡¢OSEK¤ÎÆÃħ¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
¤¿¤À¤·¡¢Get/ReleaseResource¤Ë¤è¤ëÇÓ¾À©¸æ¤Ï¡¢¥ß¥å¡¼¥Æ¥Ã¥¯¥¹¤ÈƱÅù¤ÎÌò³ä¤ò²Ì¤¿¤·¤Þ¤¹¡£

3¡¥²ÝÂê

£±¡¥¾å¤Î2¤Ä¤Î¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à¤òNXT¤Ë¥À¥¦¥ó¥í¡¼¥É¤·¡¢Æ°ºî¤ò³Îǧ¤»¤è¡£
£²¡¥¥é¥¤¥ó¥È¥ì¡¼¥¹¤¹¤ë¥³¡¼¥¹¾å¤Ë¾ã³²Êª¤¬¤¢¤Ã¤¿¾ì¹ç¡¢180ÅÙÀû²ó¤·¤Æ¡¢µÕÊý¸þ¤Ë¥È¥ì¡¼¥¹¤¹¤ë¥×¥í¥°¥é¥à¤òºîÀ®¤»¤è¡£



5¡¥¥Þ¥ë¥Á¥¿¥¹¥¯ TOP¤Ø