SVN利用メモ

出典: Wikimura

いよいよSTM32のプログラミングに入るが、その前にSVNを使ってしっかり管理する方法を調べる。 STM32の機能を試すだけが目的だったり、実験が目的だったり、リリース用だったリと...色々作ることになりそう。 ファイルを管理できていればコピペミスで混乱が起きることもないだろうし、同じバグに再開することも無くなるはず。

どういった使い方をするかを良く考えて、方針を決めていきたい。

目次

何が問題?

ARLISS 2009ではSTM32ボードを2台使って、C&DH系と通信系を作る。 これらのプロジェクトを格納する領域が必要となる。

ただSTM32は初めて使うので、まずはペリフェラルを使う練習が必要だ。そのための小さなプロジェクトをたくさん作っていくことになるだろう。もしかするとこの成果をベースにライブラリを作るかもしれない。そのため、リポジトリ内のライブラリを利用する方法も知っておかないといけない。

ライブラリの開発とテストベッドは同時に作るべきだろうか?

C&DHと通信系は同時に開発が進むことになる。CANを介して通信することになることから、インターフェースについては共同で作るのかもしれない。これについては経験したことが無いので分からない。 インターフェースの試験は2つのプログラムが同時に必要となる。これはどう扱えば良いのだろう?

STMicroelectronicsの提供するライブラリは管理するのだろうか? ソースとして提供されるけど、マイコンごとやデバッグの有無の設定をしてアーカイブ化したいと思っている。 いちいちソースからビルドするのも面倒だし。 ただ、アーカイブ化するとコンパイラのバージョンの影響を受けるはず。個別に用意するしかなさそう。 Subversion実践入門の11章サードパーティ製のコードにヒントが載っていた。

CMSIS系のファイルの中にはテンプレートとして提供されている[.c]のファイルがいくつか有る。 これらは基板ごとに設定してやる必要があるため、ブランチに成り得そう。

参考文献

ベンダーブランチ

外部参照

参考文献

外部参照の設定 外部参照の設定2

方針メモ

何度も同じ設定をしたくないので、テンプレートを用意する。 テンプレート自体も進化するので、ブランチとしてプロジェクトを作成しても良い。 単にローカルコピーを使うだけでも良い。

プログラムは全てSTM32のペリフェラルライブラリを参照することになる。 ライブラリのヘッダは外部参照で持ってくるようにすれば良い? 外部参照とベンダブランチは別物で、外部参照で行うコピーはオリジナルと別物扱いらしい。 ベンダブランチを使った方が良さそう? →ベンダブランチでボード用のブランチを作りつつ、外部参照で持ってくると良い?

  • 外部参照:別に管理されているリポジトリのデータ(自身でもOK)を持ってくること
  • ベンダブランチ:サードパーティのライブラリを手元で管理すること→独自の調整を加えたり、バグを直したりするのが目的らしい

計画:

  • ルート
    • vendorsrc
      • STMicroelectronics
        • stm32f10x_stdperiph_lib
          • current
            • 現行バージョンのオリジナルを格納
          • 3.1.0
            • trunk
              • 3.1.0を格納し、手を加える。ライブラリをビルドするプロジェクトを作ることにする。
            • tag
              • STM32のHigh/Medium/Low densityごとのバイナリリリースなど
    • vendor
      • STMicroelectronics
        • stm32f10x_stdperiph_lib
          • current
            • include
            • lib
          • 3.1.0
            • include
            • lib

こんな感じで作ろうと考え中。 なかなかすっきりしない。

オリジナルを持ってきてバージョン付けるのはOK。 サードパーティのライブラリを自分が管理者になったつもりで管理して、必要なら変更を加える。 後は、実際に使う段階で必要なファイルのテンプレートを用意することと、ヘッダ+スタティックライブラリを用意することが必要。

テンプレートは...必要なファイルは分かっている。ただ、手動でやるのか自動化するか、成果物はどこに置くのか、そもそもいつ作るのか...

  • テンプレートを予め作っておき、それをチェックアウトするのは可能。ただ、変更を反映してはダメなのでブランチ化する事になる
    • ただのコピーとして取り出せば...フックスクリプトと同じで変更は反映されない。
  • フックスクリプトを使って、その都度ファイルコピーすることも可能。ただ、オリジナルの変更があってもマージできない。
  • いずれにせよ変更は反映されない?

SubversionのFAQを見たところ...

  • 変更が必要なファイルは[.tmpl]のような名前にしてバージョン管理に入れておく
  • チェックアウトした人が[.c]や[.h]のように名前を変えてやれば、それは元のファイルと別物扱いになるらしい。
  • SVN管理外なので[?]マークが付く。これが嫌ならsvn:ignoreを設定することが必要らしい。

これらのことから考えると、結局のところマージをするということは考えていない...必要ないのかもしれない。 使わない機能に気を配ってもしょうがない。 ライブラリの成果物は?

外部参照はコミットが本体に行くらしい。ということはアップデートも反映できそう。 ただ、外部参照はディレクトリごとしか設定できないから、とりあえずオリジナルは手作業で作る。 Subversionの1.6からファイル単位で外部参照可能になったらしい。これなら、プロジェクトテンプレート作りを外部参照で作れそう。

ファイル単位の外部参照を使ってライブラリ+テンプレート作り

STM32F10x_stdperiph_libディレクトリ以下にテンプレートとライブラリビルド用ディレクトリを用意する。 CMSISのテンプレートファイルと、mainや割り込みの定義されたファイルをまとめる。

時間がもったいないのでライブラリソースは完全なコピーではなく、手を加えてから追加することにした。

参考文献

外部参照とベンダブランチ ベンダブランチを使う方法 似たような質問と回答 似たような悩み やはり外部参照?