Ignore:
Timestamp:
May 22, 2019, 10:03:37 PM (5 years ago)
Author:
coas-nagasima
Message:

ビルドが通るよう更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • azure_iot_hub/trunk/asp3_dcre/sample/tSample2.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r388 r389  
    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' : 対象タスクをcTask_activateにより起動する.
    100  *  'A' : 対象タスクに対する起動要求をcTask_cancelActivateによりキャンセルする.
    101  *  'e' : 対象タスクにexitTaskを呼び出させ,終了させる.
    102  *  't' : 対象タスクをcTask_terminateにより強制終了する.
    103  *  '>' : 対象タスクの優å
    104 ˆåº¦ã‚’HIGH_PRIORITYにする.
    105  *  '=' : 対象タスクの優å
    106 ˆåº¦ã‚’MID_PRIORITYにする.
    107  *  '<' : 対象タスクの優å
    108 ˆåº¦ã‚’LOW_PRIORITYにする.
    109  *  'G' : 対象タスクの優å
    110 ˆåº¦ã‚’cTask_getPriorityで読み出す.
    111  *  's' : 対象タスクにsleepを呼び出させ,起床å¾
    112 ã¡ã«ã•ã›ã‚‹ï¼Ž
    113  *  'S' : 対象タスクにsleepTimeout10秒)を呼び出させ,起床å¾
    114 ã¡ã«ã•ã›ã‚‹ï¼Ž
    115  *  'w' : 対象タスクをcTask_wakeupにより起床する.
    116  *  'W' : 対象タスクに対する起床要求をcTask_cancelWakeupによりキャンセルする.
    117  *  'l' : 対象タスクをcTask_releaseWaitにより強制的にå¾
    118 ã¡è§£é™¤ã«ã™ã‚‹ï¼Ž
    119  *  'u' : 対象タスクをcTask_suspendにより強制å¾
    120 ã¡çŠ¶æ
    121 ‹ã«ã™ã‚‹ï¼Ž
    122  *  'm' : 対象タスクの強制å¾
    123 ã¡çŠ¶æ
    124 ‹ã‚’cTask_resumeにより解除する.
    125  *  'd' : 対象タスクにdelay(10秒)を呼び出させ,時間経過å¾
    126 ã¡ã«ã•ã›ã‚‹ï¼Ž
    127  *  'x' : 対象タスクにraiseTerminateにより終了要求する.
    128  *  'y' : 対象タスクにdisableTerminateを呼び出させ,タスク終了を禁止する.
    129  *  'Y' : 対象タスクにenableTerminateを呼び出させ,タスク終了を許可する.
    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  *  'V' : fetchHighResolutionTimerで高分解能タイマを2回読む.
    142  *  'v' : 発行したシステムコールを表示する(デフォルト).
    143  *  'q' : 発行したシステムコールを表示しない.
    144  * 呼び口関数 #_TCPF_#
     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' : 対象タスクをcTask_activateにより起動する.
     75 *  'A' : 対象タスクに対する起動要求をcTask_cancelActivateによりキャンセルする.
     76 *  'e' : 対象タスクにexitTaskを呼び出させ,終了させる.
     77 *  't' : 対象タスクをcTask_terminateにより強制終了する.
     78 *  '>' : 対象タスクの優先度をHIGH_PRIORITYにする.
     79 *  '=' : 対象タスクの優先度をMID_PRIORITYにする.
     80 *  '<' : 対象タスクの優先度をLOW_PRIORITYにする.
     81 *  'G' : 対象タスクの優先度をcTask_getPriorityで読み出す.
     82 *  's' : 対象タスクにsleepを呼び出させ,起床待ちにさせる.
     83 *  'S' : 対象タスクにsleepTimeout10秒)を呼び出させ,起床待ちにさせる.
     84 *  'w' : 対象タスクをcTask_wakeupにより起床する.
     85 *  'W' : 対象タスクに対する起床要求をcTask_cancelWakeupによりキャンセルする.
     86 *  'l' : 対象タスクをcTask_releaseWaitにより強制的に待ち解除にする.
     87 *  'u' : 対象タスクをcTask_suspendにより強制待ち状態にする.
     88 *  'm' : 対象タスクの強制待ち状態をcTask_resumeにより解除する.
     89 *  'd' : 対象タスクにdelay(10秒)を呼び出させ,時間経過待ちにさせる.
     90 *  'x' : 対象タスクにraiseTerminateにより終了要求する.
     91 *  'y' : 対象タスクにdisableTerminateを呼び出させ,タスク終了を禁止する.
     92 *  'Y' : 対象タスクにenableTerminateを呼び出させ,タスク終了を許可する.
     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 *  'V' : fetchHighResolutionTimerで高分解能タイマを2回読む.
     103 *  'v' : 発行したシステムコールを表示する(デフォルト).
     104 *  'q' : 発行したシステムコールを表示しない.
     105 * 呼び口関数 #_TCPF_#
    145106 * require port: signature:sKernel context:task
    146107 *   ER             getExtendedInformation( intptr_t* p_exinf );
     
    246207
    247208/*
    248  *  サービスコールのエラーのログ出力
     209 *  サービスコールのエラーのログ出力
    249210 */
    250211Inline void
     
    259220
    260221/*
    261  *  並行実行されるタスクへのメッセージ領域
     222 *  並行実行されるタスクへのメッセージ領域
    262223 */
    263224char    message[3];
    264225
    265226/*
    266  *  ループ回数
    267  */
    268 ulong_t task_loop;              /* タスクå†
    269 ã§ã®ãƒ«ãƒ¼ãƒ—回数 */
    270 
    271 /*
    272  *  並行実行されるタスク
     227 *  ループ回数
     228 */
     229ulong_t task_loop;              /* タスク内でのループ回数 */
     230
     231/*
     232 *  並行実行されるタスク
    273233 */
    274234void eSampleTask_main(int_t subscript)
     
    330290
    331291/*
    332  *  CPU例外ハンドラ
    333  */
    334 
    335 ID      cpuexc_tskid;           /* CPU例外を起こしたタスクのID */
     292 *  CPU例外ハンドラ
     293 */
     294
     295ID      cpuexc_tskid;           /* CPU例外を起こしたタスクのID */
    336296
    337297#ifdef CPUEXC1
     
    373333
    374334/*
    375  *  周期ハンドラ
    376  *
    377  *  HIGH_PRIORITY,MID_PRIORITY,LOW_PRIORITY の各優å
    378 ˆåº¦ã®ãƒ¬ãƒ‡ã‚£ã‚­ãƒ¥ãƒ¼
    379  *  を回転させる.
     335 *  周期ハンドラ
     336 *
     337 *  HIGH_PRIORITY,MID_PRIORITY,LOW_PRIORITY の各優先度のレディキュー
     338 *  を回転させる.
    380339 */
    381340/* #[<ENTRY_FUNC>]# eiCyclicHandler_main
     
    393352
    394353/*
    395  *  アラームハンドラ
    396  *
    397  *  HIGH_PRIORITY,MID_PRIORITY,LOW_PRIORITY の各優å
    398 ˆåº¦ã®ãƒ¬ãƒ‡ã‚£ã‚­ãƒ¥ãƒ¼
    399  *  を回転させる.
     354 *  アラームハンドラ
     355 *
     356 *  HIGH_PRIORITY,MID_PRIORITY,LOW_PRIORITY の各優先度のレディキュー
     357 *  を回転させる.
    400358 */
    401359/* #[<ENTRY_FUNC>]# eiAlarmHandler_main
     
    412370}
    413371/*
    414  *  例外処理タスク
     372 *  例外処理タスク
    415373 */
    416374/* #[<ENTRY_FUNC>]# eExceptionTask_main
     
    424382}
    425383/*
    426  *  メインタスク
    427  */
    428 /* 属性の設定 *//* #[<ENTRY_FUNC>]# eMainTask_main
     384 *  メインタスク
     385 */
     386/* 属性の設定 *//* #[<ENTRY_FUNC>]# eMainTask_main
    429387 * name:         eMainTask_main
    430388 * global_name:  tSample2_eMainTask_main
     
    447405        } else {
    448406                /*
    449                  *  シリアル出力ができない場合、ログメッセージをå
    450 ¨ã¦
    451                  *  低レベル出力により出力する。
     407                 *  シリアル出力ができない場合、ログメッセージを全て
     408                 *  低レベル出力により出力する。
    452409                 */
    453410                SVC_PERROR(cSysLog_mask(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_DEBUG)));
     
    456413
    457414        /*
    458          *  シリアルポートの初期化
     415         *  シリアルポートの初期化
    459416         *
    460          *  システムログタスクと同じシリアルポートを使う場合など,シリアル
    461          *  ポートがオープン済みの場合にはここでE_OBJエラーになるが,支障は
    462          *  ない.
     417         *  システムログタスクと同じシリアルポートを使う場合など,シリアル
     418         *  ポートがオープン済みの場合にはここでE_OBJエラーになるが,支障は
     419         *  ない.
    463420         */
    464421
     
    473430
    474431        /*
    475          *  ループ回数の設定
     432         *  ループ回数の設定
    476433         *
    477          *  並行実行されるタスクå†
    478 ã§ã®ç©ºãƒ«ãƒ¼ãƒ—の回数(task_loop)は,空ルー
    479          *  プの実行時間が約0.4秒になるように設定する.この設定のために,
    480          *  LOOP_REF回の空ループの実行時間を,その前後でget_timを呼ぶことで
    481          *  測定し,その測定結果から空ループの実行時間が0.4秒になるループ回
    482          *  数を求め,task_loopに設定する.
     434         *  並行実行されるタスク内での空ループの回数(task_loop)は,空ルー
     435         *  プの実行時間が約0.4秒になるように設定する.この設定のために,
     436         *  LOOP_REF回の空ループの実行時間を,その前後でget_timを呼ぶことで
     437         *  測定し,その測定結果から空ループの実行時間が0.4秒になるループ回
     438         *  数を求め,task_loopに設定する.
    483439         *
    484          *  LOOP_REFは,デフォルトでは1,000,000に設定しているが,想定したよ
    485          *  りé
    486 ã„プロセッサでは,サンプルプログラムの実行開始に時間がかか
    487          *  りすぎるという問題を生じる.逆に想定したより速いプロセッサでは,
    488          *  LOOP_REF回の空ループの実行時間が短くなり,task_loopに設定する値
    489          *  の誤差が大きくなるという問題がある.
     440         *  LOOP_REFは,デフォルトでは1,000,000に設定しているが,想定したよ
     441         *  り遅いプロセッサでは,サンプルプログラムの実行開始に時間がかか
     442         *  りすぎるという問題を生じる.逆に想定したより速いプロセッサでは,
     443         *  LOOP_REF回の空ループの実行時間が短くなり,task_loopに設定する値
     444         *  の誤差が大きくなるという問題がある.
    490445         *
    491          *  そこで,そのようなターゲットでは,target_test.hで,LOOP_REFを適
    492          *  切な値に定義するのが望ましい.
     446         *  そこで,そのようなターゲットでは,target_test.hで,LOOP_REFを適
     447         *  切な値に定義するのが望ましい.
    493448         *
    494          *  また,task_loopの値を固定したい場合には,その値をTASK_LOOPにマ
    495          *  クロ定義する.TASK_LOOPがマクロ定義されている場合,上記の測定を
    496          *  行わずに,TASK_LOOPに定義された値を空ループの回数とする.
     449         *  また,task_loopの値を固定したい場合には,その値をTASK_LOOPにマ
     450         *  クロ定義する.TASK_LOOPがマクロ定義されている場合,上記の測定を
     451         *  行わずに,TASK_LOOPに定義された値を空ループの回数とする.
    497452         *
    498          * ターゲットによっては,空ループの実行時間の1回目の測定で,本来よ
    499          * りも長めになるものがある.このようなターゲットでは,MEASURE_TWICE
    500          * をマクロ定義することで,1回目の測定結果を捨てて,2回目の測定結果
    501          * を使う.
     453         * ターゲットによっては,空ループの実行時間の1回目の測定で,本来よ
     454         * りも長めになるものがある.このようなターゲットでは,MEASURE_TWICE
     455         * をマクロ定義することで,1回目の測定結果を捨てて,2回目の測定結果
     456         * を使う.
    502457         */
    503458#ifdef TASK_LOOP
     
    521476
    522477        /*
    523          *  タスクの起動
     478         *  タスクの起動
    524479         */
    525480
     
    529484
    530485        /*
    531          *  メインループ
     486         *  メインループ
    532487         */
    533488        if (is_cSerialPort_joined()) {
Note: See TracChangeset for help on using the changeset viewer.