スマートコンフィグレータの自動生成をカスタマイズしたい

コードジェネレータに /* Start user code があり、ここでカスタムコードを使用できるのですが、

/*Start user code 部分以外にカスタムコードを挿入したいのです。

/* Start user code 部分以外に挿入しても、「コード生成」で消えてしまうので

生成部分に手をいれて自動で出力するようにできないか?という希望がありました。

e2Studio を調べてみたら、 e2Studioのインストールフォルダ下、eclipse\pluginsに

jarファイルがあり、jarファイルの中に出力するコードのひな形(?)があり、これを修正することでほぼ

目的の出力が得られるようにはなりました。

ただ、このjarファイルはバージョンでファイルが分かれていて、e2Studioが何をもとに

バージョンを選択しているのか分かりません。

ファイルの日付?バージョンの新しいもの?

scfgファイルを見ると、コンポーネントのバージョンが記載されていたので、試しにこれを直接修正してみましたが、

e2StudioのスマートコンフィグレータUIの「概要」に示されるバージョン番号は変わらず。

(これが変更できれぱ、該当のバージョンを使用できるのかも)

jarファイルの中には、plugin.xml ファイルがあり、ここにバージョンがありましたので、こちらもscfgに合わせたバージョンに修正してみました。

このような修正(が出来たとして)は当然サポート外の修正となるのは承知していますが、

CGのコンポーネントバージョン(修正方法)とバージョンに対応するjarファイルの選択の仕組みをご存じの方が見えましたら、情報をお願いします。

Parents
  • ka.makiharaさん、こんにちは。NoMaYです。

    NORTiを所持していない/購入していないので私の方では最終確認は出来ないのですが、たぶん動くのではないかなと思うのです。アセンブラコードは技巧的ですが、サイズ的にはコンパクト(2Kバイトちょっと)になっているかなと思います。CC-RXのインラインアセンブラで記述してあります。RXv1/RXv2/RXv3のアーキテクチャバージョンには依存していません。

    [追記] 2Kバイトはコンパクトなのか?と突っ込まれるとよくよく考えてみるとそうでも無い気も、、、[ここまで追記]

    以下、CS+でデバッグ中の画面コピーと肝心な部分のソースです。(肝心な部分は他にはありません。)




    NORTi_interrupt.c

    4857.NORTi_interrupt.c.20220624.txt
    /*
     * NORTi_interrupt.c
     *
     *  Created on: Jun 24, 2022
     *      Author: NoMaY
     *     License: MIT
     */
    
    #include "NORTi_interrupt.h"
    #include <machine.h>
    
    static void (* const Int_Hook_Vectors[])(void);
    
    void NORTi_INT_HOOK_init(void)
    {
        set_intb((void *)Int_Hook_Vectors);
    }
    
    #pragma inline_asm INT_COMMON_nonOS
    static void INT_COMMON_nonOS(void)
    {
        XCHG [SP], R15
        ADD #(- (__$hook_entry___0 + 3) + TOPOF C$VECT), R15 // 3 = size of BSR.W
        MOV.L [R15], R15
        XCHG [SP], R15
        RTS // i.e. JMP [SP+]
    }
    
    #pragma inline_asm INT_COMMON_NORTi
    static void INT_COMMON_NORTi(void)
    {
        XCHG [SP], R15
        PUSH.L R14
        PUSHM R1-R5
    
        BSR.W _NORTi_INT_enter
    
        PUSHC PSW
        MOV.L #?+, R14
        PUSH.L R14
        ADD #(- (__$hook_entry___0 + 3) + TOPOF C$VECT), R15 // 3 = size of BSR.W
        MOV.L [R15], R15
        JMP R15
    ?:
    
        BSR.W _NORTi_INT_exit
    
        POPM R1-R5
        POPM R14-R15
        RTE
    }
    
    extern void NORTi_INT_enter(void);
    extern void NORTi_INT_exit(void);
    static void INT_COMMON_nonOS(void);
    static void INT_COMMON_NORTi(void);
    
    // To prevent the section name symbol `C$VECT` from being optimized out.
    void * const dummy_VECTTBL = (void *)__sectop("C$VECT");
    
    // To prevent the symbol from being optimized out.
    void * const dummy_NORTi_INT_enter  = (void *)NORTi_INT_enter;
    void * const dummy_NORTi_INT_exit   = (void *)NORTi_INT_exit;
    void * const dummy_INT_COMMON_nonOS = (void *)INT_COMMON_nonOS;
    void * const dummy_INT_COMMON_NORTi = (void *)INT_COMMON_NORTi;
    
    //#pragma inline_asm hook_entry____
    #pragma inline_asm hook_entry___0
    #pragma inline_asm hook_entry___1
    #pragma inline_asm hook_entry___2
    #pragma inline_asm hook_entry___3
    #pragma inline_asm hook_entry___4
    #pragma inline_asm hook_entry___5
    #pragma inline_asm hook_entry___6
    #pragma inline_asm hook_entry___7
    #pragma inline_asm hook_entry___8
    #pragma inline_asm hook_entry___9
    #pragma inline_asm hook_entry__10
    #pragma inline_asm hook_entry__11
    #pragma inline_asm hook_entry__12
    #pragma inline_asm hook_entry__13
    #pragma inline_asm hook_entry__14
    #pragma inline_asm hook_entry__15
    #pragma inline_asm hook_entry__16
    #pragma inline_asm hook_entry__17
    #pragma inline_asm hook_entry__18
    #pragma inline_asm hook_entry__19
    #pragma inline_asm hook_entry__20
    #pragma inline_asm hook_entry__21
    #pragma inline_asm hook_entry__22
    #pragma inline_asm hook_entry__23
    #pragma inline_asm hook_entry__24
    #pragma inline_asm hook_entry__25
    #pragma inline_asm hook_entry__26
    #pragma inline_asm hook_entry__27
    #pragma inline_asm hook_entry__28
    #pragma inline_asm hook_entry__29
    #pragma inline_asm hook_entry__30
    #pragma inline_asm hook_entry__31
    #pragma inline_asm hook_entry__32
    #pragma inline_asm hook_entry__33
    #pragma inline_asm hook_entry__34
    #pragma inline_asm hook_entry__35
    #pragma inline_asm hook_entry__36
    #pragma inline_asm hook_entry__37
    #pragma inline_asm hook_entry__38
    #pragma inline_asm hook_entry__39
    #pragma inline_asm hook_entry__40
    #pragma inline_asm hook_entry__41
    #pragma inline_asm hook_entry__42
    #pragma inline_asm hook_entry__43
    #pragma inline_asm hook_entry__44
    #pragma inline_asm hook_entry__45
    #pragma inline_asm hook_entry__46
    #pragma inline_asm hook_entry__47
    #pragma inline_asm hook_entry__48
    #pragma inline_asm hook_entry__49
    #pragma inline_asm hook_entry__50
    #pragma inline_asm hook_entry__51
    #pragma inline_asm hook_entry__52
    #pragma inline_asm hook_entry__53
    #pragma inline_asm hook_entry__54
    #pragma inline_asm hook_entry__55
    #pragma inline_asm hook_entry__56
    #pragma inline_asm hook_entry__57
    #pragma inline_asm hook_entry__58
    #pragma inline_asm hook_entry__59
    #pragma inline_asm hook_entry__60
    #pragma inline_asm hook_entry__61
    #pragma inline_asm hook_entry__62
    #pragma inline_asm hook_entry__63
    #pragma inline_asm hook_entry__64
    #pragma inline_asm hook_entry__65
    #pragma inline_asm hook_entry__66
    #pragma inline_asm hook_entry__67
    #pragma inline_asm hook_entry__68
    #pragma inline_asm hook_entry__69
    #pragma inline_asm hook_entry__70
    #pragma inline_asm hook_entry__71
    #pragma inline_asm hook_entry__72
    #pragma inline_asm hook_entry__73
    #pragma inline_asm hook_entry__74
    #pragma inline_asm hook_entry__75
    #pragma inline_asm hook_entry__76
    #pragma inline_asm hook_entry__77
    #pragma inline_asm hook_entry__78
    #pragma inline_asm hook_entry__79
    #pragma inline_asm hook_entry__80
    #pragma inline_asm hook_entry__81
    #pragma inline_asm hook_entry__82
    #pragma inline_asm hook_entry__83
    #pragma inline_asm hook_entry__84
    #pragma inline_asm hook_entry__85
    #pragma inline_asm hook_entry__86
    #pragma inline_asm hook_entry__87
    #pragma inline_asm hook_entry__88
    #pragma inline_asm hook_entry__89
    #pragma inline_asm hook_entry__90
    #pragma inline_asm hook_entry__91
    #pragma inline_asm hook_entry__92
    #pragma inline_asm hook_entry__93
    #pragma inline_asm hook_entry__94
    #pragma inline_asm hook_entry__95
    #pragma inline_asm hook_entry__96
    #pragma inline_asm hook_entry__97
    #pragma inline_asm hook_entry__98
    #pragma inline_asm hook_entry__99
    #pragma inline_asm hook_entry_100
    #pragma inline_asm hook_entry_101
    #pragma inline_asm hook_entry_102
    #pragma inline_asm hook_entry_103
    #pragma inline_asm hook_entry_104
    #pragma inline_asm hook_entry_105
    #pragma inline_asm hook_entry_106
    #pragma inline_asm hook_entry_107
    #pragma inline_asm hook_entry_108
    #pragma inline_asm hook_entry_109
    #pragma inline_asm hook_entry_110
    #pragma inline_asm hook_entry_111
    #pragma inline_asm hook_entry_112
    #pragma inline_asm hook_entry_113
    #pragma inline_asm hook_entry_114
    #pragma inline_asm hook_entry_115
    #pragma inline_asm hook_entry_116
    #pragma inline_asm hook_entry_117
    #pragma inline_asm hook_entry_118
    #pragma inline_asm hook_entry_119
    #pragma inline_asm hook_entry_120
    #pragma inline_asm hook_entry_121
    #pragma inline_asm hook_entry_122
    #pragma inline_asm hook_entry_123
    #pragma inline_asm hook_entry_124
    #pragma inline_asm hook_entry_125
    #pragma inline_asm hook_entry_126
    #pragma inline_asm hook_entry_127
    #pragma inline_asm hook_entry_128
    #pragma inline_asm hook_entry_129
    #pragma inline_asm hook_entry_130
    #pragma inline_asm hook_entry_131
    #pragma inline_asm hook_entry_132
    #pragma inline_asm hook_entry_133
    #pragma inline_asm hook_entry_134
    #pragma inline_asm hook_entry_135
    #pragma inline_asm hook_entry_136
    #pragma inline_asm hook_entry_137
    #pragma inline_asm hook_entry_138
    #pragma inline_asm hook_entry_139
    #pragma inline_asm hook_entry_140
    #pragma inline_asm hook_entry_141
    #pragma inline_asm hook_entry_142
    #pragma inline_asm hook_entry_143
    #pragma inline_asm hook_entry_144
    #pragma inline_asm hook_entry_145
    #pragma inline_asm hook_entry_146
    #pragma inline_asm hook_entry_147
    #pragma inline_asm hook_entry_148
    #pragma inline_asm hook_entry_149
    #pragma inline_asm hook_entry_150
    #pragma inline_asm hook_entry_151
    #pragma inline_asm hook_entry_152
    #pragma inline_asm hook_entry_153
    #pragma inline_asm hook_entry_154
    #pragma inline_asm hook_entry_155
    #pragma inline_asm hook_entry_156
    #pragma inline_asm hook_entry_157
    #pragma inline_asm hook_entry_158
    #pragma inline_asm hook_entry_159
    #pragma inline_asm hook_entry_160
    #pragma inline_asm hook_entry_161
    #pragma inline_asm hook_entry_162
    #pragma inline_asm hook_entry_163
    #pragma inline_asm hook_entry_164
    #pragma inline_asm hook_entry_165
    #pragma inline_asm hook_entry_166
    #pragma inline_asm hook_entry_167
    #pragma inline_asm hook_entry_168
    #pragma inline_asm hook_entry_169
    #pragma inline_asm hook_entry_170
    #pragma inline_asm hook_entry_171
    #pragma inline_asm hook_entry_172
    #pragma inline_asm hook_entry_173
    #pragma inline_asm hook_entry_174
    #pragma inline_asm hook_entry_175
    #pragma inline_asm hook_entry_176
    #pragma inline_asm hook_entry_177
    #pragma inline_asm hook_entry_178
    #pragma inline_asm hook_entry_179
    #pragma inline_asm hook_entry_180
    #pragma inline_asm hook_entry_181
    #pragma inline_asm hook_entry_182
    #pragma inline_asm hook_entry_183
    #pragma inline_asm hook_entry_184
    #pragma inline_asm hook_entry_185
    #pragma inline_asm hook_entry_186
    #pragma inline_asm hook_entry_187
    #pragma inline_asm hook_entry_188
    #pragma inline_asm hook_entry_189
    #pragma inline_asm hook_entry_190
    #pragma inline_asm hook_entry_191
    #pragma inline_asm hook_entry_192
    #pragma inline_asm hook_entry_193
    #pragma inline_asm hook_entry_194
    #pragma inline_asm hook_entry_195
    #pragma inline_asm hook_entry_196
    #pragma inline_asm hook_entry_197
    #pragma inline_asm hook_entry_198
    #pragma inline_asm hook_entry_199
    #pragma inline_asm hook_entry_200
    #pragma inline_asm hook_entry_201
    #pragma inline_asm hook_entry_202
    #pragma inline_asm hook_entry_203
    #pragma inline_asm hook_entry_204
    #pragma inline_asm hook_entry_205
    #pragma inline_asm hook_entry_206
    #pragma inline_asm hook_entry_207
    #pragma inline_asm hook_entry_208
    #pragma inline_asm hook_entry_209
    #pragma inline_asm hook_entry_210
    #pragma inline_asm hook_entry_211
    #pragma inline_asm hook_entry_212
    #pragma inline_asm hook_entry_213
    #pragma inline_asm hook_entry_214
    #pragma inline_asm hook_entry_215
    #pragma inline_asm hook_entry_216
    #pragma inline_asm hook_entry_217
    #pragma inline_asm hook_entry_218
    #pragma inline_asm hook_entry_219
    #pragma inline_asm hook_entry_220
    #pragma inline_asm hook_entry_221
    #pragma inline_asm hook_entry_222
    #pragma inline_asm hook_entry_223
    #pragma inline_asm hook_entry_224
    #pragma inline_asm hook_entry_225
    #pragma inline_asm hook_entry_226
    #pragma inline_asm hook_entry_227
    #pragma inline_asm hook_entry_228
    #pragma inline_asm hook_entry_229
    #pragma inline_asm hook_entry_230
    #pragma inline_asm hook_entry_231
    #pragma inline_asm hook_entry_232
    #pragma inline_asm hook_entry_233
    #pragma inline_asm hook_entry_234
    #pragma inline_asm hook_entry_235
    #pragma inline_asm hook_entry_236
    #pragma inline_asm hook_entry_237
    #pragma inline_asm hook_entry_238
    #pragma inline_asm hook_entry_239
    #pragma inline_asm hook_entry_240
    #pragma inline_asm hook_entry_241
    #pragma inline_asm hook_entry_242
    #pragma inline_asm hook_entry_243
    #pragma inline_asm hook_entry_244
    #pragma inline_asm hook_entry_245
    #pragma inline_asm hook_entry_246
    #pragma inline_asm hook_entry_247
    #pragma inline_asm hook_entry_248
    #pragma inline_asm hook_entry_249
    #pragma inline_asm hook_entry_250
    #pragma inline_asm hook_entry_251
    #pragma inline_asm hook_entry_252
    #pragma inline_asm hook_entry_253
    #pragma inline_asm hook_entry_254
    #pragma inline_asm hook_entry_255
    
    #define _INT_COMMON(sel) __$INT_COMMON_##sel
    #define INT_COMMON(sel) _INT_COMMON(sel)
    
    // The code size of the following functions is just four bytes.
    // 00000000 39rrrr               W  BRA.W __$XXX
    // 00000003 02                      RTS // Not used.
    static void hook_entry___0(void) { BSR.W INT_COMMON(INTERRUPT___0) }
    static void hook_entry___1(void) { BSR.W INT_COMMON(INTERRUPT___1) }
    static void hook_entry___2(void) { BSR.W INT_COMMON(INTERRUPT___2) }
    static void hook_entry___3(void) { BSR.W INT_COMMON(INTERRUPT___3) }
    static void hook_entry___4(void) { BSR.W INT_COMMON(INTERRUPT___4) }
    static void hook_entry___5(void) { BSR.W INT_COMMON(INTERRUPT___5) }
    static void hook_entry___6(void) { BSR.W INT_COMMON(INTERRUPT___6) }
    static void hook_entry___7(void) { BSR.W INT_COMMON(INTERRUPT___7) }
    static void hook_entry___8(void) { BSR.W INT_COMMON(INTERRUPT___8) }
    static void hook_entry___9(void) { BSR.W INT_COMMON(INTERRUPT___9) }
    static void hook_entry__10(void) { BSR.W INT_COMMON(INTERRUPT__10) }
    static void hook_entry__11(void) { BSR.W INT_COMMON(INTERRUPT__11) }
    static void hook_entry__12(void) { BSR.W INT_COMMON(INTERRUPT__12) }
    static void hook_entry__13(void) { BSR.W INT_COMMON(INTERRUPT__13) }
    static void hook_entry__14(void) { BSR.W INT_COMMON(INTERRUPT__14) }
    static void hook_entry__15(void) { BSR.W INT_COMMON(INTERRUPT__15) }
    static void hook_entry__16(void) { BSR.W INT_COMMON(INTERRUPT__16) }
    static void hook_entry__17(void) { BSR.W INT_COMMON(INTERRUPT__17) }
    static void hook_entry__18(void) { BSR.W INT_COMMON(INTERRUPT__18) }
    static void hook_entry__19(void) { BSR.W INT_COMMON(INTERRUPT__19) }
    static void hook_entry__20(void) { BSR.W INT_COMMON(INTERRUPT__20) }
    static void hook_entry__21(void) { BSR.W INT_COMMON(INTERRUPT__21) }
    static void hook_entry__22(void) { BSR.W INT_COMMON(INTERRUPT__22) }
    static void hook_entry__23(void) { BSR.W INT_COMMON(INTERRUPT__23) }
    static void hook_entry__24(void) { BSR.W INT_COMMON(INTERRUPT__24) }
    static void hook_entry__25(void) { BSR.W INT_COMMON(INTERRUPT__25) }
    static void hook_entry__26(void) { BSR.W INT_COMMON(INTERRUPT__26) }
    static void hook_entry__27(void) { BSR.W INT_COMMON(INTERRUPT__27) }
    static void hook_entry__28(void) { BSR.W INT_COMMON(INTERRUPT__28) }
    static void hook_entry__29(void) { BSR.W INT_COMMON(INTERRUPT__29) }
    static void hook_entry__30(void) { BSR.W INT_COMMON(INTERRUPT__30) }
    static void hook_entry__31(void) { BSR.W INT_COMMON(INTERRUPT__31) }
    static void hook_entry__32(void) { BSR.W INT_COMMON(INTERRUPT__32) }
    static void hook_entry__33(void) { BSR.W INT_COMMON(INTERRUPT__33) }
    static void hook_entry__34(void) { BSR.W INT_COMMON(INTERRUPT__34) }
    static void hook_entry__35(void) { BSR.W INT_COMMON(INTERRUPT__35) }
    static void hook_entry__36(void) { BSR.W INT_COMMON(INTERRUPT__36) }
    static void hook_entry__37(void) { BSR.W INT_COMMON(INTERRUPT__37) }
    static void hook_entry__38(void) { BSR.W INT_COMMON(INTERRUPT__38) }
    static void hook_entry__39(void) { BSR.W INT_COMMON(INTERRUPT__39) }
    static void hook_entry__40(void) { BSR.W INT_COMMON(INTERRUPT__40) }
    static void hook_entry__41(void) { BSR.W INT_COMMON(INTERRUPT__41) }
    static void hook_entry__42(void) { BSR.W INT_COMMON(INTERRUPT__42) }
    static void hook_entry__43(void) { BSR.W INT_COMMON(INTERRUPT__43) }
    static void hook_entry__44(void) { BSR.W INT_COMMON(INTERRUPT__44) }
    static void hook_entry__45(void) { BSR.W INT_COMMON(INTERRUPT__45) }
    static void hook_entry__46(void) { BSR.W INT_COMMON(INTERRUPT__46) }
    static void hook_entry__47(void) { BSR.W INT_COMMON(INTERRUPT__47) }
    static void hook_entry__48(void) { BSR.W INT_COMMON(INTERRUPT__48) }
    static void hook_entry__49(void) { BSR.W INT_COMMON(INTERRUPT__49) }
    static void hook_entry__50(void) { BSR.W INT_COMMON(INTERRUPT__50) }
    static void hook_entry__51(void) { BSR.W INT_COMMON(INTERRUPT__51) }
    static void hook_entry__52(void) { BSR.W INT_COMMON(INTERRUPT__52) }
    static void hook_entry__53(void) { BSR.W INT_COMMON(INTERRUPT__53) }
    static void hook_entry__54(void) { BSR.W INT_COMMON(INTERRUPT__54) }
    static void hook_entry__55(void) { BSR.W INT_COMMON(INTERRUPT__55) }
    static void hook_entry__56(void) { BSR.W INT_COMMON(INTERRUPT__56) }
    static void hook_entry__57(void) { BSR.W INT_COMMON(INTERRUPT__57) }
    static void hook_entry__58(void) { BSR.W INT_COMMON(INTERRUPT__58) }
    static void hook_entry__59(void) { BSR.W INT_COMMON(INTERRUPT__59) }
    static void hook_entry__60(void) { BSR.W INT_COMMON(INTERRUPT__60) }
    static void hook_entry__61(void) { BSR.W INT_COMMON(INTERRUPT__61) }
    static void hook_entry__62(void) { BSR.W INT_COMMON(INTERRUPT__62) }
    static void hook_entry__63(void) { BSR.W INT_COMMON(INTERRUPT__63) }
    static void hook_entry__64(void) { BSR.W INT_COMMON(INTERRUPT__64) }
    static void hook_entry__65(void) { BSR.W INT_COMMON(INTERRUPT__65) }
    static void hook_entry__66(void) { BSR.W INT_COMMON(INTERRUPT__66) }
    static void hook_entry__67(void) { BSR.W INT_COMMON(INTERRUPT__67) }
    static void hook_entry__68(void) { BSR.W INT_COMMON(INTERRUPT__68) }
    static void hook_entry__69(void) { BSR.W INT_COMMON(INTERRUPT__69) }
    static void hook_entry__70(void) { BSR.W INT_COMMON(INTERRUPT__70) }
    static void hook_entry__71(void) { BSR.W INT_COMMON(INTERRUPT__71) }
    static void hook_entry__72(void) { BSR.W INT_COMMON(INTERRUPT__72) }
    static void hook_entry__73(void) { BSR.W INT_COMMON(INTERRUPT__73) }
    static void hook_entry__74(void) { BSR.W INT_COMMON(INTERRUPT__74) }
    static void hook_entry__75(void) { BSR.W INT_COMMON(INTERRUPT__75) }
    static void hook_entry__76(void) { BSR.W INT_COMMON(INTERRUPT__76) }
    static void hook_entry__77(void) { BSR.W INT_COMMON(INTERRUPT__77) }
    static void hook_entry__78(void) { BSR.W INT_COMMON(INTERRUPT__78) }
    static void hook_entry__79(void) { BSR.W INT_COMMON(INTERRUPT__79) }
    static void hook_entry__80(void) { BSR.W INT_COMMON(INTERRUPT__80) }
    static void hook_entry__81(void) { BSR.W INT_COMMON(INTERRUPT__81) }
    static void hook_entry__82(void) { BSR.W INT_COMMON(INTERRUPT__82) }
    static void hook_entry__83(void) { BSR.W INT_COMMON(INTERRUPT__83) }
    static void hook_entry__84(void) { BSR.W INT_COMMON(INTERRUPT__84) }
    static void hook_entry__85(void) { BSR.W INT_COMMON(INTERRUPT__85) }
    static void hook_entry__86(void) { BSR.W INT_COMMON(INTERRUPT__86) }
    static void hook_entry__87(void) { BSR.W INT_COMMON(INTERRUPT__87) }
    static void hook_entry__88(void) { BSR.W INT_COMMON(INTERRUPT__88) }
    static void hook_entry__89(void) { BSR.W INT_COMMON(INTERRUPT__89) }
    static void hook_entry__90(void) { BSR.W INT_COMMON(INTERRUPT__90) }
    static void hook_entry__91(void) { BSR.W INT_COMMON(INTERRUPT__91) }
    static void hook_entry__92(void) { BSR.W INT_COMMON(INTERRUPT__92) }
    static void hook_entry__93(void) { BSR.W INT_COMMON(INTERRUPT__93) }
    static void hook_entry__94(void) { BSR.W INT_COMMON(INTERRUPT__94) }
    static void hook_entry__95(void) { BSR.W INT_COMMON(INTERRUPT__95) }
    static void hook_entry__96(void) { BSR.W INT_COMMON(INTERRUPT__96) }
    static void hook_entry__97(void) { BSR.W INT_COMMON(INTERRUPT__97) }
    static void hook_entry__98(void) { BSR.W INT_COMMON(INTERRUPT__98) }
    static void hook_entry__99(void) { BSR.W INT_COMMON(INTERRUPT__99) }
    static void hook_entry_100(void) { BSR.W INT_COMMON(INTERRUPT_100) }
    static void hook_entry_101(void) { BSR.W INT_COMMON(INTERRUPT_101) }
    static void hook_entry_102(void) { BSR.W INT_COMMON(INTERRUPT_102) }
    static void hook_entry_103(void) { BSR.W INT_COMMON(INTERRUPT_103) }
    static void hook_entry_104(void) { BSR.W INT_COMMON(INTERRUPT_104) }
    static void hook_entry_105(void) { BSR.W INT_COMMON(INTERRUPT_105) }
    static void hook_entry_106(void) { BSR.W INT_COMMON(INTERRUPT_106) }
    static void hook_entry_107(void) { BSR.W INT_COMMON(INTERRUPT_107) }
    static void hook_entry_108(void) { BSR.W INT_COMMON(INTERRUPT_108) }
    static void hook_entry_109(void) { BSR.W INT_COMMON(INTERRUPT_109) }
    static void hook_entry_110(void) { BSR.W INT_COMMON(INTERRUPT_110) }
    static void hook_entry_111(void) { BSR.W INT_COMMON(INTERRUPT_111) }
    static void hook_entry_112(void) { BSR.W INT_COMMON(INTERRUPT_112) }
    static void hook_entry_113(void) { BSR.W INT_COMMON(INTERRUPT_113) }
    static void hook_entry_114(void) { BSR.W INT_COMMON(INTERRUPT_114) }
    static void hook_entry_115(void) { BSR.W INT_COMMON(INTERRUPT_115) }
    static void hook_entry_116(void) { BSR.W INT_COMMON(INTERRUPT_116) }
    static void hook_entry_117(void) { BSR.W INT_COMMON(INTERRUPT_117) }
    static void hook_entry_118(void) { BSR.W INT_COMMON(INTERRUPT_118) }
    static void hook_entry_119(void) { BSR.W INT_COMMON(INTERRUPT_119) }
    static void hook_entry_120(void) { BSR.W INT_COMMON(INTERRUPT_120) }
    static void hook_entry_121(void) { BSR.W INT_COMMON(INTERRUPT_121) }
    static void hook_entry_122(void) { BSR.W INT_COMMON(INTERRUPT_122) }
    static void hook_entry_123(void) { BSR.W INT_COMMON(INTERRUPT_123) }
    static void hook_entry_124(void) { BSR.W INT_COMMON(INTERRUPT_124) }
    static void hook_entry_125(void) { BSR.W INT_COMMON(INTERRUPT_125) }
    static void hook_entry_126(void) { BSR.W INT_COMMON(INTERRUPT_126) }
    static void hook_entry_127(void) { BSR.W INT_COMMON(INTERRUPT_127) }
    static void hook_entry_128(void) { BSR.W INT_COMMON(INTERRUPT_128) }
    static void hook_entry_129(void) { BSR.W INT_COMMON(INTERRUPT_129) }
    static void hook_entry_130(void) { BSR.W INT_COMMON(INTERRUPT_130) }
    static void hook_entry_131(void) { BSR.W INT_COMMON(INTERRUPT_131) }
    static void hook_entry_132(void) { BSR.W INT_COMMON(INTERRUPT_132) }
    static void hook_entry_133(void) { BSR.W INT_COMMON(INTERRUPT_133) }
    static void hook_entry_134(void) { BSR.W INT_COMMON(INTERRUPT_134) }
    static void hook_entry_135(void) { BSR.W INT_COMMON(INTERRUPT_135) }
    static void hook_entry_136(void) { BSR.W INT_COMMON(INTERRUPT_136) }
    static void hook_entry_137(void) { BSR.W INT_COMMON(INTERRUPT_137) }
    static void hook_entry_138(void) { BSR.W INT_COMMON(INTERRUPT_138) }
    static void hook_entry_139(void) { BSR.W INT_COMMON(INTERRUPT_139) }
    static void hook_entry_140(void) { BSR.W INT_COMMON(INTERRUPT_140) }
    static void hook_entry_141(void) { BSR.W INT_COMMON(INTERRUPT_141) }
    static void hook_entry_142(void) { BSR.W INT_COMMON(INTERRUPT_142) }
    static void hook_entry_143(void) { BSR.W INT_COMMON(INTERRUPT_143) }
    static void hook_entry_144(void) { BSR.W INT_COMMON(INTERRUPT_144) }
    static void hook_entry_145(void) { BSR.W INT_COMMON(INTERRUPT_145) }
    static void hook_entry_146(void) { BSR.W INT_COMMON(INTERRUPT_146) }
    static void hook_entry_147(void) { BSR.W INT_COMMON(INTERRUPT_147) }
    static void hook_entry_148(void) { BSR.W INT_COMMON(INTERRUPT_148) }
    static void hook_entry_149(void) { BSR.W INT_COMMON(INTERRUPT_149) }
    static void hook_entry_150(void) { BSR.W INT_COMMON(INTERRUPT_150) }
    static void hook_entry_151(void) { BSR.W INT_COMMON(INTERRUPT_151) }
    static void hook_entry_152(void) { BSR.W INT_COMMON(INTERRUPT_152) }
    static void hook_entry_153(void) { BSR.W INT_COMMON(INTERRUPT_153) }
    static void hook_entry_154(void) { BSR.W INT_COMMON(INTERRUPT_154) }
    static void hook_entry_155(void) { BSR.W INT_COMMON(INTERRUPT_155) }
    static void hook_entry_156(void) { BSR.W INT_COMMON(INTERRUPT_156) }
    static void hook_entry_157(void) { BSR.W INT_COMMON(INTERRUPT_157) }
    static void hook_entry_158(void) { BSR.W INT_COMMON(INTERRUPT_158) }
    static void hook_entry_159(void) { BSR.W INT_COMMON(INTERRUPT_159) }
    static void hook_entry_160(void) { BSR.W INT_COMMON(INTERRUPT_160) }
    static void hook_entry_161(void) { BSR.W INT_COMMON(INTERRUPT_161) }
    static void hook_entry_162(void) { BSR.W INT_COMMON(INTERRUPT_162) }
    static void hook_entry_163(void) { BSR.W INT_COMMON(INTERRUPT_163) }
    static void hook_entry_164(void) { BSR.W INT_COMMON(INTERRUPT_164) }
    static void hook_entry_165(void) { BSR.W INT_COMMON(INTERRUPT_165) }
    static void hook_entry_166(void) { BSR.W INT_COMMON(INTERRUPT_166) }
    static void hook_entry_167(void) { BSR.W INT_COMMON(INTERRUPT_167) }
    static void hook_entry_168(void) { BSR.W INT_COMMON(INTERRUPT_168) }
    static void hook_entry_169(void) { BSR.W INT_COMMON(INTERRUPT_169) }
    static void hook_entry_170(void) { BSR.W INT_COMMON(INTERRUPT_170) }
    static void hook_entry_171(void) { BSR.W INT_COMMON(INTERRUPT_171) }
    static void hook_entry_172(void) { BSR.W INT_COMMON(INTERRUPT_172) }
    static void hook_entry_173(void) { BSR.W INT_COMMON(INTERRUPT_173) }
    static void hook_entry_174(void) { BSR.W INT_COMMON(INTERRUPT_174) }
    static void hook_entry_175(void) { BSR.W INT_COMMON(INTERRUPT_175) }
    static void hook_entry_176(void) { BSR.W INT_COMMON(INTERRUPT_176) }
    static void hook_entry_177(void) { BSR.W INT_COMMON(INTERRUPT_177) }
    static void hook_entry_178(void) { BSR.W INT_COMMON(INTERRUPT_178) }
    static void hook_entry_179(void) { BSR.W INT_COMMON(INTERRUPT_179) }
    static void hook_entry_180(void) { BSR.W INT_COMMON(INTERRUPT_180) }
    static void hook_entry_181(void) { BSR.W INT_COMMON(INTERRUPT_181) }
    static void hook_entry_182(void) { BSR.W INT_COMMON(INTERRUPT_182) }
    static void hook_entry_183(void) { BSR.W INT_COMMON(INTERRUPT_183) }
    static void hook_entry_184(void) { BSR.W INT_COMMON(INTERRUPT_184) }
    static void hook_entry_185(void) { BSR.W INT_COMMON(INTERRUPT_185) }
    static void hook_entry_186(void) { BSR.W INT_COMMON(INTERRUPT_186) }
    static void hook_entry_187(void) { BSR.W INT_COMMON(INTERRUPT_187) }
    static void hook_entry_188(void) { BSR.W INT_COMMON(INTERRUPT_188) }
    static void hook_entry_189(void) { BSR.W INT_COMMON(INTERRUPT_189) }
    static void hook_entry_190(void) { BSR.W INT_COMMON(INTERRUPT_190) }
    static void hook_entry_191(void) { BSR.W INT_COMMON(INTERRUPT_191) }
    static void hook_entry_192(void) { BSR.W INT_COMMON(INTERRUPT_192) }
    static void hook_entry_193(void) { BSR.W INT_COMMON(INTERRUPT_193) }
    static void hook_entry_194(void) { BSR.W INT_COMMON(INTERRUPT_194) }
    static void hook_entry_195(void) { BSR.W INT_COMMON(INTERRUPT_195) }
    static void hook_entry_196(void) { BSR.W INT_COMMON(INTERRUPT_196) }
    static void hook_entry_197(void) { BSR.W INT_COMMON(INTERRUPT_197) }
    static void hook_entry_198(void) { BSR.W INT_COMMON(INTERRUPT_198) }
    static void hook_entry_199(void) { BSR.W INT_COMMON(INTERRUPT_199) }
    static void hook_entry_200(void) { BSR.W INT_COMMON(INTERRUPT_200) }
    static void hook_entry_201(void) { BSR.W INT_COMMON(INTERRUPT_201) }
    static void hook_entry_202(void) { BSR.W INT_COMMON(INTERRUPT_202) }
    static void hook_entry_203(void) { BSR.W INT_COMMON(INTERRUPT_203) }
    static void hook_entry_204(void) { BSR.W INT_COMMON(INTERRUPT_204) }
    static void hook_entry_205(void) { BSR.W INT_COMMON(INTERRUPT_205) }
    static void hook_entry_206(void) { BSR.W INT_COMMON(INTERRUPT_206) }
    static void hook_entry_207(void) { BSR.W INT_COMMON(INTERRUPT_207) }
    static void hook_entry_208(void) { BSR.W INT_COMMON(INTERRUPT_208) }
    static void hook_entry_209(void) { BSR.W INT_COMMON(INTERRUPT_209) }
    static void hook_entry_210(void) { BSR.W INT_COMMON(INTERRUPT_210) }
    static void hook_entry_211(void) { BSR.W INT_COMMON(INTERRUPT_211) }
    static void hook_entry_212(void) { BSR.W INT_COMMON(INTERRUPT_212) }
    static void hook_entry_213(void) { BSR.W INT_COMMON(INTERRUPT_213) }
    static void hook_entry_214(void) { BSR.W INT_COMMON(INTERRUPT_214) }
    static void hook_entry_215(void) { BSR.W INT_COMMON(INTERRUPT_215) }
    static void hook_entry_216(void) { BSR.W INT_COMMON(INTERRUPT_216) }
    static void hook_entry_217(void) { BSR.W INT_COMMON(INTERRUPT_217) }
    static void hook_entry_218(void) { BSR.W INT_COMMON(INTERRUPT_218) }
    static void hook_entry_219(void) { BSR.W INT_COMMON(INTERRUPT_219) }
    static void hook_entry_220(void) { BSR.W INT_COMMON(INTERRUPT_220) }
    static void hook_entry_221(void) { BSR.W INT_COMMON(INTERRUPT_221) }
    static void hook_entry_222(void) { BSR.W INT_COMMON(INTERRUPT_222) }
    static void hook_entry_223(void) { BSR.W INT_COMMON(INTERRUPT_223) }
    static void hook_entry_224(void) { BSR.W INT_COMMON(INTERRUPT_224) }
    static void hook_entry_225(void) { BSR.W INT_COMMON(INTERRUPT_225) }
    static void hook_entry_226(void) { BSR.W INT_COMMON(INTERRUPT_226) }
    static void hook_entry_227(void) { BSR.W INT_COMMON(INTERRUPT_227) }
    static void hook_entry_228(void) { BSR.W INT_COMMON(INTERRUPT_228) }
    static void hook_entry_229(void) { BSR.W INT_COMMON(INTERRUPT_229) }
    static void hook_entry_230(void) { BSR.W INT_COMMON(INTERRUPT_230) }
    static void hook_entry_231(void) { BSR.W INT_COMMON(INTERRUPT_231) }
    static void hook_entry_232(void) { BSR.W INT_COMMON(INTERRUPT_232) }
    static void hook_entry_233(void) { BSR.W INT_COMMON(INTERRUPT_233) }
    static void hook_entry_234(void) { BSR.W INT_COMMON(INTERRUPT_234) }
    static void hook_entry_235(void) { BSR.W INT_COMMON(INTERRUPT_235) }
    static void hook_entry_236(void) { BSR.W INT_COMMON(INTERRUPT_236) }
    static void hook_entry_237(void) { BSR.W INT_COMMON(INTERRUPT_237) }
    static void hook_entry_238(void) { BSR.W INT_COMMON(INTERRUPT_238) }
    static void hook_entry_239(void) { BSR.W INT_COMMON(INTERRUPT_239) }
    static void hook_entry_240(void) { BSR.W INT_COMMON(INTERRUPT_240) }
    static void hook_entry_241(void) { BSR.W INT_COMMON(INTERRUPT_241) }
    static void hook_entry_242(void) { BSR.W INT_COMMON(INTERRUPT_242) }
    static void hook_entry_243(void) { BSR.W INT_COMMON(INTERRUPT_243) }
    static void hook_entry_244(void) { BSR.W INT_COMMON(INTERRUPT_244) }
    static void hook_entry_245(void) { BSR.W INT_COMMON(INTERRUPT_245) }
    static void hook_entry_246(void) { BSR.W INT_COMMON(INTERRUPT_246) }
    static void hook_entry_247(void) { BSR.W INT_COMMON(INTERRUPT_247) }
    static void hook_entry_248(void) { BSR.W INT_COMMON(INTERRUPT_248) }
    static void hook_entry_249(void) { BSR.W INT_COMMON(INTERRUPT_249) }
    static void hook_entry_250(void) { BSR.W INT_COMMON(INTERRUPT_250) }
    static void hook_entry_251(void) { BSR.W INT_COMMON(INTERRUPT_251) }
    static void hook_entry_252(void) { BSR.W INT_COMMON(INTERRUPT_252) }
    static void hook_entry_253(void) { BSR.W INT_COMMON(INTERRUPT_253) }
    static void hook_entry_254(void) { BSR.W INT_COMMON(INTERRUPT_254) }
    static void hook_entry_255(void) { BSR.W INT_COMMON(INTERRUPT_255) }
    
    static void (* const Int_Hook_Vectors[])(void) =
    {
        (void (*)(void))hook_entry___0,
        (void (*)(void))hook_entry___1,
        (void (*)(void))hook_entry___2,
        (void (*)(void))hook_entry___3,
        (void (*)(void))hook_entry___4,
        (void (*)(void))hook_entry___5,
        (void (*)(void))hook_entry___6,
        (void (*)(void))hook_entry___7,
        (void (*)(void))hook_entry___8,
        (void (*)(void))hook_entry___9,
        (void (*)(void))hook_entry__10,
        (void (*)(void))hook_entry__11,
        (void (*)(void))hook_entry__12,
        (void (*)(void))hook_entry__13,
        (void (*)(void))hook_entry__14,
        (void (*)(void))hook_entry__15,
        (void (*)(void))hook_entry__16,
        (void (*)(void))hook_entry__17,
        (void (*)(void))hook_entry__18,
        (void (*)(void))hook_entry__19,
        (void (*)(void))hook_entry__20,
        (void (*)(void))hook_entry__21,
        (void (*)(void))hook_entry__22,
        (void (*)(void))hook_entry__23,
        (void (*)(void))hook_entry__24,
        (void (*)(void))hook_entry__25,
        (void (*)(void))hook_entry__26,
        (void (*)(void))hook_entry__27,
        (void (*)(void))hook_entry__28,
        (void (*)(void))hook_entry__29,
        (void (*)(void))hook_entry__30,
        (void (*)(void))hook_entry__31,
        (void (*)(void))hook_entry__32,
        (void (*)(void))hook_entry__33,
        (void (*)(void))hook_entry__34,
        (void (*)(void))hook_entry__35,
        (void (*)(void))hook_entry__36,
        (void (*)(void))hook_entry__37,
        (void (*)(void))hook_entry__38,
        (void (*)(void))hook_entry__39,
        (void (*)(void))hook_entry__40,
        (void (*)(void))hook_entry__41,
        (void (*)(void))hook_entry__42,
        (void (*)(void))hook_entry__43,
        (void (*)(void))hook_entry__44,
        (void (*)(void))hook_entry__45,
        (void (*)(void))hook_entry__46,
        (void (*)(void))hook_entry__47,
        (void (*)(void))hook_entry__48,
        (void (*)(void))hook_entry__49,
        (void (*)(void))hook_entry__50,
        (void (*)(void))hook_entry__51,
        (void (*)(void))hook_entry__52,
        (void (*)(void))hook_entry__53,
        (void (*)(void))hook_entry__54,
        (void (*)(void))hook_entry__55,
        (void (*)(void))hook_entry__56,
        (void (*)(void))hook_entry__57,
        (void (*)(void))hook_entry__58,
        (void (*)(void))hook_entry__59,
        (void (*)(void))hook_entry__60,
        (void (*)(void))hook_entry__61,
        (void (*)(void))hook_entry__62,
        (void (*)(void))hook_entry__63,
        (void (*)(void))hook_entry__64,
        (void (*)(void))hook_entry__65,
        (void (*)(void))hook_entry__66,
        (void (*)(void))hook_entry__67,
        (void (*)(void))hook_entry__68,
        (void (*)(void))hook_entry__69,
        (void (*)(void))hook_entry__70,
        (void (*)(void))hook_entry__71,
        (void (*)(void))hook_entry__72,
        (void (*)(void))hook_entry__73,
        (void (*)(void))hook_entry__74,
        (void (*)(void))hook_entry__75,
        (void (*)(void))hook_entry__76,
        (void (*)(void))hook_entry__77,
        (void (*)(void))hook_entry__78,
        (void (*)(void))hook_entry__79,
        (void (*)(void))hook_entry__80,
        (void (*)(void))hook_entry__81,
        (void (*)(void))hook_entry__82,
        (void (*)(void))hook_entry__83,
        (void (*)(void))hook_entry__84,
        (void (*)(void))hook_entry__85,
        (void (*)(void))hook_entry__86,
        (void (*)(void))hook_entry__87,
        (void (*)(void))hook_entry__88,
        (void (*)(void))hook_entry__89,
        (void (*)(void))hook_entry__90,
        (void (*)(void))hook_entry__91,
        (void (*)(void))hook_entry__92,
        (void (*)(void))hook_entry__93,
        (void (*)(void))hook_entry__94,
        (void (*)(void))hook_entry__95,
        (void (*)(void))hook_entry__96,
        (void (*)(void))hook_entry__97,
        (void (*)(void))hook_entry__98,
        (void (*)(void))hook_entry__99,
        (void (*)(void))hook_entry_100,
        (void (*)(void))hook_entry_101,
        (void (*)(void))hook_entry_102,
        (void (*)(void))hook_entry_103,
        (void (*)(void))hook_entry_104,
        (void (*)(void))hook_entry_105,
        (void (*)(void))hook_entry_106,
        (void (*)(void))hook_entry_107,
        (void (*)(void))hook_entry_108,
        (void (*)(void))hook_entry_109,
        (void (*)(void))hook_entry_110,
        (void (*)(void))hook_entry_111,
        (void (*)(void))hook_entry_112,
        (void (*)(void))hook_entry_113,
        (void (*)(void))hook_entry_114,
        (void (*)(void))hook_entry_115,
        (void (*)(void))hook_entry_116,
        (void (*)(void))hook_entry_117,
        (void (*)(void))hook_entry_118,
        (void (*)(void))hook_entry_119,
        (void (*)(void))hook_entry_120,
        (void (*)(void))hook_entry_121,
        (void (*)(void))hook_entry_122,
        (void (*)(void))hook_entry_123,
        (void (*)(void))hook_entry_124,
        (void (*)(void))hook_entry_125,
        (void (*)(void))hook_entry_126,
        (void (*)(void))hook_entry_127,
        (void (*)(void))hook_entry_128,
        (void (*)(void))hook_entry_129,
        (void (*)(void))hook_entry_130,
        (void (*)(void))hook_entry_131,
        (void (*)(void))hook_entry_132,
        (void (*)(void))hook_entry_133,
        (void (*)(void))hook_entry_134,
        (void (*)(void))hook_entry_135,
        (void (*)(void))hook_entry_136,
        (void (*)(void))hook_entry_137,
        (void (*)(void))hook_entry_138,
        (void (*)(void))hook_entry_139,
        (void (*)(void))hook_entry_140,
        (void (*)(void))hook_entry_141,
        (void (*)(void))hook_entry_142,
        (void (*)(void))hook_entry_143,
        (void (*)(void))hook_entry_144,
        (void (*)(void))hook_entry_145,
        (void (*)(void))hook_entry_146,
        (void (*)(void))hook_entry_147,
        (void (*)(void))hook_entry_148,
        (void (*)(void))hook_entry_149,
        (void (*)(void))hook_entry_150,
        (void (*)(void))hook_entry_151,
        (void (*)(void))hook_entry_152,
        (void (*)(void))hook_entry_153,
        (void (*)(void))hook_entry_154,
        (void (*)(void))hook_entry_155,
        (void (*)(void))hook_entry_156,
        (void (*)(void))hook_entry_157,
        (void (*)(void))hook_entry_158,
        (void (*)(void))hook_entry_159,
        (void (*)(void))hook_entry_160,
        (void (*)(void))hook_entry_161,
        (void (*)(void))hook_entry_162,
        (void (*)(void))hook_entry_163,
        (void (*)(void))hook_entry_164,
        (void (*)(void))hook_entry_165,
        (void (*)(void))hook_entry_166,
        (void (*)(void))hook_entry_167,
        (void (*)(void))hook_entry_168,
        (void (*)(void))hook_entry_169,
        (void (*)(void))hook_entry_170,
        (void (*)(void))hook_entry_171,
        (void (*)(void))hook_entry_172,
        (void (*)(void))hook_entry_173,
        (void (*)(void))hook_entry_174,
        (void (*)(void))hook_entry_175,
        (void (*)(void))hook_entry_176,
        (void (*)(void))hook_entry_177,
        (void (*)(void))hook_entry_178,
        (void (*)(void))hook_entry_179,
        (void (*)(void))hook_entry_180,
        (void (*)(void))hook_entry_181,
        (void (*)(void))hook_entry_182,
        (void (*)(void))hook_entry_183,
        (void (*)(void))hook_entry_184,
        (void (*)(void))hook_entry_185,
        (void (*)(void))hook_entry_186,
        (void (*)(void))hook_entry_187,
        (void (*)(void))hook_entry_188,
        (void (*)(void))hook_entry_189,
        (void (*)(void))hook_entry_190,
        (void (*)(void))hook_entry_191,
        (void (*)(void))hook_entry_192,
        (void (*)(void))hook_entry_193,
        (void (*)(void))hook_entry_194,
        (void (*)(void))hook_entry_195,
        (void (*)(void))hook_entry_196,
        (void (*)(void))hook_entry_197,
        (void (*)(void))hook_entry_198,
        (void (*)(void))hook_entry_199,
        (void (*)(void))hook_entry_200,
        (void (*)(void))hook_entry_201,
        (void (*)(void))hook_entry_202,
        (void (*)(void))hook_entry_203,
        (void (*)(void))hook_entry_204,
        (void (*)(void))hook_entry_205,
        (void (*)(void))hook_entry_206,
        (void (*)(void))hook_entry_207,
        (void (*)(void))hook_entry_208,
        (void (*)(void))hook_entry_209,
        (void (*)(void))hook_entry_210,
        (void (*)(void))hook_entry_211,
        (void (*)(void))hook_entry_212,
        (void (*)(void))hook_entry_213,
        (void (*)(void))hook_entry_214,
        (void (*)(void))hook_entry_215,
        (void (*)(void))hook_entry_216,
        (void (*)(void))hook_entry_217,
        (void (*)(void))hook_entry_218,
        (void (*)(void))hook_entry_219,
        (void (*)(void))hook_entry_220,
        (void (*)(void))hook_entry_221,
        (void (*)(void))hook_entry_222,
        (void (*)(void))hook_entry_223,
        (void (*)(void))hook_entry_224,
        (void (*)(void))hook_entry_225,
        (void (*)(void))hook_entry_226,
        (void (*)(void))hook_entry_227,
        (void (*)(void))hook_entry_228,
        (void (*)(void))hook_entry_229,
        (void (*)(void))hook_entry_230,
        (void (*)(void))hook_entry_231,
        (void (*)(void))hook_entry_232,
        (void (*)(void))hook_entry_233,
        (void (*)(void))hook_entry_234,
        (void (*)(void))hook_entry_235,
        (void (*)(void))hook_entry_236,
        (void (*)(void))hook_entry_237,
        (void (*)(void))hook_entry_238,
        (void (*)(void))hook_entry_239,
        (void (*)(void))hook_entry_240,
        (void (*)(void))hook_entry_241,
        (void (*)(void))hook_entry_242,
        (void (*)(void))hook_entry_243,
        (void (*)(void))hook_entry_244,
        (void (*)(void))hook_entry_245,
        (void (*)(void))hook_entry_246,
        (void (*)(void))hook_entry_247,
        (void (*)(void))hook_entry_248,
        (void (*)(void))hook_entry_249,
        (void (*)(void))hook_entry_250,
        (void (*)(void))hook_entry_251,
        (void (*)(void))hook_entry_252,
        (void (*)(void))hook_entry_253,
        (void (*)(void))hook_entry_254,
        (void (*)(void))hook_entry_255
    };
    

     
    NORTi_interrupt.h
    NORTi_interrupt.h.20220624.txt
    /*
     * NORTi_interrupt.h
     *
     *  Created on: Jun 24, 2022
     *      Author: NoMaY
     *     License: MIT
     */
    
    #ifndef NORTI_INTERRUPT_H_
    #define NORTI_INTERRUPT_H_
    
    // 28    _r_Config_CMT0_cmi0_interrupt
    
    #define INTERRUPT___0 nonOS
    #define INTERRUPT___1 nonOS
    #define INTERRUPT___2 nonOS
    #define INTERRUPT___3 nonOS
    #define INTERRUPT___4 nonOS
    #define INTERRUPT___5 nonOS
    #define INTERRUPT___6 nonOS
    #define INTERRUPT___7 nonOS
    #define INTERRUPT___8 nonOS
    #define INTERRUPT___9 nonOS
    #define INTERRUPT__10 nonOS
    #define INTERRUPT__11 nonOS
    #define INTERRUPT__12 nonOS
    #define INTERRUPT__13 nonOS
    #define INTERRUPT__14 nonOS
    #define INTERRUPT__15 nonOS
    #define INTERRUPT__16 nonOS
    #define INTERRUPT__17 nonOS
    #define INTERRUPT__18 nonOS
    #define INTERRUPT__19 nonOS
    #define INTERRUPT__20 nonOS
    #define INTERRUPT__21 nonOS
    #define INTERRUPT__22 nonOS
    #define INTERRUPT__23 nonOS
    #define INTERRUPT__24 nonOS
    #define INTERRUPT__25 nonOS
    #define INTERRUPT__26 nonOS
    #define INTERRUPT__27 nonOS
    #define INTERRUPT__28 NORTi // _r_Config_CMT0_cmi0_interrupt
    #define INTERRUPT__29 nonOS
    #define INTERRUPT__30 nonOS
    #define INTERRUPT__31 nonOS
    #define INTERRUPT__32 nonOS
    #define INTERRUPT__33 nonOS
    #define INTERRUPT__34 nonOS
    #define INTERRUPT__35 nonOS
    #define INTERRUPT__36 nonOS
    #define INTERRUPT__37 nonOS
    #define INTERRUPT__38 nonOS
    #define INTERRUPT__39 nonOS
    #define INTERRUPT__40 nonOS
    #define INTERRUPT__41 nonOS
    #define INTERRUPT__42 nonOS
    #define INTERRUPT__43 nonOS
    #define INTERRUPT__44 nonOS
    #define INTERRUPT__45 nonOS
    #define INTERRUPT__46 nonOS
    #define INTERRUPT__47 nonOS
    #define INTERRUPT__48 nonOS
    #define INTERRUPT__49 nonOS
    #define INTERRUPT__50 nonOS
    #define INTERRUPT__51 nonOS
    #define INTERRUPT__52 nonOS
    #define INTERRUPT__53 nonOS
    #define INTERRUPT__54 nonOS
    #define INTERRUPT__55 nonOS
    #define INTERRUPT__56 nonOS
    #define INTERRUPT__57 nonOS
    #define INTERRUPT__58 nonOS
    #define INTERRUPT__59 nonOS
    #define INTERRUPT__60 nonOS
    #define INTERRUPT__61 nonOS
    #define INTERRUPT__62 nonOS
    #define INTERRUPT__63 nonOS
    #define INTERRUPT__64 nonOS
    #define INTERRUPT__65 nonOS
    #define INTERRUPT__66 nonOS
    #define INTERRUPT__67 nonOS
    #define INTERRUPT__68 nonOS
    #define INTERRUPT__69 nonOS
    #define INTERRUPT__70 nonOS
    #define INTERRUPT__71 nonOS
    #define INTERRUPT__72 nonOS
    #define INTERRUPT__73 nonOS
    #define INTERRUPT__74 nonOS
    #define INTERRUPT__75 nonOS
    #define INTERRUPT__76 nonOS
    #define INTERRUPT__77 nonOS
    #define INTERRUPT__78 nonOS
    #define INTERRUPT__79 nonOS
    #define INTERRUPT__80 nonOS
    #define INTERRUPT__81 nonOS
    #define INTERRUPT__82 nonOS
    #define INTERRUPT__83 nonOS
    #define INTERRUPT__84 nonOS
    #define INTERRUPT__85 nonOS
    #define INTERRUPT__86 nonOS
    #define INTERRUPT__87 nonOS
    #define INTERRUPT__88 nonOS
    #define INTERRUPT__89 nonOS
    #define INTERRUPT__90 nonOS
    #define INTERRUPT__91 nonOS
    #define INTERRUPT__92 nonOS
    #define INTERRUPT__93 nonOS
    #define INTERRUPT__94 nonOS
    #define INTERRUPT__95 nonOS
    #define INTERRUPT__96 nonOS
    #define INTERRUPT__97 nonOS
    #define INTERRUPT__98 nonOS
    #define INTERRUPT__99 nonOS
    #define INTERRUPT_100 nonOS
    #define INTERRUPT_101 nonOS
    #define INTERRUPT_102 nonOS
    #define INTERRUPT_103 nonOS
    #define INTERRUPT_104 nonOS
    #define INTERRUPT_105 nonOS
    #define INTERRUPT_106 nonOS
    #define INTERRUPT_107 nonOS
    #define INTERRUPT_108 nonOS
    #define INTERRUPT_109 nonOS
    #define INTERRUPT_110 nonOS
    #define INTERRUPT_111 nonOS
    #define INTERRUPT_112 nonOS
    #define INTERRUPT_113 nonOS
    #define INTERRUPT_114 nonOS
    #define INTERRUPT_115 nonOS
    #define INTERRUPT_116 nonOS
    #define INTERRUPT_117 nonOS
    #define INTERRUPT_118 nonOS
    #define INTERRUPT_119 nonOS
    #define INTERRUPT_120 nonOS
    #define INTERRUPT_121 nonOS
    #define INTERRUPT_122 nonOS
    #define INTERRUPT_123 nonOS
    #define INTERRUPT_124 nonOS
    #define INTERRUPT_125 nonOS
    #define INTERRUPT_126 nonOS
    #define INTERRUPT_127 nonOS
    #define INTERRUPT_128 nonOS
    #define INTERRUPT_129 nonOS
    #define INTERRUPT_130 nonOS
    #define INTERRUPT_131 nonOS
    #define INTERRUPT_132 nonOS
    #define INTERRUPT_133 nonOS
    #define INTERRUPT_134 nonOS
    #define INTERRUPT_135 nonOS
    #define INTERRUPT_136 nonOS
    #define INTERRUPT_137 nonOS
    #define INTERRUPT_138 nonOS
    #define INTERRUPT_139 nonOS
    #define INTERRUPT_140 nonOS
    #define INTERRUPT_141 nonOS
    #define INTERRUPT_142 nonOS
    #define INTERRUPT_143 nonOS
    #define INTERRUPT_144 nonOS
    #define INTERRUPT_145 nonOS
    #define INTERRUPT_146 nonOS
    #define INTERRUPT_147 nonOS
    #define INTERRUPT_148 nonOS
    #define INTERRUPT_149 nonOS
    #define INTERRUPT_150 nonOS
    #define INTERRUPT_151 nonOS
    #define INTERRUPT_152 nonOS
    #define INTERRUPT_153 nonOS
    #define INTERRUPT_154 nonOS
    #define INTERRUPT_155 nonOS
    #define INTERRUPT_156 nonOS
    #define INTERRUPT_157 nonOS
    #define INTERRUPT_158 nonOS
    #define INTERRUPT_159 nonOS
    #define INTERRUPT_160 nonOS
    #define INTERRUPT_161 nonOS
    #define INTERRUPT_162 nonOS
    #define INTERRUPT_163 nonOS
    #define INTERRUPT_164 nonOS
    #define INTERRUPT_165 nonOS
    #define INTERRUPT_166 nonOS
    #define INTERRUPT_167 nonOS
    #define INTERRUPT_168 nonOS
    #define INTERRUPT_169 nonOS
    #define INTERRUPT_170 nonOS
    #define INTERRUPT_171 nonOS
    #define INTERRUPT_172 nonOS
    #define INTERRUPT_173 nonOS
    #define INTERRUPT_174 nonOS
    #define INTERRUPT_175 nonOS
    #define INTERRUPT_176 nonOS
    #define INTERRUPT_177 nonOS
    #define INTERRUPT_178 nonOS
    #define INTERRUPT_179 nonOS
    #define INTERRUPT_180 nonOS
    #define INTERRUPT_181 nonOS
    #define INTERRUPT_182 nonOS
    #define INTERRUPT_183 nonOS
    #define INTERRUPT_184 nonOS
    #define INTERRUPT_185 nonOS
    #define INTERRUPT_186 nonOS
    #define INTERRUPT_187 nonOS
    #define INTERRUPT_188 nonOS
    #define INTERRUPT_189 nonOS
    #define INTERRUPT_190 nonOS
    #define INTERRUPT_191 nonOS
    #define INTERRUPT_192 nonOS
    #define INTERRUPT_193 nonOS
    #define INTERRUPT_194 nonOS
    #define INTERRUPT_195 nonOS
    #define INTERRUPT_196 nonOS
    #define INTERRUPT_197 nonOS
    #define INTERRUPT_198 nonOS
    #define INTERRUPT_199 nonOS
    #define INTERRUPT_200 nonOS
    #define INTERRUPT_201 nonOS
    #define INTERRUPT_202 nonOS
    #define INTERRUPT_203 nonOS
    #define INTERRUPT_204 nonOS
    #define INTERRUPT_205 nonOS
    #define INTERRUPT_206 nonOS
    #define INTERRUPT_207 nonOS
    #define INTERRUPT_208 nonOS
    #define INTERRUPT_209 nonOS
    #define INTERRUPT_210 nonOS
    #define INTERRUPT_211 nonOS
    #define INTERRUPT_212 nonOS
    #define INTERRUPT_213 nonOS
    #define INTERRUPT_214 nonOS
    #define INTERRUPT_215 nonOS
    #define INTERRUPT_216 nonOS
    #define INTERRUPT_217 nonOS
    #define INTERRUPT_218 nonOS
    #define INTERRUPT_219 nonOS
    #define INTERRUPT_220 nonOS
    #define INTERRUPT_221 nonOS
    #define INTERRUPT_222 nonOS
    #define INTERRUPT_223 nonOS
    #define INTERRUPT_224 nonOS
    #define INTERRUPT_225 nonOS
    #define INTERRUPT_226 nonOS
    #define INTERRUPT_227 nonOS
    #define INTERRUPT_228 nonOS
    #define INTERRUPT_229 nonOS
    #define INTERRUPT_230 nonOS
    #define INTERRUPT_231 nonOS
    #define INTERRUPT_232 nonOS
    #define INTERRUPT_233 nonOS
    #define INTERRUPT_234 nonOS
    #define INTERRUPT_235 nonOS
    #define INTERRUPT_236 nonOS
    #define INTERRUPT_237 nonOS
    #define INTERRUPT_238 nonOS
    #define INTERRUPT_239 nonOS
    #define INTERRUPT_240 nonOS
    #define INTERRUPT_241 nonOS
    #define INTERRUPT_242 nonOS
    #define INTERRUPT_243 nonOS
    #define INTERRUPT_244 nonOS
    #define INTERRUPT_245 nonOS
    #define INTERRUPT_246 nonOS
    #define INTERRUPT_247 nonOS
    #define INTERRUPT_248 nonOS
    #define INTERRUPT_249 nonOS
    #define INTERRUPT_250 nonOS
    #define INTERRUPT_251 nonOS
    #define INTERRUPT_252 nonOS
    #define INTERRUPT_253 nonOS
    #define INTERRUPT_254 nonOS
    #define INTERRUPT_255 nonOS
    
    #endif /* NORTI_INTERRUPT_H_ */
    

     
    tb_rx140_main.c
    tb_rx140_main.c.20220624.txt
    #include "r_smc_entry.h"
    #include "tbrx140def.h"
    
    void NORTi_INT_HOOK_init(void);
    void NORTi_INT_enter(void);
    void NORTi_INT_exit(void);
    
    void NORTi_INT_enter(void)
    {
        nop();
    }
    
    void NORTi_INT_exit(void)
    {
        nop();
    }
    
    void main(void);
    
    void main(void)
    {
        NORTi_INT_HOOK_init();
    
        LED0 = LED_OFF;
        LED1 = LED_OFF;
    
        if (SW1_PUSH == SW1) /*SW1_PUSH = Manual Mode,  Other = Auto Mode*/
        {
            R_Config_ICU_IRQ0_Start();
        }
        else
        {
            R_Config_CMT0_Start();
        }
        while(1)
        {
            ; /* Blink LED0, LED1 Alternately by Interrupt */
        }
    
    }
    

     

  • ふぐりんです。
    NoMAYさん、ka.makiharaさん、ほやさん。はじめまして。
    NORTiは経験あるのでコメント付けさせてください。


    NORTiの割込みハンドラ(isr)ですが、いろいろ条件が厳しいですよね。
    理由は、入口/出口で呼ばれるNORTiの割込み管理関数が、呼ばれたときのスタックの内容を
    決め打ちしてるからです。(何番目にどのレジスタが保存されているか決まってる前提で処理)
    限界まで高速化するためだと思います。

    ですから、isrでAUTO変数は使っちゃダメなんですがisrから呼ばれるサブルーチンは大丈夫です。
    私はこんな感じで実装しています。(すいませんコードの貼り付けが分からないw)

    static void xxx_interrupt(void)
    {
      入口管理関数();
      xxx_subroutine(); // これが処理本体(この中ではAUTO変数が使えます)
      出口管理関数();
    }


    NORTiは、iTRON仕様の割り込み登録用API(def_inh)も使えるようになってるため
    割込みベクタテーブルとその管理も内部で実装されています。
    これと #pragma interrupt はぶつかります。
    ですから本当は #pragma interrupt を使わないで def_inh を使ってほしいのですが
    そこに立ちふさがったのが CG であり FIT であるんじゃなかろうかと。
    ユーザとしても悩ましいところです。

    私もNORTiとCGを共存させるため、NORTiのベクタテーブルに無理やり登録させたり苦労してます。
    そのとき #pragma interrupt 宣言されたルーチン(非NORTi)をコピーもしてたと思うので
    もしかしたらNoMAYさんご提案に近いかたちかもしれません。

    じつはNORTiとFITの共存はまだできてません・・疲れましたw
    FreeRTOSみたいにソフト割込み使えば入口/出口の管理関数は不要じゃないかと思うんですが・・甘いですかねえ

  • ふぐりんです。

    CGの再生成で変更点を壊されないようにする対策について
    私のは泥縄式でして、恥ずかしかったので書かなかったのですがやっぱり書きますw


    CGで自動生成した.cは、だいたいどれも先頭付近と最後尾付近に user code 部分があると思います。
    そこで先頭付近の user code で #if 0 行を書いて、最後尾の user code に #endif 行を書きます。

    この最後尾の #endif 行のあとに、 #if 0 以降の無効化したコード全部そっくりそのままコピーして
    コピーした中の /*Start user code 行と /* End user code 行を 削除してしまえば
    どんなに変更しても再生成で壊されない自動生成コードが手にはいります。

    同じ関数名が二重に存在するので、検索でどっちもひっかかるのがちょっとめんどくさいです。
    また、自動生成コードのバージョンアップなどで変化したかどうか確認しずらいとも思うので
    管理に重点をおくのであれば、ほやさんの生成用プロジェクトを別に作る方法が良いなと思ってます。
    (追記:自動生成の出力先フォルダはあとから変更できたと思うので、プロジェクト不参加で比較用に生成できた気もします)


    ちなみに、NORTiと同居するときは、コピーした側の #pragma interrupt を def_inh 方式に変更して
    割込みベクタテーブルはNORTi側で管理してます。

Reply
  • ふぐりんです。

    CGの再生成で変更点を壊されないようにする対策について
    私のは泥縄式でして、恥ずかしかったので書かなかったのですがやっぱり書きますw


    CGで自動生成した.cは、だいたいどれも先頭付近と最後尾付近に user code 部分があると思います。
    そこで先頭付近の user code で #if 0 行を書いて、最後尾の user code に #endif 行を書きます。

    この最後尾の #endif 行のあとに、 #if 0 以降の無効化したコード全部そっくりそのままコピーして
    コピーした中の /*Start user code 行と /* End user code 行を 削除してしまえば
    どんなに変更しても再生成で壊されない自動生成コードが手にはいります。

    同じ関数名が二重に存在するので、検索でどっちもひっかかるのがちょっとめんどくさいです。
    また、自動生成コードのバージョンアップなどで変化したかどうか確認しずらいとも思うので
    管理に重点をおくのであれば、ほやさんの生成用プロジェクトを別に作る方法が良いなと思ってます。
    (追記:自動生成の出力先フォルダはあとから変更できたと思うので、プロジェクト不参加で比較用に生成できた気もします)


    ちなみに、NORTiと同居するときは、コピーした側の #pragma interrupt を def_inh 方式に変更して
    割込みベクタテーブルはNORTi側で管理してます。

Children
  • ふぐりん さん、こんにちは。NoMaYと申します。(ka.makiharaさんも、こんにちは。)

    NORTiですが、RXマイコン向け(かつRXスマートコンフィグレータが対応している品種)の体験版のようなものは存在していないですよね?もし存在しているのであれば、ウェブページのURLを知りたいです。

    それで、かふぇルネに過去に投稿されていた問合せで、ミスポさんからNORTiとFIT(やCG)を共存させる方法についての回答を直接得たのだろうと思われる人(2名)の話の内容から推測すると、手作業でFIT(やCG)のソースを修正して割り込み管理関数を入れて下さい、といった回答を得ていたようでして、どうやら、def_inhを使用して下さい、といった回答は無かったように見受けられます。私の方では、NORTiを所持していない/購入していないのでちょっと状況がわからないのですけれども、ビルド時の設定に、NORTi側ソースの割り込みベクタテーブルを無効にするオプション等が用意されているのでしょうか?(少なくとも、NORTi側ソースでは#pragma interrupt XXXX(vect=YYYY)等を使わないオプション等が用意されているのでしょうか?)

    Google検索: NORTi Renesas RX 体験版
    www.google.com/search?q=NORTi+Renesas+RX+体験版
     

  • NoMaYさん、ふぐりんさん、こんにちは。

    応答が遅れていて申し訳ありません。

    NoMaYさんに作成頂いたフレームワーク、さっそくテストして、使用する方向で話が進んでいます。

    NORTi のFIT対応については、ミスポさんに問い合わせを行い、サンプルのダウンロードサイトを教えていただきました。

    ユーザーIDとパスワードを入力するとダウンロードできるのですが、

    ここに記載するのは、ダメかと思いまして・・・

    readme.txt
    =========================================================================
    
                   RX231用FIT対応サンプルプログラム補足説明書
                        Renesas Starter Kit for RX231 編
                                 2020年12月23日
    
                    Copyright (c) 2019-2020, MiSPO Co., Ltd.
                             http://www.mispo.co.jp/
    
    =========================================================================
    
    ■はじめに
    
    Renesas Starter Kit for RX231 (R0K505231S900BE)用のNORTiのサンプルプログ
    ラムに、ルネサス エレクトロニクスのFirmware Integration Technology (FIT)
    モジュールを組み込む例として、本サンプルプログラムは作成してあります。
    
    ■ファイル構成
    
      r_bsp ------------ ボードサポートパッケージFITモジュールのフォルダ
      r_config --------- FITのコンフィグレーションファイルのフォルダ
      r_gpio_rx -------- I/Oポート(GPIO)のFITモジュールのフォルダ
      r_sci_rx --------- SCIのFITモジュールのフォルダ
      r_byteq ---------- FITのバイト型キューバッファ(BYTEQ)のフォルダ
      ent_int.src ------ FITに対応したent_int/ret_intのラッパー関数
      rx231.h ---------- 内蔵周辺モジュール定義ヘッダ
      r0k505231.c ------ ボード依存の内蔵周辺の初期化
      n4i231.c --------- 割り込み管理と周期タイマ割り込みのソース
      smp231_fit.c ----- シリアル入出力を使ったサンプルプログラム
      smp231_fit.mtpj -- CS+用プロジェクトファイル
      smp231_fit.rcpe -- Renesas共通プロジェクトファイル(e2studioインポート用)
      readme.txt ------- RX231用FIT対応サンプルプログラム補足説明書(本書)
    
    r_bsp~r_byteqはルネサスのRX Driver Packageのモジュールで、移植のための
    変更を下記ソースに「// 201?-??-?? ...... by MiSPO」のコメントと共に施し
    てあります。
    
      r_bsp\platform.h
      r_bsp\board\generic_rx231\hwsetup.c
      r_config\r_bsp_config.h
      r_config\r_sci_rx_config.h
      r_sci_rx\src\targets\rx231\r_sci_rx231.c
    
    ent_int.srcとsmp231_fit.cは、本サンプルプログラムで新規に作成したソース
    で、rx231.hとr0k505231.cとn4i231.cは、FIT対応のために改訂したソースです。
    
    ■FITモジュールの組み込み方法
    
    FITに付属のアプリケーションノート「CS+に組み込む方法」に記載の手順どおり
    に組み込み、次の「FITモジュールに含まれる割り込みハンドラの扱い」に従って、
    割り込みハンドラをOS管理下の割り込みとして使えるように修正してください。
    これ以外の注意点は特にございません。
    
    ■FITモジュールに含まれる割り込みハンドラの扱い
    
    次の例のように、FITモジュールの割り込みハンドラに、ient_int()/iret_int()
    の発行を追加してください。
    
    extern void ient_int(void);
    extern void iret_int(void);
    
    static void sci5_eri5_isr(void *cb_args)
    {
        ient_int();                 // 追加
        eri_handler(&ch5_ctrl);
        iret_int();                 //  〃
    }
    
    NORTiの割り込みハンドラでは、ent_int()/ret_int()でレジスタの待避/復元を
    行うと共にタスクの切り替えが実行されますが、FITモジュールの割り込みハン
    ドラでは、#pragma interruptでレジスタの待避/復元だけが行われます。そのた
    め、#pragma interruptと共に使えるient_int()/iret_int()を新たに設けました。
    
    あるいは、ient_int()/iret_int()を使わず、FITモジュールの割り込みハンドラ
    をOSの管理外とすることもできます。具体的には、カーネルコンフィグレーショ
    ン用のKNL_LEVELマクロでデフォルトでは6に定義されているカーネルの割り込み
    禁止レベルより、高優先としてください。ただし、この場合、割り込みハンドラ
    では一切のNORTiのシステムコールを発行できません。
    
    ■FITモジュール以外の割り込みハンドラの扱い
    
    NORTiの方式の割り込みハンドラを、FITモジュールの方式の割り込みハンドラと
    混在することができます。ただし、FITモジュールでは割り込みベクタテーブル
    がROMに固定されていることが前提ですので、def_inh()による割り込みハンドラ
    の登録ができません。
    そこで、CC-RXの「プロジェクト・ツリー」の「CC-RX(ビルド・ツール)」にある
    「リンク・オプション」タブで、「その他」の「その他の追加オプション」に、
    -vectn=28=_inthdr,??=????, ... というように、割り込み番号と割り込みハン
    ドラを指定してください。本サンプルプログラムでは、OSが使用する周期タイマ
    として、コンペアマッチタイマのハンドラを、このように登録してあります。
    
    ■セクション
    
    本サンプルプログラムのセクションは、FITモジュールの方式を取り込んで以下
    のように配置されていますが、NORTiで不要なユーザスタックのSUセクションと
    割り込みスタックのSIセクションは、最小の4バイトとしてあります。
    
       アドレス   | セクション
      ------------+--------------------------------
       0x00000400 | B_1,R_1,B_2,R_2,B,R,STACK
       0x0000FFF8 | SI,SU
       0xFFF80000 | C_1,C_2,C,C$*,D*,P*,VECT,W*,L
       0xFFFFFF80 | EXCEPTVECT
       0xFFFFFFFC | RESETVECT
    
    NORTiがスタックとして使用するのはSTACKセクションで、この先頭アドレスから
    SUセクションの末尾(0x0000FFFF)までがスタック領域として使われます。すなわ
    ち、SUセクションは、リセットでスタックポインタの初期値を決めるためだけに
    使用されます。一方、SIセクションは未使用ですが、FITモジュールでは省くこと
    ができないため、SUセクションの手前に配置してあります。
    

    参考になりますか、どうか。

    こちらの環境でも、ここに記載のRXは使用していませんが、方法は同じなので。

    これから、異なる点としては、ベクタテーブルをDRAM上にコピーして使用している亊ぐらいです。

  • すいません、書き忘れました。

    リンクオプションの -vectn= も使用していません。

  • ふぐりんです。
    NoMaYさんこんにちは。
    お返事いただき感激です。いつも拝見しています。
    なにか困って検索すると、だいたいかふぇルネでNoMaYさんが答えてありましたw

    ・NORTi体験版
    NORTiの体験版はないかもしれません。すいません。
    私はRX版のユーザで保守契約しています。
    開発情報の交換のためとはいえ、知ってることをどこまで書いて良いかちょっと迷うこともあるので、深い話(私のレベルですので浅い話かもしれませんが)することになるようならミスポさんに聞いてみようと思います。

    ・NORTiとFIT(CG)の共存方法
    ミスポさんの同様の対応は、私もよそで1件聞いてます。
    ミスポさんに共存させる問い合わせが来たときはdef_inhを使わない方法で統一されてるようですね。
    私は共存の件ではミスポさんに問い合わせてないですが、以前からチップドライバとかいろいろサポートしてもらっていて、誠実な対応に感謝しています。
    おそらくお客さんにとって最善の方法を考えられた結果だと思います。
    (でも私はdef_inh使いますがw)

    ・割込みベクタテーブル(INTBレジスタ設定)
    普通にNORTiを実装したら2か所でセットされると思います。
    (1)PowerON_Reset_PC() で C$VECTセクションの先頭
    (2)NORTiの初期化ルーチンで以下の3種類のうちの一つ(#defineで切替)
      (2)-1 NORTiが用意するRAMのベクタテーブル <-- default
      (2)-2 NORTiが用意するROMのベクタテーブル
      (2)-3 #defineで指定するアドレス
    (2)が後で実行されるので、何も指定が無ければ(2)-1 NORTiのRAMのテーブルになります。

    ミスポさんのサンプルについてka.makiharaさんが添付されてる情報を見ると、コンパイラの-vectnオプションも使ってるので、C$VECTセクション(ROM)をそのまま使うようです。
    上記(2)全体を無効化する改変をしている(該当するファイル名があるようです)か、(2)-3で C$VECTセクションを再指定してるかのどちらかじゃないでしょうか。

  • ふぐりんです。

    ka.makiharaさんこんにちは。

    情報ありがとうございます!
    FITの場合は#pragma interruptとまた違った対応なんですね。ent_int.srcをぜひ見たくなりました。
    私もFIT対応の参考にしたいのでミスポさんに問い合わせてみます。

    過去のかふぇルネで「ミスポさんがFIT対応した」という話を見たんですが、ka.makiharaさんが入手されたサンプルとは別の話なんでしょうかね?これも問い合わせてみます。
    https://japan.renesasrulz.com/cafe_rene/f/forum5/7129/rx72n-i2c-data-clk/40810#40810

  • ふぐりん さん、ka.makiharaさん、こんにちは。NoMaYです。

    情報ありがとうございました。NORTiでの割り込みベクタテーブルの取り扱い方に何種類か種類があって、それらを使い分けるオプション(というか#define)が実際に存在していることがわかりました。

    ふぐりんさんへ、

    思ったのですが、ka.makiharaさんへ紹介した自作のフレームワーク的なものですけれども、中身を修正することで、CC-RX/FIT/CGが生成したC$VECTテーブルを経由させつつ、def_inh()で登録可能な関数を作成する、ということにも利用出来そうな気がしたのです。(アセンブラコードは技巧的で好き/嫌いはあるかも知れませんけれども。それと、実行される命令コードがテーブルを2回(C$VECTとNORTiのテーブルの2つ)介することにも好き/嫌いはあるかも知れませんけれども。)

    そうすれば、FIT/CGが生成したソースに手を入れなくても、def_inh()方式でやれるようになる?気がしたのです。NORTi V4のユーザーズマニュアルをウェブで探して見てみたのですが、ハンドラ関数はvoid hdr(void)の通常関数で良いのですよね?

    5.11 割込み管理機能
    d e f _ i n h
    機能 割込みハンドラ定義
    形式 ER def_inh(INHNO inhno, const T_DINH *pk_dinh);
    inhno 割込みハンドラ番号
    pk_dinh 割込みハンドラ定義情報パケットへのポインタ

     

  • NoMaYさん、こんにちは。

    とりあえず、作成していただいたコードをビルドしてみましたが、

    NORTi_interrupt.c(16):E0552111:Symbol is undefined

    static void (* const Int_Hook_Vectors[])(void);

    void NORTi_INT_HOOK_init(void)
    {
       set_intb((void *)Int_Hook_Vectors);
    }

    Int_Hook_Vectors が見つからない??

    NoMaYさんの方ではできているので、何かビルド設定が必要ですか?

    こちら、e2Studio, CC-RX V3.04 ですが。

  • ka.makiharaさん、こんにちは。NoMaYです。

    私もCC-RX V3.04です。(ただ、CS+ですけれども、それは関係無いでしょう。) プロジェクトの原型は、TB-RX140の公式のBlinkyサンプルプログラムにrcpcファイルが入っていたので、それを単にコンバートしてファイルを追加しただけだったのです。16行目は以下なのですが、すみません、ちょっと以下のどちらがエラーになっているのか調べてもらえないでしょうか?

        set_intb((void *)Int_Hook_Vectors);

     
    (A) 以下ではどうなりますか?

        set_intb((void *)0);

     
    (B) 以下ではどうなりますか?

        void *p = (void *)Int_Hook_Vectors;

     

  • NoMaYさん、こんにちは。

    一応、解決しました。

    作成していただいた、INT_COMMON_NORTi(void) のインラインアセンブラで

    BSR.W NORTi_INT_enter

    を直し忘れて、このエラーになっていたようです。

    この部分を

    BSR.W _ient_int

    に修正したところ、エラーがなくなりました。

    エラーになっていた、void NORTi_INT_HOOK_init()をコメントアウトしたら、

    src ファイル(アセンブラ側)でエラーになっていたので、修正しました。

    頂いたコードはライブラリプロジェクトに追加してビルドしていたので

    ライブラリとして固める際のエラーだったのかな?とも思うのですが、

    .c で行数まで出力されていると、なかなか分かりずらいですね。。。

    お手数おかけしました。

  • ka.makiharaさん、こんにちは。NoMaYです。

    良かったです。でも、そういえば、すみません、とっさに割り込み管理関数の名前が分からなかったので仮の名前にしていたのですが、自分でもそのことを忘れていました。先日、以下の別スレッドを立てたのですが、そのあたりを修正して後日投稿し直そうかもと思います。(この後も、問題が見付からなければ、ですけれども。)

    MISPOさんのNORTiをRX SmartConfiguratorと一緒に使いたい場合の課題と対策を考察してみるスレッド
    japan.renesasrulz.com/cafe_rene/f/forum21/8266/mispo-norti-rx-smartconfigurator


    あと、これも書き忘れていたのですが、CC-RXで以下のワーニングが出ますね。

    src\NORTi_interrupt.c(325):M0520007:Unrecognized token

     
    以下の`$`が原因だと思うのですが、インラインアセブラでCC-RXのコンパイラのプリプロセッサを使うと、やはり少々無理をさせてしまっているのか、ワーニングが出たりします。(実は、FITのBSPでも無理をさせてしまっているところがあって、そちらは`#`で同様のワーニング(ワーニング番号は異なっていますけれども)が出てしまうので、コマンドラインオプションで抑止してあったりします。) ([追記]ワーニングでは無くてインフォメーションだったかも。)

    #define _INT_COMMON(sel) __$INT_COMMON_##sel