NXPの技術スタッフの皆様、こんにちは!
S32K144チップの開発中に問題が発生しました。
上記のアドレス記述を例にとり、グローバル変数を格納するための別のアドレスを割り当てたい。
1. 電源がオフの状態でも、保存、消去、書き換えなどの機能を実行できます。
2. さらに、プログラム実行中に論理演算に参加できる必要があります。
3.
コンパイルして srec
ファイルを生成した後、このアドレス範囲からデータを抽出する方法がわかりません。これらの変数を配置するのに適切なアドレスセグメントがどれなのか、またアドレス割り当ての正しいプログラミング構文が何なのかがわかりません。プロジェクト内の Linker_files
フォルダにある .ld ファイルをどのように変更すればよいでしょうか。学習に利用できる参考資料はありますか。S32K144 チップを使用した開発について、まだ疑問があります。Linker_files フォルダ内の .ld
ファイルのフラッシュ割り当てに関して、正しい構文は何ですか。また、なぜそのように記述されているのでしょうか。この知識を得たいです。学習のために、公式で明確かつ正しい構文仕様と内部ロジックの説明を提供していただけますか。
ご返信を心よりお待ちしております。
どうもありがとうございます!
こんにちは@Ni_
次回からは、必ず会社のメールアカウントをご利用の上、ご質問ください。QQ、163、Gmailなどの一般的なメールアカウントからのお問い合わせには優先的に対応いたしかねます。
まず最初の質問にお答えしましょう。
RTM版に付属するリンクファイルを例にとると、このリンクファイルは、カスタムデータストレージ用の独立したアドレス空間の分割をどのように実装するかを実際に示している。
「m_data_2」を詳しく見てみると、まずメモリ内のアドレス空間範囲を定義していることがわかります。
(ここでは、メモリを自分で割り当てることができます。例えば、m_textをさらに複数のカスタム領域に分割することも可能です。実際のアドレスと範囲に注意してください。)
/* Specify the memory areas */
MEMORY
{
/* Flash */
m_interrupts (RX) : ORIGIN = 0x00000000, LENGTH = 0x00000400
m_flash_config (RX) : ORIGIN = 0x00000400, LENGTH = 0x00000010
m_text (RX) : ORIGIN = 0x00000410, LENGTH = 0x0007FBF0
/* SRAM_L */
m_data (RW) : ORIGIN = 0x1FFF8000, LENGTH = 0x00008000
/* SRAM_U */
m_data_2 (RW) : ORIGIN = 0x20000000, LENGTH = 0x00007000
}
次に、m_data_2 に属する SECTIONS に ".customSection" を定義します。
/* Custom Section Block that can be used to place data at absolute address. */
/* Use __attribute__((section (".customSection"))) to place data here. */
.customSectionBlock ORIGIN(m_data_2) :
{
__customSection_start__ = .;
KEEP(*(.customSection)) /* Keep section even if not referenced. */
__customSection_end__ = .;
} > m_data_2
最後に、「customSection」を使用する場合、プログラム内で変数を定義できます。
__attribute__((section (".customSection"))unsigned int i = 0;
変数「i」は「customSection」に配置されます。コンパイル済みのxx.mapファイルを使用して、変数「i」のアドレスが正しいかどうかを確認できます。
2つ目の質問は、電源オフ時のデータ保存についてですね。これはS32K1のEEPROMを使用することで完全に実現できます。詳しくは、こちらのリンク先の記事をご覧ください。