(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)