Skip to content

ARM Semihosting #3516

Closed
Closed
@Crazor

Description

@Crazor
  • Feature Request.

Configuration

Operating system: all platforms

PlatformIO Version (platformio --version): 4.3.3

Description of problem

Let's talk about semihosting support in PlatformIO! Semihosting is originally an ARM feature that allows code running on the target to issue IO requests to the host it is being debugged by. Semihosting is most widely used for sending printf's to the host's GDB console via the debug probe. Recently, non-ARM platforms started implementing semihosting as well, e.g. OpenOCD has support for semihosting on ESP32, too.

Most embedded devs are used to using a UART (or USB CDC) to print messages to a serial terminal for debugging, while features like PlatformIOs Unified Debugger make it very easy to use much more powerful debugging features on a plethora of platforms. Wouldn't it be great to get printf-style debugging without using any additional hardware ressources, as well?

With some hacks (like in platformio/platform-ststm32#272), it is possible today to display semihosting output in the IDE, however the integration could be better. Right now, it seems that the output from OpenOCD is not fed through GDB to the debug console, but discarded. Other projects (e.g. GNU MCU Eclipse) have this figured out, I can easily see printf output in the debug console there. This would be awesome for PlatformIO as well!

Another great use case IMHO would be unit testing. It is trivial to implement a custom transport that outputs unity's results via the semihosting mechanism. However, PlatformIO would have to be made aware of this transport and run GDB for testing and parse it's output (once the issue in the previous paragraph is solved). As a side effect, running tests through GDB would allow easy debugging of unit tests as well!

I've already looked through the debugging and test implementation of platformio-core, but I'm not at all familiar with the project structure and inner working. I'm willing to contribute code, but would need a little mentoring, tbh
stm32cube-hal-semihosting.zip
.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions