(toppers-users 1235) なぜ勘違いしたのか [was: slp_tskの E_CTX エラー]

mkishida mkishida @ fecsi.furuno.co.jp
2003年 9月 22日 (月) 16:02:42 JST


きしだです

すいません、色々とご迷惑掛けました。
題名変えました。

Hiroaki TAKADA wrote:
> きしださんなのでお願いしますが、できれば、後から勉強する方のために、何
> を勘違いしてどう解決したのか、まとめていただけると幸いです。

■何を勘違いしたのか
実装仕様と勘違いしている節があった
仕様書のサービスコール記載省略項目を忘れていた。

■どう解決したのか
仕様書を読み直した。
検索を掛けて類似の記載、省略等に関する部分が無いか確認した。
読んだはずの内容(該当していると思う件数)と、検索した内容(該当件数)とを
比較して抜けが無いか確認した。

以上、簡単ですが、これで宜しくお願いいたします。


----以下、問題抽出のため時系列に記載------
------
(情けないのと、半分寝ていたとしか思えないので、読まなくて良いです)
------
■前提
先人からの教えで、ソフトウェアのエラー処理は必ずする事が掟でした。
リカバリ処理も考えて、発生しうる条件は洗い出す事にしていました。
仕様書に記載のあるエラーコードに対して、エラー処理を必ず行なって
いました。

■顛末(時系列)
タスク付属同期機能を理解するため、色々とプログラムを作って
いたのですが、そのデバッグ中に、slp_tskから仕様書に記載の
無いエラーコードが返ってきました。エラーコードはE_CTXです。

状況が良くわからないので、何気なくソースを見るとソースコード
上にμITRON4.0仕様書(ver4.001)には記載していないエラーが返る
パスがありました。エラーコードはE_CTXです。

ICE等も無いし、多分これだろうと言うことで理由を考え始めたの
ですが、ITRON準拠の製品を使用したときに、仕様上は省略している
エラーコードがあった事や、実装依存のエラーコードがあった事を
思い出しました。
これも、実装依存のエラーコードだろうと思ってしまいました。

# ここで思い違いをしているのは、P.29ではほとんどのサービス
# コールで返すエラーを仕様書の関数説明から省略しているの
# ですが、ソースコードを見たときに、E_NOEXSが返らない事から
# TOPPERS/JSPの実装による、返すエラーコードの定義のような物が
# あるのだと思い込んでいました。(寝ていたのかもしれません)
# E_NOEXSはP.77にスタンダードプロファイルでは発生しない旨の
# 記述がありますが、これはすっかり忘れていました。

実装依存のエラーコードにしては抜けているのも変な話ですし
ちょっと回りを確認することにしました。
仕様書のタスク付属同期機能を読み返すとsus_tskにはE_CTXを
返していました。

# 後で仕様書の他の節で待ちに入るサービスコールを見ると判った
# のですがE_CTXをAPI説明のエラーコード部分に記載している
# サービスコールとしていないサービスコールがありました。
# 機能説明にE_CTXの説明があってもエラーコード部分に記載が
# 無い物もありました。
# P.29の「ただし、これらのエラーが発生する理由がサービス
# コール独特の〜」という文面を思い出すことはできませんでした。

ちょっと混乱し始め、μITRON4.0仕様書をTOPPERS/JSPの仕様書
(実装仕様書に近い物)と勘違いし始めてしまいました。
色々実装に関して丁寧に説明が書いてある規格仕様書とコウナッテ
イルを記載した実装仕様書を勘違いしていたのでしょう。

実装仕様書ならば、アプリケーションを作るときに、APIの
エラーコード説明部分毎にエラー処理を考えていても、返って
くるエラーに抜けはありません。
sus_tskにE_CTXが記載されているなら、slp_tskにも記載してある
のが当然と思い始めます。
エラーコードの一覧があればチェックもできます。
何が返ってくるのか判らないのであればチェックは難しくなります。

slp_tskのエラーコード、ソースコードにあわせて記述があれば
困ったことは起こらないのにと思い始め、ソースに合わせて記載を
しておいてほしいと思い始めます。
# この時点で仕様書の位置付けを完全に勘違いしています。
メールして仕様書に記載してもらおうかと思いはじめます。

よく考えてからメールすればよかったのですが、冷静になれて
いませんでした。そのまんまメーリングリストに質問を投げました。

Q:ソースのほうが正しいように思うんですが仕様書はこのままで
  良いんでしょうか?
Q:もなかさんより返答があり、P.29読んだ?
A:一応読んだけど、、

と返答して、slp_tskのE_CTXはメインエラーコードに該当して
いるのでP.29で示したエラーコードは仕様書のAPI説明部分で
省略されているのだと判りました。
(そういやそんなのあったなぁ)
sus_tskのE_CTXは例外で、エラーが発生する理由がサービス
コール独特の物で特別に記載されている事もわかりました。
(言われてみればそうだが、すっかり抜けていました)

読んだことはあったけど、知識として連携していたかどうかとか
あいまいに理解していた部分があったのでしょう。
ヒントをもらって間違いに気が付きました。

解決にはアドバイスがもらえたからと言う部分もありますが、
TOPPERS/JSPの仕様を考えるときに、μITRON4.0の仕様がスタン
ダードプロファイルの範疇で読み替えなくてはならない事と
記述を省略した項目に関する記載部分が前半部分に出てきます。
(P.80までの記述)
これはよく読んでおく必要があります。(今回痛感しました)

一番大きな原因が、読み飛ばしに近い読み方かとは思いますが、
前半部分は3.0との仕様の違いを説明た部分とそれ以外が混在
しており、3.0の記述と思い読み飛ばしたのかもしれません。

3.0の仕様と勘違いして読み飛ばしたり、目次から見ただけで
記述を省略した部分を見つけることが出来ないにもかかわらず、
判ったつもりになったり、4.0仕様から使うから過去との互換
性等の記述は読み飛ばそうとして嵌ったのかもしれません。

どう解決したかは、やはり頭から最低一度は読んで置く、仕様書
なので本当は何度も読み返さなければならないのに読んでいない
のが一番悪いので、やはり何度も読み返すのが良いかもしれません。

各個人のチョンボは各個人で対応するのが良いかとおもいますが、
もし、より仕様書を読みやすくと言うなら、後から検索できる様に
目次を細分化するか、逆引きが充実させるのが良いかと思います。

たとえば、効果的な再発防止のためには3.0仕様との説明部分と
綺麗に分けてしまうか、目次を細かくして記述の省略部分を
見つけやすくするかが良いかと思います。

今回嵌った部分で言えば、2.1.6サービスコールの辺値とエラー
コードではサービスコール返値の基本的な考え方、エラー検出の
省略、サービスコール毎に記載しないエラーコード、補足説明、
3.0仕様との違いが記載されています。
効果的な再発防止のためには3.0仕様との説明部分と綺麗に分けて
しまうか、目次を細かくして記述の省略部分を見つけやすくする
かが次善の案かと思います。

-------------