Skip to content

PIC32 サポート

Shuta Kimura edited this page Oct 6, 2018 · 16 revisions

TinyThreadsはMIPS32(r2以上)を採用したPIC32シリーズCPUに対応しています。 MPLAB X IDEのMPLAB Harmony Configuratorに統合させ、サードパーティーのライブラリとして選択できるようになります。

インストール方法

  • Harmonyのインストール先にある、third_partyフォルダを開いて下さい。
    • 例えばWindowsなら、C:\microchip\harmony\v2_06\third_partyなどです。
  • リリース一覧から必要なバージョンのzipやtarballを取得し、上記のフォルダに展開して下さい。
    • zipやtarballの代わりに、third_partyフォルダ下でgitリポジトリを直接クローンしても構いません。
      • その場合は使用するバージョンのタグをチェックアウトしてください。masterブランチは開発途中の状態が含まれる場合があるため推奨しません。
    • tinythreadsフォルダの中身だけではなく、フォルダ階層ごと展開してください。
    • フォルダの名前は必ずtinythreadsにしてください。
  • 次のフォルダ構成になっているか確認してください。階層構成やフォルダ名が異なると、正しく動作しません。
    harmony/
      +-- vX_XX/
            +-- third_party/
                  +-- tinythreads/
                        +-- README.md
                        +-- config/
                        +-- templates/
                        +-- TINYTH/
                        +--   : (省略)
    
  • third_party/config/third_party.hconfig をテキストエディタで開き、次の一行をmenuendmenuの間に挿入し、保存してください。
    source  "$HARMONY_VERSION_PATH/third_party/tinythreads/config/tinythreads.hconfig"
    
  • MPLAB IDE X で32-bit MPLAB Harmony Projectから生成されたプロジェクトを開き、Harmony Configuratorを起動してください。
    • まだプロジェクトが無い場合は、「使い方」の最初の手順で先にプロジェクトを作成してください。
  • 以下のように、「Third Party Libraries」内に「Use TinyThreads?」の項目が表示されていればインストール完了です。

使い方

  • MPLAB IDE X で「File」→「New Projects...」から「32-bit MPLAB Harmony Project」を選択し、「Next」で進んでください。
  • プロジェクトの生成場所やデバイスの種類は任意です。適切に設定をして「Finish」でプロジェクトを作成してください。
  • プロジェクト作成直後にHarmony Configuratorが起動しますので、「Third Party Libraries」→「Use TinyThreads?」にチェックを入れてください。すぐ下にTinyThreadsの詳細設定を行う項目「TinyThreads Configuration」が追加されます。
  • 「TinyThreads Configuration」内の設定を設定してください。
  • 「Device & Project Configuration」→「Project Configuration」→「XC32 (Global Option)」→「xc32-ld」→「General」を開き、「Heap Size (bytes)」にヒープの容量を設定してください。TinyThreadsはmalloc/freeを使用するため、ヒープが必要です。
    • ヒープを最大限に確保する場合、ヒープ容量 = デバイスのRAMサイズ - (Data Memoryの使用量 + メインスレッドのスタック確保サイズ) で決定してください。Data Memoryの使用量はプロジェクトのコンパイルを行うとNavigatorウィンドウに表示されます。
    • 初回の設定値に見当がつかない場合、一旦ヒープ容量を0のまま後のステップに進み、コンパイルしてData Memoryの使用量を確認してから、再度Harmony Configuratorで設定し直しても問題ありません。ヒープ容量が0でもコンパイルは可能です。
  • Generate Codeボタンを用いてコードを生成してください。
  • プロジェクトのプロパティを開き、「XC32 (Global Options)」の「Additional Options」に-newlib-libcと設定してください。(もし「Use Legacy libc」にチェックがされている場合は、チェックを外してください。)
    • プロパティは、左側プロジェクト内容一覧のプロジェクト名を右クリックし「Properties」を選択すると開きます。

設定項目

Under construction...

制約

  • libcの種類としてはnewlibのみに対応します。デフォルトのlibcやLegacy libcには対応していません。
    • コンパイルオプションから-legacy-libcは外し、-newlib-libcを追加してください。
  • XC32プロジェクトではデフォルトでヒープが設定されませんが、TinyThreadsはmalloc/freeを使用するためヒープが必要です。
    • Harmony ConfiguratorのXC32 (Global Options)からヒープサイズを設定してください。
    • プロジェクトのプロパティのxc32-ldから設定すると、Harmony Configuratorでコード生成する度に上書きされてしまうためご注意ください。
  • v1.3時点では、ISA(Instruction Set Architecture)はMIPS32のみ対応です。microMIPSには対応していません。
  • 同時に存在できるスレッドはShadow register setの個数が最大となります。これにはmain()関数が実行されるデフォルトスレッドと、動作すべきスレッドが無い場合に時間を消費するアイドルスレッドも含まれます。
    • 例えば、Shadow register setが7個の場合、pthread_create()で同時に生成できるスレッドは7-2=5個が最大です。
    • この制約のため、GPRセットを2個(つまりShadow registerは1個)しか持っていないPIC32MMシリーズなどでは、この機能を利用できません。
    • 同時生成スレッド数の上限に達した場合、pthread_create()EAGAINを返して失敗します。