アプリ版:「スタンプのみでお礼する」機能のリリースについて

マイコン メモリ使用量の節約方法

マイコンのメモリ(RAM,ROM)を節約するにはそれぞれどのような方法がありますか。

A 回答 (4件)

マイコン ということに限定したこととして



1)コード効率のいいマイコンを利用する。
 規模と性能も天秤にかける必要があります。 命令長が違います。

2)メモリーモデルを最適化する。
 8086の場合には、small compact medium large Huge? モデルとかあって
 規模に応じてポインタがfar(32bit) near(16) などで最適化されます。
 いまだに、こういうことができるマイコンもあります。
3)integerサイズを最適化する。
 2)と似たようなことですが、intのサイズをコンパイラによって変えられるものが
 あります。shortを使えば同じという場合(注1)もありますが、通常コンパイラの
 インテグラルプロモーションによって一旦intに変換されます。(注1インテグラルプロモーション
 しないコンパイラもあります)

4)コンパイラの最適化をサイズに指定する。
 optimaizeのオプションでコードサイズを縮小するオプションがあります。

5)テーブルデータをRAMに展開しないようにする。(#2で該出)
なんのことかわからないかもしれませんが、初期化済み変数を定義した場合に
一旦ROMに定義され(ローディング時に初期化、もしくはROM化の場合はROMに書かれています)
それをRAMにコピーしてから、main()が呼ばれます。つまりRAM/ROM両方エリアが利用されます。
書き換える必要がなければ、ROMだけになるように定義します。
C言語の規約そのものにROM化という概念がないため、あくまでコンパイラの拡張機能に
なりますのでコンパイラのマニュアルを見てみましょう。

6)プロトタイプ宣言をする
 コンパイラによりますが、プロトタイプ宣言がないとスタック渡し、ある場合には、
 一部のパターンでレジスタ渡しの場合があります。

7)動的メモリを使わない
 malloc()等の動的メモリを使わないことです。TCPスタックなどで必要になる場合も
 ありますが、TCPスタックで動的メモリを利用しないものもあります。
 選択が可能であれば、動的メモリを必要としないものにしましょう。
    • good
    • 0

下記の本をお勧めします。



省メモリプログラミング―メモリ制限のあるシステムのためのソフトウェアパターン集
http://www.amazon.co.jp/gp/product/4894714086/

Amazonの中身検索で読めそうなので参考にしてはいかがでしょうか。
とりあえずどのような方法があるかと言うことであれば、目次のあたりを見ると一覧になっています。
    • good
    • 0

(1)データはビット単位で細かく管理する


(2)巨大なライブラリ関数は使わない
 (とくにprintf系とかscanf系とか)
(3)同じ処理を行うルーチンは必ず共通化する
(4)インライン関数、大きなマクロ処理等は使わない
 (関数コールした時のスタックサイズの方が大きければ別だけど)
(5)重複したデータは持たないようにする
(6)変更しないテーブルデータ等はRAMに展開しないようにする
(7)イベントハンドラの呼び出し等は複雑な条件分岐処理をやるよりベクターテーブル等で簡潔に呼び出すようにする
    • good
    • 0

ソースの文字数を減らす

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!