こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

解決済みの質問

組み込みソフト。ROM領域にデータ

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

投稿日時 - 2014-08-21 17:51:59

QNo.8725135

暇なときに回答ください

質問者が選んだベストアンサー

#pragma section data = ".rodata"
//ROM配置したいデータ

#pragma section data = default

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

注)他の回答にあるようにあなたの使用している環境に合わせてください。

投稿日時 - 2014-08-21 19:41:47

お礼

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

投稿日時 - 2014-08-21 20:19:50

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(4)

ANo.4

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

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

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

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

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

投稿日時 - 2014-08-21 23:55:53

-広告-

ANo.2

「変数」を「ROMに配置」といいますが「変数を変更するのは不可能」なのでROMに配置されることはないですよね。「読み込んだプログラム」と同様にメモリ上に確保されますので。
「ROMからデータを読み込み」ならハードウェア・コンパイラに依存するので...

投稿日時 - 2014-08-21 19:02:29

ANo.1

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

投稿日時 - 2014-08-21 18:13:25

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-