Unable to compile BBC micro:bit project using MBed Platform


#1

I’m trying to create a “Hello World” project for BBC micro:bit, using MBed platform. Reference the following on MBed page:
https://os.mbed.com/teams/microbit/code/microbit-hello-world/file/0041f35b0c4c/main.cpp/

System is Windows 10 64 bit.

I select New Project on the Home page, and select Board BBC micro:bit and Platform MBed. Using just the blank default code, when I try to build, I get the following:

Executing task: platformio.exe run <

[12/27/17 16:55:52] Processing bbcmicrobit (platform: nordicnrf51; board: bbcmicrobit; framework: mbed)

Verbose mode can be enabled via -v, --verbose option
AttributeError: ‘PlatformIOLibBuilder’ object has no attribute ‘get_inc_dirs’:
File “C:\Users\frank.platformio\penv\lib\site-packages\platformio\builder\main.py”, line 158:
env.SConscript("$BUILD_SCRIPT")
File “C:\Users\frank.platformio\packages\tool-scons\script…\engine\SCons\Script\SConscript.py”, line 541:
return _SConscript(self.fs, *files, **subst_kw)
File “C:\Users\frank.platformio\packages\tool-scons\script…\engine\SCons\Script\SConscript.py”, line 250:
exec file in call_stack[-1].globals
File “C:\Users\frank.platformio\platforms\nordicnrf51\builder\main.py”, line 128:
target_elf = env.BuildProgram()
File “C:\Users\frank.platformio\packages\tool-scons\script…\engine\SCons\Environment.py”, line 224:
return self.method(*nargs, **kwargs)
File “C:\Users\frank.platformio\penv\lib\site-packages\platformio\builder\tools\platformio.py”, line 76:
env.Append(LIBS=env.BuildProjectLibraries())
File “C:\Users\frank.platformio\packages\tool-scons\script…\engine\SCons\Environment.py”, line 224:
return self.method(*nargs, **kwargs)
File “C:\Users\frank.platformio\penv\lib\site-packages\platformio\builder\tools\piolib.py”, line 785:
lib_builders = env.GetLibBuilders()
File “C:\Users\frank.platformio\packages\tool-scons\script…\engine\SCons\Environment.py”, line 224:
return self.method(*nargs, **kwargs)
File “C:\Users\frank.platformio\penv\lib\site-packages\platformio\builder\tools\piolib.py”, line 757:
env, join(libs_dir, item), verbose=verbose)
File “C:\Users\frank.platformio\penv\lib\site-packages\platformio\builder\tools\piolib.py”, line 51:
env, path, verbose=verbose)
File “C:\Users\frank.platformio\penv\lib\site-packages\platformio\builder\tools\piolib.py”, line 111:
self.process_extra_options()
File “C:\Users\frank.platformio\penv\lib\site-packages\platformio\builder\tools\piolib.py”, line 259:
“pio_lib_builder”: self
File “C:\Users\frank.platformio\packages\tool-scons\script…\engine\SCons\Script\SConscript.py”, line 541:
return _SConscript(self.fs, *files, **subst_kw)
File “C:\Users\frank.platformio\packages\tool-scons\script…\engine\SCons\Script\SConscript.py”, line 250:
exec file in call_stack[-1].globals
File “C:\Users\frank.platformio\lib\nrf51-sdk\platformio_extra.py”, line 4:
pio_lib_builder.env.Prepend(CPPPATH=pio_lib_builder.get_inc_dirs())
========================================================================================= [ERROR] Took 1.79 seconds =========================================================================================
The terminal process terminated with exit code: 1

I did have to install the tool chain manually (C:\Users\frank.platformio\packages\framework-mbed@4.50701.0). Because when it tried to download the tool chain, it produced a short progress bar and then quickly said that download had failed and it automatically tried other mirrors with the same result. I have had that problem with almost every package it has tried to install. For the other systems I worked with, I was able to get around that problem by downloading and manually un-compressing the files, as was discussed in another thread on this board. Not sure if that is related to the problem I am having here. I am able to build regular MBED (LPC1768), Arduino, and Arduino DUE despite having to do the manual downloading workaround.

Am I doing something incorrectly here?

Thanks,
Frank


#2

See http://docs.platformio.org/en/latest/ide/vscode.html#packagemanager-is-unable-to-install-tool

Thanks! Fixed in https://github.com/palfrey/nrf51-sdk/pull/1


#3

Thanks Ivan, for the quick response to my issue!

Glad to have the work-around of running PlatformIO commands in a regular command window when downloads fail. That is much easier than locating the files in question and downloading and extracting them manually. I have added .platformIO\penv\scripts to my Windows path. So if I have the issue again in the future, I will just open up a Windows command window in the project folder and run the command manually. I believe this problem only affects Windows 10 users, and in fact it may have been caused by a recent Windows 10 upgrade. I don’t see the error discussed here until relatively recently, and everyone reporting it (that I saw) is running Windows 10. The Microsoft Creator’s Update I received during the fall broke several things for me, so I’m thinking it may have broken Visual Studio Code as well.

I ran PIO update, and was able to get this to run successfully from a Windows command prompt. Quite a few updates came down, but I am still having the issue with AttributeError. It looks like your updates have not been merged into the main source code yet. If there is a way I can tell PlatformIO to get your pull version let me know and I will test now. Otherwise, I will wait until the fix is merged in and then will report back.

Frank


#4

I see that PR has not been merged yet. You can patch own version following https://github.com/palfrey/nrf51-sdk/pull/1/files

Check .piolibdeps folder in a project.


#5

After manually patching the code, I am able to compile. However, I still note several issues.

I get a bunch of compile warnings. Some of them look serious. Here are some examples; there are many pages full of similar errors:
Compiling .pioenvs\bbcmicrobit\lib229\nrf51-sdk\source\nordic_sdk\components\ble\peer_manager\peer_data_storage.o
C:\Users\frank.platformio\lib\nrf51-sdk\source\nordic_sdk\components\ble\device_manager\device_manager_peripheral.c: In function ‘address_to_device_id’:
C:\Users\frank.platformio\lib\nrf51-sdk\source\nordic_sdk\components\ble\device_manager\device_manager_peripheral.c:2546:12: warning: implicit declaration of function ‘im_address_resolve’ [-Wimplicit-function-declaration]
iif(im_address_resolve(p_addr, &m_peer_table[peer_iterator].peer_id.id_info))
^~~~~~~~~~~~~~~~~~
Compiling .pioenvs\bbcmicrobit\lib229\nrf51-sdk\source\nordic_sdk\components\libraries\fstorage\fstorage_nosd.o
C:\Users\frank.platformio\lib\nrf51-sdk\source\nordic_sdk\components\libraries\fds\fds.c: In function ‘address_within_page_bounds’:
C:\Users\frank.platformio\lib\nrf51-sdk\source\nordic_sdk\components\libraries\fds\fds.c:161:29: warning: passing argument 1 of ‘is_word_aligned’ discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
((is_word_aligned(p_addr));
Compiling .pioenvs\bbcmicrobit\lib1d5\microbit-dal_ID360\source\core\MicroBitListener.o
C:\Users\frank.platformio\lib\microbit-dal_ID360\source\core\MicroBitFiber.cpp: In function ‘void scheduler_init(EventModel&)’:
C:\Users\frank.platformio\lib\microbit-dal_ID360\source\core\MicroBitFiber.cpp:189:5: warning: this ‘if’ clause does not guard… [-Wmisleading-indentation]
if (fiber_scheduler_running())
^~
CC:\Users\frank.platformio\lib\microbit-dal_ID360\source\core\MicroBitFiber.cpp:194:2: note: …this statement, but the latter is misleadingly indented as if it is guarded by the 'if’
messageBus = &_messageBus;
^~~~~~~~~~
C:\Users\frank.platformio\lib\microbit-dal_ID360\source\core\MicroBitFiber.cpp: In function ‘int fiber_wait_for_event(uint16_t, uint16_t)’:
C:\Users\frank.platformio\lib\microbit-dal_ID360\source\core\MicroBitFiber.cpp:388:5: warning: this ‘if’ clause does not guard… [-Wmisleading-indentation]
if(ret == MICROBIT_OK)
^~
C:\Users\frank.platformio\lib\microbit-dal_ID360\source\core\MicroBitFiber.cpp:391:2: note: …this statement, but the latter is misleadingly indented as if it is guarded by the 'if’
return ret;
^~~~~~

After successful compilation, I plug in my the micro:bit and attempt to upload using the PlatformIO:Upload selection of the Tasks menu. This results in the following error:
Configuring upload protocol…
Available: cmsis-dap
Selected: cmsis-dap
Looking for upload disk…
Auto-detected: COM18
Uploading .pioenvs\bbcmicrobit\firmware.hex
*** [upload] COM18\firmware.hex: No such file or directory

I manually located the firmware.hex file in C:\Users\frank\Documents\PlatformIO\Projects\180125-165619-bbcmicrobit.pioenvs\bbcmicrobit, and copied it to the Microbit drive. At that point, something does scroll on the LEDs. However, it is not the expected message. It is a random-appearing selection of flashing LEDs. I noted that no LEDs in the bottom row ever light. I thought maybe my board had become defective, but when I create a scrollling message using the microbit online tools and upload it works fine.

Let me know if you want me to do any more tests.

Thanks,
Frank


#6

this issue was fixed in the latest PIO Core. Please run pio upgrade --dev.