(toppers-users 3083) Re: [H8]E_CTX reported by `isig_tim()' in line 63 of `../jsp/systask/timer.c'. 頻発
今井和彦
imai-ka648 @ pref.miyagi.jp
2010年 2月 15日 (月) 09:17:04 JST
中村様
宮城県産業技術総合センターの今井と申します。
コンパイラの最適化により、クリティカルセクションをまたいで
命令の順番が入れ替わる問題が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);