Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 1 of 1

Thread: fdev_setup_stream compilation error with Teensy 3.1

  1. #1
    Junior Member
    Join Date
    Aug 2014
    Posts
    5

    fdev_setup_stream compilation error with Teensy 3.1

    With the following code I get an error. Any suggestions?

    Code:

    #include <stdio.h>
    #include "Arduino.h"

    FILE serial_stdout;

    // Function that printf and related will use to print
    int serial_putchar(char c, FILE* f)
    {
    if (c == '\n') serial_putchar('\r', f);
    return Serial.write(c) == 1? 0 : 1;
    }

    /**
    * DebugMsg Print debug information
    *
    */
    void DebugMsg(const char *fmt, ...)
    {
    va_list ap;

    printf ("%.2X%.2X%.1X%.1X%.2X", 8, 0, MPC_UNIT_ID, MyUnitId, cmd_Debug);
    va_start(ap, fmt);
    vprintf(fmt, ap);
    va_end(ap);
    printf("\n");
    }


    void DebugInit()
    {
    // Setup stdout
    fdev_setup_stream(&serial_stdout, serial_putchar, NULL, _FDEV_SETUP_WRITE);
    stdout = &serial_stdout;
    }

    Error:
    Debug.cpp:In function 'void DebugInit()'
    Debug.cpp:72:58: error: '_FDEV_SETUP_WRITE' was not declared in this scope
    Debug.cpp:72:75: error: 'fdev_setup_stream' was not declared in this scope
    Error compiling

    Solved

    Changed Original code to:
    #include <stdio.h>
    #include <Arduino.h>

    extern "C" {
    __attribute__((weak))
    int _write(int file, char *ptr, int len)
    {
    // STDIN: do nothing
    if (file == 0)
    ;

    // STDOUT/STDERR: Output to Serial
    else if (file == 1 || file == 2)
    Serial.write((uint8_t *)ptr, len);

    // Otherwise assume file is actually a pointer to a Print object and output to that.
    else
    ((class Print *)file)->write((uint8_t *)ptr, len);

    return 0;
    }
    }

    /**
    * DebugMsg Print debug information
    *
    */
    void DebugMsg(const char *fmt, ...)
    {
    va_list ap;

    printf ("%.2X%.2X%.1X%.1X%.2X", 8, 0, MPC_UNIT_ID, MyUnitId, cmd_Debug);
    va_start(ap, fmt);
    vprintf(fmt, ap);
    va_end(ap);
    printf("\n");
    }


    void DebugInit()
    {
    // Setup stdout
    }
    Last edited by almulder; 08-29-2014 at 02:33 PM. Reason: Solved

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •