arduino / arduino/ArduinoCore-API
refactor the use of g_APinDescription ?
- 主要言語
- C++
- スター
- 306
- フォーク
- 150
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
It bothers me, in a sort of "Code Purity" sense, that so many core and library functions access
the g_APinDescription[] (for sam/samd) or digital_pin_to_xxx[] (for avr) arrays directly.
There are some macros in variant.h or Arduino.h (digitalPinToBitMask and similar), but they are not consistently used, not all functions have macros, and sometimes they aren't well-placed WRT redefining them for new board types.
Example:
```
variants/mkr1000/variant.h:47: #define digitalPinToBitMask(P) (1 << g_APinDescription[P].ulPin)
cores/arduino/Tone.cpp:133: portBitMask = (1ul << g_APinDescription[outputPin].ulPin);
```
The definition of a more formal API presents the opportunity to offer more formal rules:
1. macros or inline functions to access all pin-related data should be defined in the variant-specific files, or perhaps WVariant.h for core-wide data.
1. if such definitions are defined in core-wide functions, it should be possible to override them in variant-specific files.
1. All other code should use these definitions, instead of assuming a particular implementation. (the tone.cpp example above should not exist, even now.)
The immediate practical benefit would be the possibility of more compact implementations for the "tiny" chips (avr tiny, SAMD11, etc), and greater portability of the functions in the "upper level" areas of code.
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
調査の方向性
まず、variant.h と Arduino.h のアクセスマクロを、g_APinDescription と digital_pin_to_xxx を含め、cores/arduino/Tone.cpp での配列の直接使用と比較します。現在直接アクセスされているピン関連データを洗い出し、オーバーライド可能な正式 API の範囲を定義します。core とライブラリのコードが特定の実装を前提とせずにそれらの定義を使用する状態を完了とします。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- cpp
- 領域
- embedded-iot
- issue の種類
- リファクタリング
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 30/100