--- /dev/null
+/*
+ * TOPPERS/JSP Kernel
+ * Toyohashi Open Platform for Embedded Real-Time Systems/
+ * Just Standard Profile Kernel
+ *
+ * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
+ * Toyohashi Univ. of Technology, JAPAN
+ * Copyright (C) 2004 by Embedded and Real-Time Systems Laboratory
+ * Graduate School of Information Science, Nagoya Univ., JAPAN
+ *
+ * ¾åµÃøºî¸¢¼Ô¤Ï¡¤°Ê²¼¤Î (1)¡Á(4) ¤Î¾ò·ï¤«¡¤Free Software Foundation
+ * ¤Ë¤è¤Ã¤Æ¸øɽ¤µ¤ì¤Æ¤¤¤ë GNU General Public License ¤Î Version 2 ¤Ëµ
+ * ½Ò¤µ¤ì¤Æ¤¤¤ë¾ò·ï¤òËþ¤¿¤¹¾ì¹ç¤Ë¸Â¤ê¡¤ËÜ¥½¥Õ¥È¥¦¥§¥¢¡ÊËÜ¥½¥Õ¥È¥¦¥§¥¢
+ * ¤ò²þÊѤ·¤¿¤â¤Î¤ò´Þ¤à¡¥°Ê²¼Æ±¤¸¡Ë¤ò»ÈÍÑ¡¦Ê£À½¡¦²þÊÑ¡¦ºÆÇÛÉۡʰʲ¼¡¤
+ * ÍøÍѤȸƤ֡ˤ¹¤ë¤³¤È¤ò̵½þ¤ÇµöÂú¤¹¤ë¡¥
+ * (1) ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ò¥½¡¼¥¹¥³¡¼¥É¤Î·Á¤ÇÍøÍѤ¹¤ë¾ì¹ç¤Ë¤Ï¡¤¾åµ¤ÎÃøºî
+ * ¸¢É½¼¨¡¤¤³¤ÎÍøÍѾò·ï¤ª¤è¤Ó²¼µ¤Î̵Êݾڵ¬Ä꤬¡¤¤½¤Î¤Þ¤Þ¤Î·Á¤Ç¥½¡¼
+ * ¥¹¥³¡¼¥ÉÃæ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¤³¤È¡¥
+ * (2) ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ò¡¤¥é¥¤¥Ö¥é¥ê·Á¼°¤Ê¤É¡¤Â¾¤Î¥½¥Õ¥È¥¦¥§¥¢³«È¯¤Ë»È
+ * ÍѤǤ¤ë·Á¤ÇºÆÇÛÉÛ¤¹¤ë¾ì¹ç¤Ë¤Ï¡¤ºÆÇÛÉÛ¤Ëȼ¤¦¥É¥¥å¥á¥ó¥È¡ÊÍøÍÑ
+ * ¼Ô¥Þ¥Ë¥å¥¢¥ë¤Ê¤É¡Ë¤Ë¡¤¾åµ¤ÎÃøºî¸¢É½¼¨¡¤¤³¤ÎÍøÍѾò·ï¤ª¤è¤Ó²¼µ
+ * ¤Î̵Êݾڵ¬Äê¤ò·ÇºÜ¤¹¤ë¤³¤È¡¥
+ * (3) ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ò¡¤µ¡´ï¤ËÁȤ߹þ¤à¤Ê¤É¡¤Â¾¤Î¥½¥Õ¥È¥¦¥§¥¢³«È¯¤Ë»È
+ * ÍѤǤ¤Ê¤¤·Á¤ÇºÆÇÛÉÛ¤¹¤ë¾ì¹ç¤Ë¤Ï¡¤¼¡¤Î¤¤¤º¤ì¤«¤Î¾ò·ï¤òËþ¤¿¤¹¤³
+ * ¤È¡¥
+ * (a) ºÆÇÛÉÛ¤Ëȼ¤¦¥É¥¥å¥á¥ó¥È¡ÊÍøÍѼԥޥ˥奢¥ë¤Ê¤É¡Ë¤Ë¡¤¾åµ¤ÎÃø
+ * ºî¸¢É½¼¨¡¤¤³¤ÎÍøÍѾò·ï¤ª¤è¤Ó²¼µ¤Î̵Êݾڵ¬Äê¤ò·ÇºÜ¤¹¤ë¤³¤È¡¥
+ * (b) ºÆÇÛÉۤηÁÂÖ¤ò¡¤Ê̤ËÄê¤á¤ëÊýË¡¤Ë¤è¤Ã¤Æ¡¤TOPPERS¥×¥í¥¸¥§¥¯¥È¤Ë
+ * Êó¹ð¤¹¤ë¤³¤È¡¥
+ * (4) ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ÎÍøÍѤˤè¤êľÀÜŪ¤Þ¤¿¤Ï´ÖÀÜŪ¤ËÀ¸¤¸¤ë¤¤¤«¤Ê¤ë»
+ * ³²¤«¤é¤â¡¤¾åµÃøºî¸¢¼Ô¤ª¤è¤ÓTOPPERS¥×¥í¥¸¥§¥¯¥È¤òÌÈÀÕ¤¹¤ë¤³¤È¡¥
+ *
+ * ËÜ¥½¥Õ¥È¥¦¥§¥¢¤Ï¡¤ÌµÊݾڤÇÄ󶡤µ¤ì¤Æ¤¤¤ë¤â¤Î¤Ç¤¢¤ë¡¥¾åµÃøºî¸¢¼Ô¤ª
+ * ¤è¤ÓTOPPERS¥×¥í¥¸¥§¥¯¥È¤Ï¡¤ËÜ¥½¥Õ¥È¥¦¥§¥¢¤Ë´Ø¤·¤Æ¡¤¤½¤ÎŬÍѲÄǽÀ¤â
+ * ´Þ¤á¤Æ¡¤¤¤¤«¤Ê¤ëÊݾڤâ¹Ô¤ï¤Ê¤¤¡¥¤Þ¤¿¡¤ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ÎÍøÍѤˤè¤êľ
+ * ÀÜŪ¤Þ¤¿¤Ï´ÖÀÜŪ¤ËÀ¸¤¸¤¿¤¤¤«¤Ê¤ë»³²¤Ë´Ø¤·¤Æ¤â¡¤¤½¤ÎÀÕǤ¤òÉé¤ï¤Ê¤¤¡¥
+ *
+ * @(#) $Id: sample1.c,v 1.6 2007/04/02 03:14:01 honda Exp $
+ */
+
+/*
+ * ¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à(1)¤ÎËÜÂÎ
+ *
+ * JSP¥«¡¼¥Í¥ë¤Î´ðËÜŪ¤ÊÆ°ºî¤ò³Îǧ¤¹¤ë¤¿¤á¤Î¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à¡¥
+ *
+ * ¥×¥í¥°¥é¥à¤Î³µÍ×:
+ *
+ * ¥æ¡¼¥¶¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò¼õ¤±»ý¤Ä¥á¥¤¥ó¥¿¥¹¥¯¡Ê¥¿¥¹¥¯ID: MAIN_TASK¡¤
+ * Í¥ÀèÅÙ: MAIN_PRIORITY¡Ë¤È¡¤»°¤Ä¤ÎÊÂÎó¼Â¹Ô¤µ¤ì¤ë¥¿¥¹¥¯¡Ê¥¿¥¹¥¯ID:
+ * TASK1¡ÁTASK3¡¤½é´üÍ¥ÀèÅÙ: MID_PRIORITY¡Ë¤Ç¹½À®¤µ¤ì¤ë¡¥¤Þ¤¿¡¤µ¯Æ°¼þ
+ * ´ü¤¬2Éäμþ´ü¥Ï¥ó¥É¥é¡Ê¼þ´ü¥Ï¥ó¥É¥éID: CYCHDR1¡Ë¤òÍѤ¤¤ë¡¥
+ *
+ * ÊÂÎó¼Â¹Ô¤µ¤ì¤ë¥¿¥¹¥¯¤Ï¡¤task_loop ²ó¶õ¥ë¡¼¥×¤ò¼Â¹Ô¤¹¤ëÅ٤ˡ¤¥¿¥¹¥¯
+ * ¤¬¼Â¹ÔÃæ¤Ç¤¢¤ë¤³¤È¤ò¤¢¤é¤ï¤¹¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤¹¤ë¡¥
+ *
+ * ¼þ´ü¥Ï¥ó¥É¥é¤Ï¡¤»°¤Ä¤ÎÍ¥ÀèÅÙ¡ÊHIGH_PRIORITY¡¤MID_PRIORITY¡¤
+ * LOW_PRIORITY¡Ë¤Î¥ì¥Ç¥£¥¥å¡¼¤ò²óž¤µ¤»¤ë¡¥¥×¥í¥°¥é¥à¤Îµ¯Æ°Ä¾¸å¤Ï¡¤
+ * ¼þ´ü¥Ï¥ó¥É¥é¤ÏÄä»ß¾õÂ֤ˤʤäƤ¤¤ë¡¥
+ *
+ * ¥á¥¤¥ó¥¿¥¹¥¯¤Ï¡¤¥·¥ê¥¢¥ëI/O¥Ý¡¼¥È¤«¤é¤Îʸ»úÆþÎϤò¹Ô¤¤¡Êʸ»úÆþÎϤò
+ * ÂԤäƤ¤¤ë´Ö¤Ï¡¤ÊÂÎó¼Â¹Ô¤µ¤ì¤ë¥¿¥¹¥¯¤¬¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë¡Ë¡¤ÆþÎϤµ¤ì¤¿
+ * ʸ»ú¤ËÂбþ¤·¤¿½èÍý¤ò¼Â¹Ô¤¹¤ë¡¥ÆþÎϤµ¤ì¤¿Ê¸»ú¤È½èÍý¤Î´Ø·¸¤Ï¼¡¤ÎÄ̤ꡥ
+ * Control-C ¤Þ¤¿¤Ï 'Q' ¤¬ÆþÎϤµ¤ì¤ë¤È¡¤¥×¥í¥°¥é¥à¤ò½ªÎ»¤¹¤ë¡¥
+ *
+ * '1' : °Ê¹ß¤Î¥³¥Þ¥ó¥É¤Ï TASK1 ¤ËÂФ·¤Æ¹Ô¤¦¡¥
+ * '2' : °Ê¹ß¤Î¥³¥Þ¥ó¥É¤Ï TASK2 ¤ËÂФ·¤Æ¹Ô¤¦¡¥
+ * '3' : °Ê¹ß¤Î¥³¥Þ¥ó¥É¤Ï TASK3 ¤ËÂФ·¤Æ¹Ô¤¦¡¥
+ * 'a' : ¥¿¥¹¥¯¤ò act_tsk ¤Ë¤è¤êµ¯Æ°¤¹¤ë¡¥
+ * 'A' : ¥¿¥¹¥¯¤ËÂФ¹¤ëµ¯Æ°Í×µá¤ò can_act ¤Ë¤è¤ê¥¥ã¥ó¥»¥ë¤¹¤ë¡¥
+ * 'e' : ¥¿¥¹¥¯¤Ë ext_tsk ¤ò¸Æ¤Ó½Ð¤µ¤»¡¤½ªÎ»¤µ¤»¤ë¡¥
+ * 't' : ¥¿¥¹¥¯¤ò ter_tsk ¤Ë¤è¤ê¶¯À©½ªÎ»¤¹¤ë¡¥
+ * '>' : ¥¿¥¹¥¯¤ÎÍ¥ÀèÅÙ¤ò HIGH_PRIORITY ¤Ë¤¹¤ë¡¥
+ * '=' : ¥¿¥¹¥¯¤ÎÍ¥ÀèÅÙ¤ò MID_PRIORITY ¤Ë¤¹¤ë¡¥
+ * '<' : ¥¿¥¹¥¯¤ÎÍ¥ÀèÅÙ¤ò LOW_PRIORITY ¤Ë¤¹¤ë¡¥
+ * 'G' : ¥¿¥¹¥¯¤ÎÍ¥ÀèÅÙ¤ò get_pri ¤ÇÆɤ߽Ф¹¡¥
+ * 's' : ¥¿¥¹¥¯¤Ë slp_tsk ¤ò¸Æ¤Ó½Ð¤µ¤»¡¤µ¯¾²ÂÔ¤Á¤Ë¤µ¤»¤ë¡¥
+ * 'S' : ¥¿¥¹¥¯¤Ë tslp_tsk(10ÉÃ) ¤ò¸Æ¤Ó½Ð¤µ¤»¡¤µ¯¾²ÂÔ¤Á¤Ë¤µ¤»¤ë¡¥
+ * 'w' : ¥¿¥¹¥¯¤ò wup_tsk ¤Ë¤è¤êµ¯¾²¤¹¤ë¡¥
+ * 'W' : ¥¿¥¹¥¯¤ËÂФ¹¤ëµ¯¾²Í×µá¤ò can_wup ¤Ë¤è¤ê¥¥ã¥ó¥»¥ë¤¹¤ë¡¥
+ * 'l' : ¥¿¥¹¥¯¤ò rel_wai ¤Ë¤è¤ê¶¯À©Åª¤ËÂÔ¤Á²ò½ü¤Ë¤¹¤ë¡¥
+ * 'u' : ¥¿¥¹¥¯¤ò sus_tsk ¤Ë¤è¤ê¶¯À©ÂÔ¤Á¾õÂ֤ˤ¹¤ë¡¥
+ * 'm' : ¥¿¥¹¥¯¤Î¶¯À©ÂÔ¤Á¾õÂÖ¤ò rsm_tsk ¤Ë¤è¤ê²ò½ü¤¹¤ë¡¥
+ * 'M' : ¥¿¥¹¥¯¤Î¶¯À©ÂÔ¤Á¾õÂÖ¤ò frsm_tsk ¤Ë¤è¤ê¶¯À©²ò½ü¤¹¤ë¡¥
+ * 'd' : ¥¿¥¹¥¯¤Ë dly_tsk(10ÉÃ) ¤ò¸Æ¤Ó½Ð¤µ¤»¡¤»þ´Ö·Ð²áÂÔ¤Á¤Ë¤µ¤»¤ë¡¥
+ * 'x' : ¥¿¥¹¥¯¤Ë¥Ñ¥¿¡¼¥ó 0x0001 ¤ÎÎã³°½èÍý¤òÍ׵᤹¤ë¡¥
+ * 'X' : ¥¿¥¹¥¯¤Ë¥Ñ¥¿¡¼¥ó 0x0002 ¤ÎÎã³°½èÍý¤òÍ׵᤹¤ë¡¥
+ * 'y' : ¥¿¥¹¥¯¤Ë dis_tex ¤ò¸Æ¤Ó½Ð¤µ¤»¡¤¥¿¥¹¥¯Îã³°¤ò¶Ø»ß¤¹¤ë¡¥
+ * 'Y' : ¥¿¥¹¥¯¤Ë ena_tex ¤ò¸Æ¤Ó½Ð¤µ¤»¡¤¥¿¥¹¥¯Îã³°¤òµö²Ä¤¹¤ë¡¥
+ * 'r' : »°¤Ä¤ÎÍ¥ÀèÅÙ¡ÊHIGH_PRIORITY¡¤MID_PRIORITY¡¤LOW_PRIORITY¡Ë¤Î
+ * ¥ì¥Ç¥£¥¥å¡¼¤ò²óž¤µ¤»¤ë¡¥
+ * 'c' : ¼þ´ü¥Ï¥ó¥É¥é¤òÆ°ºî¤µ¤»¤ë¡¥
+ * 'C' : ¼þ´ü¥Ï¥ó¥É¥é¤òÄä»ß¤µ¤»¤ë¡¥
+ * 'z' : CPUÎã³°¤òȯÀ¸¤µ¤»¤ë¡¥
+ * 'Z' : ¥×¥í¥°¥é¥à¤ò½ªÎ»¤¹¤ë¡¥
+ * 'V' : vxget_tim ¤ÇÀǽɾ²ÁÍÑ¥·¥¹¥Æ¥à»þ¹ï¤ò2²óÆɤࡥ
+ * 'v' : ȯ¹Ô¤·¤¿¥·¥¹¥Æ¥à¥³¡¼¥ë¤òɽ¼¨¤¹¤ë¡Ê¥Ç¥Õ¥©¥ë¥È¡Ë¡¥
+ * 'q' : ȯ¹Ô¤·¤¿¥·¥¹¥Æ¥à¥³¡¼¥ë¤òɽ¼¨¤·¤Ê¤¤¡¥
+ */
+
+#include <t_services.h>
+#include "kernel_id.h"
+#include "sample1.h"
+
+/*
+ * ʹԼ¹Ԥµ¤ì¤ë¥¿¥¹¥¯¤Ø¤Î¥á¥Ã¥»¡¼¥¸Îΰè
+ */
+char message[3];
+
+/*
+ * ¥ë¡¼¥×²ó¿ô
+ */
+UW task_loop; /* ¥¿¥¹¥¯Æâ¤Ç¤Î¥ë¡¼¥×²ó¿ô */
+UW tex_loop; /* Îã³°½èÍý¥ë¡¼¥Á¥óÆâ¤Ç¤Î¥ë¡¼¥×²ó¿ô */
+
+/*
+ * ʹԼ¹Ԥµ¤ì¤ë¥¿¥¹¥¯
+ */
+void task(VP_INT exinf)
+{
+ volatile UW i;
+ INT n = 0;
+ INT tskno = (INT) exinf;
+ const char *graph[] = { "|", " +", " *" };
+ char c;
+
+ ena_tex();
+ while (1) {
+ syslog(LOG_NOTICE, "task%d is running (%03d). %s",
+ tskno, ++n, graph[tskno-1]);
+ for (i = 0; i < task_loop; i++);
+ c = message[tskno-1];
+ message[tskno-1] = 0;
+ switch (c) {
+ case 'e':
+ syslog(LOG_INFO, "#%d#ext_tsk()", tskno);
+ ext_tsk();
+ case 's':
+ syslog(LOG_INFO, "#%d#slp_tsk()", tskno);
+ syscall(slp_tsk());
+ break;
+ case 'S':
+ syslog(LOG_INFO, "#%d#tslp_tsk(10000)", tskno);
+ syscall(tslp_tsk(10000));
+ break;
+ case 'd':
+ syslog(LOG_INFO, "#%d#dly_tsk(10000)", tskno);
+ syscall(dly_tsk(10000));
+ break;
+ case 'y':
+ syslog(LOG_INFO, "#%d#dis_tex()", tskno);
+ syscall(dis_tex());
+ break;
+ case 'Y':
+ syslog(LOG_INFO, "#%d#ena_tex()", tskno);
+ syscall(ena_tex());
+ break;
+#ifdef CPUEXC1
+ case 'z':
+ syslog(LOG_NOTICE, "#%d#raise CPU exception", tskno);
+ RAISE_CPU_EXCEPTION;
+ break;
+#endif /* CPUEXC1 */
+ case 'Z':
+ syslog(LOG_NOTICE, "Sample program ends with exception.");
+ kernel_exit();
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+/*
+ * ʹԤ·¤Æ¼Â¹Ô¤µ¤ì¤ë¥¿¥¹¥¯ÍѤΥ¿¥¹¥¯Îã³°½èÍý¥ë¡¼¥Á¥ó
+ */
+void tex_routine(TEXPTN texptn, VP_INT exinf)
+{
+ volatile UW i;
+ INT tskno = (INT) exinf;
+
+ syslog(LOG_NOTICE, "task%d receives exception 0x%04x. ",
+ tskno, texptn);
+ for (i = 0; i < tex_loop; i++);
+
+ if (texptn & 0x8000) {
+ syslog(LOG_INFO, "#%d#ext_tsk()", tskno);
+ ext_tsk();
+ }
+}
+
+/*
+ * CPUÎã³°¥Ï¥ó¥É¥é
+ */
+#ifdef CPUEXC1
+
+void
+cpuexc_handler(VP p_excinf)
+{
+ ID tskid;
+
+ 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_DEBUG,
+ "sns_loc = %d sns_dsp = %d", (int)sns_loc(), (int)sns_dsp());
+ syslog(LOG_DEBUG,
+ "vxsns_loc = %d vxsns_ctx = %d vxsns_dsp = %d vxsns_dpn = %d",
+ (int)vxsns_loc(p_excinf), (int)vxsns_ctx(p_excinf),
+ (int)vxsns_dsp(p_excinf), (int)vxsns_dpn(p_excinf));
+
+ if (!vxsns_loc(p_excinf) && !vxsns_ctx(p_excinf)) {
+ syscall(iget_tid(&tskid));
+ syscall(iras_tex(tskid, 0x8000));
+ }
+ else {
+ syslog(LOG_NOTICE, "Sample program ends with exception.");
+ kernel_exit();
+ }
+}
+
+#endif /* CPUEXC1 */
+
+/*
+ * ¼þ´ü¥Ï¥ó¥É¥é
+ *
+ * HIGH_PRIORITY¡¤MID_PRIORITY¡¤LOW_PRIORITY ¤Î³ÆÍ¥ÀèÅ٤Υì¥Ç¥£¥¥å¡¼
+ * ¤ò²óž¤µ¤»¤ë¡¥
+ */
+void cyclic_handler(VP_INT exinf)
+{
+ irot_rdq(HIGH_PRIORITY);
+ irot_rdq(MID_PRIORITY);
+ irot_rdq(LOW_PRIORITY);
+}
+
+
+#define PORTID_SCI2 3
+#if PORTID_SCI2 == TASK_PORTID
+#error PORTID_SCI2 == TASK_PORTID is not allowed.
+#endif /* PORTID_SCI2 == TASK_PORTID */
+
+static const char output_text[] = "This is SCI2 output test.";
+
+/*
+ * ¥á¥¤¥ó¥¿¥¹¥¯
+ */
+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);
+ syslog(LOG_NOTICE, "This program output low level log to port POL_PORTID");
+ syscall(serial_ctl_por(TASK_PORTID,
+ (IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV)));
+
+ /* SCI2¤Ø¤Î½ÐÎÏ */
+ syscall(serial_opn_por(PORTID_SCI2));
+ syscall(serial_ctl_por(PORTID_SCI2,
+ (IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV)));
+ syscall(serial_wri_dat(PORTID_SCI2, output_text, sizeof(output_text)));
+
+ /*
+ * ¥ë¡¼¥×²ó¿ô¤ÎÀßÄê
+ */
+ 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();
+}
+