CDT Build Output Parser Eclipse + SDK 14.1.0 (ble_app_tt_mtu_throughput)


I am currently experimenting with some throughput tests on nRF52832/nRF52840 DKs. Some time ago I worked with some BLE UART examples from SDK 13.0 with the help of Eclipse. Everything worked fine after going through this tutorial. Now I wanted to extend the btt_app_att_mtu_throughput example from SDK 14.1.0 and started by "converting" it to an Eclipse project like before.

  • changed Compiler command pattern under Project Properties -> C/C++ General -> Preprocessor Include Paths -> Providers -> CDT Build Output Parser to (.gcc)|(.[gc]++) and removed tick on Use heuristics to resolve paths
  • replaced ${COMMAND} under CDT ARM Cross GCC Bult-in Compiler Settings with arm-none-eabi-gcc
  • replaced Makefile.common under …/SDK14.1.0/components/toolchain/gcc with the patched one from the tutorial, but removed "/bin/" from toolchain commands ("CC:= '$(GNU_INSTALL_ROOT)$(GNU_PREFIX)-gcc'"), as an error was thrown and changed the calling of "[…]" to "[…]"
  • initiated make clean, make all and rebuilt the index

My build output looks something like this (shortened!):

'/opt/gcc-arm-none-eabi-6-2017-q1-update/bin/arm-none-eabi-gcc' -MP -MD -std=c99 -O3 -g3 -D[…] -mcpu=cortex-m4 -mthumb -mabi=aapcs -Wall -Werror -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffunction-sections -fdata-sections -fno-strict-aliasing -fno-builtin -fshort-enums  -I"<SDK_ROOT/x>"   -I"<SDK_ROOT/y>"-I"<SDK_ROOT/z>"[…]

So, I guess it looks fine. Seems to be the same, like in my other projects, but there are no entries for the include files listed under Project Properties -> C/C++ General -> Preprocessor Include Paths -> Entries -> GNU C, except for the Compiler Settings under the same tab. The output parser is working fine in my other older projects.

Additionally, with the modified makefile.common I am running into a warning at the end of the build process:

/opt/gcc-arm-none-eabi-6-2017-q1-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/bin/ld: warning: cannot find entry symbol Reset_Handler; defaulting to 0000000000023000

I am not very "skilled" in writing Makefiles, so maybe there are some issues with the new file I am missing. So, is there anything I haven't thought of?

Thank you very much!

Regards, Björn

  • Hi,

    Have you considered using Seeger Embedded Studio instead of Eclipse?

    With the release of SDK 14.1, we have added support for Segger Embedded Studio (SES) IDE. You can use Segger Embedded Studio for commercial and non-commercial purpose with Nordic Semiconductor devices free of charge without any code limit. See this article for more information. I would therefore recommend using SES.

    I would also add a quote from RK from this post:

    I wouldn't recommend anyone use Eclipse for embedded development if they have any other choice or unless they are a heavy Eclipse user in general and want to stay on one platform. Given that SES is now free for even commercial Nordic development, the SDK comes with SES projects in it as well as Keil and IAR and GCC so it's fully supported and licensed by Nordic, it was written for embedded development, not just had it tacked on badly as Eclipse did and works natively with Segger, not via the terrible GDBServer interface it's hard to find a good reason not to use it.

    You can download SDK 14.1 here.

    You can download Segger Embedded Studio from here.

  • When starting this project, I took a look at Segger Embedded Studio, but I don't like the user experience so far. I will definitely dig deeper into this IDE. I am sure it is very suitable for embedded software development. I actually didn't liked Eclipse before, but it is mainly used in our research group and I somehow feel some kind of comfortable with it… except for these issues.

  • I did not see any patched makefile.common for SDK 14 in the tutorial. Did you use the one for SDK 13, and just removed the "/bin/" ?

    In previous SDK versions the patched makefile.common just removed quotations() , so that the CDT parser was able to parse the include paths, symbols, etc. Did you try to use the makefile.common that comes with SDK 14? I think most of these quotations was removed in SDK 14.

    Using an IDE that is natively supported by the SDK is recommended, and could save you a lot of time. We have several video tutorials that will show you how to get started with SEGGER Embedded Studio on our Youtube channel.

  • At first, I used the makefile from the tutorial I mentioned before. The string "/bin/" was added to SDK 14.x, because it it expects the GNU_INSTALL_ROOT path in Makefile.posix to be something like $(HOME)/opt/gcc-arm-none-eabi-6-2017-q1-update/bin/ instead of $(HOME)/opt/gcc-arm-none-eabi-6-2017-q1-update. Now, the original Makefile.common is also working.

    Except for small errors (which I switched to warning) Eclipse CDT is now working, too. To be honest, I have no clue why exactly, as I have everything set up like before. The CDT engine seems to be very unreliable. The warnings I am getting now are like Field 'NRF_LOG_INFO("Connected as a central.")' could not be resolved, which indicates, that Eclipse is not able to recognize this preprocessor defined function perfectly, as Open Declaration directly leads to nrf_log.h.

    If I have some updates about this problem, I will try to keep this question updated.