stmole32

88x31.png

STM32用のライブラリを開発して配布します。 名前にOLEが入っていますがObject Linking and Embeddingとは関係なく、stm32とmoleを足して短い名前にしただけです。

自宅鯖 https://ashidan.daemon.asia/its/projects/embedded/wiki の記事のほうが情報量が多いかも。

文書中の商標のなんやかやはその企業の商標です。

OSDNのWikiガイド

ダウンロード

ファイルをリリースする予定はなく、利用のためにはgitリポジトリをcloneする必要があります。

インストール方法 にいろいろ書いてあります。

※ 作り始めたばかりなので、ろくに中身がありません。

コンセプト

車輪の再発明、ただし、STM32CubeMXの自動生成コードと併用できて、ポーリングでなくブロッキングを使い(FreeRTOS前提)、商用利用に支障のない(ソース開示義務のない)ライセンスのライブラリ、を目指します。

ライセンス

私が作成している部分は The MIT Lisenceです。

ただし、stmole32が依存しているライブラリ ( mw/ 以下の MicroShellなど) に関しては、そのライブラリの配布条件に従います。

また、stmole32exa にはCubeMXが自動生成したコードが含まれていて、 Ultimate Liberty Software License 等になっています。 ライセンスを守ってご使用ください。

Lesserでない普通のGNUのライブラリには依存しないようにするつもりです。

対応ハードウェア

  • NUCLEO-F429ZI
    • ST-Link部分をJ-Link OB化して使います。

将来的にはCortex-M0系(STM32だとF0やL0のシリーズ)にも対応したいと考えています。

対応開発環境

  • Windows10上のSTM32CubeIDE

当初はGNU MCU Eclipseを使った環境を構築するつもりでしたが、非常に面倒な手順が必要で、人様にやっていただこうにも途中で投げ出されそうでした。

運よく Makefile+CubeMX+CubeIDEでSTM32開発 という記事を見つけたので、それを参考にさせていただき、CubeIDEで小細工をしてMakefile projectを扱う方式にしました。

DevEnvCubeIde --- 開発環境の構築手順

DevEnvTouchGfx --- GUIアプリケーション用の開発環境の構築手順

DevEnvProto --- 開発環境の実験

ConfigurationManagement --- CubeMXやTouchGFXで作ったプロジェクトをgitリポジトリに記録するときのガイド

サンプルプログラム

ライブラリ stmole32 は、ユーザのgitリポジトリに対してサブモジュールとして組み込むことを想定しています。

サンプルプログラム集 stmole32exa が、ユーザのgitリポジトリの例として機能します。

制限事項

  • CubeMX上でMiddleware-FreeRTOSを選択してはいけない
    • 理由 : CubeMXでFreeRTOSを選択するとCMSIS OSのラッパーが付いて生のFreeRTOSにならない
    • STMicroカスタムのFreeRTOSの代わりに、Amazon FreeRTOSを使用するようになっています
  • CubeMX上でMiddleware-lwIPを選択してはいけない
    • 理由 : lwIPに関してCubeMXの吐くコードが信用ならない
    • 代わりに、Amazon FreeRTOSに含まれるlwipまたはFreeRTOS+TCPを使う予定です
  • ヒープ領域が必須
    • 理由 : C++クラスもどき構造体に関して、構造体の詳細を隠蔽するため.hでなく.cに入れたので、インスタンスをヒープにしか確保できません
    • ヒープ確保時の排他によりリアルタイム性が削がれるので、原則的に、インスタンシエートをOSのスケジューラ起動前に行う必要があります

定数のカスタマイズ

バッファサイズなどは、

#if !defined(FOO_SIZE)
#define FOO_SIZE 64
のようにヘッダに記載します。

よって、ヘッダを修正することなく、MakefileにてCFLAGSへ-Dオプションを追加することで上書き可能です。

assert系マクロの使い分けの主義

シンボル 用途 デバッグ版 リリース版
configASSERT 使わない - -
assert 代替にassert_paramを使用 - -
assert_param 関数の始めに引数をチェック 有効 何もしない文
abort 代替にMOLE_CRASHを使用 - -
MOLE_CRASH 失敗するはずのない処理が失敗した場合に使用 有効 有効

にっちもさっちもいかない状態に陥った場合は、関数としてエラーを返すのではなくBKPT命令でデバッガ上で止まるようにしています。

リリース版ではBKPT命令を発行せず無限ループに入ります。ウォッチドッグタイマ未使用の場合は、ユーザにはハングアップに見えるでしょう。

シンボルの命名規則

モノ 名前 備考
typedef名 ~_td _tは処理系が使うので、それと区別がつきやすいように
グローバル変数 g_~ g_ のあと小文字で始まるキャメルケース
ファイル変数 l_~ Localのエル l_ のあと小文字で始まるキャメルケース
グローバル定数 g_Abc~
ファイル定数 l_Abc~
マクロ名 MOLE_ABC_DEF 大文字とアンダーバーの組み合わせ
構造体名 MoleAbc Moleで始まるキャメルケース

ユーザのシンボル名との衝突を避けるため、 関数名は MoleAbc_write() のような命名、マクロは MOLE_ で始めるようにしています。 ただし、ファイルに閉じたシンボルに関してはMoleを省略してもっと短い名前にしています。

最新リリース情報

リリースはありません

最近のチケット一覧

F4Discoveryエミュ用サンプル作成2020-11-04 08:34
XPACKにQEMUで動くSTM32F4Discoveryエミュレータがある。 stmole32exaでエミュ向けサンプルプログラムを提供すれば、NUCLEO-F...molelord
使い方を書く2020-11-01 17:09
OSDN標準の、プロジェクトの使い方の文書を作成する。 インストール方法と異なり、ライブラリをビルドできる状態にするには相...molelord
LEDチカチカサンプルを作成2020-11-01 15:59
最も基本的な、LEDを点滅させるだけのサンプルプロジェクトを作成する。 ビルド環境が正しく構築できたかの試金石になるので...molelord
トラブルシューティングページを用意2020-11-01 00:26
トラブルの例とその対策を羅列するためのページを用意する。 トラブルはいくらでもあり、ページは永遠に完成しない。 よって...molelord

コメント

:
  • あーあー、てすてす
    -- molelord (2020-10-31 21:36:09 JST)