修改代码,使charbuff满的时候摁下PB1才能重新启用while(1) { if (flag) { ReadChar(c); AddToBuff(c); flag = 0; } if (head != tail) { char c = CharBuff[head]; head = (head + 1) % 8; BlinkMorseCode(c); ReadFromBuff(head); SendChar(c); } }
时间: 2024-02-14 21:10:51 浏览: 49
可以修改代码如下:
```
while(1) {
if (flag) {
ReadChar(c);
if (!IsBuffFull() || PB1Pressed()) { // 如果缓冲区没满或者PB1被按下
AddToBuff(c);
flag = 0;
}
}
if (head != tail) {
char c = CharBuff[head];
head = (head + 1) % 8;
BlinkMorseCode(c);
ReadFromBuff(head);
SendChar(c);
}
}
```
其中,`IsBuffFull()`是一个函数,用来判断缓冲区是否已满;`PB1Pressed()`是一个函数,用来判断PB1是否被按下。当缓冲区已满且PB1未被按下时,读取的字符将被丢弃。
相关问题
修改代码使charbuff满时禁用uart,直到摁下P_B1int buffer_is_full(void) { return (tail + 1) % UART_DMA_BUFF_LEN_MAX == head; }
好的,你可以尝试这样修改代码:
1. 在 `buffer_add()` 函数中,添加判断缓冲区是否已满的语句,并在缓冲区已满时禁用UART:
```
void buffer_add(char c) {
if (!buffer_is_full()) {
CharBuff[tail] = c;
tail = (tail + 1) % CHAR_BUFF_LEN_MAX;
}
else {
// Disable UART here
UART_Disable();
}
}
```
2. 在按下 `P_B1` 按钮时,重新启用UART并清空缓冲区:
```
void on_PB1_pressed() {
// Re-enable UART here
UART_Enable();
// Reset buffer
head = tail = 0;
}
```
请注意,这是一种简单的解决方案,实际上它可能需要更多的代码来保证它的正确性,比如在禁用UART前需要停止任何正在进行的传输等。此外,你需要根据你的具体应用场景来确定相应的解决方案。
如何写sendchar才能能够正确地发送一个字符while(1) { if (flag) { char c; ReadChar(c); AddToBuff(c); flag = 0; } if (head != tail) { char c = CharBuff[head]; head = (head + 1) % 8; MorseBlink(c); ReadFromBuff(head); SendChar(R); } }
好的,下面是一个简单的 `SendChar` 函数的例子,可以将一个字符发送到串口中:
```c
void SendChar(char c) {
uart_tx(c);
}
```
其中,`uart_tx` 函数是发送一个字符到串口的函数。你需要根据具体的实现来修改该函数,以确保能够正确地发送一个字符。例如,如果你使用的是 STM32 系列的芯片,你可以使用 HAL 库中的 `HAL_UART_Transmit` 函数来实现该功能。如果你使用的是 AVR 系列的芯片,你可以使用 `USART_Transmit` 函数来实现该功能。
阅读全文