chprintf()- how to? Topic is solved

ChibiOS public support forum for topics related to the STMicroelectronics STM32 family of micro-controllers.

Moderators: RoccoMarco, barthess

DaRho
Posts: 3
Joined: Sat Feb 24, 2024 11:01 pm
Has thanked: 1 time

chprintf()- how to?

Postby DaRho » Sat Feb 24, 2024 11:20 pm

Hi.

I can't get the chprintf to work. I'm on linux and downloaded ChibiStudio.
Managed to get it working, and compile, upload and debug a RT-STM32L432KC-NUCLEO32 demo, as this is the board I'm currently working on.

Unfortunately, when I added line below to the main thread:

Code: Select all

chprintf((BaseSequentialStream *)&SD2, 'Test: %d', 43); 


...I got error:
"undefined reference to `chprintf'"

I tried adding #include <chprintf.h>, but this got me "fatal error: chprintf.h: No such file or directory"

Then I found this bug: https://sourceforge.net/p/chibios/bugs/567/
Tried adding "$(CHIBIOS)/os/hal/lib/streams/" to INCDIR. This solved the "No such file or directory issue", but the "undefined reference to chprintf" remained.

I'm scratching my head over this for two days now and thought that I'd ask for help here.
I'm probably missing something obvious - I'm noob in embedded OSes. Any guidance would be highly appreciated.

Below is my code before modyfing the Makefile. This one gives "fatal error: chprintf.h: No such file or directory"

Code: Select all

/*
    ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
*/

#include "ch.h"
#include "hal.h"
#include "rt_test_root.h"
#include "oslib_test_root.h"
#include <chprintf.h>

/*
 * Green LED blinker thread, times are in milliseconds.
 */
static THD_WORKING_AREA(waThread1, 128);
static THD_FUNCTION(Thread1, arg) {

  (void)arg;
  chRegSetThreadName("blinker");
  while (true) {
    palClearLine(LINE_LED_GREEN);
    chThdSleepMilliseconds(500);
    palSetLine(LINE_LED_GREEN);
    chThdSleepMilliseconds(500);
    chprintf((BaseSequentialStream *)&SD2, 'Test: %d', 43);
  }
}

/*
 * Application entry point.
 */
int main(void) {

  /*
   * System initializations.
   * - HAL initialization, this also initializes the configured device drivers
   *   and performs the board-specific initializations.
   * - Kernel initialization, the main() function becomes a thread and the
   *   RTOS is active.
   */
  halInit();
  chSysInit();

  /*
   * Activates the serial driver 2 using the driver default configuration.
   */
  sdStart(&SD2, NULL);

  /*
   * Creates the blinker thread.
   */
  chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);

  /*
   * Normal main() thread activity, in this demo it does nothing except
   * sleeping in a loop and check the button state.
   */
  while (true) {
    if (!palReadLine(LINE_ARD_D3)) {
      test_execute((BaseSequentialStream *)&SD2, &rt_test_suite);
      test_execute((BaseSequentialStream *)&SD2, &oslib_test_suite);
    }
    chThdSleepMilliseconds(500);
  }
}



User avatar
RoccoMarco
Posts: 655
Joined: Wed Apr 24, 2013 4:11 pm
Location: Munich (Germany)
Has thanked: 83 times
Been thanked: 67 times
Contact:

Re: chprintf()- how to?

Postby RoccoMarco » Sun Feb 25, 2024 10:01 am

Hello Darho,
I see a couple of problems.
  1. Stings in C need to be wrapped with " and not '
  2. You need to include streams.mk in the makefile

This article, despite being old, should still provide some reference. I am rewriting it right now.
Ciao,
RM

DaRho
Posts: 3
Joined: Sat Feb 24, 2024 11:01 pm
Has thanked: 1 time

Re: chprintf()- how to?

Postby DaRho » Sun Feb 25, 2024 10:52 am

Hi RoccoMarco.

Thank you very much for reply and for the link.
After following your suggestion, it works now.


Is it mentioned somewhere in the reference (https://chibiforge.org/doc/21.11/full_r ... a7466cdabc), that this file needs to be added to Makefile, and I missed it? Or is it something so obvious, that every regular C programmer would know, and it and it's just me who is even lousier at C than I thought? :D

I'm asking for future reference, in case I encounter similar issue again to avoid bothering you here :)

User avatar
RoccoMarco
Posts: 655
Joined: Wed Apr 24, 2013 4:11 pm
Location: Munich (Germany)
Has thanked: 83 times
Been thanked: 67 times
Contact:

Re: chprintf()- how to?  Topic is solved

Postby RoccoMarco » Mon Feb 26, 2024 10:39 am

Hello DaRho,
no, it is not that obvious, and this is why I am writing an article on it (almost there).

I am going to quote a piece of it

"Unlike standard HAL library functions that are included automatically, chprintf must be explicitly integrated into your project. This typically requires adding specific files and configuring the makefile, which helps minimize the compiled code size by including only what is necessary. This approach ensures that if chprintf is not needed, the codebase remains lean without unnecessary additions."
Ciao,
RM

DaRho
Posts: 3
Joined: Sat Feb 24, 2024 11:01 pm
Has thanked: 1 time

Re: chprintf()- how to?

Postby DaRho » Mon Feb 26, 2024 11:30 am

The quote you provided is very clear and will for sure save people like me numerous hours of pulling hair :D

Looking forwards to the updated version.

Thanks for the help!

User avatar
RoccoMarco
Posts: 655
Joined: Wed Apr 24, 2013 4:11 pm
Location: Munich (Germany)
Has thanked: 83 times
Been thanked: 67 times
Contact:

Re: chprintf()- how to?

Postby RoccoMarco » Sat Mar 02, 2024 4:51 pm

Hello DaRho,
I finally published the article.
Formatting Strings with chprintf in ChibiOS
Ciao,
RM


Return to “STM32 Support”

Who is online

Users browsing this forum: No registered users and 13 guests