void main_task(intptr_t unused) {

	shared_memory = new SharedMemory();
	sensor_data = new SensorData();
	sensors = new Sensors();

	aa = new AvoidAction(shared_memory, sensor_data, sensors);
	ca = new ColorAction(shared_memory, sensor_data, sensors);
	wa = new WalkAction(shared_memory, sensor_data, sensors);

	init();

	Arbitrator arbitrator(sensor_data, sensors);

	// Start the tasks, will sleep imidiatly
	act_tsk(aa->taskID());
	act_tsk(ca->taskID());
	act_tsk(wa->taskID());

	arbitrator.apply(aa);
	arbitrator.apply(ca);
	arbitrator.apply(wa);

	arbitrator.start();
	return;
}
示例#2
0
void
alarm1_handler(intptr_t exinf)
{
	ER_UINT	ercd;

	check_point(4);
	ercd = wup_tsk(TASK3);
	check_ercd(ercd, E_NOSPT);

	ercd = rel_wai(TASK3);
	check_ercd(ercd, E_NOSPT);

	ercd = wup_tsk(TASK1);
	check_ercd(ercd, E_OK);

	ercd = act_tsk(TASK3);
	check_ercd(ercd, E_OK);

	ercd = act_tsk(TASK4);
	check_ercd(ercd, E_OK);

	ercd = rot_rdq(MID_PRIORITY);
	check_ercd(ercd, E_OK);

	ercd = rot_rdq(MID_PRIORITY);
	check_ercd(ercd, E_NOSPT);

	return;

	check_point(0);
}
示例#3
0
void
task1(intptr_t exinf)
{
	ER_UINT	ercd;

	test_start(__FILE__);

	check_point(1);
	ercd = act_tsk(TASK2);
	check_ercd(ercd, E_OK);

	ercd = act_tsk(TASK4);
	check_ercd(ercd, E_OK);

	ercd = slp_tsk();
	check_ercd(ercd, E_OK);

	check_point(4);
	ercd = snd_mbf(MBF1, string2, 25);
	check_ercd(ercd, E_OK);

	check_point(6);
	check_assert(strncmp(buf1, string2, 25) == 0);

	ercd = act_tsk(TASK3);
	check_ercd(ercd, E_OK);

	ercd = slp_tsk();
	check_ercd(ercd, E_OK);

	check_point(13);
	ercd = snd_mbf(MBF1, string2, 10);
	check_ercd(ercd, E_OK);

	ercd = rcv_mbf(MBF1, buf1);
	check_ercd(ercd, 10);

	check_assert(strncmp(buf1, string2, 10) == 0);

	ercd = slp_tsk();
	check_ercd(ercd, E_OK);

	check_point(24);
	ercd = chg_pri(TASK3, LOW_PRIORITY);
	check_ercd(ercd, E_OK);

	ercd = slp_tsk();
	check_ercd(ercd, E_OK);

	check_point(34);
	ercd = chg_pri(TASK2, HIGH_PRIORITY);
	check_ercd(ercd, E_OK);

	ercd = slp_tsk();
	check_ercd(ercd, E_OK);

	check_point(0);
}
void
task1(intptr_t exinf)
{
	ER_UINT	ercd;

	test_start(__FILE__);

	check_point(1);
	ercd = act_tsk(TASK2);
	check_ercd(ercd, E_OK);

	check_point(6);
	ercd = chg_pri(TASK3, HIGH_PRIORITY);
	check_ercd(ercd, E_NOSPT);

	check_point(7);
	ercd = wup_tsk(TASK3);
	check_ercd(ercd, E_NOSPT);

	check_point(8);
	ercd = can_wup(TASK3);
	check_ercd(ercd, E_NOSPT);

	check_point(9);
	ercd = rel_wai(TASK3);
	check_ercd(ercd, E_NOSPT);

	check_point(10);
	ercd = sus_tsk(TASK3);
	check_ercd(ercd, E_NOSPT);

	check_point(11);
	ercd = rsm_tsk(TASK3);
	check_ercd(ercd, E_NOSPT);

	check_point(12);
	ercd = sta_alm(ALM1, 10);
	check_ercd(ercd, E_OK);

	check_point(13);
	ercd = slp_tsk();
	check_ercd(ercd, E_OK);

	check_point(27);
	ercd = act_tsk(TASK3);
	check_ercd(ercd, E_OK);

	check_point(28);
	ercd = act_tsk(TASK4);
	check_ercd(ercd, E_OK);

	check_point(29);
	ercd = act_tsk(TASK2);
	check_ercd(ercd, E_OK);

	check_finish(34);
	check_point(0);
}
示例#5
0
static void initialize(intptr_t unused) {
	btstack_memory_init();
    hardware_initialize();
    SVC_PERROR(act_tsk(BT_TSK));
    SVC_PERROR(act_tsk(BT_QOS_TSK));
#if defined(DEBUG)
    syslog(LOG_NOTICE, "bluetooth_dri initialized.");
#endif
}
示例#6
0
void
task1(intptr_t exinf)
{
	ER		ercd;

	check_point(1);
	ercd = act_tsk(TASK2);
	check_ercd(ercd, E_OK);

	check_point(3);
	ercd = act_tsk(TASK3);
	check_ercd(ercd, E_OK);

	check_point(4);
	ercd = act_tsk(TASK4);
	check_ercd(ercd, E_OK);

	check_point(5);
	ercd = slp_tsk();
	check_ercd(ercd, E_OK);

	check_point(9);
	ercd = act_tsk(TASK5);
	check_ercd(ercd, E_OK);

	check_point(10);
	ercd = act_tsk(TASK6);
	check_ercd(ercd, E_OK);

	check_point(11);
	ercd = sus_tsk(TASK6);
	check_ercd(ercd, E_OK);

	check_point(12);
	ercd = sus_tsk(TASK5);
	check_ercd(ercd, E_OK);

	check_point(13);
	ercd = rsm_tsk(TASK5);
	check_ercd(ercd, E_OK);

	check_point(14);
	ercd = rsm_tsk(TASK6);
	check_ercd(ercd, E_OK);

	check_point(15);
	ercd = slp_tsk();
	check_ercd(ercd, E_OK);

	check_point(31);
	ercd = slp_tsk();
	check_ercd(ercd, E_OK);

	check_finish(38);

	check_point(0);
}
示例#7
0
void
task1(intptr_t exinf)
{
	ER_UINT	ercd;
	T_RTSK	rtsk;
	T_RMTX	rmtx;
	PRI		intpri;

	test_start(__FILE__);

	check_point(1);
	ercd = sta_alm(ALM1, TEST_TIME_CP);
	check_ercd(ercd, E_OK);

	ercd = slp_tsk();
	check_ercd(ercd, E_OK);

	check_point(3);
	ercd = act_tsk(TASK2);
	check_ercd(ercd, E_OK);

	check_point(5);
	ercd = ref_tsk(TASK2, &rtsk);
	check_ercd(ercd, E_OK);

	check_assert(rtsk.tskstat == TTS_DMT);

	ercd = ref_mtx(MTX1, &rmtx);
	check_ercd(ercd, E_OK);

	check_assert(rmtx.htskid == TSK_NONE);

	check_assert(rmtx.wtskid == TSK_NONE);

	ercd = act_tsk(TASK2);
	check_ercd(ercd, E_OK);

	check_point(16);
	ercd = get_ipm(&intpri);
	check_ercd(ercd, E_OK);

	check_assert(intpri == TIPM_ENAALL);

	ercd = act_tsk(TASK2);
	check_ercd(ercd, E_OK);

	check_point(23);
	check_assert(sns_dsp() == false);

	ercd = act_tsk(TASK2);
	check_ercd(ercd, E_OK);

	check_finish(28);
	check_point(0);
}
示例#8
0
/*
 *  メインタスク(中優先度)
 */
void main_task(intptr_t exinf)
{
	uint_t	i;

	syslog_0(LOG_NOTICE, "Performance evaluation program (4)");
	init_hist(1, MAX_TIME, histarea1);
	init_hist(2, MAX_TIME, histarea2);
	init_hist(3, MAX_TIME, histarea3);
	logtask_flush(0U);

	sus_tsk(LOGTASK);		/* システムログタスクの動作を止める */

	/*
	 *  タスク切換えを起こさないact_tskの処理時間の測定
	 */
	for (i = 0; i < NO_MEASURE; i++) {
		begin_measure(1);
		act_tsk(TASK3);
		end_measure(1);
		slp_tsk();
	}

	/*
	 *  タスク切換えを起こすact_tskの処理時間の測定
	 */
	for (i = 0; i < NO_MEASURE; i++) {
		begin_measure(2);
		act_tsk(TASK1);
	}

	/*
	 *  タスク切換えを起こすiact_tskの処理時間の測定(測定回数は10分の1)
	 */
	task2_count = 0;
	sta_cyc(CYC1);
	while (task2_count < NO_MEASURE / 10) ;
	stp_cyc(CYC1);

	rsm_tsk(LOGTASK);		/* システムログタスクの動作を再開する */

	syslog_0(LOG_NOTICE, "Execution times of act_tsk without task switch");
	print_hist(1);
	syslog_0(LOG_NOTICE, "Execution times of act_tsk with task switch");
	print_hist(2);
	syslog_0(LOG_NOTICE, "Execution times of iact_tsk with task switch");
	print_hist(3);
	ext_ker();
}
示例#9
0
/*
 *  計測ルーチン
 */
void
perf_eval(uint_t n)
{
	uint_t		i, j;

	init_hist(1, MAX_TIME, histarea1);

	sus_tsk(LOGTASK);		/* システムログタスクの動作を止める */
	for (i = 0; i < NO_MEASURE; i++) {
		ini_flg(FLG1);
		for (j = 0; j < n; j++) {
			act_tsk(task_list[j]);
		}
		chg_pri(TSK_SELF, MAIN_PRIORITY_LOW);
		/* タスクが待ち状態に入るのを待つ */
		chg_pri(TSK_SELF, TPRI_INI);

		begin_measure(1);
		set_flg(FLG1, 0x01U);
		end_measure(1);

		chg_pri(TSK_SELF, MAIN_PRIORITY_LOW);
		/* タスクが終了するのを待つ */
		chg_pri(TSK_SELF, TPRI_INI);
	}
	rsm_tsk(LOGTASK);		/* システムログタスクの動作を再開する */

	syslog_1(LOG_NOTICE, "Execution times of set_flg"
							" when %d tasks are released from waiting.", n);
	print_hist(1);
	logtask_flush(0U);
}
示例#10
0
/*
 *  main task (low priority)
 */
void main_task(intptr_t exinf)
{
	syslog_0(LOG_NOTICE, "Performance evaluation program (1)");
	init_hist(1, MAX_TIME, histarea1);
	init_hist(2, MAX_TIME, histarea2);
	syslog_flush();

	act_tsk(TASK1);
	act_tsk(TASK2);

	syslog_0(LOG_NOTICE, "Execution times of wup_tsk -> slp_tsk");
	print_hist(1);
	syslog_0(LOG_NOTICE, "Execution times of slp_tsk -> wup_tsk");
	print_hist(2);
	test_finish();
}
示例#11
0
void
task3(intptr_t exinf)
{
	ER_UINT	ercd;

	switch (++task3_count) {
	case 1:
		check_point(5);
		ercd = act_tsk(TASK2);
		check_ercd(ercd, E_OK);

		check_point(7);
		ercd = ext_tsk();
		check_ercd(ercd, E_OK);

		check_point(0);

	case 2:
		check_point(11);
		ercd = ext_tsk();
		check_ercd(ercd, E_OK);

		check_point(0);

	default:
		check_point(0);
	}
	check_point(0);
}
示例#12
0
/*
 *  performance evaluation routine
 */
void
perf_eval(uint_t n)
{
	uint_t		i, j;

	init_hist(1, MAX_TIME, histarea1);

	for (i = 0; i < NO_MEASURE; i++) {
		ini_flg(FLG1);
		for (j = 0; j < n; j++) {
			act_tsk(task_list[j]);
		}
		chg_pri(TSK_SELF, MAIN_PRIORITY_LOW);
		/* let the task in the waiting queue of the event flag */
		chg_pri(TSK_SELF, TPRI_INI);

		begin_measure(1);
		set_flg(FLG1, 0x01U);
		end_measure(1);

		chg_pri(TSK_SELF, MAIN_PRIORITY_LOW);
		/* wait the task exits */
		chg_pri(TSK_SELF, TPRI_INI);
	}

	syslog_1(LOG_NOTICE, "Execution times of set_flg"
							" when %d tasks are released from waiting.", n);
	print_hist(1);
	syslog_flush();
}
void bt_recv_task(intptr_t unused) {
    static char buf[3];
	while ((fgets(buf, 3, shared_memory->bt_con))) {
		switch(buf) {
			case "y":
				shared_memory->yellow = 1;
				break;
			case "b":
				shared_memory->blue = 1;
				break;
			case "r":
				shared_memory->red = 1;
				break;
			default:
				break;
		}
		cycle_print(buf);
		if (shared_memory->yellow == 1
				&& shared_memory->blue == 1
				&& shared_memory->red == 1)
			act_tsk(FIN_TASK);
		//cycle_print((char*)"Bluetooth Task");
		sleep(500);
	}
}
		void perform() {
			switch(RobotAction::sensor_data->color) {
				case COLOR_YELLOW:
					RobotAction::shared_memory->yellow = 1;
					cycle_print((char*)"Saw Yellow!");
					fprintf(RobotAction::shared_memory->bt_con, "y\n");
					break;
				case COLOR_BLUE:
					RobotAction::shared_memory->blue = 1;
					cycle_print((char*)"Saw Blue!");
					fprintf(RobotAction::shared_memory->bt_con, "b\n");
					break;
				case COLOR_RED:
					RobotAction::shared_memory->red = 1;
					cycle_print((char*)"Saw Red!");
					fprintf(RobotAction::shared_memory->bt_con, "r\n");
					break;
				default:
					break;
			}
			if (RobotAction::shared_memory->yellow == 1
					&& RobotAction::shared_memory->blue == 1
					&& RobotAction::shared_memory->red == 1)
				act_tsk(FIN_TASK);
			wakeup(MAIN_TASK);
		}
示例#15
0
void
cpuexc_handler(void *p_excinf)
{
	syslog(LOG_NOTICE, "CPU exception handler (p_excinf = %08p).", p_excinf);
	if (sns_ctx() != true) {
		syslog(LOG_WARNING,
					"sns_ctx() is not true in CPU exception handler.");
	}
	if (sns_dpn() != true) {
		syslog(LOG_WARNING,
					"sns_dpn() is not true in CPU exception handler.");
	}
	syslog(LOG_INFO, "sns_loc = %d sns_dsp = %d xsns_dpn = %d",
								sns_loc(), sns_dsp(), xsns_dpn(p_excinf));

	if (xsns_dpn(p_excinf)) {
		syslog(LOG_NOTICE, "Sample program ends with exception.");
		SVC_PERROR(ext_ker());
		assert(0);
	}

#ifdef PREPARE_RETURN_CPUEXC
	PREPARE_RETURN_CPUEXC;
	SVC_PERROR(get_tid(&cpuexc_tskid));
	SVC_PERROR(act_tsk(EXC_TASK));
#else /* PREPARE_RETURN_CPUEXC */
	syslog(LOG_NOTICE, "Sample program ends with exception.");
	SVC_PERROR(ext_ker());
	assert(0);
#endif /* PREPARE_RETURN_CPUEXC */
}
示例#16
0
/*
 *  メインタスク(低優先度)
 */
void main_task(intptr_t exinf)
{
	syslog_0(LOG_NOTICE, "Performance evaluation program (1)");
	init_hist(1);
	init_hist(2);

	act_tsk(TASK1);
	act_tsk(TASK2);

	syslog_0(LOG_NOTICE, "Execution times of wup_tsk -> slp_tsk");
	print_hist(1);

	syslog_0(LOG_NOTICE, "Execution times of slp_tsk -> wup_tsk");
	print_hist(2);
	check_finish(0);
}
示例#17
0
static void initialize(intptr_t unused) {
	/**
	 * Initialize frame buffers
	 */
    static bitmap_t console_bitmap;
	static uint8_t lcd_console_fb_vmem[((WIDTH + 2) / 3 * HEIGHT)];
	console_bitmap.height = HEIGHT;
	console_bitmap.width  = WIDTH;
	console_bitmap.pixels = lcd_console_fb_vmem;
    ev3rt_console_fb = &console_bitmap;
    lcd_screen_fb = &lcd_screen;
    on_display_fb = lcd_screen_fb;

    initialize_lcd_font();

	initialize_lcd_spi();
	st7586fb_probe(&spidev);
	st7586fb_ioctl(spidev.drvdata, FB_ST7586_INIT_DISPLAY, 0);
	st7586fb_ioctl(spidev.drvdata, FB_ST7586_START_DISPLAY, 0);

	lcd_screen.pixels = ((struct fb_info *)(spidev.drvdata))->screen_base;
	lcd_screen.height = HEIGHT;
	lcd_screen.width = WIDTH;
	global_brick_info.lcd_screen = &lcd_screen;

	SVC_PERROR(act_tsk(LCD_REFRESH_TSK));
}
示例#18
0
/**	TELNETデーモン・タスクの開始
 *	@param	tskno	Telnetタスク番号( 0〜(TELNET_DAEMON_TASK_COUNT-1) )
 ****************************************************************************** */
ER		TELNET_Start( ID tskno )
{
ER		errcd;
	errcd = act_tsk( TELNET_DAEMON_FIRST_TASK + tskno );	/* タスク起動	*/

	return( errcd );
}
示例#19
0
void
task3(intptr_t exinf)
{
	ER		ercd;

	switch (++task3_count) {
	case 1:
		check_point(22);
		ercd = act_tsk(TASK2);
		check_ercd(ercd, E_OK);

		check_point(25);
		ercd = ext_tsk();
		check_ercd(ercd, E_OK);

		check_point(0);

	case 2:
		check_point(32);
		ercd = ext_tsk();
		check_ercd(ercd, E_OK);

		check_point(0);
	}
	check_point(0);
}
void btConnect() {
	while(true) {
		if (is_master) {
			shared_memory->bt_con = fdopen(SIO_PORT_SPP_MASTER_TEST_FILENO, "a+");
			if (shared_memory->bt_con != NULL) {
				setbuf(shared_memory->bt_con, NULL);
				while (!isConnected()) {
					//cycle_print((char*)"Connecting...");
					spp_master_test_connect(slave_address, pin);
					sleep(1000);
				}
				break;
			}
		} else {
			while (!ev3_bluetooth_is_connected()) {
				//cycle_print((char*)"Waiting for connection...");
				sleep(1000);
			}
			shared_memory->bt_con = ev3_serial_open_file(EV3_SERIAL_BT);
			break;
		}
		sleep(1000);
	}
	//cycle_print((char*)"Connected.");
	act_tsk(BT_RECV_TASK);
}
示例#21
0
/*
 *  メインタスク(低優先度)
 */
void main_task(intptr_t exinf)
{
	syslog_0(LOG_NOTICE, "Performance evaluation program (1)");
	init_hist(1, MAX_TIME, histarea1);
	init_hist(2, MAX_TIME, histarea2);
	logtask_flush(0U);

	sus_tsk(LOGTASK);		/* システムログタスクの動作を止める */
	act_tsk(TASK1);
	act_tsk(TASK2);
	rsm_tsk(LOGTASK);		/* システムログタスクの動作を再開する */

	syslog_0(LOG_NOTICE, "Execution times of wup_tsk -> slp_tsk");
	print_hist(1);
	syslog_0(LOG_NOTICE, "Execution times of slp_tsk -> wup_tsk");
	print_hist(2);
	ext_ker();
}
示例#22
0
int
nxtrike_init(void)
{
	syslog(LOG_NOTICE, "NXTrike initialization started");

    // Configure sensors
    ev3_sensor_config(gyro_sensor, GYRO_SENSOR);
    ev3_sensor_config(touch_sensor, TOUCH_SENSOR);
    ev3_sensor_config(SONIC_SENSOR, ULTRASONIC_SENSOR);
    ev3_sensor_config(LIGHT_SENSOR, COLOR_SENSOR);

    // Configure motors
    ev3_motor_config(LEFT_MOTOR/*left_motor*/, LARGE_MOTOR);
    ev3_motor_config(RIGHT_MOTOR/*right_motor*/, LARGE_MOTOR);
    ev3_motor_config(STEER_MOTOR/*steer_motor*/, LARGE_MOTOR);

	/* スピードとステアリング角度の初期化 */
	if(nxtrike_set_light_sensor_active() == NXTRIKE_ERROR){
		syslog(LOG_NOTICE, "light sensor is not activated");
	}

	/* モータのエンコーダ値の初期化 */
    ev3_motor_reset_counts(STEER_MOTOR);
    ev3_motor_reset_counts(LEFT_MOTOR);
    ev3_motor_reset_counts(RIGHT_MOTOR);

	/* スピードとステアリング角度の初期化 */
	nxtrike_set_speed(0);
	nxtrike_set_steer(0);

	/* 駆動タスクの起動 */
	act_tsk(NXTRIKE_DRIVE_TASK);
	/* ハンドラの起動 */
    assert(false /* not support yet */);
    act_tsk(NXTRIKE_DRIVE_HDR_TASK);
    act_tsk(NXTRIKE_TOUCH_SENSOR_HDR_TASK);
	//sta_cyc(NXTRIKE_DRIVE_HDR);
	//sta_cyc(NXTRIKE_TOUCH_SENSOR_HDR);

	syslog(LOG_NOTICE, "NXTrike has beed initialized");

	return NXTRIKE_OK;
}
示例#23
0
//	メインタスク
void main_task(VP_INT exinf)
{
	serial_ctl_por(TASK_PORTID, (IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV));
	syslog(LOG_NOTICE,"Sample program starts (exinf = %d)", exinf);

	std::atexit(finish);

	try
	{
		for (;;)
		{
			for (ID semid = 1; semid <= 5; semid++)
				p_fork[semid - 1] = new fork(semid);

			for (ID tskid = 1; tskid <= 5; tskid++)
				act_tsk(tskid);

			char c;
			do
			{
				serial_rea_dat(TASK_PORTID, &c, 1);
				if (c == 'a')
					std::abort();
			} while (c != 'q' && c != 'Q');

			for (ID tskid = 1; tskid <= 5; tskid++)
			{
				ter_tsk(tskid);
			}

			for (ID semid = 1; semid <= 5; semid++)
			{
				delete p_fork[semid - 1];
				p_fork[semid - 1] = 0;
			}

			do
			{
				syslog(LOG_NOTICE, "restart? [y|n] ");
				serial_rea_dat(TASK_PORTID, &c, 1);
			} while (c != 'y' && c != 'n');

			if (c == 'n')
				break;
		}

		syslog(LOG_NOTICE, "multitask test succeeded");
	}
	catch (std::bad_alloc&)
	{
		syslog(LOG_NOTICE, "multitask test failed");
	}

	std::exit(0);
}
示例#24
0
文件: sample.c 项目: ryuz/hos-v4a
/** %jp{初期化ハンドラ} */
void Sample_Initialize(VP_INT exinf)
{
	T_CMPF cmpf;
	T_CMBX cmbx;
	
	/* %jp{固定長メモリプール生成} */
	cmpf.mpfatr = TA_TFIFO;					
	cmpf.blkcnt = 3;						
	cmpf.blksz  = sizeof(T_PRINT_MSG);		
	cmpf.mpf    = NULL;						
	mpfid = acre_mpf(&cmpf);

	/* %jp{メールボックス生成} */
	cmbx.mbxatr  = TA_TFIFO | TA_TFIFO;		
	cmbx.maxmpri = 1;						
	cmbx.mprihd  = NULL;					
	mbxid = acre_mbx(&cmbx);

	/* %jp{タスク起動} */
	act_tsk(TSKID_PRINT);
	act_tsk(TSKID_SAMPLE1);
	act_tsk(TSKID_SAMPLE2);
	act_tsk(TSKID_SAMPLE3);
	act_tsk(TSKID_SAMPLE4);
	act_tsk(TSKID_SAMPLE5);
}
示例#25
0
文件: laser_car.c 项目: huchunxu/asp
void main_task(intptr_t exinf)
{
	//串口任务初始化
	ER_UINT	ercd;
	SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_NOTICE), LOG_UPTO(LOG_EMERG)));
	syslog(LOG_NOTICE, "Sample program starts (exinf = %d).", (int_t) exinf);

	ercd = serial_opn_por(TASK_PORTID);
	if (ercd < 0 && MERCD(ercd) != E_OBJ) {
		syslog(LOG_ERROR, "%s (%d) reported by `serial_opn_por'.",
									itron_strerror(ercd), SERCD(ercd));
	}
	SVC_PERROR(serial_ctl_por(TASK_PORTID,
							(IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV)));

	//初始化其它的任务
	SVC_PERROR(act_tsk(SPEED_TASK));
	SVC_PERROR(act_tsk(FOLLOW_TASK));
	SVC_PERROR(act_tsk(SENSORS_TASK));
	SVC_PERROR(sta_cyc(CYC_HANDLE));
	//结束自己的使命
	ext_tsk();
}
static mrb_value
mrb_ssp_thread_act(mrb_state *mrb, mrb_value self)
{
	ER retval;
	mrb_value id   = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "@task_id"));
	mrb_int id_num = mrb_fixnum(id);

	retval = act_tsk(id_num);

	if (retval != E_OK)
	{
		return(mrb_false_value());
	}
	return(mrb_true_value());
}
示例#27
0
static mrb_value
mrb_mruby_task_active(mrb_state *mrb, mrb_value self)
{
	mrb_int task_id;
	mrb_int ret = mrb_get_args(mrb, "i", &task_id);
	act_tsk(task_id);

	// for debug
//	char msg[256];
//	ev3_lcd_fill_rect(0, 0, EV3_LCD_WIDTH, EV3_LCD_HEIGHT, EV3_LCD_WHITE);
//	mrb_value val2 = mrb_fixnum_value(task_id);
//	sprintf(msg, "active taskID=%d", mrb_fixnum(val2));
//	ev3_lcd_draw_string(msg, 0, 8);

	return self;
}
void
tex_task1(TEXPTN texptn, intptr_t exinf)
{
	ER		ercd;

	check_point(5);
	check_state(false, false, TIPM_ENAALL, true, true, true);

	check_point(6);
	ercd = act_tsk(TASK1);
	check_ercd(ercd, E_OK);

	check_point(7);
	ercd = ext_tsk();
	check_ercd(ercd, E_OK);

	check_point(0);
}
示例#29
0
void
tex_task3(TEXPTN texptn, intptr_t exinf)
{
	ER		ercd;

	/*
	 *  システムスタック領域に余裕があることを,拡張サービスコールを使っ
	 *  て確認する.
	 *
	 *  ユーザタスクにおいて,システムスタック領域が減ることはないはず
	 *  だが,カーネルのバグにより増減する可能性はあるため,念のため確
	 *  認している.ただし,システムスタック領域が増えてしまうバグは,
	 *  これでは検出できない(不可解な動作をする).
	 */
	ercd = cal_svc(TFN_EXTSVC, 0, 0, 0, 0, 0);
	check_ercd(ercd, E_OK);

#ifdef DEBUG_LOG
	if (tex_start_count % 50 == 0) {
		syslog_2(LOG_NOTICE, "%d: sp = %x", tex_start_count, &ercd);
	}
#endif /* DEBUG_LOG */

	tex_start_count += 1;
	if (tex_start_count < UTASK_TEX_COUNT) {
		switch (texptn) {
		case 0x0001:
			ercd = ras_tex(TASK3, 0x0001);
			check_ercd(ercd, E_OK);
			break;

		case 0x0002:
			ercd = dis_dsp();
			check_ercd(ercd, E_OK);

			ercd = ena_tex();
			check_ercd(ercd, E_OK);

			ercd = act_tsk(TASK4);
			check_ercd(ercd, E_OK);
			break;
		}
	}
}
示例#30
0
void
task1(intptr_t exinf)
{
	ER		ercd;

	test_start(__FILE__);

	check_point(1);

	ercd = ena_tex();
	check_ercd(ercd, E_OK);

	/*
	 *  テスト項目(A)のテスト
	 */
	tex_start_count = 0U;
	ercd = ras_tex(TASK1, 0x0001);
	check_ercd(ercd, E_OK);
	check_assert(tex_start_count == STASK_TEX_COUNT);

	check_point(2);

	/*
	 *  テスト項目(B)のテスト
	 */
	tex_start_count = 0U;
	ercd = ras_tex(TASK1, 0x0002);
	check_ercd(ercd, E_OK);
	check_assert(tex_start_count == STASK_TEX_COUNT);

	check_point(3);

	/*
	 *  この後のテストはTASK3で実施
	 */
	ercd = act_tsk(TASK3);
	check_ercd(ercd, E_OK);

	ercd = ext_tsk();
	check_point(0);
}