Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
9 years, 10 months ago.
mbed LPC1114のコードをLPCXpressoでBuildするとエラー
mbed LPC1114のLチカなどすべてのコードをLPCXpressoにExportしたものが、LPCXpressoではBuild時にエラーになってしまい、原因がわからず困っていますので、お力をお願いします。
LPCXpressoはLinux版でv7.7.2[Build 379]の最新のものをダウンロードしアクティベーションも行いました。 LPCXpressoのサンプルからLPC1114のCMSIS2-blikyなどをBuildしてエラーのないことを確認しました。
次にmbedのオンラインで作成したBlinkyをLPCXpresso用にExportしました。 この際、オンラインではコードを全くいじらずデフォルトのコードを使用し、mbedでコンパイルなど問題ないことを確認しました。念の為以下コードです。
LPC1114_Blinky_default
#include "mbed.h" DigitalOut myled(LED1); int main() { while(1) { myled = 1; wait(0.2); myled = 0; wait(0.2); } }
こちらをLPCXpressoにインポートしてBuildするとConsoleは以下のように出力されました。リンカのエラーでしょうか?
Quote:
Build of configuration Debug for project TestLPC1114
make -r all
Building file: ../main.cpp
Invoking: MCU C++ Compiler
arm-none-eabi-c++ -D_ _NEWLIB_ _ -D_ _CODE_RED -DCPP_USE_HEAP -DTARGET_LPC1114 -DTARGET_M0 -DTARGET_CORTEX_M -DTARGET_NXP -DTARGET_LPC11XX_11CXX -DTARGET_LPC11XX -DTOOLCHAIN_GCC_CR -DTOOLCHAIN_GCC -D_ _CORTEX_M0 -DARM_MATH_CM0 -DMBED_BUILD_TIMESTAMP=1429518052.72 -D_ _MBED_ _=1 -I"/home/takuya/LPCXpresso/workspace/TestLPC1114" -I"/home/takuya/LPCXpresso/workspace/TestLPC1114/mbed" -I"/home/takuya/LPCXpresso/workspace/TestLPC1114/mbed/TARGET_LPC1114" -I"/home/takuya/LPCXpresso/workspace/TestLPC1114/mbed/TARGET_LPC1114/TARGET_NXP" -I"/home/takuya/LPCXpresso/workspace/TestLPC1114/mbed/TARGET_LPC1114/TARGET_NXP/TARGET_LPC11XX_11CXX" -I"/home/takuya/LPCXpresso/workspace/TestLPC1114/mbed/TARGET_LPC1114/TARGET_NXP/TARGET_LPC11XX_11CXX/TARGET_LPC11XX" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -mcpu=cortex-m0 -mthumb -D_ _NEWLIB_ _ -MMD -MP -MF"main.d" -MT"main.o" -MT"main.d" -o "main.o" "../main.cpp"
Finished building: ../main.cpp
Building target: TestLPC1114.axf
Invoking: MCU C++ Linker
arm-none-eabi-c++ -nostdlib -L"/home/takuya/LPCXpresso/workspace/TestLPC1114" -L"/home/takuya/LPCXpresso/workspace/TestLPC1114/mbed" -L"/home/takuya/LPCXpresso/workspace/TestLPC1114/mbed/TARGET_LPC1114" -L"/home/takuya/LPCXpresso/workspace/TestLPC1114/mbed/TARGET_LPC1114/TARGET_NXP" -L"/home/takuya/LPCXpresso/workspace/TestLPC1114/mbed/TARGET_LPC1114/TARGET_NXP/TARGET_LPC11XX_11CXX" -L"/home/takuya/LPCXpresso/workspace/TestLPC1114/mbed/TARGET_LPC1114/TARGET_NXP/TARGET_LPC11XX_11CXX/TARGET_LPC11XX" -Xlinker -Map="TestLPC1114.map" -Xlinker ーーgc-sections -mcpu=cortex-m0 -mthumb -T "" -o "TestLPC1114.axf" ./main.o
/usr/local/lpcxpresso_7.7.2_379/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: read in flex scanner failed
makefile:44: ターゲット 'TestLPC1114.axf' のレシピで失敗しました
collect2: error: ld returned 1 exit status
make: * [TestLPC1114.axf] エラー 1
Build Finished (took 110ms)
コードが悪いかと別なコードを同様にコンパイルやExportしました 例えば以下のようなコードです。
LPC1114_Serial
#include "mbed.h" Serial pc(USBTX, USBRX); // tx, rx int main() { while(1) { static int i=0; i++; pc.printf("Hello World!%d\r\n",i); wait(1); } }
ですが、こちらも同様にldのエラーでBuild不能です。
次にターゲットを変えてみました。LPC1549をターゲットにしたmbedのコードをExportしてBuildしてみたところ、こちらは全く問題ありませんでした。 試したものは以下のコードです。
LPC1549_Blinky
#include "mbed.h" DigitalOut myled1(LED1); DigitalOut myled2(LED2); DigitalOut myled3(LED3); DigitalIn button(P1_9, PullUp); int main() { for(;;){ while(button) { myled1 = 1; wait(0.2); myled2 = 1; wait(0.2); myled3 = 1; wait(0.2); myled1 = 0; wait(0.2); myled2 = 0; wait(0.2); myled3 = 0; wait(0.2); } wait(1); } }
このことから、mbed LPC1114をターゲットなコードはうまくExportできていないではないか?と思ったのですが、これ以上は自分の力で解決できませんでした。 よろしくお願いいたします。
1 Answer
9 years, 10 months ago.
福田さん、こんにちは。
調べてみたところ、ご指摘の様に LPC1114FN28 プラットフォーム用の LPCXpress exporter に不具合があり、オンラインのビルドシステムでは、LPCXpresso 用のバイナリが生成されていないのが原因でした。 リンクエラーメッセージの直接の原因は、バイナリ生成時にビルドディレクトリにコピーされるべき .ld ファイルがコピーされていませんでした。
この不具合は昨晩、ysuboi さんによって修正され、mbed の GitHub レポジトリにプルリクエストが出されました。 https://github.com/mbedmicro/mbed/pull/1057
これがマージされた後、次回の mbed ライブラリのリリースで修正されますので、大変お手数ですがもうしばらくお待ち下さい。
それまでの間は、(既に解決されているようですが)mbed-src を使用するか、または、以下の .zip ファイル(ビルド済みバイナリと .ld ファイルを含みます)を export したディレクトリ配下にコピーして下さい。
Binary files for LPC1114FN28 (GCC_CR build)
+ user_program + mbed + TARGET_LPC1114 + TOOLCHAIN_GCC_CR
以上、宜しくお願いします。
自己解決ではありませんが、なんとなく原因らしきものがわかりましたので追記します。 mbedのオンラインコンパイラからLPC1114をターゲットにしたプロジェクトをLPCXpressoへのToolChainを選択してExportする際に、mbedのToolChainが含まれていませんでした。 具体的には [ProjectName]/mbed/TARGET_LPC1149/ 内に本来あると思われるTOOLCHAIN_GCC_CRがありません。
LPC1549をターゲットにしたProjectをExportすると問題なく、このフォルダとlibmbed.aやスタートアップのオブジェクトなどが含まれています。 また別なToolChain(Keil uVision4など)を選択してExportした場合も含まれていました。
ですので、LPC1114をターゲットにしたmbedのprojectをLPCXpressoをToolChianとしてExportした時だけに発生する問題なのではと思います。
解決としては、結局mbedのソースをすべて含んだProjectとしてExportしたものを利用すればBuildできました。 しかし、ここでも一つ問題があり、libc_s.aとlibstdc++_s.aが存在しないというエラーがBuild時に発生しました。 これは以前からある問題で一度解決されているようですが、LPCWareのフォーラムに同様の問題が指摘されていました。 http://www.lpcware.com/content/forum/newlib-nano-libraries-missing-lpcxpresso-76 フォーラムの記述によればv7.6.2で解決されているようですが、v7.7.2で再度発生しているか、もしくはLinux版は訂正されていないのでしょうか? 私の場合*_nano.aのファイルをそれぞれ*_s.aのファイルとしてSymbolicLinkを作成して対応しました。
自分の健忘録も含めてNOTEにしたいと思います。
posted by Takuya Fukuda 21 Apr 2015