プログラムのためにどれだけのフラッシュメモリが空いていますか?

データシートを使用して、STM32F103C8T6(別名青い丸薬)用にプログラミングしています<ここで。

14ページに記載されています。

2.3.2内蔵フラッシュメモリプログラムやデータを保存するために64または128キロバイトの内蔵フラッシュを使用することができます。

今私の64 KBが、これは私が100%利用可能であることを意味する、またはいくつかの部分が減少しているという意味ですか?そして、もしそうなら、いくらですか?それとも(エラーが表示されるように?)それが「フィット」しないのかを調べる方法はありますか?

STM32 ST-LINK V2を使用していますが、特別なブートローダは使用していません。開発環境はWorkbench 4 STM/Eclipseで、HAL/STMCubeを使用しています。

現在私は約19KBしか使っていませんが、まだ終わっていません(そしてこのコード内で単体テストを実行することもできますが、スイッチを切ることができますので、半分になります)。

1
誰かが、C8はCB(128kBのフラッシュを持つ)のバージョンだが、上限64kBは品質、信頼性テストに不合格であると言った。必要ならC8を "128 kBモード"にすることができますが、あなた自身の責任で使用してください。
追加された 著者 icecream,

4 答え

典型的なマイクロコントローラでは、あなたは自分のコードで全てのフラッシュをプログラムすることができます。あなたは確かにTRMをチェックすることができます - それが最初のセクターのブートローダについて話すか、またはあなたが消去できないフラッシュの部分があるとあなたに言うならば、それらの部分は予約されています。しかし、通常あなたはそれをすべて手に入れます。

フラッシュの100%がコードに使用されるわけではないことに注意してください。フラッシュの開始時に割り込みベクトルアドレスがあります。静的変数の定数と初期化値もフラッシュに保存されます。おそらく製造元(ST)が提供するリンカースクリプトを使用して、リンカがこれを処理します。プログラムが大きすぎてフラッシュメモリに収まらない場合は、リンカによってエラーが発生します。

高度なプログラマは、独自のリンカスクリプトを作成し、必要なフラッシュの任意の部分にコードとデータを手動で割り当てることができます。たとえば、製造元のデフォルトのリンカスクリプトは通常、割り込みベクタをフラッシュの開始位置(RAMが不足している場合はRAM)に配置します。

3
追加された
ありがとう、Eclipseは私が想定しているリンカスクリプトの面倒を見ます。そしておそらく私は警告を受けます(すでに別の答えによっても確認されています)。
追加された 著者 Spike,
はい、そう思います。おそらくEclipseの「パッケージ」SW4STM32と一緒にインストールされています。少なくとも、コンパイル/アップロード/デバッグできます。
追加された 著者 Spike,
リンカスクリプトは実際にはSDKの一部ですが、すでにインストールされているように見えますので、問題ないはずです。
追加された 著者 Adam Haun,

うまくいかない場合を見つける方法はありますか?

IDEまたはコンパイラは、メモリ(フラッシュまたはRAM)オーバーフロー警告を表示することがあります。私はF3ボードでテストしました。テスト用に大きな配列を宣言したことがありました。ソースをビルドすると、EclipseからRAMオーバーフローエラーが発生しました。

2
追加された
はい、これは本当に簡単なテストです。ありがとうございます。
追加された 著者 Spike,

データシートは、STM32F103x8とSTM32F103xBの両方に対応しています。

STM32F103x8のフラッシュは64Kバイト、STM32F103xBのフラッシュは128Kバイトです。

部品番号の「x」はパッケージを識別します。

だからSTM32F103C8T6はSTM32F103プラスです:

  • C = 48ピン
  • 8 = 64キロバイトのフラッシュ
  • T = LQFPパッケージ
  • 6 =工業用温度範囲、-40〜85°C

だからあなたのものは64キロバイトしかないが、あなたはそれらすべてを使うことができる。 128Kバイトのフラッシュではありません。

ただし、STMicroには128 Kバイトのフラッシュ付きで出荷されているものもあります(例: stm32duino.com ) STM32F103x8の部品番号はパッケージに印刷されているので、運がよければ

2
追加された

データシートには、1つだけではなく、一連の部品が記述されています。最初のページに部品名がリストされていることに注意してください。

STM32F103x8
  STM32F103xB

STM32F103C8T6は、48ピンLQFPパッケージおよび64 KBのフラッシュを搭載した特定の製品で、工業用温度範囲の定格です。このデータシートで扱う他の部品の例としては、100ピンBGAパッケージと128 KBのフラッシュを搭載したSTM32F103VBH6があります。

部品番号のデコード方法の詳細については、データシートの108ページ( "注文情報体系")を参照してください。


さて、実用上の注意: "STM32F103C8T6"と記されている多くの部品は実際には128 KBのフラッシュが利用可能です。 (これらは事実上、在庫上の理由からCBT6部品はC8T6としてコメントされています。)製品のこの追加フラッシュの入手可能性に頼るべきではありませんが、開発には便利な特典です。 :)

2
追加された
@duskwuff実際に64 KBのうちどれだけ使用できるかを示しましたが、最後の発言を支持しました。
追加された 著者 Spike,
@Jashaszun私が読んだところでは、OPはデータシートの中の言語 "64 or 128 KB"と混同されています。
追加された 著者 BrainSlugs83,
これがどのように質問に答えているのか私にはわかりません。
追加された 著者 crashoz,
彼らは自分のものが64KBあることを知っていると言った。彼らは、64KBのうちどれだけ使えるのか疑問に思っています。
追加された 著者 crashoz,