Some issues with the MbedOS6 and Mbed tools

Hello,

I tried latest version of MbedStudio IDE (1.0.0) today and I import one of MbedOS6’s example mbed-os-example-blinky-baremetal. At the end of compilation the result is

Link: mbed-os-example-blinky-baremetal
[Warning] @0,0: L3912W: Option 'legacyalign' is deprecated.
[Error] @0,0: L6218E: Undefined symbol Image$$ARM_LIB_HEAP$$ZI$$Base (referred from BUILD/NUCLEO_L432KC/ARMC6/mbed-os/rtos/source/TARGET_CORTEX/TOOLCHAIN_ARM_STD/mbed_boot_arm_std.o).
[Error] @0,0: L6218E: Undefined symbol Image$$ARM_LIB_HEAP$$ZI$$Limit (referred from c:\Users\User\AppData\Local\Mbed Studio\mbed-studio-tools\ac6\bin\..\lib\armlib\mc_w.l(malloc2.o)).
[Error] @0,0: L6218E: Undefined symbol Image$$ARM_LIB_HEAP$$ZI$$Length (referred from BUILD/NUCLEO_L432KC/ARMC6/mbed-os/rtos/source/TARGET_CORTEX/TOOLCHAIN_ARM_STD/mbed_boot_arm_std.o).
Warning: L3912W: Option 'legacyalign' is deprecated.
Error: L6218E: Undefined symbol Image$$ARM_LIB_HEAP$$ZI$$Base (referred from BUILD/NUCLEO_L432KC/ARMC6/mbed-os/rtos/source/TARGET_CORTEX/TOOLCHAIN_ARM_STD/mbed_boot_arm_std.o).
Error: L6218E: Undefined symbol Image$$ARM_LIB_HEAP$$ZI$$Limit (referred from c:\Users\User\AppData\Local\Mbed Studio\mbed-studio-tools\ac6\bin\..\lib\armlib\mc_w.l(malloc2.o)).
Error: L6218E: Undefined symbol Image$$ARM_LIB_HEAP$$ZI$$Length (referred from BUILD/NUCLEO_L432KC/ARMC6/mbed-os/rtos/source/TARGET_CORTEX/TOOLCHAIN_ARM_STD/mbed_boot_arm_std.o).
Finished: 0 information, 1 warning and 3 error messages.
[ERROR] Warning: L3912W: Option 'legacyalign' is deprecated.
Error: L6218E: Undefined symbol Image$$ARM_LIB_HEAP$$ZI$$Base (referred from BUILD/NUCLEO_L432KC/ARMC6/mbed-os/rtos/source/TARGET_CORTEX/TOOLCHAIN_ARM_STD/mbed_boot_arm_std.o).
Error: L6218E: Undefined symbol Image$$ARM_LIB_HEAP$$ZI$$Limit (referred from c:\Users\User\AppData\Local\Mbed Studio\mbed-studio-tools\ac6\bin\..\lib\armlib\mc_w.l(malloc2.o)).
Error: L6218E: Undefined symbol Image$$ARM_LIB_HEAP$$ZI$$Length (referred from BUILD/NUCLEO_L432KC/ARMC6/mbed-os/rtos/source/TARGET_CORTEX/TOOLCHAIN_ARM_STD/mbed_boot_arm_std.o).
Finished: 0 information, 1 warning and 3 error messages.

The Mbed Studio IDE and also its tools are fully updated .

Details:

  • MbedStudio IDE and Mbed Studio Online (Commit: 165be79392ae7b1bee4388d2bc8ed8281978f07c) :
    ** Error occurred on target Nucleo-L432KC also when I delete the mbed_app.json
    ** Error occurred on target Nucleo-F446RE but when I delete the mbed_app.json, then the compilation is OK
    ** On the target Nucleo-F767ZI no Issue
    The Mbed Studio show the MbedOS library is up to date.

  • Online Compiler (MbedOS revision 165be79392) :
    ** EError occurred on target Nucleo-L432KC but when I delete the mbed_app.json, then the compilation is OK
    ** Target Nucleo-F446RE but when I delete the mbed_app.json, then the compilation is OK
    ** Target Nucleo-F767ZI No Issue
    The Online Compiler show the MbedOS library is NOT up to date.

  • Online Compiler (MbedOS revision 8b0956030a) :
    ** Target Nucleo-L432KC No Issue
    ** Target Nucleo-F446RE No Issue
    ** Target Nucleo-F767ZI No Issue
    The Online Compiler show the MbedOS library is up to date.
    However with this revision also occurs another issue what is descripted in this topic BufferedSerial doesn’t compile with Online Compiler.

The issue seems to be related to some (@jeromecoutant ) ST’s boards. I also tried to compile for LPC1768 and K66F, no Issue (I’m not counting a problem with BufferedSerial that is probably global).

Hello @arekzaluski,
It is normal, the Mbed Studio IDE/Online use different “latest” version of MbedOS library? Because how you can see, it makes differences in outputs.

BR, Jan

Hello Jan,

Thankyou for taking the time to study the problem.

I imported the example you mentioned, this compiled OK.

I copy -paste example from BufferedSerial API, this too compiled OK!

The mbed os version is 7683.

I now update the mbed-os to ver 7687. It now does not compile.

Is this the problem??

Can you raise an issue with the developers.

Regards,

Pramod

Hi Jan, Pramod,

  1. Yes, I can reproduce this issue. mbed-os-example-blinky-baremetal example doesn’t compile successfully with ARMC6 for every target for Mbed OS 6. I’ll let the Mbed OS team know about it. Thank you for reporting it.
  2. Online Compiler and Mbed Studio Online are using the same online build system. It doesn’t yet support compilations of Mbed OS 6 programs. That is why you see issues in online IDEs. I know that the build team is working on it and it will be enabled very soon.
  3. We haven’t yet deployed the latest changes on Mbed Studio Online so it is possible that the definition of the latest between the desktop version of Mbed Studio and browser is different. In Mbed Studio desktop latest means the last tagged release of Mbed OS.

Thanks,
Arek - Mbed Studio team

hi Jan, Pramod,

Apologies for the issue you’re seeing.
We’re in the process of enabling more targets to work with the bare-metal profile. The following PRs related to ST targets need to be merged for the upcoming release: #13001 #13091 and #13095

We’ve just added a filter to help to understand which boards are supported with the bare-metal profile.
See Development boards | Mbed
This should correspond to targets.json - look for “bare-metal”

Kind regards,
Marcelo

We’re tracking the status of baremetal support and pending work here:

Hello Jan,

Thankyou for taking thebtime for such a detailed study.

Yes the Buffered Serial does not work for the latest revision, but it does for the one previous to it.

Thankyou for pointing it out, hope the mbed developers will take up this issue.

Regards

Pramod

Hello Jan,
Thank you for taking the time for such detailed analysis.
Yes, the BufferedSerial does not compile in Cloud compiler for LPC1768 for the latest version.
It however, compiles for the previous update.
Hope the mbed developers take note of it.
Regards,
Pramod

Hi all,
first, thank to all for that fast response.

@pramodjoglekar

  • About the Bare metal blinky - yes, because LPC1768 is OK how Marcelo show to us in his list.
  • About the BufferedSerial - yes, it depends on version of Mbed what you use. The 7683 (165be79392) is OK.
  • Just for info the same situation is for the UnbufferedSerial.

@arekzaluski

  • I misspelled my question, sorry. I had in mind “It is normal, the Mbed Studio IDE/Online use different “latest” version of MbedOS library than Online compiler?”
    But now it is more clear to me I think, thank you.
  • The last thing about the Un/BufferedSerial, because it is available only in the revision 165be79392. That is caused by what you mentioned (your point 2) or it is different issue?

@MarceloSalazar
Thank you for your explanation, it is good to know that and also thank you for the list.
Maybe If it were included in the blog post instead of just quietly added the option to the filters on the page, it was clearer.

Thanks for the support
BR, Jan

I just had a problem when trying to flash a nRF52832 board with the baremetal blinky problem (using mbed OS 6.3), which was resolved when switching to the non baremetal blinky program. This post had been used to find the solution.

Now, I’ve just checked the nRF52832 target configuration, and I note that it is missing this option to prevent “bare-metal” from being used (assuming it works). So, should this not be included?

    "supported_application_profiles": [
        "full"
    ]

bare-metal is a configuration option, it prevents rtos stuff from being included. So when it is not set, you are using the default which is rtos. I don’t what "supported_application_profiles" is for, but I have never used it for any rtos/bare-metal config.

@JojoS: If you go to the targets folder inside the mbed os folder there is a file “targets.json” which includes that config option.

Now I actually did not check before posting as assumed otherwise but I’ve just noticed that the “Target” or base configuration (as found at the start of the targets.json file) already includes just the “full” option. Many other boards would include both (as in “bare-metal” and “full”).

So as the nRF52832 target config does not change this attribute, I was wondering what exactly does it do, as the errors returned from the compile/flash attend gave me no clue that the bare-metal option could not be used.

ok, I think I understand. The post from Marcelo should answer it, the supported_application_profiles
is used to mark which targets are tested to work with bare-metal. It cannot just be switched in targets.json or mbed_app.json, there is more work necessary to enable bare-metal on these targets. But for NRF_DK, which inherits from MCU_NRF52832, it depends on the compiler. For GCC its marked green, for ARM its red.

1 Like