オフライン環境(MDK-ARM)で分割ビルドを行う

MDK-ARMにexportしたプロジェクトを使用して、分割ビルドを行う方法を簡単にまとめてみます。

サンプルコードは、以下のファイルです。 /media/uploads/MACRUM/flash_test.zip

以下のような手順でプロジェクトファイルの作成を行いました。

  1. オンライン環境で、新規プロジェクトを作成(LPC1768用)
  2. MDK-ARM (uVision) にexport
  3. 新規ターゲットを追加(Manage component)し、ターゲット名を "flash_data" に設定
  4. ターゲットを "flash_data" に切り替え
  5. ターゲット設定 C/C++ の "Define:" を全て削除し、__FLASH_DATA__ を追加
  6. ターゲット設定 C/C++ の "Include Paths" を全て削除
  7. ターゲット設定 Linker の "Scatter File" を変更(後述)
  8. ターゲット設定 Linker の "Misc Controls" を全て削除し、--diag_suppress=6305 を追加
  9. 任意のアドレス上にデータを配置するコードを追加(後述)
  10. ビルドしてエラーがない事を確認し、メニュー [Flash] - [Download] で書き込み

スキャッターファイルの例

LR_IROM1 0x20000 0x20000+0x8000  {
  ER_IROM1 0x20000 0x20000+0x8000  {
   .ANY (+RO)
  }
}


#if defined(__FLASH_DATA__)
const unsigned char in_flash_data[32768]  __attribute__((at(0x20000))) = "Hello, mbed.\n";
#else

#include "mbed.h"

#define in_flash_data ((volatile unsigned char *)(0x20000L))

DigitalOut myled(LED1);

int main() {
	printf("string = %s\n", in_flash_data);
    while(1) {
        myled = 1;
        wait(0.2);
        myled = 0;
        wait(0.2);
    }
}
#endif



これで、"flash_data" ターゲット使用して任意のアドレスに特定のデータを書き込むことが出来ます。 そのデータを参照したコードを使う場合は、ターゲットを "mbed NXP LPC1768" に変更して、デバッグなどを行う事が出来ます。

以上です。


Please log in to post comments.