Ignore:
Timestamp:
Aug 23, 2017, 9:27:43 AM (7 years ago)
Author:
coas-nagasima
Message:

文字コードを設定

File:
1 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/asp3_dcre/sample/sample1.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r270 r321  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    11  *  上記著作権è€
    12 ã¯ï¼Œä»¥ä¸‹ã®(1)~(4)の条件を満たす場合に限り,本ソフトウェ
    13  *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
    14  *  変・再é
    15 å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
    16  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    17  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    18  *      スコード中に含まれていること.
    19  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    20  *      用できる形で再é
    21 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    22 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    23  *      è€
    24 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    25  *      の無保証規定を掲載すること.
    26  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    27  *      用できない形で再é
    28 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
    29  *      と.
    30  *    (a) 再é
    31 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    32 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    33  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    34  *    (b) 再é
    35 å¸ƒã®å½¢æ
    36 ‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
    37  *        報告すること.
    38  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    39  *      害からも,上記著作権è€
    40 ãŠã‚ˆã³TOPPERSプロジェクトをå
    41 è²¬ã™ã‚‹ã“と.
    42  *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
    43  *      由に基づく請求からも,上記著作権è€
    44 ãŠã‚ˆã³TOPPERSプロジェクトを
    45  *      å
    46 è²¬ã™ã‚‹ã“と.
     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 *      免責すること.
    4733 *
    48  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    49 ãŠ
    50  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    51  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
    52  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    53  *  の責任を負わない.
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    5439 *
    5540 *  $Id$
     
    5742
    5843/*
    59  *  サンプルプログラム(1)の本体
    60  *
    61  *  ASPカーネルの基本的な動作を確認するためのサンプルプログラム.
    62  *
    63  *  プログラムの概要:
    64  *
    65  *  ユーザインタフェースを受け持つメインタスク(タスクID: MAIN_TASK,優
    66  *  å
    67 ˆåº¦: MAIN_PRIORITY)と,3つの並行実行されるタスク(タスクID:
    68  *  TASK1~TASK3,初期優å
    69 ˆåº¦: MID_PRIORITY)で構成される.また,起動周
    70  *  期が2秒の周期ハンドラ(周期ハンドラID: CYCHDR1)を用いる.
    71  *
    72  *  並行実行されるタスクは,task_loop回空ループを実行する度に,タスクが
    73  *  実行中であることをあらわすメッセージを表示する.空ループを実行する
    74  *  のは,空ループなしでメッセージを出力すると,多量のメッセージが出力
    75  *  され,プログラムの動作が確認しずらくなるためである.また,低速なシ
    76  *  リアルポートを用いてメッセージを出力する場合に,すべてのメッセージ
    77  *  が出力できるように,メッセージの量を制限するという理由もある.
    78  *
    79  *  周期ハンドラは,三つの優å
    80 ˆåº¦ï¼ˆHIGH_PRIORITY,MID_PRIORITY,
    81  *  LOW_PRIORITY)のレディキューを回転させる.プログラムの起動直後は,
    82  *  周期ハンドラは停止状æ
    83 ‹ã«ãªã£ã¦ã„る.
    84  *
    85  *  メインタスクは,シリアルI/Oポートからの文字å
    86 ¥åŠ›ã‚’行い(文字å
    87 ¥åŠ›ã‚’
    88  *  å¾
    89 ã£ã¦ã„る間は,並行実行されるタスクが実行されている),å
    90 ¥åŠ›ã•ã‚ŒãŸ
    91  *  文字に対応した処理を実行する.å
    92 ¥åŠ›ã•ã‚ŒãŸæ–‡å­—と処理の関係は次の通り.
    93  *  Control-Cまたは'Q'がå
    94 ¥åŠ›ã•ã‚Œã‚‹ã¨ï¼Œãƒ—ログラムを終了する.
    95  *
    96  *  '1' : 対象タスクをTASK1に切り換える(初期設定).
    97  *  '2' : 対象タスクをTASK2に切り換える.
    98  *  '3' : 対象タスクをTASK3に切り換える.
    99  *  'a' : 対象タスクをact_tskにより起動する.
    100  *  'A' : 対象タスクに対する起動要求をcan_actによりキャンセルする.
    101  *  'e' : 対象タスクにext_tskを呼び出させ,終了させる.
    102  *  't' : 対象タスクをter_tskにより強制終了する.
    103  *  '>' : 対象タスクの優å
    104 ˆåº¦ã‚’HIGH_PRIORITYにする.
    105  *  '=' : 対象タスクの優å
    106 ˆåº¦ã‚’MID_PRIORITYにする.
    107  *  '<' : 対象タスクの優å
    108 ˆåº¦ã‚’LOW_PRIORITYにする.
    109  *  'G' : 対象タスクの優å
    110 ˆåº¦ã‚’get_priで読み出す.
    111  *  's' : 対象タスクにslp_tskを呼び出させ,起床å¾
    112 ã¡ã«ã•ã›ã‚‹ï¼Ž
    113  *  'S' : 対象タスクにtslp_tsk(10秒)を呼び出させ,起床å¾
    114 ã¡ã«ã•ã›ã‚‹ï¼Ž
    115  *  'w' : 対象タスクをwup_tskにより起床する.
    116  *  'W' : 対象タスクに対する起床要求をcan_wupによりキャンセルする.
    117  *  'l' : 対象タスクをrel_waiにより強制的にå¾
    118 ã¡è§£é™¤ã«ã™ã‚‹ï¼Ž
    119  *  'u' : 対象タスクをsus_tskにより強制å¾
    120 ã¡çŠ¶æ
    121 ‹ã«ã™ã‚‹ï¼Ž
    122  *  'm' : 対象タスクの強制å¾
    123 ã¡çŠ¶æ
    124 ‹ã‚’rsm_tskにより解除する.
    125  *  'd' : 対象タスクにdly_tsk(10秒)を呼び出させ,時間経過å¾
    126 ã¡ã«ã•ã›ã‚‹ï¼Ž
    127  *  'x' : 対象タスクにras_terにより終了要求する.
    128  *  'y' : 対象タスクにdis_terを呼び出させ,タスク終了を禁止する.
    129  *  'Y' : 対象タスクにena_terを呼び出させ,タスク終了を許可する.
    130  *  'r' : 3つの優å
    131 ˆåº¦ï¼ˆHIGH_PRIORITY,MID_PRIORITY,LOW_PRIORITY)のレ
    132  *        ディキューを回転させる.
    133  *  'c' : 周期ハンドラを動作開始させる.
    134  *  'C' : 周期ハンドラを動作停止させる.
    135  *  'b' : アラームハンドラを5秒後に起動するよう動作開始させる.
    136  *  'B' : アラームハンドラを動作停止させる.
    137  *  'z' : 対象タスクにCPU例外を発生させる(タスクを終了させる).
    138  *  'Z' : 対象タスクにCPUロック状æ
    139 ‹ã§CPU例外を発生させる(プログラムを
    140  *        終了する).
    141  *  '@' : タスク3をacre_tskにより生成する.
    142  *  '!' : 対象タスクをdel_tskにより削除する.
    143  *  '$' : アラームハンドラをacre_almにより生成する.
    144  *  '#' : アラームハンドラをdel_almにより削除する.
    145  *  'V' : fch_hrtで高分解能タイマを2回読む.
    146  *  'v' : 発行したシステムコールを表示する(デフォルト).
    147  *  'q' : 発行したシステムコールを表示しない.
     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' : 対象タスクにras_terにより終了要求する.
     91 *  'y' : 対象タスクにdis_terを呼び出させ,タスク終了を禁止する.
     92 *  'Y' : 対象タスクにena_terを呼び出させ,タスク終了を許可する.
     93 *  'r' : 3つの優先度(HIGH_PRIORITY,MID_PRIORITY,LOW_PRIORITY)のレ
     94 *        ディキューを回転させる.
     95 *  'c' : 周期ハンドラを動作開始させる.
     96 *  'C' : 周期ハンドラを動作停止させる.
     97 *  'b' : アラームハンドラを5秒後に起動するよう動作開始させる.
     98 *  'B' : アラームハンドラを動作停止させる.
     99 *  'z' : 対象タスクにCPU例外を発生させる(タスクを終了させる).
     100 *  'Z' : 対象タスクにCPUロック状態でCPU例外を発生させる(プログラムを
     101 *        終了する).
     102 *  '@' : タスク3をacre_tskにより生成する.
     103 *  '!' : 対象タスクをdel_tskにより削除する.
     104 *  '$' : アラームハンドラをacre_almにより生成する.
     105 *  '#' : アラームハンドラをdel_almにより削除する.
     106 *  'V' : fch_hrtで高分解能タイマを2回読む.
     107 *  'v' : 発行したシステムコールを表示する(デフォルト).
     108 *  'q' : 発行したシステムコールを表示しない.
    148109 */
    149110
     
    158119
    159120/*
    160  *  サービスコールのエラーのログ出力
     121 *  サービスコールのエラーのログ出力
    161122 */
    162123Inline void
     
    171132
    172133/*
    173  *  並行実行されるタスクへのメッセージ領域
     134 *  並行実行されるタスクへのメッセージ領域
    174135 */
    175136char    message[3];
    176137
    177138/*
    178  *  ループ回数
    179  */
    180 ulong_t task_loop;              /* タスクå†
    181 ã§ã®ãƒ«ãƒ¼ãƒ—回数 */
    182 
    183 /*
    184  *  並行実行されるタスク
     139 *  ループ回数
     140 */
     141ulong_t task_loop;              /* タスク内でのループ回数 */
     142
     143/*
     144 *  並行実行されるタスク
    185145 */
    186146void task(intptr_t exinf)
     
    242202
    243203/*
    244  *  割込みハンドラ
     204 *  割込みハンドラ
    245205 */
    246206#ifdef INTNO1
     
    257217
    258218/*
    259  *  CPU例外ハンドラ
    260  */
    261 ID      cpuexc_tskid;           /* CPU例外を起こしたタスクのID */
     219 *  CPU例外ハンドラ
     220 */
     221ID      cpuexc_tskid;           /* CPU例外を起こしたタスクのID */
    262222
    263223#ifdef CPUEXC1
     
    298258
    299259/*
    300  *  周期ハンドラ
    301  *
    302  *  HIGH_PRIORITY,MID_PRIORITY,LOW_PRIORITY の各優å
    303 ˆåº¦ã®ãƒ¬ãƒ‡ã‚£ã‚­ãƒ¥ãƒ¼
    304  *  を回転させる.
     260 *  周期ハンドラ
     261 *
     262 *  HIGH_PRIORITY,MID_PRIORITY,LOW_PRIORITY の各優先度のレディキュー
     263 *  を回転させる.
    305264 */
    306265void cyclic_handler(intptr_t exinf)
     
    312271
    313272/*
    314  *  アラームハンドラ
    315  *
    316  *  HIGH_PRIORITY,MID_PRIORITY,LOW_PRIORITY の各優å
    317 ˆåº¦ã®ãƒ¬ãƒ‡ã‚£ã‚­ãƒ¥ãƒ¼
    318  *  を回転させる.
     273 *  アラームハンドラ
     274 *
     275 *  HIGH_PRIORITY,MID_PRIORITY,LOW_PRIORITY の各優先度のレディキュー
     276 *  を回転させる.
    319277 */
    320278void alarm_handler(intptr_t exinf)
     
    326284
    327285/*
    328  *  例外処理タスク
     286 *  例外処理タスク
    329287 */
    330288void exc_task(intptr_t exinf)
     
    334292
    335293/*
    336  *  メインタスク
     294 *  メインタスク
    337295 */
    338296void main_task(intptr_t exinf)
     
    357315
    358316        /*
    359          *  シリアルポートの初期化
     317         *  シリアルポートの初期化
    360318         *
    361          *  システムログタスクと同じシリアルポートを使う場合など,シリアル
    362          *  ポートがオープン済みの場合にはここでE_OBJエラーになるが,支障は
    363          *  ない.
     319         *  システムログタスクと同じシリアルポートを使う場合など,シリアル
     320         *  ポートがオープン済みの場合にはここでE_OBJエラーになるが,支障は
     321         *  ない.
    364322         */
    365323        ercd = serial_opn_por(TASK_PORTID);
     
    372330
    373331        /*
    374          *  ループ回数の設定
     332         *  ループ回数の設定
    375333         *
    376          *  並行実行されるタスクå†
    377 ã§ã®ç©ºãƒ«ãƒ¼ãƒ—の回数(task_loop)は,空ルー
    378          *  プの実行時間が約0.4秒になるように設定する.この設定のために,
    379          *  LOOP_REF回の空ループの実行時間を,その前後でget_timを呼ぶことで
    380          *  測定し,その測定結果から空ループの実行時間が0.4秒になるループ回
    381          *  数を求め,task_loopに設定する.
     334         *  並行実行されるタスク内での空ループの回数(task_loop)は,空ルー
     335         *  プの実行時間が約0.4秒になるように設定する.この設定のために,
     336         *  LOOP_REF回の空ループの実行時間を,その前後でget_timを呼ぶことで
     337         *  測定し,その測定結果から空ループの実行時間が0.4秒になるループ回
     338         *  数を求め,task_loopに設定する.
    382339         *
    383          *  LOOP_REFは,デフォルトでは1,000,000に設定しているが,想定したよ
    384          *  りé
    385 ã„プロセッサでは,サンプルプログラムの実行開始に時間がかか
    386          *  りすぎるという問題を生じる.逆に想定したより速いプロセッサでは,
    387          *  LOOP_REF回の空ループの実行時間が短くなり,task_loopに設定する値
    388          *  の誤差が大きくなるという問題がある.
     340         *  LOOP_REFは,デフォルトでは1,000,000に設定しているが,想定したよ
     341         *  り遅いプロセッサでは,サンプルプログラムの実行開始に時間がかか
     342         *  りすぎるという問題を生じる.逆に想定したより速いプロセッサでは,
     343         *  LOOP_REF回の空ループの実行時間が短くなり,task_loopに設定する値
     344         *  の誤差が大きくなるという問題がある.
    389345         *
    390          *  そこで,そのようなターゲットでは,target_test.hで,LOOP_REFを適
    391          *  切な値に定義するのが望ましい.
     346         *  そこで,そのようなターゲットでは,target_test.hで,LOOP_REFを適
     347         *  切な値に定義するのが望ましい.
    392348         *
    393          *  また,task_loopの値を固定したい場合には,その値をTASK_LOOPにマ
    394          *  クロ定義する.TASK_LOOPがマクロ定義されている場合,上記の測定を
    395          *  行わずに,TASK_LOOPに定義された値を空ループの回数とする.
     349         *  また,task_loopの値を固定したい場合には,その値をTASK_LOOPにマ
     350         *  クロ定義する.TASK_LOOPがマクロ定義されている場合,上記の測定を
     351         *  行わずに,TASK_LOOPに定義された値を空ループの回数とする.
    396352         *
    397          * ターゲットによっては,空ループの実行時間の1回目の測定で,本来よ
    398          * りも長めになるものがある.このようなターゲットでは,MEASURE_TWICE
    399          * をマクロ定義することで,1回目の測定結果を捨てて,2回目の測定結果
    400          * を使う.
     353         * ターゲットによっては,空ループの実行時間の1回目の測定で,本来よ
     354         * りも長めになるものがある.このようなターゲットでは,MEASURE_TWICE
     355         * をマクロ定義することで,1回目の測定結果を捨てて,2回目の測定結果
     356         * を使う.
    401357         */
    402358#ifdef TASK_LOOP
     
    420376
    421377        /*
    422          *  タスクの起動
     378         *  タスクの起動
    423379         */
    424380        SVC_PERROR(act_tsk(TASK1));
     
    426382
    427383        /*
    428          *  メインループ
     384         *  メインループ
    429385         */
    430386        do {
Note: See TracChangeset for help on using the changeset viewer.