===============================================================
 TOPPERS/ASP for LPCXpresso LPC1768
===============================================================

1. はじめに
 TOPPERS/ASP for LPCはTOPPERS/ASPをNXPセミコンダクターズの
 LPCシリーズ上で動作するようにしたものです。

 このターゲット(lpcxpresso1768_gcc)はEmbedded Artists社が開発
 したLPCXpresso LPC1768上でTOPPERS/ASPを動作させるために実装
 されています。

 従来は評価用ボードに加えて、JTAGデバッガ、環境構築など様々な
 準備が必要でしたが、このターゲットを使用することで簡単に実機
 動作を体験できます。

2. 対応環境について
 2-1. ホストのOS
  環境はLPCXpressoが対応しているLinux環境に今回は限定しました。
  TOPPERS/ASPのビルドシステムにはシェルとperlに依存する箇所が
  あります。
  Windowsでも様々な外部ツールを使って、依存する環境に近い状況を
  作り出す事が可能ですが、今回は作業負担を軽減させるために割愛
  しました。

  最近ですとVMware Player上で簡単にLinux環境が構築できますし、
  WindowsとLinuxの両環境で対応できるように沢山の時間をかけるより、
  早く提供したいという思いが先行した結果でもあります。

 2-2. 動作を確認した環境
  参考までに動作を確認した環境を記します。

  * Ubuntu 10.04
  * LPCXpresso 3.8.2 [Build 129][31/01/2011]
  * LPCXpresso LPC1768 REV A

3. 公開当初からの変更点

 公開当初から幾つかの変更を加えてあります。

 変更は
  * デバッグをIDE上でできるようにすること。
  * 極力TOPPERS/ASPのオリジナルとの差分を小さくすること。
  * LPCXpressoのみで実現可能なこと。
 を念頭に作業しました。

 ソースコードとビルド用ファイルについては以下の変更を行っています。

  * 元々あったlpc1768_sram.ldとlpc1768_rom.ldを削除しました。

  * LPCXpressoが生成したDebugとReleaseのリンカスクリプトを使用
    しました。
   -> ENTRY(ResetISR)をENTRY(_start)に変更しました。
   -> STARTUP(start.o)を追加しました。
   -> __bss_start, __bss_endを追加しました。
   -> __idata_start, __idata_end, __data_startを追加しました。
   -> init_hook関数をPROVIDEで追加しました。
   -> .isr_vectorを.vectorに名称を変更しました。

  * kernel/target/lpc1768_generic_gcc/Makefile.targetに以下を追加
    しました。
   -> CDEFS=-DDEBUG -D__CODE_RED -D__REDLIB__

  * Makefileで生成されるオブジェクトの名称を変更しました。

  * Makefileで生成されるオブジェクトの拡張子を変更しました。
    LPCXpresso上の実行設定は拡張子がaxfでないと、実行する度に新しい
    設定を自動的に生成してしまうようです。これを防ぐ狙いがあります。

  * LPCXpresso IDE上でアーカイブプロジェクトzipファイルをインポート
    すると全てのファイルの実行権限が落ちてしまいます。
    そこでMakefileにpermissionというターゲットを追加し、ビルド時に
    実行権限を立てるようにしてあります。（暫定対策）

 LPCXpressoのプロジェクトに対しては以下の変更を行って下さい。

  * Debug ConfigurationsのDebuggerタブでStop on startup at: sta_kerに
    変更して下さい。
    これはLPCXpresso IDE上でデバッグを開始した時に実行を停止させる
    関数を指定するものです。
    RunメニューからResumeを選択することで動作を継続することができます。

  * Debug ConfigurationsのDebuggerタブでVector catch: Trueに変更して
    下さい。

  * PropertiesのC/C++ BuildでGenerate Makefiles automaticallyの
    チェックを外して下さい。
    これによりLPCXpressoは外部Makefileを参照するようになります。

  * PropertiesのC/C++ BuildでBuild directoryからDebugとReleaseを削除
    して下さい。
    これによりプロジェクトのルートディレクトリを参照する形になり
    Makefileとの整合性が確保されます。

    システムログがUART0(LPCXpressoの21, 22ピンに相当)に出力されます。
    LPCXpressoの21番ピンはLPC1768のP0[1]/TXD0/AD0[7]ピンに接続されて
    います。
    同様に22番ピンはLPC1768のP0[3]/RXD0/AD0[6]ピンに接続されています。

    シリアルポートの設定はボーレート57600、８ビット、ノンパリティ、
    ストップビット１です。

 ビルドが完了したらDebug 'TOPPERS-ASP_LPCXpresso-LPC1768'でデバッグ
 できます。
 Resume, Suspendがソースコード表示と共に楽しめます。

4. 最後に
 今回の対応は既存のTOPPERS/ASPのビルドの枠組みを超えない形で行ないました。
 本来であれば、LPCXpresso上のプリビルドやポストビルドを駆使してカーネルに
 対するコンフィギュレーションなどを行うのが筋ですが、先に述べたとおり早めの
 公開を目指して割愛したものです。

 もし、何かシンプルな方法でコンフィギュレータまでを包括的に処理させることが
 できる方法を思いついた場合、是非ご一報頂ければと思います。

