« 2006年7月 | トップページ | 2006年9月 »

2006年8月17日 (木)

さわやかな目覚めのために (-_-)

こんなものがあるんですね。

松下電工 おめざめあかり 生体リズム 光・めざましスタンド ASSA アッサhttp://store.yahoo.co.jp/terukuni/sb697d.html

定価が \30,660- だそうな。高ぇ!

吉田たかよし著:「脳力」をのばす!快適睡眠術、PHP新書、2006. という本の中に、光を感じて体内時計をリセットするためにカーテンを開けて寝るという手が書いてありました。目覚まし時計と併用しないと寝過ごすおそれがありますが、結構目覚めがすっきりします。

2006年8月 5日 (土)

RAMが足りないというのは思い違い

しばらく日記の更新が滞っていますが、普通に生活しています。

さて、RTOSを積んだらRAMが8KBじゃ足りないのではないかと思っていたのですが、ちょっと思い違いがあるようです。プログラム中でメモリがどのように変われるか、どれだけ使われるかの見積もりがちゃんとできていない。仮にスタックを大量に消費する(そのうえ処理速度も遅い) printf を使ったとしても、printf を使うタスクを 1 つに制限すれば、他のタスクにはそれほどスタックが必要とは思えません。なにせ、H8/3664Fを使ったBasicMouseのときはRAMが2KBで走っていたのですから。

プログラム中でメモリがどのように使われるか振り返ってみます。

  • プログラムの実行コードと静的なデータはROMに配置されます。
  • プログラムから呼び出されて(例えば malloc, calloc, newなどで)動的に割り付けられる領域にはヒープ領域が使われます。
  • ローカル変数や関数の引数、呼び出し元の関数から呼び出される関数へのリンクなどはスタック領域が使われます。

RTOSになると複数のタスクが(擬似的に)同時並行に動くので、スタックはタスクごとに用意する必要があります。(開発環境によってはスタックを共有することもできます。)

あらためてRAMの必要量を見積もりなおします。

  • (RTOS管理外の)システム用スタック領域  1024byte
  • メッセージバッファ用のヒープ領域 × 1   256byte
  • printf を使うタスクのスタック領域 × 1   1024byte
  • その他のタスクのスタック領域   × 8   2048byte

これで合計はおよそ 4KB。スタック領域はこの倍くらい取っても大丈夫ということになります。本当かな?

« 2006年7月 | トップページ | 2006年9月 »

最近の写真