如何定义要在fprintf中使用的UART的多个流

时间:2017-06-13 15:39:19

标签: arm embedded uart

我正在使用ARM(SAM4),它有两个UART,我需要设置流,以便我可以使用fprintf在两者上进行打印。

已经尝试fwopen但没有运气:

FILE * debug; 

debug_writefn(void *cookie, const char *buf, int n);

void comm_init(void) {
  debug = fwopen(NULL, &debug_writefn);
  if (debug == NULL) {
    printf("Error");
  }
  fprintf(debug, "Test");
}

但是,debug_writefn更新。

我正在使用arm-none-eabi-*工具链(我猜它使用newlib),ASF和FreeRTOS。

1 个答案:

答案 0 :(得分:1)

您只需要重新实现newlib的_write()write_r()系统调用,以您需要的任何方式处理流文件句柄的stdout,例如:

enum 
{
    STDIN_HANDLE,
    STDOUT_HANDLE,
    STDERR_HANDLE
} ;

long _write( int fd, const void *buf, size_t cnt )
{
    int ret = EOF ;

    if( fd == STDOUT_HANDLE || fd == STDERR_HANDLE )
    {
        for( int i = 0l i < cnt; i++ )
        {
            serialPutc( UART1, buf[i] ) ;
            serialPutc( UART2, buf[i] ) ;
        }

        ret = i ;
    }

    return ret ;
}