source: extension/ovrhdr/sample/sample1.c

このファイルの最終更新内容7 で kominami が 2015/09/12 9:22:12 に更新しました

TOPPERS/ASP 1.9.1

ファイルサイズ: 16.7 KB
Rev 
[7]1/*
2 *  TOPPERS/ASP Kernel
3 *      Toyohashi Open Platform for Embedded Real-Time Systems/
4 *      Advanced Standard Profile Kernel
5 *
6 *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 *                              Toyohashi Univ. of Technology, JAPAN
8 *  Copyright (C) 2004-2012 by Embedded and Real-Time Systems Laboratory
9 *              Graduate School of Information Science, Nagoya Univ., JAPAN
10 *
11 *  Ÿåµ­Ãøºîž¢ŒÔ€Ï¡€°Ê²Œ€Î(1)¡Á(4)€ÎŸò·ï€òËþ€¿€¹Ÿì¹ç€ËžÂ€ê¡€ËÜ¥œ¥Õ¥È¥Š¥§
12 *  ¥¢¡ÊËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò²þÊÑ€·€¿€â€Î€òŽÞ€à¡¥°Ê²ŒÆ±€ž¡Ë€ò»ÈÍÑ¡ŠÊ£Àœ¡Š²þ
13 *  ÊÑ¡ŠºÆÇÛÉۡʰʲŒ¡€ÍøÍрȞƀ֡ˀ¹€ë€³€È€ò̵œþ€ÇµöÂú€¹€ë¡¥
14 *  (1) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¥œ¡Œ¥¹¥³¡Œ¥É€Î·Á€ÇÍøÍÑ€¹€ëŸì¹ç€Ë€Ï¡€Ÿåµ­€ÎÃøºî
15 *      ž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äꀬ¡€€œ€Î€Þ€Þ€Î·Á€Ç¥œ¡Œ
16 *      ¥¹¥³¡Œ¥ÉÃæ€ËŽÞ€Þ€ì€Æ€€€ë€³€È¡¥
17 *  (2) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€¥é¥€¥Ö¥é¥ê·ÁŒ°€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
18 *      Íрǀ­€ë·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍÑ
19 *      ŒÔ¥Þ¥Ë¥å¥¢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃøºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­
20 *      €Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
21 *  (3) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€µ¡Žï€ËÁȀ߹þ€à€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
22 *      Íрǀ­€Ê€€·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€Œ¡€Î€€€º€ì€«€ÎŸò·ï€òËþ€¿€¹€³
23 *      €È¡¥
24 *    (a) ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍьԥޥ˥奢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃø
25 *        ºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
26 *    (b) ºÆÇÛÉۀηÁÂÖ€ò¡€ÊÌ€ËÄê€á€ëÊýË¡€Ë€è€Ã€Æ¡€TOPPERS¥×¥í¥ž¥§¥¯¥È€Ë
27 *        Êó¹ð€¹€ë€³€È¡¥
28 *  (4) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€ë€€€«€Ê€ë»
29 *      ³²€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€òÌÈÀÕ€¹€ë€³€È¡¥
30 *      €Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Î¥æ¡Œ¥¶€Þ€¿€Ï¥š¥ó¥É¥æ¡Œ¥¶€«€é€Î€€€«€Ê€ëÍý
31 *      ͳ€ËŽð€Å€¯ÀÁµá€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€ò
32 *      ÌÈÀÕ€¹€ë€³€È¡¥
33 *
34 *  ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Ï¡€ÌµÊÝŸÚ€ÇÄó¶¡€µ€ì€Æ€€€ë€â€Î€Ç€¢€ë¡¥Ÿåµ­Ãøºîž¢ŒÔ€ª
35 *  €è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€Ï¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ËŽØ€·€Æ¡€ÆÃÄê€Î»ÈÍÑÌÜŪ
36 *  €ËÂЀ¹€ëŬ¹çÀ­€âŽÞ€á€Æ¡€€€€«€Ê€ëÊÝŸÚ€â¹Ô€ï€Ê€€¡¥€Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§
37 *  ¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€¿€€€«€Ê€ë»³²€ËŽØ€·€Æ€â¡€€œ
38 *  €ÎÀÕÇ€€òÉé€ï€Ê€€¡¥
39 *
40 *  $Id$
41 */
42
43/*
44 *  ¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à(1)€ÎËÜÂÎ
45 *
46 *  ASP¥«¡Œ¥Í¥ë€ÎŽðËÜŪ€Êưºî€ò³Îǧ€¹€ë€¿€á€Î¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à¡¥
47 *
48 *  ¥×¥í¥°¥é¥à€Î³µÍ×:
49 *
50 *  ¥æ¡Œ¥¶¥€¥ó¥¿¥Õ¥§¡Œ¥¹€òŒõ€±»ý€Ä¥á¥€¥ó¥¿¥¹¥¯¡Ê¥¿¥¹¥¯ID: MAIN_TASK¡€Í¥
51 *  ÀèÅÙ: MAIN_PRIORITY¡Ë€È¡€3€Ä€ÎʹԌ¹Ԁµ€ì€ë¥¿¥¹¥¯¡Ê¥¿¥¹¥¯ID:
52 *  TASK1¡ÁTASK3¡€œéŽüÍ¥ÀèÅÙ: MID_PRIORITY¡Ë€Ç¹œÀ®€µ€ì€ë¡¥€Þ€¿¡€µ¯Æ°Œþ
53 *  Žü€¬2ÉÀΌþŽü¥Ï¥ó¥É¥é¡ÊŒþŽü¥Ï¥ó¥É¥éID: CYCHDR1¡Ë€òÍÑ€€€ë¡¥
54 *
55 *  ʹԌ¹Ԁµ€ì€ë¥¿¥¹¥¯€Ï¡€task_loop²ó¶õ¥ë¡Œ¥×€òŒÂ¹Ô€¹€ëÅـˡ€¥¿¥¹¥¯€¬
56 *  ŒÂ¹ÔÃæ€Ç€¢€ë€³€È€ò€¢€é€ï€¹¥á¥Ã¥»¡Œ¥ž€òÉœŒš€¹€ë¡¥¶õ¥ë¡Œ¥×€òŒÂ¹Ô€¹€ë
57 *  €Î€Ï¡€¶õ¥ë¡Œ¥×€Ê€·€Ç¥á¥Ã¥»¡Œ¥ž€òœÐÎÏ€¹€ë€È¡€Â¿Î̀Υá¥Ã¥»¡Œ¥ž€¬œÐÎÏ
58 *  €µ€ì¡€¥×¥í¥°¥é¥à€Îưºî€¬³Îǧ€·€º€é€¯€Ê€ë€¿€á€Ç€¢€ë¡¥€Þ€¿¡€Ä㮀ʥ·
59 *  ¥ê¥¢¥ë¥Ý¡Œ¥È€òÍÑ€€€Æ¥á¥Ã¥»¡Œ¥ž€òœÐÎÏ€¹€ëŸì¹ç€Ë¡€€¹€Ù€Æ€Î¥á¥Ã¥»¡Œ¥ž
60 *  €¬œÐÎπǀ­€ë€è€Š€Ë¡€¥á¥Ã¥»¡Œ¥ž€ÎÎÌ€òÀ©žÂ€¹€ë€È€€€ŠÍýͳ€â€¢€ë¡¥
61 *
62 *  ŒþŽü¥Ï¥ó¥É¥é€Ï¡€»°€Ä€ÎÍ¥ÀèÅÙ¡ÊHIGH_PRIORITY¡€MID_PRIORITY¡€
63 *  LOW_PRIORITY¡Ë€Î¥ì¥Ç¥£¥­¥å¡Œ€ò²óÅŸ€µ€»€ë¡¥¥×¥í¥°¥é¥à€Îµ¯Æ°ÄŸžå€Ï¡€
64 *  ŒþŽü¥Ï¥ó¥É¥é€ÏÄä»ßŸõÂրˀʀÀƀ€€ë¡¥
65 *
66 *  ¥á¥€¥ó¥¿¥¹¥¯€Ï¡€¥·¥ê¥¢¥ëI/O¥Ý¡Œ¥È€«€é€ÎÊž»úÆþÎÏ€ò¹Ô€€¡ÊÊž»úÆþÎÏ€ò
67 *  ÂԀÀƀ€€ëŽÖ€Ï¡€Ê¹Ԍ¹Ԁµ€ì€ë¥¿¥¹¥¯€¬ŒÂ¹Ô€µ€ì€Æ€€€ë¡Ë¡€ÆþÎÏ€µ€ì€¿
68 *  Êž»ú€ËÂбþ€·€¿œèÍý€òŒÂ¹Ô€¹€ë¡¥ÆþÎÏ€µ€ì€¿Êž»ú€ÈœèÍý€ÎŽØ·ž€ÏŒ¡€ÎÄ̀ꡥ
69 *  Control-C€Þ€¿€Ï'Q'€¬ÆþÎÏ€µ€ì€ë€È¡€¥×¥í¥°¥é¥à€òœªÎ»€¹€ë¡¥
70 *
71 *  '1' : ÂПݥ¿¥¹¥¯€òTASK1€ËÀڀꎹ€š€ë¡ÊœéŽüÀßÄê¡Ë¡¥
72 *  '2' : ÂПݥ¿¥¹¥¯€òTASK2€ËÀڀꎹ€š€ë¡¥
73 *  '3' : ÂПݥ¿¥¹¥¯€òTASK3€ËÀڀꎹ€š€ë¡¥
74 *  'a' : ÂПݥ¿¥¹¥¯€òact_tsk€Ë€è€êµ¯Æ°€¹€ë¡¥
75 *  'A' : ÂПݥ¿¥¹¥¯€ËÂЀ¹€ëµ¯Æ°Í×µá€òcan_act€Ë€è€ê¥­¥ã¥ó¥»¥ë€¹€ë¡¥
76 *  'e' : ÂПݥ¿¥¹¥¯€Ëext_tsk€òžÆ€ÓœÐ€µ€»¡€œªÎ»€µ€»€ë¡¥
77 *  't' : ÂПݥ¿¥¹¥¯€òter_tsk€Ë€è€ê¶¯À©œªÎ»€¹€ë¡¥
78 *  '>' : ÂПݥ¿¥¹¥¯€ÎÍ¥ÀèÅÙ€òHIGH_PRIORITY€Ë€¹€ë¡¥
79 *  '=' : ÂПݥ¿¥¹¥¯€ÎÍ¥ÀèÅÙ€òMID_PRIORITY€Ë€¹€ë¡¥
80 *  '<' : ÂПݥ¿¥¹¥¯€ÎÍ¥ÀèÅÙ€òLOW_PRIORITY€Ë€¹€ë¡¥
81 *  'G' : ÂПݥ¿¥¹¥¯€ÎÍ¥ÀèÅÙ€òget_pri€ÇÆÉ€ßœÐ€¹¡¥
82 *  's' : ÂПݥ¿¥¹¥¯€Ëslp_tsk€òžÆ€ÓœÐ€µ€»¡€µ¯Ÿ²ÂÔ€Á€Ë€µ€»€ë¡¥
83 *  'S' : ÂПݥ¿¥¹¥¯€Ëtslp_tsk(10ÉÃ)€òžÆ€ÓœÐ€µ€»¡€µ¯Ÿ²ÂÔ€Á€Ë€µ€»€ë¡¥
84 *  'w' : ÂПݥ¿¥¹¥¯€òwup_tsk€Ë€è€êµ¯Ÿ²€¹€ë¡¥
85 *  'W' : ÂПݥ¿¥¹¥¯€ËÂЀ¹€ëµ¯Ÿ²Í×µá€òcan_wup€Ë€è€ê¥­¥ã¥ó¥»¥ë€¹€ë¡¥
86 *  'l' : ÂПݥ¿¥¹¥¯€òrel_wai€Ë€è€ê¶¯À©Åª€ËÂÔ€Á²òœü€Ë€¹€ë¡¥
87 *  'u' : ÂПݥ¿¥¹¥¯€òsus_tsk€Ë€è€ê¶¯À©ÂÔ€ÁŸõÂրˀ¹€ë¡¥
88 *  'm' : ÂПݥ¿¥¹¥¯€Î¶¯À©ÂÔ€ÁŸõÂÖ€òrsm_tsk€Ë€è€ê²òœü€¹€ë¡¥
89 *  'd' : ÂПݥ¿¥¹¥¯€Ëdly_tsk(10ÉÃ)€òžÆ€ÓœÐ€µ€»¡€»þŽÖ·Ð²áÂÔ€Á€Ë€µ€»€ë¡¥
90 *  'x' : ÂПݥ¿¥¹¥¯€ËÎã³°¥Ñ¥¿¡Œ¥ó0x0001€ÎÎã³°œèÍý€òÍ׵္€ë¡¥
91 *  'X' : ÂПݥ¿¥¹¥¯€ËÎã³°¥Ñ¥¿¡Œ¥ó0x0002€ÎÎã³°œèÍý€òÍ׵္€ë¡¥
92 *  'y' : ÂПݥ¿¥¹¥¯€Ëdis_tex€òžÆ€ÓœÐ€µ€»¡€¥¿¥¹¥¯Îã³°€ò¶Ø»ß€¹€ë¡¥
93 *  'Y' : ÂПݥ¿¥¹¥¯€Ëena_tex€òžÆ€ÓœÐ€µ€»¡€¥¿¥¹¥¯Îã³°€òµö²Ä€¹€ë¡¥
94 *  'r' : 3€Ä€ÎÍ¥ÀèÅÙ¡ÊHIGH_PRIORITY¡€MID_PRIORITY¡€LOW_PRIORITY¡Ë€Î¥ì
95 *        ¥Ç¥£¥­¥å¡Œ€ò²óÅŸ€µ€»€ë¡¥
96 *  'c' : ŒþŽü¥Ï¥ó¥É¥é€òưºî³«»Ï€µ€»€ë¡¥
97 *  'C' : ŒþŽü¥Ï¥ó¥É¥é€òưºîÄä»ß€µ€»€ë¡¥
98 *  'b' : ¥¢¥é¡Œ¥à¥Ï¥ó¥É¥é€ò5ÉÞå€Ëµ¯Æ°€¹€ë€è€ŠÆ°ºî³«»Ï€µ€»€ë¡¥
99 *  'B' : ¥¢¥é¡Œ¥à¥Ï¥ó¥É¥é€òưºîÄä»ß€µ€»€ë¡¥
100 *  'z' : ÂПݥ¿¥¹¥¯€ËCPUÎã³°€òȯÀž€µ€»€ë¡Ê¥¿¥¹¥¯€òœªÎ»€µ€»€ë¡Ë¡¥
101 *  'Z' : ÂПݥ¿¥¹¥¯€ËCPU¥í¥Ã¥¯ŸõÂÖ€ÇCPUÎã³°€òȯÀž€µ€»€ë¡Ê¥×¥í¥°¥é¥à€ò
102 *        œªÎ»€¹€ë¡Ë¡¥
103 *  'V' : get_utm€ÇÀ­ÇœÉŸ²ÁÍÑ¥·¥¹¥Æ¥à»þ¹ï€ò2²óÆÉ€à¡¥
104 *  'o' : ÂПݥ¿¥¹¥¯€ËÂЀ·€Æ¥ª¡Œ¥Ð¥é¥ó¥Ï¥ó¥É¥é€òưºî³«»Ï€µ€»€ë
105 *  'O' : ÂПݥ¿¥¹¥¯€ËÂЀ·€Æ¥ª¡Œ¥Ð¥é¥ó¥Ï¥ó¥É¥é€òưºîÄä»ß€µ€»€ë
106 *  'v' : ȯ¹Ô€·€¿¥·¥¹¥Æ¥à¥³¡Œ¥ë€òÉœŒš€¹€ë¡Ê¥Ç¥Õ¥©¥ë¥È¡Ë¡¥
107 *  'q' : ȯ¹Ô€·€¿¥·¥¹¥Æ¥à¥³¡Œ¥ë€òÉœŒš€·€Ê€€¡¥
108 */
109
110#include <kernel.h>
111#include <t_syslog.h>
112#include <t_stdlib.h>
113#include "syssvc/serial.h"
114#include "syssvc/syslog.h"
115#include "kernel_cfg.h"
116#include "sample1.h"
117
118/*
119 *  ¥µ¡Œ¥Ó¥¹¥³¡Œ¥ë€Î¥š¥é¡Œ€Î¥í¥°œÐÎÏ
120 */
121Inline void
122svc_perror(const char *file, int_t line, const char *expr, ER ercd)
123{
124        if (ercd < 0) {
125                t_perror(LOG_ERROR, file, line, expr, ercd);
126        }
127}
128
129#define SVC_PERROR(expr)        svc_perror(__FILE__, __LINE__, #expr, (expr))
130
131/*
132 *  ʹԌ¹Ԁµ€ì€ë¥¿¥¹¥¯€Ø€Î¥á¥Ã¥»¡Œ¥žÎΰè
133 */
134char    message[3];
135
136/*
137 *  ¥ë¡Œ¥×²ó¿ô
138 */
139ulong_t task_loop;              /* ¥¿¥¹¥¯Æâ€Ç€Î¥ë¡Œ¥×²ó¿ô */
140ulong_t tex_loop;               /* Îã³°œèÍý¥ë¡Œ¥Á¥óÆâ€Ç€Î¥ë¡Œ¥×²ó¿ô */
141
142/*
143 *  ʹԌ¹Ԁµ€ì€ë¥¿¥¹¥¯
144 */
145void task(intptr_t exinf)
146{
147        volatile ulong_t        i;
148        int_t           n = 0;
149        int_t           tskno = (int_t) exinf;
150        const char      *graph[] = { "|    ", "  +  ", "    *" };
151        char            c;
152#ifdef TOPPERS_SUPPORT_OVRHDR
153        T_ROVR          pk_rovr;
154#endif /* TOPPERS_SUPPORT_OVRHDR */
155
156        SVC_PERROR(ena_tex());
157        while (true) {
158#ifdef TOPPERS_SUPPORT_OVRHDR
159                SVC_PERROR(ref_ovr(TSK_SELF, &pk_rovr));
160                if ((pk_rovr.ovrstat & TOVR_STA) != 0) {
161                        syslog(LOG_NOTICE, "task%d is running (%03d).   %s  [%ld]",
162                                                                tskno, ++n, graph[tskno-1], pk_rovr.leftotm);
163                }
164                else {
165                        syslog(LOG_NOTICE, "task%d is running (%03d).   %s",
166                                                                                tskno, ++n, graph[tskno-1]);
167                }
168#else /* TOPPERS_SUPPORT_OVRHDR */
169                syslog(LOG_NOTICE, "task%d is running (%03d).   %s",
170                                                                                tskno, ++n, graph[tskno-1]);
171#endif /* TOPPERS_SUPPORT_OVRHDR */
172                for (i = 0; i < task_loop; i++);
173                c = message[tskno-1];
174                message[tskno-1] = 0;
175                switch (c) {
176                case 'e':
177                        syslog(LOG_INFO, "#%d#ext_tsk()", tskno);
178                        SVC_PERROR(ext_tsk());
179                        assert(0);
180                case 's':
181                        syslog(LOG_INFO, "#%d#slp_tsk()", tskno);
182                        SVC_PERROR(slp_tsk());
183                        break;
184                case 'S':
185                        syslog(LOG_INFO, "#%d#tslp_tsk(10000)", tskno);
186                        SVC_PERROR(tslp_tsk(10000));
187                        break;
188                case 'd':
189                        syslog(LOG_INFO, "#%d#dly_tsk(10000)", tskno);
190                        SVC_PERROR(dly_tsk(10000));
191                        break;
192                case 'y':
193                        syslog(LOG_INFO, "#%d#dis_tex()", tskno);
194                        SVC_PERROR(dis_tex());
195                        break;
196                case 'Y':
197                        syslog(LOG_INFO, "#%d#ena_tex()", tskno);
198                        SVC_PERROR(ena_tex());
199                        break;
200#ifdef CPUEXC1
201                case 'z':
202                        syslog(LOG_NOTICE, "#%d#raise CPU exception", tskno);
203                        RAISE_CPU_EXCEPTION;
204                        break;
205                case 'Z':
206                        SVC_PERROR(loc_cpu());
207                        syslog(LOG_NOTICE, "#%d#raise CPU exception", tskno);
208                        RAISE_CPU_EXCEPTION;
209                        SVC_PERROR(unl_cpu());
210                        break;
211#endif /* CPUEXC1 */
212                default:
213                        break;
214                }
215        }
216}
217
218/*
219 *  ʹԀ·€ÆŒÂ¹Ô€µ€ì€ë¥¿¥¹¥¯ÍрΥ¿¥¹¥¯Îã³°œèÍý¥ë¡Œ¥Á¥ó
220 */
221void tex_routine(TEXPTN texptn, intptr_t exinf)
222{
223        volatile ulong_t        i;
224        int_t   tskno = (int_t) exinf;
225
226        syslog(LOG_NOTICE, "task%d receives exception 0x%04x.", tskno, texptn);
227        for (i = 0; i < tex_loop; i++);
228
229        if ((texptn & 0x8000U) != 0U) {
230                syslog(LOG_INFO, "#%d#ext_tsk()", tskno);
231                SVC_PERROR(ext_tsk());
232                assert(0);
233        }
234}
235
236/*
237 *  CPUÎã³°¥Ï¥ó¥É¥é
238 */
239#ifdef CPUEXC1
240
241void
242cpuexc_handler(void *p_excinf)
243{
244        ID              tskid;
245
246        syslog(LOG_NOTICE, "CPU exception handler (p_excinf = %08p).", p_excinf);
247        if (sns_ctx() != true) {
248                syslog(LOG_WARNING,
249                                        "sns_ctx() is not true in CPU exception handler.");
250        }
251        if (sns_dpn() != true) {
252                syslog(LOG_WARNING,
253                                        "sns_dpn() is not true in CPU exception handler.");
254        }
255        syslog(LOG_INFO, "sns_loc = %d sns_dsp = %d sns_tex = %d",
256                                                                        sns_loc(), sns_dsp(), sns_tex());
257        syslog(LOG_INFO, "xsns_dpn = %d xsns_xpn = %d",
258                                                                        xsns_dpn(p_excinf), xsns_xpn(p_excinf));
259
260        if (xsns_xpn(p_excinf)) {
261                syslog(LOG_NOTICE, "Sample program ends with exception.");
262                SVC_PERROR(ext_ker());
263                assert(0);
264        }
265
266        SVC_PERROR(iget_tid(&tskid));
267        SVC_PERROR(iras_tex(tskid, 0x8000U));
268}
269
270#endif /* CPUEXC1 */
271
272/*
273 *  ŒþŽü¥Ï¥ó¥É¥é
274 *
275 *  HIGH_PRIORITY¡€MID_PRIORITY¡€LOW_PRIORITY €Î³ÆÍ¥ÀèÅـΥì¥Ç¥£¥­¥å¡Œ
276 *  €ò²óÅŸ€µ€»€ë¡¥
277 */
278void cyclic_handler(intptr_t exinf)
279{
280        SVC_PERROR(irot_rdq(HIGH_PRIORITY));
281        SVC_PERROR(irot_rdq(MID_PRIORITY));
282        SVC_PERROR(irot_rdq(LOW_PRIORITY));
283}
284
285/*
286 *  ¥¢¥é¡Œ¥à¥Ï¥ó¥É¥é
287 *
288 *  HIGH_PRIORITY¡€MID_PRIORITY¡€LOW_PRIORITY €Î³ÆÍ¥ÀèÅـΥì¥Ç¥£¥­¥å¡Œ
289 *  €ò²óÅŸ€µ€»€ë¡¥
290 */
291void alarm_handler(intptr_t exinf)
292{
293        SVC_PERROR(irot_rdq(HIGH_PRIORITY));
294        SVC_PERROR(irot_rdq(MID_PRIORITY));
295        SVC_PERROR(irot_rdq(LOW_PRIORITY));
296}
297
298/*
299 *  ¥ª¡Œ¥Ð¥é¥ó¥Ï¥ó¥É¥é
300 */
301#ifdef TOPPERS_SUPPORT_OVRHDR
302
303void
304overrun_handler(ID tskid, intptr_t exinf)
305{
306        int_t           tskno = (int_t) exinf;
307
308        syslog(LOG_NOTICE, "Overrun handler for task%d.", tskno);
309        syslog(LOG_INFO, "#iras_tex(%d, 0x0004U)", tskno);
310        SVC_PERROR(iras_tex(tskid, 0x0004U));
311}
312
313#endif /* TOPPERS_SUPPORT_OVRHDR */
314
315/*
316 *  ¥á¥€¥ó¥¿¥¹¥¯
317 */
318void main_task(intptr_t exinf)
319{
320        char    c;
321        ID              tskid = TASK1;
322        int_t   tskno = 1;
323        ER_UINT ercd;
324        PRI             tskpri;
325#ifndef TASK_LOOP
326        volatile ulong_t        i;
327        SYSTIM  stime1, stime2;
328#endif /* TASK_LOOP */
329#ifdef TOPPERS_SUPPORT_GET_UTM
330        SYSUTM  utime1, utime2;
331#endif /* TOPPERS_SUPPORT_GET_UTM */
332
333        SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG)));
334        syslog(LOG_NOTICE, "Sample program starts (exinf = %d).", (int_t) exinf);
335
336        /*
337         *  ¥·¥ê¥¢¥ë¥Ý¡Œ¥È€ÎœéŽü²œ
338         *
339         *  ¥·¥¹¥Æ¥à¥í¥°¥¿¥¹¥¯€ÈƱ€ž¥·¥ê¥¢¥ë¥Ý¡Œ¥È€ò»È€ŠŸì¹ç€Ê€É¡€¥·¥ê¥¢¥ë
340         *  ¥Ý¡Œ¥È€¬¥ª¡Œ¥×¥óºÑ€ß€ÎŸì¹ç€Ë€Ï€³€³€ÇE_OBJ¥š¥é¡Œ€Ë€Ê€ë€¬¡€»ÙŸã€Ï
341         *  €Ê€€¡¥
342         */
343        ercd = serial_opn_por(TASK_PORTID);
344        if (ercd < 0 && MERCD(ercd) != E_OBJ) {
345                syslog(LOG_ERROR, "%s (%d) reported by `serial_opn_por'.",
346                                                                        itron_strerror(ercd), SERCD(ercd));
347        }
348        SVC_PERROR(serial_ctl_por(TASK_PORTID,
349                                                        (IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV)));
350
351        /*
352         *  ¥ë¡Œ¥×²ó¿ô€ÎÀßÄê
353         *
354         *  ʹԌ¹Ԁµ€ì€ë¥¿¥¹¥¯Æâ€Ç€Î¶õ¥ë¡Œ¥×€Î²ó¿ô¡Êtask_loop¡Ë€Ï¡€¶õ¥ë¡Œ
355         *  ¥×€ÎŒÂ¹Ô»þŽÖ€¬Ìó0.4ÉÀˀʀë€è€Š€ËÀßÄꀹ€ë¡¥€³€ÎÀßÄê€Î€¿€á€Ë¡€
356         *  LOOP_REF²ó€Î¶õ¥ë¡Œ¥×€ÎŒÂ¹Ô»þŽÖ€ò¡€€œ€ÎÁ°žå€Çget_tim€òžÆ€Ö€³€È€Ç
357         *  ¬Äꀷ¡€€œ€Î¬Äê·ë²Ì€«€é¶õ¥ë¡Œ¥×€ÎŒÂ¹Ô»þŽÖ€¬0.4ÉÀˀʀë¥ë¡Œ¥×²ó
358         *  ¿ô€òµá€á¡€task_loop€ËÀßÄꀹ€ë¡¥
359         *
360         *  LOOP_REF€Ï¡€¥Ç¥Õ¥©¥ë¥È€Ç€Ï1,000,000€ËÀßÄꀷ€Æ€€€ë€¬¡€ÁÛÄꀷ€¿€è
361         *  €êÃÙ€€¥×¥í¥»¥Ã¥µ€Ç€Ï¡€¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à€ÎŒÂ¹Ô³«»Ï€Ë»þŽÖ€¬€«€«
362         *  €ê€¹€®€ë€È€€€ŠÌäÂê€òÀž€ž€ë¡¥µÕ€ËÁÛÄꀷ€¿€è€ê®€€¥×¥í¥»¥Ã¥µ€Ç€Ï¡€
363         *  LOOP_REF²ó€Î¶õ¥ë¡Œ¥×€ÎŒÂ¹Ô»þŽÖ€¬Ã»€¯€Ê€ê¡€task_loop€ËÀßÄꀹ€ëÃÍ
364         *  €Îžíº¹€¬Â瀭€¯€Ê€ë€È€€€ŠÌäÂꀬ€¢€ë¡¥
365         *
366         *  €œ€³€Ç¡€€œ€Î€è€Š€Ê¥¿¡Œ¥²¥Ã¥È€Ç€Ï¡€target_test.h€Ç¡€LOOP_REF€òŬ
367         *  ÀÚ€ÊÃÍ€ËÄêµÁ€¹€ë€Î€¬ËŸ€Þ€·€€¡¥
368         *
369         *  €Þ€¿¡€task_loop€ÎÃÍ€òžÇÄꀷ€¿€€Ÿì¹ç€Ë€Ï¡€€œ€ÎÃÍ€òTASK_LOOP€Ë¥Þ
370         *  ¥¯¥íÄêµÁ€¹€ë¡¥TASK_LOOP€¬¥Þ¥¯¥íÄêµÁ€µ€ì€Æ€€€ëŸì¹ç¡€Ÿåµ­€Î¬Äê€ò
371         *  ¹Ô€ï€º€Ë¡€TASK_LOOP€ËÄêµÁ€µ€ì€¿ÃÍ€ò¶õ¥ë¡Œ¥×€Î²ó¿ô€È€¹€ë¡¥
372         *
373         * ¥¿¡Œ¥²¥Ã¥È€Ë€è€Ã€Æ€Ï¡€¶õ¥ë¡Œ¥×€ÎŒÂ¹Ô»þŽÖ€Î1²óÌ܀άÄê€Ç¡€ËÜÍè€è
374         * €ê€âĹ€á€Ë€Ê€ë€â€Î€¬€¢€ë¡¥€³€Î€è€Š€Ê¥¿¡Œ¥²¥Ã¥È€Ç€Ï¡€MEASURE_TWICE
375         * €ò¥Þ¥¯¥íÄêµÁ€¹€ë€³€È€Ç¡€1²óÌ܀άÄê·ë²Ì€òŒÎ€Æ€Æ¡€2²óÌ܀άÄê·ë²Ì
376         * €ò»È€Š¡¥
377         *
378         *  ¥¿¥¹¥¯Îã³°œèÍý¥ë¡Œ¥Á¥óÆâ€Ç€Î¶õ¥ë¡Œ¥×€Î²ó¿ô¡Êtex_loop¡Ë€Ï¡€
379         *  task_loop€Î4ʬ€Î1€ÎÃ͡ʶõ¥ë¡Œ¥×€ÎŒÂ¹Ô»þŽÖ€¬0.1ÉÀˀʀë¥ë¡Œ¥×²ó
380         *  ¿ô¡Ë€ËÀßÄꀹ€ë¡¥
381         */
382#ifdef TASK_LOOP
383        task_loop = TASK_LOOP;
384#else /* TASK_LOOP */
385
386#ifdef MEASURE_TWICE
387        task_loop = LOOP_REF;
388        SVC_PERROR(get_tim(&stime1));
389        for (i = 0; i < task_loop; i++);
390        SVC_PERROR(get_tim(&stime2));
391#endif /* MEASURE_TWICE */
392
393        task_loop = LOOP_REF;
394        SVC_PERROR(get_tim(&stime1));
395        for (i = 0; i < task_loop; i++);
396        SVC_PERROR(get_tim(&stime2));
397        task_loop = LOOP_REF * 400UL / (stime2 - stime1);
398
399#endif /* TASK_LOOP */
400        tex_loop = task_loop / 4;
401
402        /*
403         *  ¥¿¥¹¥¯€Îµ¯Æ°
404         */
405        SVC_PERROR(act_tsk(TASK1));
406        SVC_PERROR(act_tsk(TASK2));
407        SVC_PERROR(act_tsk(TASK3));
408
409        /*
410         *  ¥á¥€¥ó¥ë¡Œ¥×
411         */
412        do {
413                SVC_PERROR(serial_rea_dat(TASK_PORTID, &c, 1));
414                switch (c) {
415                case 'e':
416                case 's':
417                case 'S':
418                case 'd':
419                case 'y':
420                case 'Y':
421                case 'z':
422                case 'Z':
423                        message[tskno-1] = c;
424                        break;
425                case '1':
426                        tskno = 1;
427                        tskid = TASK1;
428                        break;
429                case '2':
430                        tskno = 2;
431                        tskid = TASK2;
432                        break;
433                case '3':
434                        tskno = 3;
435                        tskid = TASK3;
436                        break;
437                case 'a':
438                        syslog(LOG_INFO, "#act_tsk(%d)", tskno);
439                        SVC_PERROR(act_tsk(tskid));
440                        break;
441                case 'A':
442                        syslog(LOG_INFO, "#can_act(%d)", tskno);
443                        SVC_PERROR(ercd = can_act(tskid));
444                        if (ercd >= 0) {
445                                syslog(LOG_NOTICE, "can_act(%d) returns %d", tskno, ercd);
446                        }
447                        break;
448                case 't':
449                        syslog(LOG_INFO, "#ter_tsk(%d)", tskno);
450                        SVC_PERROR(ter_tsk(tskid));
451                        break;
452                case '>':
453                        syslog(LOG_INFO, "#chg_pri(%d, HIGH_PRIORITY)", tskno);
454                        SVC_PERROR(chg_pri(tskid, HIGH_PRIORITY));
455                        break;
456                case '=':
457                        syslog(LOG_INFO, "#chg_pri(%d, MID_PRIORITY)", tskno);
458                        SVC_PERROR(chg_pri(tskid, MID_PRIORITY));
459                        break;
460                case '<':
461                        syslog(LOG_INFO, "#chg_pri(%d, LOW_PRIORITY)", tskno);
462                        SVC_PERROR(chg_pri(tskid, LOW_PRIORITY));
463                        break;
464                case 'G':
465                        syslog(LOG_INFO, "#get_pri(%d, &tskpri)", tskno);
466                        SVC_PERROR(ercd = get_pri(tskid, &tskpri));
467                        if (ercd >= 0) {
468                                syslog(LOG_NOTICE, "priority of task %d is %d", tskno, tskpri);
469                        }
470                        break;
471                case 'w':
472                        syslog(LOG_INFO, "#wup_tsk(%d)", tskno);
473                        SVC_PERROR(wup_tsk(tskid));
474                        break;
475                case 'W':
476                        syslog(LOG_INFO, "#can_wup(%d)", tskno);
477                        SVC_PERROR(ercd = can_wup(tskid));
478                        if (ercd >= 0) {
479                                syslog(LOG_NOTICE, "can_wup(%d) returns %d", tskno, ercd);
480                        }
481                        break;
482                case 'l':
483                        syslog(LOG_INFO, "#rel_wai(%d)", tskno);
484                        SVC_PERROR(rel_wai(tskid));
485                        break;
486                case 'u':
487                        syslog(LOG_INFO, "#sus_tsk(%d)", tskno);
488                        SVC_PERROR(sus_tsk(tskid));
489                        break;
490                case 'm':
491                        syslog(LOG_INFO, "#rsm_tsk(%d)", tskno);
492                        SVC_PERROR(rsm_tsk(tskid));
493                        break;
494                case 'x':
495                        syslog(LOG_INFO, "#ras_tex(%d, 0x0001U)", tskno);
496                        SVC_PERROR(ras_tex(tskid, 0x0001U));
497                        break;
498                case 'X':
499                        syslog(LOG_INFO, "#ras_tex(%d, 0x0002U)", tskno);
500                        SVC_PERROR(ras_tex(tskid, 0x0002U));
501                        break;
502                case 'r':
503                        syslog(LOG_INFO, "#rot_rdq(three priorities)");
504                        SVC_PERROR(rot_rdq(HIGH_PRIORITY));
505                        SVC_PERROR(rot_rdq(MID_PRIORITY));
506                        SVC_PERROR(rot_rdq(LOW_PRIORITY));
507                        break;
508                case 'c':
509                        syslog(LOG_INFO, "#sta_cyc(1)");
510                        SVC_PERROR(sta_cyc(CYCHDR1));
511                        break;
512                case 'C':
513                        syslog(LOG_INFO, "#stp_cyc(1)");
514                        SVC_PERROR(stp_cyc(CYCHDR1));
515                        break;
516                case 'b':
517                        syslog(LOG_INFO, "#sta_alm(1, 5000)");
518                        SVC_PERROR(sta_alm(ALMHDR1, 5000));
519                        break;
520                case 'B':
521                        syslog(LOG_INFO, "#stp_alm(1)");
522                        SVC_PERROR(stp_alm(ALMHDR1));
523                        break;
524
525                case 'V':
526#ifdef TOPPERS_SUPPORT_GET_UTM
527                        SVC_PERROR(get_utm(&utime1));
528                        SVC_PERROR(get_utm(&utime2));
529                        syslog(LOG_NOTICE, "utime1 = %ld, utime2 = %ld",
530                                                                                (ulong_t) utime1, (ulong_t) utime2);
531#else /* TOPPERS_SUPPORT_GET_UTM */
532                        syslog(LOG_NOTICE, "get_utm is not supported.");
533#endif /* TOPPERS_SUPPORT_GET_UTM */
534                        break;
535
536                case 'o':
537#ifdef TOPPERS_SUPPORT_OVRHDR
538                        syslog(LOG_INFO, "#sta_ovr(%d, 2000000)", tskno);
539                        SVC_PERROR(sta_ovr(tskid, 2000000));
540#else /* TOPPERS_SUPPORT_OVRHDR */
541                        syslog(LOG_NOTICE, "sta_ovr is not supported.");
542#endif /* TOPPERS_SUPPORT_OVRHDR */
543                        break;
544                case 'O':
545#ifdef TOPPERS_SUPPORT_OVRHDR
546                        syslog(LOG_INFO, "#stp_ovr(%d)", tskno);
547                        SVC_PERROR(stp_ovr(tskid));
548#else /* TOPPERS_SUPPORT_OVRHDR */
549                        syslog(LOG_NOTICE, "stp_ovr is not supported.");
550#endif /* TOPPERS_SUPPORT_OVRHDR */
551                        break;
552
553                case 'v':
554                        SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_INFO),
555                                                                                LOG_UPTO(LOG_EMERG)));
556                        break;
557                case 'q':
558                        SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_NOTICE),
559                                                                                LOG_UPTO(LOG_EMERG)));
560                        break;
561
562#ifdef BIT_KERNEL
563                case ' ':
564                        SVC_PERROR(loc_cpu());
565                        {
566                                extern ER       bit_kernel(void);
567
568                                SVC_PERROR(ercd = bit_kernel());
569                                if (ercd >= 0) {
570                                        syslog(LOG_NOTICE, "bit_kernel passed.");
571                                }
572                        }
573                        SVC_PERROR(unl_cpu());
574                        break;
575#endif /* BIT_KERNEL */
576
577                default:
578                        break;
579                }
580        } while (c != '\003' && c != 'Q');
581
582        syslog(LOG_NOTICE, "Sample program ends.");
583        SVC_PERROR(ext_ker());
584        assert(0);
585}
詳しい使い方は TracBrowser を参照してください。