RT-Threadアプリケーション-STM32L051でのRT-Threadの使用(1.ワイヤレス温度および湿度センサーの新しいプロジェクト)

学完了 RT-Thread 内核基础,来使用 RT-Thread 实现一个小应用。
硬件平台:STM32L051C8  TCM310(Enocean无线芯片)
软件平台:RT-Thread Studio  STM32CubeMX
产品名称:无线温度传感器
实现功能:STM32L051 通过 I2C 协议读取 SHT21D 温湿度传感器数据,然后通过串口和 Enocean
		通讯,按照标准Enocean协议,将温湿度数据发送出去

序文

RT-Thread列が今日まで更新され、カーネルの基本をすべて終えました。RT-ThreadStudioを使用した完全なプロジェクト例はありません。最初の記事でバージョンを紹介したときに、一般的なアプリケーションで述べました。上記のプロジェクトでは、Nanoはより多くを使用すると推定されており、メモリがコストです。RT-Thread Nanoコンテンツのほとんどを確認したので、それを使用して小さなセンサープロジェクトを実装しましょう。

私のブログ投稿を読んだ友人は皆、私がSTM32L051を使用する理由を知っています。前のブログ投稿のSTチップの価格が上がった後、どのようにそれをしましたか?その理由はすでに述べたとおりであり、アプリケーションの要件が満たされ、交換コストが低くなっています。

この記事は完全に0から始まり、新しいプロジェクトを作成し、プロジェクトコードを分析し、変更し、移植し、テストし、段階的に実行し、最後に完全なアプリケーションを完成させます。

1.RT-ThreadStudioを使用して新しいプロジェクトを作成します

まず、RT-Thread Studioを使用して新しいプロジェクトを作成し、次に示すようにNanoプロジェクトを選択します。
ここに画像の説明を挿入

次に、プロジェクト作成ページに入ります。プロジェクトはチップに基づいており、次に示すように、追加する必要がない場合は、シリーズのSTM32L0シリーズを選択します。

ここに画像の説明を挿入

上の図で[さらに追加]をクリックし、SDKマネージャーでSTM32L0のリソースパッケージをインストールして選択し、次に示すように[インストール]をクリックします。
ここに画像の説明を挿入

上記の手順を完了したら、戻ってプロジェクトを再作成します。オプション全体を以下に示します。

ここに画像の説明を挿入
新しいプロジェクトが完了すると、リソースマネージャーに直接表示され、前のプロジェクトは閉じられません。
ここに画像の説明を挿入

次に、最初のプロジェクトコード分析

当初、私たちが使用することを学んだ開発ボードは、自分たちで描いたSTM32F103VGT6で、96KBのRAMを搭載しており、すでに大量のメモリを搭載しています。現在、ブロガーの実際のプロジェクトでは、8KBのSTM32L051C8を使用している製品が多くあります。 RAM。FreeRTOSを使用する場合、発生する大きな問題はRAMスペースの不足の問題です。

L051のRAMは本当に小さすぎるので、この種の小さなメモリチップの場合、構成と初期化は大きなメモリのそれとは多少異なります。したがって、生成されたばかりのプロジェクトプログラムを確認する必要があります。 、そしていくつかの詳細を見ることができるはずです。

もちろん、コードは初期化からどこから分析を開始しますか?

RT-Threadレコード(2. RT-Threadカーネルの起動プロセス-起動ファイルとソースコードの分析)

起動プロセスがわかったので、最初から始めましょう。

STM32の場合、シリーズ全体のスタートアップファイルは基本的に同じですが、唯一の違いは、一部のチップにはより多くのペリフェラルがあるため、より多くの割り込みベクタテーブルが存在することです。

スタートアップファイルには、STM32のモデルごとに異なるステートメントがありますが、bl SystemInitここSystemInitではあまり気にする必要はありません。これは、STによって公式に提供されている標準の初期化です。

他の場所で変更できるのはスタックのサイズだけですが、RT-Threadでは、スタートアップファイルのスタートアップファイルのヒープのサイズを定義しないため、スタック(.stack)のみがサイズ、STM32L051を使用した以前の経験によると、このセンサー単一製品プロジェクトのスタックで0x400を使用しても問題はなく、システムもデフォルトで0x400になっています。
ここに画像の説明を挿入
スタートアップファイルを理解できます。基本的に違いはありません。

以前に分析した関数を入力しrtthread_startupます。そのプロセスは次のとおりです。

ここに画像の説明を挿入
これらの基本的なプロセスはすべて同じですが、ここで説明するのはこれらのステップです。

役に立たないものがたくさん書かれている気がしますが、実際にこの分析をして自分で調べたので、参考にさせていただきたいと思います。
ただし、初期化の手順に精通している場合は、実際rtconfig.hに。すべての構成が一目でわかります。これについては後で説明します。

2.1メモリヒープ

手順に従って関数を見下ろし、rtthread_startup関数を入力したrt_hw_board_initところ、以下に示すように、L051はデフォルトでヒープを使用しないため、ヒープスペースが初期化されないことがわかりました。
ここに画像の説明を挿入
ここに画像の説明を挿入

実際、L051のメモリが小さすぎるため、理解しやすいです。もちろん、自分で構成を変更することもできますが、システムの安定性のために、変更しないことをお勧めします。

L051C8がヒープを使用しないことに加えて、カーネルオブジェクトの動的作成機能はヒープなしでは使用できないことに注意する必要があります。つまり、他のIPCメカニズムを含むスレッドは静的初期化メソッドを使用する必要があります。 !!

2.2メインスレッドの初期化

または、を見下ろしrtthread_startuprt_application_init、メインスレッドの初期化関数である関数を入力します。

メインスレッドを作成するには、ヒープが使用されていないため、静的に初期化することしかできません。これは問題ではありませんが、スレッドスタックのサイズが2K
ここに画像の説明を挿入
、合計8KのRAM、および1つであることに注意する必要があります。メインスレッドは2Kを占めるのでかなり大きいので、ここでこのサイズに注意し、後続のアプリケーションで調整する必要があるかどうかを確認してください。

2.3ソフトウェアタイマー

rtthread_startup下に移動してrt_system_timer_thread_init関数に入ります。
ここに画像の説明を挿入

ソフトウェアタイマーの次はrt_thread_idle_init();アイドルスレッドの初期化です。この場所は同じで、アイドルスレッドのサイズが256バイトであることを認識しています。

以前にソフトウェアタイマーを紹介したとき、ソフトウェアタイマーはメモリを占有する必要があるため、メモリが不足している場合はソフトウェアタイマーを使用することはお勧めしません。
ここでは、デフォルトでソフトウェアタイマーを使用できない場合があります。

2.4 rtconfig.h

上記の初期化が完了すると、システムがスケジュールを開始し、ユーザープログラムの設計を正常に実行できるようになります。その後、上記の分析により、メモリの少ないSTM32L051では有効になっていないことがわかりました。これらの定義はすべて rtconfig.hファイルで構成されているので、構成プログラムを開いて比較を行うことができます。

実際、オペレーティングシステムの場合、最初から構成ファイルを直接調べて、使用可能なものと定義されていないものを確認できます。

具体的な比較は1つずつ分析することはありません。ここでは、実際に使用される可能性のあるものをリストし、後でアプリケーションを作成するときにも確認します。

  • フック機能はデフォルトでは使用できません
  • ソフトウェアタイマーはデフォルトでは使用できません
  • IPCメカニズムで使用できるのはセマフォ、ミューテックス、およびメールボックスのみであり、デフォルトではイベントセットとメッセージキューを使用できません。
  • メモリヒープがないため、動的に作成された関数を使用できません
  • メモリ管理がないと、メモリプールを使用できません
  • デフォルトではFinSHはなく、シェルコマンドは使用できません

もちろん、まだ習得していない機器モデルコンポーネントソフトウェアパッケージなど、より高度な機能は使用できません= =!

3.最初のプロジェクトはRAMのサイズを考慮します

チップメモリ​​が小さすぎるため、RTOSの実行には重要な問題があります。つまり、メモリが不足しているため、この点に常に注意を払う必要があります。見てみましょう。少し驚くべきことです。

ここに画像の説明を挿入
上記の図の結論に到達した方法については、この非常に人気があり、詳細で、非常に優れたブログ投稿を読むことができます。

STM32に関連するメモリ管理(メモリアーキテクチャ、メモリ管理、マップファイル分析)

手順が含まれています:
ここに画像の説明を挿入

少し煩わしいです。何も書いていませんが、すでに5840バイトです。後でかなり不快になると思われますが、メインスレッドは最初は2048バイトを使っていたので、まだ余裕があると思います。調整のために見てみましょう!

4.常にテスト結果をチェックし続けます

プロジェクトを0から始めるには、良い習慣を保ち、常にテスト結果をチェックする必要があります。これにより、複雑な問題が単純化され、問題が発生したときに問題の原因を簡単に見つけることができます。

最後に、プログラムがチップに正常にダウンロードされているかどうかを確認します
ここに画像の説明を挿入
。ボードにダウンロードされ、すべてが正常です。

エピローグ

この記事は新しいRT-ThreadNanoプロジェクトを作成したばかりですが、初期化プロジェクトコードを分析し、学習時に大容量チップとは異なり、注意が必要ないくつかの点について説明しました。構成と初期化の状況により、後続のプログラム設計の準備も十分になり、不要な問題を回避できます。

次の記事の内容は、STM32CubeMXを介して周辺機器の基本構成を行い、次にいくつかの簡単なテストコードを追加することです。

良い始まりは戦いの半分です!このプロジェクトは半分完了しました!

さて、この記事は以上です、ありがとう!

おすすめ

転載: blog.csdn.net/weixin_42328389/article/details/124245845