使用变参函数实现STM32串口接收指定字符的功能

来源:本站
导读:目前正在解读《使用变参函数实现STM32串口接收指定字符的功能》的相关信息,《使用变参函数实现STM32串口接收指定字符的功能》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《使用变参函数实现STM32串口接收指定字符的功能》的详细说明。
简介:串口经常需要接收指定范围的字符。比如程序运行到某处,提供给用户‘A’、‘B’、‘C’、‘D’四个选项,等待用户输入。

串口经常需要接收指定范围的字符。比如程序运行到某处,提供给用户‘A’、‘B’、‘C’、‘D’四个选项,等待用户输入。如果输入是‘A’、‘B’、‘C’、‘D’的其中一个,则跳转;否则继续等待。

这个功能可以使用if判断语句来实现,它的优点是直观简单,缺点是代码有重复。如果程序中有十次这样的等待输入,就得编写十次if判断语句。

所以,这里使用变参函数将这个功能整合成一个模块。

// 定义在变参函数中,需要调用的显示函数,里面放置打印给用户的提示信息等等

// 函数类型需要符合变参函数中的uart_func

// USART_TypeDef用来选择串口号

// 第一个struct uartData用来存储串口接收中断的数据和标志位

// 第二个struct uartData是第一个的缓存,避免数据和标志位在处理的时候被串口接收中断更新

int uxah_dis(USART_TypeDef* USARTx, struct uartData *uartxData, struct uartData *uartxMain)

{

usart_printf(USARTx, "rnplease enter your choice: ");

return sFALSE;

}

// uart_func func是调用的显示函数,便于重复打印提示信息

// char *byte用来存储最终的有效字符

// int num是可用的字符数量,如果变参为‘A’、‘B’、‘C’、‘D,则num=4

int UART_wait_char(USART_TypeDef* USARTx, struct uartData *uartxData,

struct uartData *uartxMain, uart_func func, char *byte, int num, ...)

{

char *p = (char *)&num + sizeof(int);

uint32_t i = 0;

START:

func(USARTx, uartxData, uartxMain);

for (i = 0; i < num; i++) {

usart_send_byte(USARTx, *((char *)(p + i * sizeof(int))));

if (i != num - 1)

usart_printf(USARTx, "/");

}

usart_printf(USARTx, " ");

uartxData->recIrq = sFALSE;

while (1) {

if (uartxData->recIrq >= sTRUE) {

uartxMain->recTempH = uartxData->recTempH;

uartxData->recIrq = sFALSE;

usart_send_byte(USARTx, uartxMain->recTempH);

for (i = 0; i < num; i++) {

if (uartxMain->recTempH == *((char *)(p + i * sizeof(int)))) {

*byte = uartxMain->recTempH;

return sTRUE;

}

}

goto START;

}

}

return sFALSE;

}

当执行:

UART_wait_char(USART1, uart1Data, uart1Main, uxah_dis, &temp, 4, 'A', 'B', 'C', 'D');

时,会打印:

please enter your choice: A/B/C/D w

please enter your choice: A/B/C/D q

please enter your choice: A/B/C/D A

如果接收到'A', 'B', 'C', 'D'其中一个,则继续执行后面的程序,否则重复打印上面的内容。

当执行:

UART_wait_char(USART1, uart1Data, uart1Main, uxah_dis, &temp, 2, 'Y', 'N');

时,会打印

please enter your choice: Y/N Q

please enter your choice: Y/N N

如果接收到'Y', 'N'其中一个,则继续执行后面的程序,否则重复打印上面的内容。

变参函数,在形参的数量和内容不确定的情况下,能够简化分支判断语句,使代码干净整洁

提醒:《使用变参函数实现STM32串口接收指定字符的功能》最后刷新时间 2024-03-14 01:11:25,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《使用变参函数实现STM32串口接收指定字符的功能》该内容的真实性请自行鉴别。