我正在使用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。
答案 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 ;
}