TI中文支持网
TI专业的中文技术问题搜集分享网站

关于CC1310底层串口接收缓存区溢出

/* UART objects */
UARTCC26XX_Object uartCC26XXObjects[CC1310DK_5XD_UARTCOUNT];
unsigned char uartCC26XXRingBuffer[CC1310DK_5XD_UARTCOUNT][1024];

/* UART hardware parameter structure, also used to assign UART pins */
const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1310DK_5XD_UARTCOUNT] = {
{
.baseAddr = UART0_BASE,
.powerMngrId = PowerCC26XX_PERIPH_UART0,
.intNum = INT_UART0_COMB,
.intPriority = ~0,
.swiPriority = 0,
.txPin = UART_TX,
.rxPin = UART_RX,
.ctsPin = PIN_UNASSIGNED,
.rtsPin = PIN_UNASSIGNED,
.ringBufPtr = uartCC26XXRingBuffer[0],
.ringBufSize = sizeof(uartCC26XXRingBuffer[0])
}
};

1. 以上代码中,数组uartCC26XXRingBuffer是否就是串口的接收缓存区?

2. 如果是的话,假设芯片一次接收的数据长度大于缓存区的大小,是否会造成死机?如果不会,底层是如何处理长度大于缓存区大小的数据的?

Viki Shi:

1、勘误,ring buffer解释如下

The RingBuf serves as an extension of the FIFO. If data is received when UART_read() is not called, data will be stored in the RingBuf. The functionality of the RingBuf has been tested with a size of 32. This size can be changed to suit the application.

2、请问你需要发送多大的数据?此值可以改大

user5360734:

回复 Viki Shi:

 目前的使用场景是,CC1310芯片与另一个芯片A直连,且设备处于供电状态。在烧录芯片A的程序时,A芯片的端口会出现电平变换,导致CC1310的串口会收到不定长度的数据。如果这个数据的长度大于底层的缓存区大小,是否就死机或者出现其他异常,导致芯片无法工作?

Viki Shi:

回复 user5360734:

ring buffer是覆盖式的,不会溢出

user5360734:

回复 Viki Shi:

也就是说,底层是使用类似循环队列的方式进行串口数据接收的是吗?

Viki Shi:

回复 user5360734:

是的,ring buffer就相当于circular buffer

赞(0)
未经允许不得转载:TI中文支持网 » 关于CC1310底层串口接收缓存区溢出
分享到: 更多 (0)