Renesas Community
Search Community
User
Join or sign in
Site
Search Community
User
Renesas Engineering Community
FAQ
HELP
More
Cancel
Forums & Groups
English Community
中文社区(Chinese Community)
More
Cancel
かふぇルネ
forums-groups
Microcontrollers and Microprocessors
RL78 MCU
More
Cancel
RL78 MCU
Forum
RAMパリティエラー発生箇所の特定
Home
Forum
Tags
More
Cancel
New
Replies
20 replies
Subscribers
448 subscribers
Views
15522 views
Users
0 members are here
RAMパリティエラー
オンチップデバッグ
RL78
RAMパリティエラー発生箇所
特定Kirin
beginner
Options
Share
More
Cancel
Related
RAMパリティエラー発生箇所の特定
yuya
over 10 years ago
Kirinさん
現在、RL78での開発をしています。
単体動作でRAMパリティエラーが発生しています。
オンチップデバッグではRAMパリティエラーが発生しないみたいなのでオンチップデバッグによるチェックができません。
何処でRAMパリティエラーが発生しているか確認できる方法はあるのでしょうか?
RAMの初期化は出来ているはずなのですが・・・
Parents
チョコ
over 10 years ago
スタッフのチョコです。
Kirin様の「Re9:RAMパリティエラー発生箇所の特定」にコメントさせていただきます。
>CALL命令は、呼び出し元のアドレスをスタックに退避しますが、
アドレスは3バイト長なので、消費したスタックの4バイトのうち1バイトが使われていません(SP-1のアドレスが初期化されていない)。
そのため、RETした時に初期化されていないスタックの1バイトをリードすることでRAMパリティが発生してるのではなかと想像しています。
_stkinit部分を逆アセンブルして確認したところ,その最初で「MOV [SP+3]\,#0」とやっているので,Kirin様が懸念した問題はございません。(もっとも,それ以前に,このCALLの前にhdwinitから戻ってきているので,この点は問題にはなりません。)以下に逆アセンブルしたものに分岐先がわかるようにしたものを示します。最初に32バイト単位でクリアし,残りは2バイト単位でクリアしています。特に初期化されてないRAMを読み出しているとこはございません。気になる点は,2バイト単位でのクリアを行っている部分の完了チェックです。AXとHLを比較して,「RZ」で抜けるようになっています。つまり,HLの値が奇数に設定されていたら抜けられなくなります。その点から,「LOWW _@STEND 」がきちんと偶数になっているかをご確認ください。(私が確認したRL78/G14(64k品)ではきちんと抜けてきました。
_stkinit:
c80300 MOV [SP+3H]\,#0H
aef8 MOVW AX\,SP
27 SUBW AX\,HL
dd3b BZ $_stkinit+0x43
dc39 BC $_stkinit+0x43
315e SHRW AX\,5H
12 MOVW BC\,AX
f6 CLRW AX
;_stkinit+0xe
43 CMPW AX\,BC
dd27 BZ $_stkinit+0x38
bb MOVW [HL]\,AX
bc02 MOVW [HL+2H]\,AX
bc04 MOVW [HL+4H]\,AX
bc06 MOVW [HL+6H]\,AX
bc08 MOVW [HL+8H]\,AX
bc0a MOVW [HL+0AH]\,AX
bc0c MOVW [HL+0CH]\,AX
bc0e MOVW [HL+0EH]\,AX
bc10 MOVW [HL+10H]\,AX
bc12 MOVW [HL+12H]\,AX
bc14 MOVW [HL+14H]\,AX
bc16 MOVW [HL+16H]\,AX
bc18 MOVW [HL+18H]\,AX
bc1a MOVW [HL+1AH]\,AX
bc1c MOVW [HL+1CH]\,AX
bc1e MOVW [HL+1EH]\,AX
37 XCHW AX\,HL
042000 ADDW AX\,#20H
37 XCHW AX\,HL
b3 DECW BC
efd6 BR $_stkinit+0xe
;_stkinit+0x38
aef8 MOVW AX\,SP
47 CMPW AX\,HL
dd06 BZ $_stkinit+0x43
f6 CLRW AX
bb MOVW [HL]\,AX
a7 INCW HL
a7 INCW HL
eff5 BR $_stkinit+0x38
;_stkinit+0x43
d7 RET
Cancel
Up
0
Down
Reply
Cancel
Reply
チョコ
over 10 years ago
スタッフのチョコです。
Kirin様の「Re9:RAMパリティエラー発生箇所の特定」にコメントさせていただきます。
>CALL命令は、呼び出し元のアドレスをスタックに退避しますが、
アドレスは3バイト長なので、消費したスタックの4バイトのうち1バイトが使われていません(SP-1のアドレスが初期化されていない)。
そのため、RETした時に初期化されていないスタックの1バイトをリードすることでRAMパリティが発生してるのではなかと想像しています。
_stkinit部分を逆アセンブルして確認したところ,その最初で「MOV [SP+3]\,#0」とやっているので,Kirin様が懸念した問題はございません。(もっとも,それ以前に,このCALLの前にhdwinitから戻ってきているので,この点は問題にはなりません。)以下に逆アセンブルしたものに分岐先がわかるようにしたものを示します。最初に32バイト単位でクリアし,残りは2バイト単位でクリアしています。特に初期化されてないRAMを読み出しているとこはございません。気になる点は,2バイト単位でのクリアを行っている部分の完了チェックです。AXとHLを比較して,「RZ」で抜けるようになっています。つまり,HLの値が奇数に設定されていたら抜けられなくなります。その点から,「LOWW _@STEND 」がきちんと偶数になっているかをご確認ください。(私が確認したRL78/G14(64k品)ではきちんと抜けてきました。
_stkinit:
c80300 MOV [SP+3H]\,#0H
aef8 MOVW AX\,SP
27 SUBW AX\,HL
dd3b BZ $_stkinit+0x43
dc39 BC $_stkinit+0x43
315e SHRW AX\,5H
12 MOVW BC\,AX
f6 CLRW AX
;_stkinit+0xe
43 CMPW AX\,BC
dd27 BZ $_stkinit+0x38
bb MOVW [HL]\,AX
bc02 MOVW [HL+2H]\,AX
bc04 MOVW [HL+4H]\,AX
bc06 MOVW [HL+6H]\,AX
bc08 MOVW [HL+8H]\,AX
bc0a MOVW [HL+0AH]\,AX
bc0c MOVW [HL+0CH]\,AX
bc0e MOVW [HL+0EH]\,AX
bc10 MOVW [HL+10H]\,AX
bc12 MOVW [HL+12H]\,AX
bc14 MOVW [HL+14H]\,AX
bc16 MOVW [HL+16H]\,AX
bc18 MOVW [HL+18H]\,AX
bc1a MOVW [HL+1AH]\,AX
bc1c MOVW [HL+1CH]\,AX
bc1e MOVW [HL+1EH]\,AX
37 XCHW AX\,HL
042000 ADDW AX\,#20H
37 XCHW AX\,HL
b3 DECW BC
efd6 BR $_stkinit+0xe
;_stkinit+0x38
aef8 MOVW AX\,SP
47 CMPW AX\,HL
dd06 BZ $_stkinit+0x43
f6 CLRW AX
bb MOVW [HL]\,AX
a7 INCW HL
a7 INCW HL
eff5 BR $_stkinit+0x38
;_stkinit+0x43
d7 RET
Cancel
Up
0
Down
Reply
Cancel
Children
No Data