Loading...
 

Zephyr project on STM32

   Zephyr Workbench, a VSCode extension to manage Zephyr on STM32.
It enables users to easily create, develop, and debug Zephyr applications.
Main features:
  • Install host dependencies.
  • Import toolchain and SDK.
  • Create, configure, build and manage apps.
  • Debug STM32.
You can directly download it from the VSCode marketplace
For more details, visit the Zephyr Workbench

System Workbench for STM32


"printf("line: %d \n", __LINE__);" does not work on System Workbench

I add some”printf(“line: %d \n”, LINE);” in the example code. The code works fine on the STM32F469I-Disco, but I can’t find any information output in the console of System Workbench. Is there something I need to do? Or this is not how it works?

I guess that you never have printf works before on the board, do you?

If you wish your printf shows on you debug console, that means you need setting to enable your semihosting on your code, your build settings and your debugger settings.



Thank you! Now I can see printf works, but.....

When I “Run” the code, the discovery board just die as there is no error information.
When I “Debug” the code, it can run well for a while and I can see the printf information. However, I will see the following information after a while...

No source available for “_swiwrite() at 0x8000516”

Semihosting is on.
Error: jtag status contains invalid mode value - communication failure
Warn : target STM32F469.cpu is not halted
Polling target STM32F469.cpu failed, trying to reexamine
Examination failed, GDB will be halted. Polling again in 100ms
Info : Previous state query failed, trying to reconnect
Polling target STM32F469.cpu failed, trying to reexamine
Info : STM32F469.cpu: hardware has 6 breakpoints, 4 watchpoints

Any comments will be appreciated.


OK. It looks that you need to learn how to search around to find information you need.
Basically the ARM semihosting need to have the debugger semihosting channel connected, or the firmware will hanging. The best practice to deal this issue is to wrap your printf with a compiler option for debugging, and undefine this compiler option while build for release/Run.
I’m using my spare time to do the research to try to find a better way to deal this issue, aka. detect the status of debugger’s semihosting channel connection, and then to send the data over or drop them. The progress is quite slow and I don’t think I can make it soon.


I’ve tried using semihosting in the past and ran into similar problems - crashes the target if no debugger is connected, along with the fact that I/O blocks and is SLOW.

My personal preference is to use a free USART channel for debug I/O. The trick in doing this is that you need a decent USART I/O library (preferably one that supports nonblocking, buffered operation) and need to know how to create and set up (at a minimum) the _read() and _write() functions that will redirect stdin/stdout/stderr output to the USART.



 

Newest Forum Posts

  1. Монтаж камина с грилем в Москве - установка и барбекю by KpddomErorb, 2025-05-10 18:28
  2. SPI on Nucleo_STMH533RE by royjamil, 2025-05-04 20:13
  3. SPI on Nucleo_STMH533RE by higginsa1, 2025-03-25 07:37
  4. SPI on Nucleo_STMH533RE by royjamil, 2025-03-23 11:31
  5. SPI on Nucleo_STMH533RE by higginsa1, 2025-03-23 09:33
  6. Configuring DMA for ADC in SW? by sam.hodgson, 2025-03-04 12:58
  7. Build a project in "release" mode by info@creosrl.it, 2025-02-20 18:12
  8. Build a project in "release" mode by info@creosrl.it, 2025-02-20 17:05
  9. Build a project in "release" mode by tang, 2025-02-20 10:36
  10. Build a project in "release" mode by info@creosrl.it, 2025-02-19 17:35

Last-Modified Blogs