OSDN Git Service

Add toppers-jsp/ in nxtOSEK_v205b0.zip. They are licensed under TOPPERS license.
[nxt-jsp/etrobo-atk.git] / nxtOSEK / toppers_jsp / tools / H8S-RENESAS / sample1.c
diff --git a/nxtOSEK/toppers_jsp/tools/H8S-RENESAS/sample1.c b/nxtOSEK/toppers_jsp/tools/H8S-RENESAS/sample1.c
new file mode 100644 (file)
index 0000000..d8b1f1c
--- /dev/null
@@ -0,0 +1,430 @@
+/*
+ *  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();
+}
+