RL78/F14でのセクションの設定について教えてください。
未初期化変数を指定したアドレスに配置したいと思い、CS+のメモリ・マッピング・プロファイラのセクション設定で、
セクションを追加しました。
セクション設定で作成したセクションをCファイルで指定して変数を配置したのですが、下記のように記述されたいいでしょうか?
#paragma section mysection
iint i;
int j;
#parama section default
よろしくお願いいたします。
わわいです
RL78はまだ使ったことはないですが、、
特別の設定がない場合、未初期化変数のセクション名は決められてまして、昔のルネサスコンパイラならB、GCCとかなら.bss、という名前になっています
そこらへんはお使いのコンパイラの取説を読めば書いてありますんで読んでみましょう。
#また、section疑似命令の使い方なんかも書いてます。
ってことで、コンパイラ/リンカの設定で、それらのセクションのアドレスを設定してやれば、お望みのことができるかと思いますがどうでしょうか。
#GCCの場合はリンカスクリプトとか書きますね
> そこらへんはお使いのコンパイラの取説を読めば書いてありますんで読んでみましょう。この辺ですね。コンパイラ言語仕様 - 拡張言語仕様 - コンパイラ出力セクション名の変更(#pragma section)https://tool-support.renesas.com/autoupdate/support/onlinehelp/ja-JP/csp/latest/CS+.chm/Compiler-CCRL.chm/Output/ccrl04c0206y0008.htmlnear/far やら セクション種別やら結構複雑なので、実際リンクしてみてどんな感じになっているかmapファイルで確認すると良いと思います。
わわいさん、ほやさんアドバイスいただきありがとうございます。マニュアルや他の方の質問から下記のようにすればいいのではと考えています。
#pragma section bss mysecint mydata;#pragma section
CS+のセクション設定でセクション(mysec)を作成していますが、下記のワーニングが出て困っています。
W0561100メッセージに出力されているセクション名が、リンカの-startオプションで指定されているがそのセクションが存在しない。
CS+でセクションを作成しているのになぜこのワーニングが出てくるのかが分かっていません。もう少し調べてみて分からなければサポートの方にも質問してみようと思います。
mapファイルを見ると、#pragma section bss mysecで作られるセクション名が ”mysec_n” になっているので、-start オプションにも _n 付きで設定するかワイルドカード(mysec*)にするかですかね。セクション名の後ろに何が付くかもマニュアルの #pragma section の項に書いてあるので読んでみてください。
ソースのセクション設定名と実際に付けられるセクション名は違っている場合(前になんかついたり後ろになんかついたり)があるので、コンパイラの取説や、MAPファイルなどを参照して確かめましょう。
そういう場合はいくら設定名でアドレス設定などしても、名前が違う/存在していないというワーニングが出ます
また、変数エリアを別のセクション名にすると、起動時の初期化の対象外となります。自前で初期化するコードを書く必要が出てくるので注意しましょう。
ほやさん、わわいさん
ありがとうございます。問題が解決しました。
CS+のセクション設定ではセクション名を”mysec_n”として、Cファイルでの記述は、
#pragma section bss mysec
int mydata;
#pragma section
とする必要がありました。
とても助かりました。また何かあったらよろしくお願いします。