Ignore:
Timestamp:
Jul 23, 2017, 2:29:40 PM (7 years ago)
Author:
coas-nagasima
Message:

SVNプロパティを設定

File:
1 edited

Legend:

Unmodified
Added
Removed
  • rubycfg_asp/trunk/csp/sample1n/sample1.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=UTF-8
    r313 r315  
    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' : 対象タスクに例外パターン0x0001の例外処理を要求する.
    128  *  'X' : 対象タスクに例外パターン0x0002の例外処理を要求する.
    129  *  'y' : 対象タスクにdis_texを呼び出させ,タスク例外を禁止する.
    130  *  'Y' : 対象タスクにena_texを呼び出させ,タスク例外を許可する.
    131  *  'r' : 3つの優å
    132 ˆåº¦ï¼ˆHIGH_PRIORITY,MID_PRIORITY,LOW_PRIORITY)のレ
    133  *        ディキューを回転させる.
    134  *  'c' : 周期ハンドラを動作開始させる.
    135  *  'C' : 周期ハンドラを動作停止させる.
    136  *  'b' : アラームハンドラを5秒後に起動するよう動作開始させる.
    137  *  'B' : アラームハンドラを動作停止させる.
    138  *  'z' : 対象タスクにCPU例外を発生させる(タスクを終了させる).
    139  *  'Z' : 対象タスクにCPUロック状æ
    140 ‹ã§CPU例外を発生させる(プログラムを
    141  *        終了する).
    142  *  '@' : タスク3をacre_tskにより生成し,def_texによりタスク例外処理
    143  *        ルーチンを設定する.
    144  *  '!' : 対象タスクをdel_tskにより削除する.
    145  *  'V' : get_utmで性能評価用システム時刻を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' : 対象タスクに例外パターン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 *  '@' : タスク3をacre_tskにより生成し,def_texによりタスク例外処理
     104 *        ルーチンを設定する.
     105 *  '!' : 対象タスクをdel_tskにより削除する.
     106 *  'V' : get_utmで性能評価用システム時刻を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 ulong_t tex_loop;               /* 例外処理ルーチンå†
    183 ã§ã®ãƒ«ãƒ¼ãƒ—回数 */
    184 
    185 /*
    186  *  並行実行されるタスク
     139 *  ループ回数
     140 */
     141ulong_t task_loop;              /* タスク内でのループ回数 */
     142ulong_t tex_loop;               /* 例外処理ルーチン内でのループ回数 */
     143
     144/*
     145 *  並行実行されるタスク
    187146 */
    188147void task(intptr_t exinf)
     
    245204
    246205/*
    247  *  並行して実行されるタスク用のタスク例外処理ルーチン
     206 *  並行して実行されるタスク用のタスク例外処理ルーチン
    248207 */
    249208void tex_routine(TEXPTN texptn, intptr_t exinf)
     
    263222
    264223/*
    265  *  CPU例外ハンドラ
     224 *  CPU例外ハンドラ
    266225 */
    267226#ifdef CPUEXC1
     
    299258
    300259/*
    301  *  周期ハンドラ
    302  *
    303  *  HIGH_PRIORITY,MID_PRIORITY,LOW_PRIORITY の各優å
    304 ˆåº¦ã®ãƒ¬ãƒ‡ã‚£ã‚­ãƒ¥ãƒ¼
    305  *  を回転させる.
     260 *  周期ハンドラ
     261 *
     262 *  HIGH_PRIORITY,MID_PRIORITY,LOW_PRIORITY の各優先度のレディキュー
     263 *  を回転させる.
    306264 */
    307265void cyclic_handler(intptr_t exinf)
     
    313271
    314272/*
    315  *  アラームハンドラ
    316  *
    317  *  HIGH_PRIORITY,MID_PRIORITY,LOW_PRIORITY の各優å
    318 ˆåº¦ã®ãƒ¬ãƒ‡ã‚£ã‚­ãƒ¥ãƒ¼
    319  *  を回転させる.
     273 *  アラームハンドラ
     274 *
     275 *  HIGH_PRIORITY,MID_PRIORITY,LOW_PRIORITY の各優先度のレディキュー
     276 *  を回転させる.
    320277 */
    321278void alarm_handler(intptr_t exinf)
     
    327284
    328285/*
    329  *  メインタスク
     286 *  メインタスク
    330287 */
    331288void main_task(intptr_t exinf)
     
    351308
    352309        /*
    353          *  シリアルポートの初期化
    354          *
    355          *  システムログタスクと同じシリアルポートを使う場合など,シリアル
    356          *  ポートがオープン済みの場合にはここでE_OBJエラーになるが,支障は
    357          *  ない.
     310         *  シリアルポートの初期化
     311         *
     312         *  システムログタスクと同じシリアルポートを使う場合など,シリアル
     313         *  ポートがオープン済みの場合にはここでE_OBJエラーになるが,支障は
     314         *  ない.
    358315         */
    359316        ercd = serial_opn_por(TASK_PORTID);
     
    366323
    367324        /*
    368          *  ループ回数の設定
    369          *
    370          *  並行実行されるタスクå†
    371 ã§ã®ç©ºãƒ«ãƒ¼ãƒ—の回数(task_loop)は,空ルー
    372          *  プの実行時間が約0.4秒になるように設定する.この設定のために,
    373          *  LOOP_REF回の空ループの実行時間を,その前後でget_timを呼ぶことで
    374          *  測定し,その測定結果から空ループの実行時間が0.4秒になるループ回
    375          *  数を求め,task_loopに設定する.
    376          *
    377          *  LOOP_REFは,デフォルトでは1,000,000に設定しているが,想定したよ
    378          *  りé
    379 ã„プロセッサでは,サンプルプログラムの実行開始に時間がかか
    380          *  りすぎるという問題を生じる.逆に想定したより速いプロセッサでは,
    381          *  LOOP_REF回の空ループの実行時間が短くなり,task_loopに設定する値
    382          *  の誤差が大きくなるという問題がある.
    383          *
    384          *  そこで,そのようなターゲットでは,target_test.hで,LOOP_REFを適
    385          *  切な値に定義するのが望ましい.
    386          *
    387          *  また,task_loopの値を固定したい場合には,その値をTASK_LOOPにマ
    388          *  クロ定義する.TASK_LOOPがマクロ定義されている場合,上記の測定を
    389          *  行わずに,TASK_LOOPに定義された値を空ループの回数とする.
    390          *
    391          * ターゲットによっては,空ループの実行時間の1回目の測定で,本来よ
    392          * りも長めになるものがある.このようなターゲットでは,MEASURE_TWICE
    393          * をマクロ定義することで,1回目の測定結果を捨てて,2回目の測定結果
    394          * を使う.
    395          *
    396          *  タスク例外処理ルーチンå†
    397 ã§ã®ç©ºãƒ«ãƒ¼ãƒ—の回数(tex_loop)は,
    398          *  task_loopの4分の1の値(空ループの実行時間が0.1秒になるループ回
    399          *  数)に設定する.
     325         *  ループ回数の設定
     326         *
     327         *  並行実行されるタスク内での空ループの回数(task_loop)は,空ルー
     328         *  プの実行時間が約0.4秒になるように設定する.この設定のために,
     329         *  LOOP_REF回の空ループの実行時間を,その前後でget_timを呼ぶことで
     330         *  測定し,その測定結果から空ループの実行時間が0.4秒になるループ回
     331         *  数を求め,task_loopに設定する.
     332         *
     333         *  LOOP_REFは,デフォルトでは1,000,000に設定しているが,想定したよ
     334         *  り遅いプロセッサでは,サンプルプログラムの実行開始に時間がかか
     335         *  りすぎるという問題を生じる.逆に想定したより速いプロセッサでは,
     336         *  LOOP_REF回の空ループの実行時間が短くなり,task_loopに設定する値
     337         *  の誤差が大きくなるという問題がある.
     338         *
     339         *  そこで,そのようなターゲットでは,target_test.hで,LOOP_REFを適
     340         *  切な値に定義するのが望ましい.
     341         *
     342         *  また,task_loopの値を固定したい場合には,その値をTASK_LOOPにマ
     343         *  クロ定義する.TASK_LOOPがマクロ定義されている場合,上記の測定を
     344         *  行わずに,TASK_LOOPに定義された値を空ループの回数とする.
     345         *
     346         * ターゲットによっては,空ループの実行時間の1回目の測定で,本来よ
     347         * りも長めになるものがある.このようなターゲットでは,MEASURE_TWICE
     348         * をマクロ定義することで,1回目の測定結果を捨てて,2回目の測定結果
     349         * を使う.
     350         *
     351         *  タスク例外処理ルーチン内での空ループの回数(tex_loop)は,
     352         *  task_loopの4分の1の値(空ループの実行時間が0.1秒になるループ回
     353         *  数)に設定する.
    400354         */
    401355#ifdef TASK_LOOP
     
    420374
    421375        /*
    422          *  タスクの起動
     376         *  タスクの起動
    423377         */
    424378        SVC_PERROR(act_tsk(TASK1));
     
    426380
    427381        /*
    428          *  メインループ
     382         *  メインループ
    429383         */
    430384        do {
Note: See TracChangeset for help on using the changeset viewer.