This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Printf() problems with the GNU Compiler

Hi:
I have problems with the printf() function. I have the UART0 initialised, and the putchar() working fine, so I can send characters to the serial. But the printf() only works if I send only 1 character at a time (printf("A")), and if I use printf("Hello") it doesn't work. This happen with the GNU compiler. With the Keil ARM Compiler, everithing works fine.
What could be the problem?
Thanks

Parents
  • Ok.
    When I try putchar('A') it sends the A character. If I try printf("A") it sends the A character too. But if I try printf("ABC"), it doesn't send anything.
    I tried to see what does printf() return:
    int ret;
    ret=printf("Hello");
    putchar(ret+0x30);
    and it sends the number 5 (according the printf() doc's, it must return the number of characters sent), but nothing appears in hyperterminal window.
    Here is my putchar function implementation:
    int putchar(int ch) { /* Write character to Serial
    Port */

    if (ch == '\n') {
    while (!(U0LSR & 0x20));
    U0THR = CR; /* output CR */
    }
    while (!(U0LSR & 0x20));
    return (U0THR = ch);
    }

    Some idea?
    Thanks in Advance

Reply
  • Ok.
    When I try putchar('A') it sends the A character. If I try printf("A") it sends the A character too. But if I try printf("ABC"), it doesn't send anything.
    I tried to see what does printf() return:
    int ret;
    ret=printf("Hello");
    putchar(ret+0x30);
    and it sends the number 5 (according the printf() doc's, it must return the number of characters sent), but nothing appears in hyperterminal window.
    Here is my putchar function implementation:
    int putchar(int ch) { /* Write character to Serial
    Port */

    if (ch == '\n') {
    while (!(U0LSR & 0x20));
    U0THR = CR; /* output CR */
    }
    while (!(U0LSR & 0x20));
    return (U0THR = ch);
    }

    Some idea?
    Thanks in Advance

Children