(toppers-users 607) RE: Windows 環境での不具合
Takayuki WAKABAYASHI
takayuki @ ertl.ics.tut.ac.jp
2002年 11月 8日 (金) 12:27:09 JST
豊橋技科大の若林です。
Takagi,Yusei [mailto:yusei-t @ mx15.freecom.ne.jp] さんは書きました:
> cpu_defs.cの中のras_int関数で、不定値を返却する実行
> パスがあるようです。
こちらでも確認しました。
確かにそのようなパスがあります。
---8<---
症状 VS.NETを使っていると、プログラムが停止する
条件 すでに受け付けられた割込み番号に対して割込みをかける
(割込みをペンディング状態にする)
原因 result変数の初期値が設定されていない
頻度 条件がそろえば常に
修正 jsp/config/windows/cpu_defs.c:178
修正前> BOOL result;
修正後> BOOL result = TRUE;
対象 TOPPERS/JSP 1.0から1.3まで
#TOPPERS/JSP Win 1.3 (PL=1 candidate)
#TOPPERS/JSP Win w/ Logging mech. では修正済み
---8<---
今回の問題は、ras_intの返却値を持つ変数に代入を行わず、そのまま関数を抜
けるパスがあることです。しかし、行儀の悪いことに呼出元関数がras_intの返
却値を見てないので、何の症状もでません。VisualStudio.NETですと、「未初期
化の変数の値を参照しています」という内容のAssertionDialogが出ます。未初
期化変数の参照はC言語コードとして問題なので、お手数ですが症状が無くとも
修正いただけますようよろしくお願いします。
高木さん、いつもありがとうございます。
--- 8< ---
> VC++ 6.0でも問題なのは確かですが、シミュレーションと
> いう性質上デバッグモードしか使わないために、これまで
> 顕在化しなかったのではないでしょうか。(デバッグモード
> では自動変数は0xccで初期化される)
msvcrt.dllのmainCRTstartupは、確かに.bssを0xCC(INT3 - デバッグ例外命令)
で埋めてくれるのですが、これってANSI-C違反にならないのでしょうか?
(ウォッチで0xCCCCCCCCが出てくると自分が何をしでかしたのか判りやすくてあ
りがたいとは思いますが)。
#そもそもfor(int i=0;i<count;++i)と書いたときのiのスコープが変なので、
#いまさらという話もありますが...
--------
豊橋技術科学大学 情報工学系 組込みリアルタイムシステム研究室
若林 隆行 (mailto:takayuki @ ertl.ics.tut.ac.jp)