(toppers-users 3085) Re: [H8]E_CTX reported by `isig_tim()' in line 63 of `../jsp/systask/timer.c'. 頻発

中村和博 norichan1108 @ gmail.com
2010年 2月 18日 (木) 07:49:26 JST


おはようございます。中村です。

To: 今井 様

返信が遅くなり申し訳ありません。
とても有意義な情報ありがとうございます。
やっと時間ができましたので、改めて下記試してみたいと思います。
取り急ぎ、ご報告まで。


2010/2/15 今井和彦 <imai-ka648 @ pref.miyagi.jp>:
> 中村様
>
> 宮城県産業技術総合センターの今井と申します。
>
> コンパイラの最適化により、クリティカルセクションをまたいで
> 命令の順番が入れ替わる問題がASPカーネル開発時に報告されて
> おり、JSPカーネルでは、まだ修正されたバージョンが公開されて
> いませんでした。
> (この問題の詳細については、ASPカーネルの付属ドキュメント
> asp/doc/porting.txtの「1.6 クリティカルセクションの
> 出入処理の実現に関する制約」を参照して下さい。)
>
> jsp-1.4.3とのパッチを添付致しますので、よろしければお試し下さい。
> (今回の問題とは直接関係ない部分もありますが、ご容赦を)
>
> ------------------------
> 宮城県産業技術総合センター
> 今井和彦
> E-mail: imai-ka648 @ pref.miyagi.jp
> TEL 022-377-8700
> FAX 022-377-8712
>
>
>
> diff -r jsp-1.4.3/jsp/config/h8/cpu_config.h new/jsp/config/h8/cpu_config.h
> 150a151,152
>>       /* クリティカルセクションの前後でメモリが書き換わる可能性がある */
>>       Asm("":::"memory");
> 157a160,161
>>       /* クリティカルセクションの前後でメモリが書き換わる可能性がある */
>>       Asm("":::"memory");
> 185a190,191
>>       /* クリティカルセクションの前後でメモリが書き換わる可能性がある */
>>       Asm("":::"memory");
> 193a200,201
>>       /* クリティカルセクションの前後でメモリが書き換わる可能性がある */
>>       Asm("":::"memory");
> diff -r jsp-1.4.3/jsp/config/h8/h8_3069f.h new/jsp/config/h8/h8_3069f.h
> 552,564c552,564
> < #define H8TISRB_IMIEA2_BIT    6
> < #define H8TISRB_IMIEA1_BIT    5
> < #define H8TISRB_IMIEA0_BIT    4
> < #define H8TISRB_IMFA2_BIT     2
> < #define H8TISRB_IMFA1_BIT     1
> < #define H8TISRB_IMFA0_BIT     0
> <
> < #define H8TISRB_IMIEA2                (1<<H8TISRB_IMIEA2_BIT)
> < #define H8TISRB_IMIEA1                (1<<H8TISRB_IMIEA1_BIT)
> < #define H8TISRB_IMIEA0                (1<<H8TISRB_IMIEA0_BIT)
> < #define H8TISRB_IMFA2         (1<<H8TISRB_IMFA2_BIT)
> < #define H8TISRB_IMFA1         (1<<H8TISRB_IMFA1_BIT)
> < #define H8TISRB_IMFA0         (1<<H8TISRB_IMFA0_BIT)
> ---
>> #define H8TISRB_IMIEB2_BIT 6
>> #define H8TISRB_IMIEB1_BIT 5
>> #define H8TISRB_IMIEB0_BIT 4
>> #define H8TISRB_IMFB2_BIT 2
>> #define H8TISRB_IMFB1_BIT 1
>> #define H8TISRB_IMFB0_BIT 0
>>
>> #define H8TISRB_IMIEB2  (1<<H8TISRB_IMIEB2_BIT)
>> #define H8TISRB_IMIEB1  (1<<H8TISRB_IMIEB1_BIT)
>> #define H8TISRB_IMIEB0  (1<<H8TISRB_IMIEB0_BIT)
>> #define H8TISRB_IMFB2  (1<<H8TISRB_IMFB2_BIT)
>> #define H8TISRB_IMFB1  (1<<H8TISRB_IMFB1_BIT)
>> #define H8TISRB_IMFB0  (1<<H8TISRB_IMFB0_BIT)
> 818a819,1158
>>
>> /*
>>  *  H8/3069F 用定義(追加分)
>>  *    jsp1.4.3で配布されたh8_3069f.hに無いものを定義している。
>>  *  以下の機能は定義されていない。
>>  *    ・スマートカードインターフェース(SCMR)
>>  *    ・分周比コントロール(DVCR)
>>  *    ・低消費電力状態(MTSCR)
>>  */
>>
>> /*
>>  *  I/Oポート
>>  */
>> #define H8PORT_NUM            12      /*  ポート1〜ポートB (DDR値一時保存用) */
>>
>> /*  ポート1  */
>> #define H8P10DDR              0x01
>> #define H8P11DDR              0x02
>> #define H8P12DDR              0x04
>> #define H8P13DDR              0x08
>> #define H8P14DDR              0x10
>> #define H8P15DDR              0x20
>> #define H8P16DDR              0x40
>> #define H8P17DDR              0x80
>>
>> #define H8P10DR                       0x01
>> #define H8P11DR                       0x02
>> #define H8P12DR                       0x04
>> #define H8P13DR                       0x08
>> #define H8P14DR                       0x10
>> #define H8P15DR                       0x20
>> #define H8P16DR                       0x40
>> #define H8P17DR                       0x80
>>
>> /*  ポート2  */
>> #define H8P20DDR              0x01
>> #define H8P21DDR              0x02
>> #define H8P22DDR              0x04
>> #define H8P23DDR              0x08
>> #define H8P24DDR              0x10
>> #define H8P25DDR              0x20
>> #define H8P26DDR              0x40
>> #define H8P27DDR              0x80
>>
>> #define H8P20DR                       0x01
>> #define H8P21DR                       0x02
>> #define H8P22DR                       0x04
>> #define H8P23DR                       0x08
>> #define H8P24DR                       0x10
>> #define H8P25DR                       0x20
>> #define H8P26DR                       0x40
>> #define H8P27DR                       0x80
>>
>> #define H8P20PCR              0x01
>> #define H8P21PCR              0x02
>> #define H8P22PCR              0x04
>> #define H8P23PCR              0x08
>> #define H8P24PCR              0x10
>> #define H8P25PCR              0x20
>> #define H8P26PCR              0x40
>> #define H8P27PCR              0x80
>>
>>
>> /*  ポート3  */
>> #define H8P30DDR              0x01
>> #define H8P31DDR              0x02
>> #define H8P32DDR              0x04
>> #define H8P33DDR              0x08
>> #define H8P34DDR              0x10
>> #define H8P35DDR              0x20
>> #define H8P36DDR              0x40
>> #define H8P37DDR              0x80
>>
>> #define H8P30DR                       0x01
>> #define H8P31DR                       0x02
>> #define H8P32DR                       0x04
>> #define H8P33DR                       0x08
>> #define H8P34DR                       0x10
>> #define H8P35DR                       0x20
>> #define H8P36DR                       0x40
>> #define H8P37DR                       0x80
>>
>> /*  ポート4  */
>> #define H8P40DDR              0x01
>> #define H8P41DDR              0x02
>> #define H8P42DDR              0x04
>> #define H8P43DDR              0x08
>> #define H8P44DDR              0x10
>> #define H8P45DDR              0x20
>> #define H8P46DDR              0x40
>> #define H8P47DDR              0x80
>>
>> #define H8P40DR                       0x01
>> #define H8P41DR                       0x02
>> #define H8P42DR                       0x04
>> #define H8P43DR                       0x08
>> #define H8P44DR                       0x10
>> #define H8P45DR                       0x20
>> #define H8P46DR                       0x40
>> #define H8P47DR                       0x80
>>
>> #define H8P40PCR              0x01
>> #define H8P41PCR              0x02
>> #define H8P42PCR              0x04
>> #define H8P43PCR              0x08
>> #define H8P44PCR              0x10
>> #define H8P45PCR              0x20
>> #define H8P46PCR              0x40
>> #define H8P47PCR              0x80
>>
>> /*  ポート5  */
>> #define H8P50DDR              0x01
>> #define H8P51DDR              0x02
>> #define H8P52DDR              0x04
>> #define H8P53DDR              0x08
>>
>> #define H8P50DR                       0x01
>> #define H8P51DR                       0x02
>> #define H8P52DR                       0x04
>> #define H8P53DR                       0x08
>>
>> #define H8P50PCR              0x01
>> #define H8P51PCR              0x02
>> #define H8P52PCR              0x04
>> #define H8P53PCR              0x08
>>
>> /*  ポート6   */
>> #define H8P60DDR              0x01
>> #define H8P61DDR              0x02
>> #define H8P62DDR              0x04
>> #define H8P63DDR              0x08
>> #define H8P64DDR              0x10
>> #define H8P65DDR              0x20
>> #define H8P66DDR              0x40
>> #define H8P67DDR              0x80
>>
>> #define H8P60DR                       0x01
>> #define H8P61DR                       0x02
>> #define H8P62DR                       0x04
>> #define H8P63DR                       0x08
>> #define H8P64DR                       0x10
>> #define H8P65DR                       0x20
>> #define H8P66DR                       0x40
>> #define H8P67DR                       0x80
>>
>> /*  ポート7   */
>> #define H8P70DDR              0x01
>> #define H8P71DDR              0x02
>> #define H8P72DDR              0x04
>> #define H8P73DDR              0x08
>> #define H8P74DDR              0x10
>> #define H8P75DDR              0x20
>> #define H8P76DDR              0x40
>> #define H8P77DDR              0x80
>>
>> /*  ポート8  */
>> #define H8P80DDR              0x01
>> #define H8P81DDR              0x02
>> #define H8P82DDR              0x04
>> #define H8P83DDR              0x08
>> #define H8P84DDR              0x10
>>
>> #define H8P80DR                       0x01
>> #define H8P81DR                       0x02
>> #define H8P82DR                       0x04
>> #define H8P83DR                       0x08
>> #define H8P84DR                       0x10
>>
>> /*  ポート9   */
>> #define H8P90DDR              0x01
>> #define H8P91DDR              0x02
>> #define H8P92DDR              0x04
>> #define H8P93DDR              0x08
>> #define H8P94DDR              0x10
>> #define H8P95DDR              0x20
>>
>> #define H8P90DR                       0x01
>> #define H8P91DR                       0x02
>> #define H8P92DR                       0x04
>> #define H8P93DR                       0x08
>> #define H8P94DR                       0x10
>> #define H8P95DR                       0x20
>>
>> /*  ポートA  */
>> #define H8PA0DDR              0x01
>> #define H8PA1DDR              0x02
>> #define H8PA2DDR              0x04
>> #define H8PA3DDR              0x08
>> #define H8PA4DDR              0x10
>> #define H8PA5DDR              0x20
>> #define H8PA6DDR              0x40
>> #define H8PA7DDR              0x80
>>
>> #define H8PA0DR                       0x01
>> #define H8PA1DR                       0x02
>> #define H8PA2DR                       0x04
>> #define H8PA3DR                       0x08
>> #define H8PA4DR                       0x10
>> #define H8PA5DR                       0x20
>> #define H8PA6DR                       0x40
>> #define H8PA7DR                       0x80
>>
>> /*  ポートB  */
>> #define H8PB0DDR              0x01
>> #define H8PB1DDR              0x02
>> #define H8PB2DDR              0x04
>> #define H8PB3DDR              0x08
>> #define H8PB4DDR              0x10
>> #define H8PB5DDR              0x20
>> #define H8PB6DDR              0x40
>> #define H8PB7DDR              0x80
>>
>> #define H8PB0DR                       0x01
>> #define H8PB1DR                       0x02
>> #define H8PB2DR                       0x04
>> #define H8PB3DR                       0x08
>> #define H8PB4DR                       0x10
>> #define H8PB5DR                       0x20
>> #define H8PB6DR                       0x40
>> #define H8PB7DR                       0x80
>>
>> /*  D/A変換  */
>> #define H8DADR0         0xFFFF9C
>> #define H8DADR1         0xFFFF9D
>> #define H8DACR          0xFFFF9E
>> #define H8DASTCR        0xFEE01A
>>
>> #define H8DACR_DAOE1    0x80
>> #define H8DACR_DAOE0    0x40
>> #define H8DACR_DAE      0x20
>> #define H8DASTCR_DASTE  0x01
>>
>> /*  A/D変換  */
>>
>> #define H8ADDRA         0xFFFFE0
>> #define H8ADDRB         0xFFFFE2
>> #define H8ADDRC         0xFFFFE4
>> #define H8ADDRD         0xFFFFE6
>>
>> #define H8ADDRAH        H8ADDRA
>> #define H8ADDRAL        (H8ADDRA + 1)
>> #define H8ADDRBH        H8ADDRB
>> #define H8ADDRBL        (H8ADDRB + 1)
>> #define H8ADDRCH        H8ADDRC
>> #define H8ADDRCL        (H8ADDRC + 1)
>> #define H8ADDRDH        H8ADDRD
>> #define H8ADDRDL        (H8ADDRD + 1)
>>
>> #define H8ADCSR         0xFFFFE8
>> #define H8ADCR          0xFFFFE9
>>
>> #define H8ADCSR_ADF     0x80
>> #define H8ADCSR_ADIE    0x40
>> #define H8ADCSR_ADST    0x20
>> #define H8ADCSR_SCAN    0x10
>> #define H8ADCSR_CKS     0x08
>> #define H8ADCSR_CH2     0x04
>> #define H8ADCSR_CH1     0x02
>> #define H8ADCSR_CH0     0x01
>>
>> #define H8ADCR_TRGE     0x80
>>
>> /*  割込み関連  */
>>
>> /*  IRQセンス・コントロール・レジスタ  */
>> #define H8ISCR_IRQ0SC 0x01
>> #define H8ISCR_IRQ1SC 0x02
>> #define H8ISCR_IRQ2SC 0x04
>> #define H8ISCR_IRQ3SC 0x08
>> #define H8ISCR_IRQ4SC 0x10
>> #define H8ISCR_IRQ5SC 0x20
>>
>> /*  IRQイネーブル・レジスタ  */
>> #define H8IER_IRQ0E           (1<<(H8IER_IRQ0E_BIT))
>> #define H8IER_IRQ1E           (1<<(H8IER_IRQ1E_BIT))
>> #define H8IER_IRQ2E           (1<<(H8IER_IRQ2E_BIT))
>> #define H8IER_IRQ3E           (1<<(H8IER_IRQ3E_BIT))
>> #define H8IER_IRQ4E           (1<<(H8IER_IRQ4E_BIT))
>> #define H8IER_IRQ5E           (1<<(H8IER_IRQ5E_BIT))
>>
>> /*  インターラプト・ステータス・レジスタ  */
>> #define H8ISR_IRQ0F           0x01
>> #define H8ISR_IRQ1F           0x02
>> #define H8ISR_IRQ2F           0x04
>> #define H8ISR_IRQ3F           0x08
>> #define H8ISR_IRQ4F           0x10
>> #define H8ISR_IRQ5F           0x20
>>
>> /*  DMA関連  */
>>
>> /* DMAC チャネル0A */
>> #define H8DMA_MAR0AR          0xffff20
>> #define H8DMA_MAR0AE          0xffff21
>> #define H8DMA_MAR0AH          0xffff22
>> #define H8DMA_MAR0AL          0xffff23
>> #define H8DMA_IOAR0A          0xffff26
>> #define H8DMA_ETCR0AH         0xffff24
>> #define H8DMA_ETCR0AL         0xffff25
>> #define H8DMA_DTCR0A          0xffff27
>>
>> /* DMAC チャネル0B */
>> #define H8DMA_MAR0BR          0xffff28
>> #define H8DMA_MAR0BE          0xffff29
>> #define H8DMA_MAR0BH          0xffff2A
>> #define H8DMA_MAR0BL          0xffff2B
>> #define H8DMA_IOAR0B          0xffff2E
>> #define H8DMA_ETCR0BH         0xffff2C
>> #define H8DMA_ETCR0BL         0xffff2D
>> #define H8DMA_DTCR0B          0xffff2F
>>
>> /* DMAC チャネル1A */
>> #define H8DMA_MAR1AR          0xffff30
>> #define H8DMA_MAR1AE          0xffff31
>> #define H8DMA_MAR1AH          0xffff32
>> #define H8DMA_MAR1AL          0xffff33
>> #define H8DMA_IOAR1A          0xffff36
>> #define H8DMA_ETCR1AH         0xffff34
>> #define H8DMA_ETCR1AL         0xffff35
>> #define H8DMA_DTCR1A          0xffff37
>>
>> /* DMAC チャネル1B */
>> #define H8DMA_MAR1BR          0xffff38
>> #define H8DMA_MAR1BE          0xffff39
>> #define H8DMA_MAR1BH          0xffff3A
>> #define H8DMA_MAR1BL          0xffff3B
>> #define H8DMA_IOAR1B          0xffff3E
>> #define H8DMA_ETCR1BH         0xffff3C
>> #define H8DMA_ETCR1BL         0xffff3D
>> #define H8DMA_DTCR1B          0xffff3F
>>
>> /* データトランスファコントロールレジスタ (DTCR) */
>> #define H8DMA_DTCR_DTE                0x80
>> #define H8DMA_DTCR_DTSZ       0x40
>> #define H8DMA_DTCR_DTID               0x20
>> #define H8DMA_DTCR_RPE                0x10
>> #define H8DMA_DTCR_DTIE               0x08
>> #define H8DMA_DTCR_DTS2               0x04
>> #define H8DMA_DTCR_DTS1               0x02
>> #define H8DMA_DTCR_DTS0               0x01
>>
> diff -r jsp-1.4.3/jsp/config/h8/hw_timer.h new/jsp/config/h8/hw_timer.h
> 129c129
> <     sil_wrb_mem((VP)SYSTEM_TIMER_IER, SYSTEM_TIMER_IE);
> ---
>>     bitset((UB *)SYSTEM_TIMER_IER, SYSTEM_TIMER_IE_BIT);
>
>