表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

12/22

12.jpegデコーダを動かすとメモリ破壊をやらかす(原因は分かったが...)

SDカードもスピードが出るようになって本格的に動かそうと、複数のjpegデータをtarでまとめて連続描画

おや?時々フレームをスキップしてる感じがする 処理が追い付かなくてもスキップする仕様じゃないんだが?


デバッグしてみたら jpegデコードがエラーになってる

詳細エラーコードが出てこないからデコーダを修正して内容を見ると、デコードエラーを起こし、次の数フレームが異常ファイルのエラーになり、その後正常データに戻っている


これはSDカードの読み取りに失敗してるか?

SDカードの高速化改造が悪さをしてるのを想定してボーレートを標準に変えたが現象変わらない

別のSDカードに交換しても現象変わらない


じゃぁ jpeg デコーダがメモリ破壊やらかしてるのか?今まで問題なく動いていたのに調査キツイなぁ。

とりあえず壊れた画像データをダンプしてみると、最初のエラー時は12バイト目以降が0。連続エラー時はすべてが0になっている。解せん。


再現性はあるので、読み込んだ直後のデータを確認すると正常だった。ということはデコーダを呼び出した直後に破壊しているっぽい。キツイ。だれがやってるかわからないメモリ書き込みって、一番厄介な破壊パターンだし。


少しずつ処理を切り離してみることにして、デコード処理を外してJPEG情報を取得するだけにしたが異常。はて?呼び出しただけで壊してる?

JPEG情報を取得する直前の処理って、BSS領域の初期化の0クリアぐらいだが…

0クリア?そ~いやデータ破壊パターンは0なんだが、いや、まさか。


念のため、バッファのアドレスを全部表示してみたら、デコーダが確保してるBSS領域に対して、micropythonが read用のバッファを割り当ててる

readで読み取った画像データに対して、デコーダの初期化処理で0クリアしてるんじゃプログラム見てもわからないよなぁ。


メモリのダブルブッキングなんてmicropython本体のやらかしまで面倒見切れんぞ


バグレポートだすしかないかなぁ。と単純に巨大なBSS領域を確保するモジュールを作ったが、こっちは正常。TEXT領域も巨大な場合だけ発生するのかねぇ?内部処理では実は32kBが上限とか?

かといって、どこで処理してるかわからない micropythonのソース本体を読むのは無理ゲー


コードを追っててとんでもないものをみつけてしまった どうしよう ...

このデコーダはmicropython内部モジュールとして組み込んでた処理を外にだして、改造を楽にするためのテスト品だったので、元に戻せばいいだけなんだがね。

評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ