Пример #1
0
/*
 *	メインタスク
 */
void main_task(VP_INT exinf)
{
	int len;
	char buf[256];
	const char cmnd[] = "RVAL\r";
	unsigned char chr;

	vmsk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG));
	syslog(LOG_NOTICE, "Sample program starts (exinf = %d).", (INT) exinf);

	Initialize();

	while(1)
	{
		SIO_FlashBuffer();

		strcpy(buf, cmnd);
		len = SIO_Write((unsigned char*)buf, sizeof(cmnd));			// Send Command

		chr = 0;
		while(chr != '\r')
		{
			len = SIO_ReadForever((unsigned char*)buf, 1);
			chr = buf[0];
		tslp_tsk(100);
		}

		tslp_tsk(100);
	}

	syslog(LOG_NOTICE, "Sample program ends.");
	kernel_exit();
}
Пример #2
0
/*
 *  モニタタスク
 */
void monitor(VP_INT exinf)
{
	INT  no, point;
	B    c;

	/* モニタで使用するデータの初期化 */

	mon_portid   = mon_default_portid = (ID)exinf;
	mon_datatype = DATA_BYTE;
	mon_logmask  = LOG_NOTICE;
	mon_lowmask  = LOG_EMERG;
	current_tskid = MONTASK;
	mon_infile   = stdin;

	if(mon_portid != CONSOLE_PORTID)
		syscall(serial_opn_por(mon_portid));
#ifdef NEED_MONITOR
	if(!need_monitor())
		ext_tsk();
#endif	/* NEED_MONITOR */
	_setup_stdio(&mon_portid);
#ifdef MONITOR_DELAY
	dly_tsk(MONITOR_DELAY);
#endif	/* MONITOR_DELAY */
#if defined(LOGTASK) && (LOGTASK_PRIORITY <= MONITOR_PRIORITY)
	chg_pri(LOGTASK, MONITOR_PRIORITY+1);
	dly_tsk(50);
	printf("change log task priority %d to %d !\n", LOGTASK_PRIORITY, MONITOR_PRIORITY+1);
#endif
	printf(banner,
		(TMONITOR_PRVER >> 12) & 0x0f,
		(TMONITOR_PRVER >> 4) & 0xff,
		TMONITOR_PRVER & 0x0f);
	vmsk_log(LOG_UPTO(mon_logmask), LOG_UPTO(mon_lowmask));
	syscall(serial_ctl_por(mon_portid, (IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV)));

	/* モニタのメインのデスパッチ */

	do{
		prompt(current_tskid);
		c = monitor_getstring(mon_command, &point);
		no = dispatch_command(mon_command, &point);
		putecho('\n');
		if(no >= 0)
			mon_dispatch[no].func(&mon_command[point]);
		fflush(NULL);
	}while(c != KEY_EXT);
	printf("exit monitor !!\n");
}
Пример #3
0
/*
 *  メインタスク
 */
void main_task(VP_INT exinf)
{
	char	c;
	ID	tskid = TASK1;
	volatile UW	i;
	INT	tskno = 1;
	ER_UINT	ercd;	
	PRI	tskpri;
	SYSTIM	stime1, stime2;
#ifndef OMIT_VGET_TIM
	SYSUTIM	utime1, utime2;
#endif /* OMIT_VGET_TIM */

	vmsk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG));
	syslog(LOG_NOTICE, "Sample program starts (exinf = %d).", (int)exinf);
	syscall(serial_ctl_por(TASK_PORTID,
			(IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV)));

	/*
 	 *  ループ回数の設定
	 */
	task_loop = LOOP_REF;
	get_tim(&stime1);
	for (i = 0; i < task_loop; i++);
	get_tim(&stime2);
	task_loop = LOOP_REF * 400 / (stime2 - stime1);
	tex_loop = task_loop / 5;

	/*
 	 *  タスクの起動
	 */
	act_tsk(TASK1);
	act_tsk(TASK2);
	act_tsk(TASK3);

	/*
 	 *  メインループ
	 */
	do {
		syscall(serial_rea_dat(TASK_PORTID, &c, 1));
		switch (c) {
		case 'e':
		case 's':
		case 'S':
		case 'd':
		case 'y':
		case 'Y':
		case 'z':
		case 'Z':
			message[tskno-1] = c;
			break;
		case '1':
			tskno = 1;
			tskid = TASK1;
			break;
		case '2':
			tskno = 2;
			tskid = TASK2;
			break;
		case '3':
			tskno = 3;
			tskid = TASK3;
			break;
		case 'a':
			syslog(LOG_INFO, "#act_tsk(%d)", tskno);
			syscall(act_tsk(tskid));
			break;
		case 'A':
			syslog(LOG_INFO, "#can_act(%d)", tskno);
			syscall(ercd = can_act(tskid));
			if (ercd >= 0) {
				syslog(LOG_NOTICE, "can_act(%d) returns %d",
						tskno, ercd);
			}
			break;
		case 't':
			syslog(LOG_INFO, "#ter_tsk(%d)", tskno);
			syscall(ter_tsk(tskid));
			break;
		case '>':
			syslog(LOG_INFO, "#chg_pri(%d, HIGH_PRIORITY)", tskno);
			chg_pri(tskid, HIGH_PRIORITY);
			break;
		case '=':
			syslog(LOG_INFO, "#chg_pri(%d, MID_PRIORITY)", tskno);
			chg_pri(tskid, MID_PRIORITY);
			break;
		case '<':
			syslog(LOG_INFO, "#chg_pri(%d, LOW_PRIORITY)", tskno);
			chg_pri(tskid, LOW_PRIORITY);
			break;
		case 'G':
			syslog(LOG_INFO, "#get_pri(%d, &tskpri)", tskno);
			syscall(ercd = get_pri(tskid, &tskpri));
			if (ercd >= 0) {
				syslog(LOG_NOTICE, "priority of task %d is %d",
						tskno, tskpri);
			}
			break;
		case 'w':
			syslog(LOG_INFO, "#wup_tsk(%d)", tskno);
			syscall(wup_tsk(tskid));
			break;
		case 'W':
			syslog(LOG_INFO, "#can_wup(%d)", tskno);
			syscall(ercd = can_wup(tskid));
			if (ercd >= 0) {
				syslog(LOG_NOTICE, "can_wup(%d) returns %d",
						tskno, ercd);
			}
			break;
		case 'l':
			syslog(LOG_INFO, "#rel_wai(%d)", tskno);
			syscall(rel_wai(tskid));
			break;
		case 'u':
			syslog(LOG_INFO, "#sus_tsk(%d)", tskno);
			syscall(sus_tsk(tskid));
			break;
		case 'm':
			syslog(LOG_INFO, "#rsm_tsk(%d)", tskno);
			syscall(rsm_tsk(tskid));
			break;
		case 'M':
			syslog(LOG_INFO, "#frsm_tsk(%d)", tskno);
			syscall(frsm_tsk(tskid));
			break;
		case 'x':
			syslog(LOG_INFO, "#ras_tex(%d, 0x0001)", tskno);
			syscall(ras_tex(tskid, 0x0001));
			break;
		case 'X':
			syslog(LOG_INFO, "#ras_tex(%d, 0x0002)", tskno);
			syscall(ras_tex(tskid, 0x0002));
			break;
		case 'r':
			syslog(LOG_INFO, "#rot_rdq(three priorities)");
			rot_rdq(HIGH_PRIORITY);
			rot_rdq(MID_PRIORITY);
			rot_rdq(LOW_PRIORITY);
			break;
		case 'c':
			sta_cyc(CYCHDR1);
			break;
		case 'C':
			stp_cyc(CYCHDR1);
			break;
#ifndef OMIT_VGET_TIM
		case 'V':
			syscall(vxget_tim(&utime1));
			syscall(vxget_tim(&utime2));
			syslog(LOG_NOTICE, "utime1 = %d, utime2 = %d",
						(UINT) utime1, (UINT) utime2);
			break;
#endif /* OMIT_VGET_TIM */
		case 'v':
			vmsk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG));
			break;
		case 'q':
			vmsk_log(LOG_UPTO(LOG_NOTICE), LOG_UPTO(LOG_EMERG));
			break;
		default:
			break;
		}
	} while (c != '\003' && c != 'Q');

	syslog(LOG_NOTICE, "Sample program ends.");
	kernel_exit();
}
Пример #4
0
/*
 *  ログコマンド
 */
static UW
log_command(B *command)
{
	T_TPRM loglist;
	T_PCHK *p;
	INT    point=0;
	B      cmd=-1;
	UW     value1, value2;
	UW     tcount, ttime;
	UW     type, address;
	int    no, count;

	count = sizeof(mon_log) / sizeof(struct SUBCOMMAND_TABLE);
	if(command[point]){
		for(no = 0 ; no < count ; no++){
			if(compare_word(mon_log[no].subcommand, command, 0)){
				skip_word(command, &point);
				cmd = mon_log[no].type;
				break;
			}
		}
	}
	switch(cmd){
	case MONLOG_MODE:				/* ロギングモード設定 */
		if(!get_value(command, &point, &value1, DEC_BASE))
			value1 = mon_logmask;
		if(!get_value(command, &point, &value2, DEC_BASE))
			value2 = mon_lowmask;
		if(value1 <= LOG_DEBUG)
			mon_logmask = value1;
		if(value2 <= LOG_DEBUG)
			mon_lowmask = value2;
		vmsk_log(LOG_UPTO(mon_logmask), LOG_UPTO(mon_lowmask));
		printf("  set logmask=%s lowmask=%s !\n", (VP_INT)log_mode[mon_logmask], (VP_INT)log_mode[mon_lowmask]);
		break;
	case MONLOG_TASK:				/* タスクモニタ設定 */
		if(!get_value(command, &point, &value1, DEC_BASE))
			value1 = 0;
		if(value1 < 100)
			value1 = 0;
		value2 = 0;
		do{
			count = get_tsklog(&loglist);
			if(value2 == 0){		/* はじめの1回 */
				value2 =loglist.currtime;
				printf("-- time --");
				for(no = 1 ; no <= NUM_LOG_DISP ; no++)
					printf(" --id=%04u --", no);
				printf(" -- others --  -vacancy-\n");
			}
			value2 += value1;
			if(value1 == 0)
				printf("%010lu\n", (unsigned long)loglist.pervtime);
			printf("%010lu", (unsigned long)loglist.currtime);
			tcount = ttime = 0;
			for(no = 1 ; no <= count ; no++){
				if(no <= NUM_LOG_DISP){
					printf(" %04u %05lu.%01u", loglist.tlog[no].runcount, (unsigned long)(loglist.tlog[no].runtimes/10),
							(int)(loglist.tlog[no].runtimes%10));
				}
				else{
					tcount += loglist.tlog[no].runcount;
					ttime += loglist.tlog[no].runtimes;
				}
			}
			printf(" %04u %05lu.%01u", (int)tcount, (unsigned long)(ttime/10), (int)(ttime%10));
			printf("  %07lu.%01u\n", (unsigned long)(loglist.tlog[0].runtimes/10), (int)(loglist.tlog[0].runtimes%10));
			if(value1){
				tslp_tsk(value2 - loglist.currtime);
				if(monitor_break())
					value1 = 0;
			}
		}while(value1);
		break;
	case MONLOG_PORT:				/* ポートモニタ設定 */
		value2 = NUM_PCHK-1;
		if(get_value(command, &point, &value1, DEC_BASE)){
			if((p = get_device_log(value1)) != 0){
				value2 = value1;
				if(!get_value(command, &point, &type, DEC_BASE)){
					if(p->logtype == 0)
						printf("  %02u %1u OFF      =", (int)value1, (int)p->logtype);
					else
						printf("  %02u %1u %s =", (int)value1, (int)p->logtype, (VP_INT)log_mode[p->logtype]);
					command = mon_command;
					monitor_getstring(command, &point);
					if(!get_value(command, &point, &type, DEC_BASE))
						type = 0;
					putchar('\n');
				}
				if(type >= LOG_DEBUG)
					type = 0;
				p->logtype = type;
				if(!get_value(command, &point, &address, HEX_BASE)){
					if(p->logtype == 0)
						printf("  %02d   OFF      %08lx =", (int)value1, (unsigned long)p->portaddress);
					else
						printf("  %02d   %s %08lx =", (int)value1, (VP_INT)log_mode[p->logtype], (unsigned long)p->portaddress);
					command = mon_command;
					monitor_getstring(command, &point);
					address = p->portaddress;
					get_value(command, &point, &address, HEX_BASE);
					putchar('\n');
				}
				p->portaddress = address;
			}
		}
		else
			value1 = 0;
		while(value1 <= value2){
			if((p = get_device_log(value1)) != 0){
				if(p->logtype > 0)
					printf("  %02d   %s port=%08lx\n", (int)value1, (VP_INT)log_mode[p->logtype], (unsigned long)p->portaddress);
				else
					printf("  %02d   OFF      port=%08lx\n", (int)value1, (unsigned long)p->portaddress);
			}
			else
				break;
			value1++;
		}
		break;
	default:
		break;
	}
	return 0;
}