STM32F4 Discoveryへの移植を断念

既にお気づきだと思いますが、ここ数日STM32F4 DiscoveryへのTOPPERS/ASPの移植を検討していました。が、断念しました。
技術的には可能であろうと思われますが、あまりにもつぎ込む労力と出力が釣り合わないことが断念の理由です。

  • 移植可能であるという理由
    • ツールチェーンはねむいさんが検討されているとおり、Codesourceryが使える
    • OpenOCDはCORTEX-M4Fには正式対応していないが、FPUレジスタデバッグ以外ならCORTEX-M3用をだましだまし使える。
    • CORTEX-M4Fは、例外時に全FPUレジスタをスタックにつみ、その後通常レジスタをスタックに積む。結果的にスタックトップから見ると、最初に現れるのはCORTEX-M3レジスタ群である。
    • その結果、TOPPERS/ASPCORTEX-M3依存部のうち、例外出入り口部には変更が不要に思える。
    • dispatch()内では、マルチレジスタ移動命令を追加してFPUレジスタを退避、復帰させればいい。

こんな感じで、CORTEX-Mx依存部に関してはそれほど手間をかけずに移植できそうです。
一方、STM32F4 Disoveryに搭載されているSTM32F407には、16550互換UARTが搭載されていません。そのため、カーネルのターゲット非依存部1.3.2で使われていたCQ-STARM依存部を利用することになりますが、このUSARTドライバは他の部分とよく切り離されているわけではありません。
結局、1.3.2という現在のターゲット非依存部と非互換なコードを持ってきて接ぎ木しなければなりません*1
現行のTOPPERS/ASP for LPCはそれなりに手をかけていて、ターゲット依存部はコア、チップ、ターゲットの三層構造、シリアルはPDICとして分離したモジュール性の高い実装になっています。そこに、古いコードを継ぐとなると、その後のリファクタリングがかなり大げさになります。
今のところSTM32F407を使う予定はなく、となると、ドキュメントをあわせて大きく手のかかるSTM32F4 Discoveryへの移植は、元が取れない、と判断するに至りました。
結局、NXPから何か出てくるのを待つだけです。ET2011で聞いた話では、LPC4300にはFLASHが「ある」とのことですので、期待しましょう。

*1:やり方はわかっているが