« 実力は土壇場で身につける | トップページ | 失態リカバー »

2006年11月16日 (木)

大失態

やってしまいました。昨日まで動いていたプログラムが、動かなくなってしまいました。正確に言うと、プログラムが特定の場所でフリーズするか、勝手に再起動を繰り返す症状が出ています。

考えられる理由を挙げられるだけ挙げてみます。

  • スタックを壊している
  • メモリ周りの設定にミスがある
  • バッテリがない
  • CPU自体が壊れた

まずCPUについて確認。以前のプログラムをダウンロードしたら動いたので、CPUは壊れてなさそう。次にバッテリ。以前のプログラムが動いたし、他のバッテリに変えても動くのでこれもシロ。メモリ周りの設定は今日いじった後に上記の症状が出ているのでかなり怪しい。その結果としてスタックを壊して、プログラムが暴走しているものと推測。メモリ周りの設定を11/9のバックアップと同じ設定に戻してもプログラムの暴走は変わらず。困ったな。

メモリ周りの設定、必要なスタックサイズを見積もるのってすごく大変なんです。単純に引数の数とサイズ、関数内で使われているローカル変数の数とサイズから求まるかというとそうはいきません。というのは、そこで使われている(既製品の)関数が消費するスタックサイズが分からないからです。例えば、strcpy という関数を使っているとします。この関数のスタック消費量が分からない。仕方が無いからエイヤアで大きめに128Byteとっておくと、タスクに割り当てるスタックサイズが必然的に大きくなってRAMが足りなくなります。

今後の選択肢。

  • A案:今日更新したプログラムを1行ずつ丹念に追う。
  • B案:11/9分バックアップに戻して、少しずつ最新版の変更を加えていく。
  • C案:いっそのことRTOSをやめる。

RTOSを止めて書き直している時間はもうありません。A案も捨てがたいのですが、デバッグ環境があまりにも貧弱なため、CPU上でステップ実行するようなことができません。ここはB案でいくことにします。

« 実力は土壇場で身につける | トップページ | 失態リカバー »

コメント

しろねこさん、応援ありがとう!

今が最大の山場です。仕事も山場なんで、寝ないで趣味に没頭して仕事のクオリティを落とすわけにはいきませんが、やれるだけのことはやるつもりです。

がんば!

書いてあることはさっぱりわからないけど。それは、私の専門分野でも一緒だと思うので(笑)。

世の中いろんな物があるのね。

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/167990/12704652

この記事へのトラックバック一覧です: 大失態:

« 実力は土壇場で身につける | トップページ | 失態リカバー »

最近の写真