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

C でデータに const 属性をつけて、初期値を設定して定義すると、初期値は ROMにテーブルが作られますがデータ自体は RAM領域に配置されます。
RAMの節約のため、ROM領域にデータを配置する方法はないのでしょうか。

A 回答 (4件)

#pragma section data = ".rodata"


//ROM配置したいデータ

#pragma section data = default

等のコンパイラやアセンブラのコマンドを使ってデータが配置される領域をROM領域に設定してください。
必要に応じてリンカディレクティブファイルまたはリンクディレクティブなどと呼ばれるファイルを編集してROM領域を示すセクションを追加してください。

注)他の回答にあるようにあなたの使用している環境に合わせてください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
そういうコマンドがあったような気がしますのでマニュアルを調べて見ます。

お礼日時:2014/08/21 20:19

>C でデータに const 属性をつけて、初期値を設定して定義すると、初期値は ROMにテーブルが作られますがデータ自体は RAM領域に配置されます。



 何か勘違いしている。
 const 属性はコメントのように書き換えないデータに使います。
 だからROM領域に配置されます。

 初期値を持ち、後から変更できる変数はROMに書いた値をRAMにコピーして使います。
 その場合、const は付けません。

 リンカー・オプションでセクションのアドレスを設定します。constデータのセクション・アドレスをROM領域に設定します。

 RAM領域に入っているデータを誤って書き込まないために、読み出す側で安全策としてconstを付ける使い方も有ります。誤って書き込もうとすると、コンパイラがエラーを出してくれます。
    • good
    • 1

「変数」を「ROMに配置」といいますが「変数を変更するのは不可能」なのでROMに配置されることはないですよね。

「読み込んだプログラム」と同様にメモリ上に確保されますので。
「ROMからデータを読み込み」ならハードウェア・コンパイラに依存するので...
    • good
    • 0

Cの言語仕様ではなくコンパイラの仕様ですからコンパイラ名を書くべきですね。

    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています