Ignore:
Timestamp:
Jul 3, 2020, 7:19:17 PM (4 years ago)
Author:
coas-nagasima
Message:

ASP3, TINET, mbed を更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_test.h

    r321 r429  
    44 *      Advanced Standard Profile Kernel
    55 *
    6  *  Copyright (C) 2006-2016 by Embedded and Real-Time Systems Laboratory
     6 *  Copyright (C) 2006-2019 by Embedded and Real-Time Systems Laboratory
    77 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    88 *
     
    3636 *  の責任を負わない.
    3737 *
    38  *  $Id$
     38 *  $Id: core_test.h 1244 2019-07-16 21:41:05Z ertl-hiro $
    3939 */
    4040
     
    5454
    5555/*
    56  *  CPU例外の発生
     56 *  不正アドレスの定義(メモリのない番地に設定する)
    5757 */
    58 
    5958#ifndef ILLEGAL_IADDR
    6059#define ILLEGAL_IADDR                   0xd0000000U             /* 不正命令アドレス */
     
    6665
    6766/*
     67 *  サンプルプログラムで用いるCPU例外の発生
     68 */
     69#if defined(USE_CPUEXC_SVC)
     70
     71#define CPUEXC1                                 EXCNO_SVC               /* スーパバイザコール */
     72#define RAISE_CPU_EXCEPTION             RAISE_CPU_EXCEPTION_SVC
     73#define PREPARE_RETURN_CPUEXC   PREPARE_RETURN_CPUEXC_SVC
     74
     75#elif defined(USE_CPUEXC_PABORT)
     76
     77#define CPUEXC1                                 EXCNO_PABORT    /* プリフェッチアボート */
     78#define RAISE_CPU_EXCEPTION             RAISE_CPU_EXCEPTION_PABORT
     79#define PREPARE_RETURN_CPUEXC   PREPARE_RETURN_CPUEXC_PABORT
     80
     81#elif defined(USE_CPUEXC_DABORT)
     82
     83#define CPUEXC1                                 EXCNO_DABORT    /* データアボート */
     84#define RAISE_CPU_EXCEPTION             RAISE_CPU_EXCEPTION_DABORT
     85#define PREPARE_RETURN_CPUEXC   PREPARE_RETURN_CPUEXC_DABORT
     86
     87#elif defined(USE_CPUEXC_FATAL)
     88
     89#define CPUEXC1                                 EXCNO_FATAL             /* フェイタルデータアボート */
     90#define RAISE_CPU_EXCEPTION             RAISE_CPU_EXCEPTION_FATAL
     91/* フェイタルデータアボート例外ハンドラからリターンしてはならない */
     92
     93#else
     94
     95#define CPUEXC1                                 EXCNO_UNDEF             /* 未定義命令 */
     96#define RAISE_CPU_EXCEPTION             RAISE_CPU_EXCEPTION_UNDEF
     97#define PREPARE_RETURN_CPUEXC   PREPARE_RETURN_CPUEXC_UNDEF
     98
     99#endif
     100
     101/*
    68102 *  スーパバイザコールによるCPU例外の発生
    69103 *
    70  *  CPU例外ハンドラから,そのままリターンすることができる.svc命令によ
    71  *  りlrレジスタが上書きされるため,lrレジスタは破壊されるものと指定し
    72  *  ている.
     104 *  svc #0によりCPU例外を発生させる.svc命令によりlrレジスタが上書きさ
     105 *  れるため,lrレジスタは破壊されるものと指定している.CPU例外ハンド
     106 *  ラからそのままリターンすることで,svc命令の次の命令から実行が継続
     107 *  する.
    73108 */
    74 #if defined(USE_SVC_CPUEXC)
    75 
    76 #define CPUEXC1                                 EXCNO_SVC               /* スーパバイザコール */
    77 #define RAISE_CPU_EXCEPTION             Asm("svc #0":::"lr")
    78 #define PREPARE_RETURN_CPUEXC
     109#define RAISE_CPU_EXCEPTION_SVC                 Asm("svc #0":::"lr")
     110#define PREPARE_RETURN_CPUEXC_SVC
    79111
    80112/*
    81113 *  プリフェッチアボートによるCPU例外の発生
    82114 *
    83  *  プリフェッチアボートを起こした命令をスキップしてCPU例外ハンドラから
    84  *  リターンするために,戻り番地はそのままで良い(ARMモードで使うことを
    85  *  想定).
     115 *  不正な番地を関数の先頭番地として呼び出すことで,プリフェッチアボー
     116 *  トによるCPU例外を発生させる.不正な番地に分岐した命令をスキップし
     117 *  てCPU例外ハンドラからリターンするために,戻り番地には,lrレジスタ
     118 *  の値(不正な番地への分岐命令からのリターン番地が入っている)を設定
     119 *  する.
    86120 */
    87 #elif defined(USE_PABORT_CPUEXC)
    88 
    89 #define CPUEXC1                                 EXCNO_PABORT    /* プリフェッチアボート */
    90 #define RAISE_CPU_EXCEPTION             ((void (*)(void)) ILLEGAL_IADDR)()
    91 #define PREPARE_RETURN_CPUEXC
     121#define RAISE_CPU_EXCEPTION_PABORT              (((void (*)(void)) ILLEGAL_IADDR)())
     122#define PREPARE_RETURN_CPUEXC_PABORT    (((T_EXCINF *) p_excinf)->pc \
     123                                                                                        = ((T_EXCINF *) p_excinf)->lr)
    92124
    93125/*
    94126 *  データアボートによるCPU例外の発生
    95127 *
    96  *  データアボートを起こした命令をスキップしてCPU例外ハンドラからリター
    97  *  ンするために,戻り番地から4を減算する(ARMモードで使うことを想定).
     128 *  不正な番地をリードすることで,データアボートによるCPU例外を発生さ
     129 *  せる.データアボートを起こした命令をスキップしてCPU例外ハンドラか
     130 *  らリターンするために,戻り番地から4を減算する(ARMモードで使うこと
     131 *  を想定している).
    98132 */
    99 #elif defined(USE_DABORT_CPUEXC)
    100 
    101 #include "arm.h"
    102 #define CPUEXC1                                 EXCNO_DABORT    /* データアボート */
    103 #define RAISE_CPU_EXCEPTION             (void)(*((volatile uint32_t *) ILLEGAL_DADDR))
    104 #define PREPARE_RETURN_CPUEXC   ((T_EXCINF *) p_excinf)->pc -= 4U
     133#define RAISE_CPU_EXCEPTION_DABORT              (void)(*((volatile uint32_t *) \
     134                                                                                                                        ILLEGAL_DADDR))
     135#define PREPARE_RETURN_CPUEXC_DABORT    (((T_EXCINF *) p_excinf)->pc -= 4U)
    105136
    106137/*
    107  *  フェイタルデータアボート処理
     138 *  フェイタルデータアボートによるCPU例外の発生
    108139 *
    109  *  スタックポインタを不正にして,フェイタルデータアボート処理を行わせ
    110  *  る.CPU例外ハンドラからはリターンできない.
     140 *  スタックポインタを不正にして,未定義命令を実行することで,フェイタ
     141 *  ルデータアボートによるCPU例外を発生させる.CPU例外ハンドラからリター
     142 *  ンしてはならない.
    111143 */
    112 #elif defined(USE_FATAL_DABORT_CPUEXC)
    113 
    114 #define CPUEXC1                                 EXCNO_DABORT    /* データアボート */
    115 #define RAISE_CPU_EXCEPTION             Asm("mov sp, %0"::"I"(ILLEGAL_DADDR))
     144#define RAISE_CPU_EXCEPTION_FATAL               Asm("mov sp, %0\n" \
     145                                                                                  "\t.word 0xf0500090" \
     146                                                                                  ::"I"(ILLEGAL_DADDR))
    116147
    117148/*
    118149 *  未定義命令によるCPU例外の発生
    119150 *
    120  *  RAISE_CPU_EXCEPTIONは,ARMモードで使うことを想定している.CPU例外ハ
    121  *  ンドラから,そのままリターンすることができる.使用している未定義命
    122  *  令は,"Multiply and multiply accumulate"命令群のエンコーディング内
    123  *  における未定義命令である.
     151 *  未定義命令によりCPU例外を発生させる.使用している未定義命令は,
     152 *  "Multiply and multiply accumulate"命令群のエンコーディング内におけ
     153 *  る未定義命令である.CPU例外ハンドラからそのままリターンすることで,
     154 *  未定義命令の次の命令から実行が継続する(ARMモードで使うことを想定
     155 *  している).
    124156 */
    125 #else
     157#define RAISE_CPU_EXCEPTION_UNDEF               Asm(".word 0xf0500090")
     158#define PREPARE_RETURN_CPUEXC_UNDEF
    126159
    127 #define CPUEXC1                                 EXCNO_UNDEF             /* 未定義命令 */
    128 #define RAISE_CPU_EXCEPTION             Asm(".word 0xf0500090")
    129 #define PREPARE_RETURN_CPUEXC
    130 
    131 #endif
    132160#endif /* TOPPERS_CORE_TEST_H */
Note: See TracChangeset for help on using the changeset viewer.