お世話になっています。太郎です。
以前投稿させて頂いたテレワーク対応としてR5F563NBDxFCから、RX65N Target Boardへ既存PGの移植を行った際セクション指定をしている変数へ値が設定できない事象が発生しました。(未初期化セクション領域)単純に、セクション指定を外せば自動的に割り当てられるかもと試したりしても動作しません。
そもそもセクション指定の意味・意義が分からず。調べるとやり方は見つかるものの、利点/なぜやるのかは見つけられませんでした。(おそらくコンパイラ ユーザーズマニュアルが回答に近いのでしょうか)
こういったことについて、1つ1つをQAでお尋ねするのは宜しくないとは思うので、Web上やQAから出来る限り探しているのですが中々辿り着けなかったり、1つ1つの単語が不明だったりします。私のようなPC/スマホ/サーバ等の、OSありきのプログラムばかり学んできた者は数多く居ると思うのですが、その辺りのの人間でもとっつけるような書籍やWebサイトなどがあればご紹介いただけないでしょうか。。。(スタートアッププログラムとか、ベクタテーブルあたりも学ぶ必要があると思っています。)
太郎 said:書籍やWebサイトなどがあればご紹介いただけないでしょうか。
などいかが
IKUZOさん、こんにちは。太郎です。
情報ありがとうございます。
ただ、そもそも「セクションとは何か」をうまく認識できていなくて困っている状態なのです。
サンプルプログラム等、指定しなくとも動作する物もあるので、基本的にはわざわざ指定する必要はないと思うのですが
必要に応じて変えることが出来る物だと予想しています。
例えば、「RAM領域の割り振りを自動で行うと均一に割り振られるが、扱う変数が多い為RAM割り振りを変える」みないな使い方だったりするのですかね。。。
他にも、使用するアドレス先の注意点やセクション内のbyteサイズ上限等もあったりするのではないかと。。。
現在、具体的に困っている内容は、「恐らく誤った使用方法をしているセクションを直したい」です。
大量の未初期化変数に対して、セクションを指定しております。
が、その変数に値を代入しても代入できない状態なのです。(エラーも発生しない)
セクションの指定外の所に、その変数を置くと代入できます。
が、セクションから未初期化変数全部を外すと、また代入できなくなります。。。
※移植元のマイコンでは問題なく動作しているため、ビルド・ツールのセクション設定や、環境的な問題なのかもと思っています。
太郎 said:使用するアドレス先の注意点やセクション内のbyteサイズ上限等もあったりするのではないかと。。。 現在、具体的に困っている内容は、「恐らく誤った使用方法をしているセクションを直したい」です。 大量の未初期化変数に対して、セクションを指定しております。
使用するアドレス先の注意点やセクション内のbyteサイズ上限等もあったりするのではないかと。。。
わたしもC言語を始めた頃はセクションという言葉を聞くとおっくうでした、長年セクションで苦労してみると実は意外と単純な仕組みだと気が付くはずです、まずセクション名ですがその種類によってわかりやすいように適当に名前が付けられています、例えば
1.RAMの初期化されない変数領域 R
2.RAMの初期化されるべき変数領域 B
3.ROMのコード領域 C
4.ROMのデータ領域 C$BSEC
初期化されるべき変数領域等はmain関数の前にROMのデータ領域からRAMの初期化されるべき変数領域にmemcpy関数等で規定値をコピーしたりしています、これらのセクションの名前はコンパイラで規定値がありますが、自分で作ることもできます、開始アドレスや終了アドレスも任意指定可能です、コンパイラのマニュアルを調べるとわかるかと思います。
IKUZOさん、こんにちは。太郎です。コメントありがとうございます。セクション指定はしているのですが、指定した通りに動いていない状態なので、やってはいけないことをした結果動いていないのかなと考えています。マニュアルをもう少し読み込んでみます。