ファイル分割

.23 2009 C言語 comment(0) trackback(0)
さて、AVR-LCDのソースは今のところ
  • 下層(LCDにコマンドを送ったりVRAMの制御をしている部分)がアセンブリで500行程度
  • 上層(アプリケーション層)がCで500行程度
となっていて、アセンブリの方はそのままでいいのですがCの方はそろそろ分割したくなってきました。

というわけで早速分割。

…なぜかコンパイル後のhexファイルのサイズが大きくなってしまいました(泣

えー、無駄な処理が入っただけかと思ったのですがAVRにダウンロードしてみるとどうもRAMがあふれているようです。
症状としては、あるアプリケーションを起動すると、(おそらく)1画面分描画したあとリセットベクタに飛んで最初から実行を開始する。
つまりそのアプリケーションは起動した瞬間に落ちるというわけです。

=>バグの原因はSRAMにアクセスしている部分に特定できたわけです。

というわけで以下具体的に分割前後のコードのうち、VRAMとして使っている領域をどういうふうに宣言しているのか見ていきます。

分割前:
#include <avr/io.h>

uint8_t buf[30 * 64]; // VRAM

void
app1(void)
{
   ...
}

int
main(void)
{
   ...
}

分割後:
// main.c
#include "app.h"

uint8_t buf[30 * 64];

int
main(void)
{
   ...
}



// app.h
#include <avr/io.h>

extern uint8_t buf[];

void app1(void);



// app.c
#include "app.h"

void
app1(void)
{
   ...
}


うー…ここだけ見ると別に問題なさそうだ。
どこか他のところに原因があるんでしょうか?

とりあえず今日はI2Cの方を見ないといけないのでファイル分割は後日改めて。

# プログラムコード表示用にスタイルシートいじってみました。ちゃんと更新されたかな?
# せっかくなのでこの際Syntax Highlighterを導入してみました。
関連記事

  • comment
  • secret
  • 管理者にだけ表示を許可する

trackbackURL:http://yuranos.blog11.fc2.com/tb.php/5-d2fdc285