ARCH_PRINTF()问题

了解更多常见问题解答教程

2个帖子/ 0新
最后一篇
kevinchen_sz.
离线
最后一次露面:2天6小时前
加入:2017-12-06 09:24
ARCH_PRINTF()问题

我正在使用UART1作为日志记录输出。

由于RAM大小,我必须配置以使用UART1(ROM)。

这是UART1的配置:

// UART配置结构
static const uart_cfg_t uart_cfg = {
//设置波特率
.baud_rate = uart_baudrate_115200,
//设置数据位
.data_bits = uart_databits_8,
//设置奇偶校验
.parity = uart_parity_none,
//设置停止位
.stop_bits = uart_stopbits_1,
//设置流量控制
.auto_flow_control = uart_afce_dis,
//设置FIFO启用
.use_fifo = uart_fifo_en,
//设置TX FIFO触发级别
.tx_fifo_tr_lvl = uart_tx_fifo_level_0,
//设置RX FIFO触发级别
.rx_fifo_tr_lvl = uart_rx_fifo_level_0,
//设置中断优先级
.intr_priority = 2,
#if定义(cfg_uart_dma_support)
//设置UART DMA通道对配置
.uart_dma_channel = uart_dma_channel_01,
//设置UART DMA优先级
.uart_dma_priority = dma_prio_0,
#万一
};

DMA未启用。

当我使用ARCH_PRINTF():

如果最终输出char <= 17,则运行良好。

如果最终输出char> 17,它可以只输出17个ascii char,然后不再发出打印。

我认为它可能与UART的FIFO大小(16)有关,但我看不到ROM代码并分析这个问题。

请帮忙。

设备:
lc_dialog.
离线
最后一次露面:3天9小时前
员工
加入:2016-09-19 23:20
嗨kevinchen_sz,

嗨kevinchen_sz,

ROM代码是一个封闭的源,无法查看。你对FIFO大小是正确的。

由于我们无法修改ROM​​代码,因此您可以实现包装功能以实现日志的所需长度。

您还可以实现自定义例程并绕过ROM中的UART1函数,但这需要更新跳转表并处理寄存器配置。除非绝对必要,否则不推荐。

说过,API本身不会使用大量的RAM空间。您是否使用了任何其他接口的UART2。

如果没有,我会首先尝试使用UART2模块,看看这真的是否使用了RAM。

最好,
lc_dialog.