GPT对话知识库——串口通信的数据的组成?起始位是高电平还是低电平?如何用代码在 FreeRTOS 中实现串口通信吗?如何处理串口通信中的数据帧校验吗?

目录

1,问:

1,答:

串口数据的组成

串口数据传输帧的完整结构

起始位的电平状态:低电平

举例:UART数据传输的例子

适用场景

总结

2,问:

2,答:

a. 如何在 FreeRTOS 中实现串口通信?

步骤概述:

代码示例(STM32 HAL + FreeRTOS)

b. 如何处理串口通信中的数据帧校验?

1. 校验位的类型:

2. 校验位的实现(以 STM32 为例):

3. 通过软件实现自定义校验机制:

总结

3,问:

3,答:

a. 在 FreeRTOS 下如何通过中断处理串口收发数据?

1. 中断处理的基本流程

2. 在 FreeRTOS 中如何结合中断和任务

3. 代码示例:UART 接收中断 + FreeRTOS 消息队列

(1)启用 UART 接收中断

(2)UART 中断服务程序

(3)接收任务:处理队列中的数据

(4)总结中断与任务的结合

b. 如何优化串口通信任务的实时性和效率?

1. 减少任务阻塞时间

2. DMA(直接存储器访问)优化大数据量通信

启用 DMA 传输的示例:

3. 任务优先级调整

4. 优化任务的 CPU 占用


提问模型:GPT-4o-mini Free

提问时间:2024.09.13

1,问:

详细说说串口数据的组成,起始位是高电平还是低电平

1,答:

串口通信(UART, Universal Asynchronous Receiver-Transmitter)的数据传输过程包含多个部分,包括起始位、数据位、校验位和停止位。为了详细解释这些内容,我们将逐步分析串口数据的组成,并解答起始位的电平状态。

串口数据的组成

  1. 空闲状态: 在没有传输数据时,串口通信线(数据线)处于高电平,表示线路空闲状态(也称为逻辑1)。这意味着当串口没有传输数据时,默认状态是高电平。

  2. 起始位: 当开始传输数据时,发送端会发出一个起始位(Start Bit),表示数据传输的开始。

    • 起始位的电平:低电平(逻辑0)
    • 在起始位的期间,信号线会从空闲状态的高电平拉低到低电平,通知接收端数据传输即将开始。
  3. 数据位: 起始位之后就是数据位,用于传输实际的数据。数据位的数量通常是 5到9位,但在大多数常见应用中是 8位

    • 数据位的传输是从 最低有效位(LSB) 开始逐位传送到 最高有效位(MSB)
    • 数据位可以是高电平(逻辑1)或者低电平(逻辑0),这取决于具体传输的数据内容。
  4. 校验位(可选): 这是一种错误检测机制,用于确保数据传输的准确性。如果启用了校验位,传输过程中会附加一个 校验位

    • 校验位可以是奇校验(Odd Parity)或偶校验(Even Parity),用于检查传输的数据位中逻辑1的数量是奇数还是偶数。
    • 如果校验失败,接收端可以检测到数据传输中可能出现的错误。
  5. 停止位: 数据传输完成后,发送端会发送停止位(Stop Bit),表示一帧数据的结束。停止位的长度可以是 1位、1.5位或2位

    • 停止位的电平:高电平(逻辑1)
    • 停止位结束后,信号线回到空闲状态,准备传输下一个字节。

串口数据传输帧的完整结构

典型的串口数据帧格式如下:

[ 起始位 | 数据位 | 校验位 (可选) | 停止位 ]

8位数据位,1位校验位,1位停止位 的串口帧为例:

  • 起始位:1位,低电平(逻辑0)
  • 数据位:8位(可设置为其他位数),数据逐位发送
  • 校验位:1位(可选),用于校验数据的正确性
  • 停止位:1位或更多,表示数据帧的结束,处于高电平

起始位的电平状态:低电平

起始位始终是低电平,这是串口通信中的一个标准。当串口通信线路处于空闲状态时,线路保持高电平。数据传输开始时,发送方通过将电平拉低至逻辑0,通知接收方数据传输即将开始。

举例:UART数据传输的例子

假设使用 9600 波特率,配置为 8-N-1 模式(即 8 数据位、无校验位、1 停止位),并传输字节 0x5A(即 01011010)。

该字节的传输序列如下:

  1. 空闲状态:高电平
  2. 起始位:低电平
  3. 数据位(从LSB开始):传输 01011010
    • LSB = 0 → 低电平
    • 1 → 高电平
    • 0 → 低电平
    • 1 → 高电平
    • 1 → 高电平
    • 0 → 低电平
    • 1 → 高电平
    • MSB = 0 → 低电平
  4. 停止位:高电平
  5. 回到空闲状态:高电平

适用场景

串口通信广泛应用于各种场景中,包括:

  • 嵌入式系统中的调试接口:例如使用 UART 与开发板进行通信、调试程序。
  • 设备间通信:如 GPS 模块、蓝牙模块、传感器等外部设备与主控芯片通过串口通信传输数据。
  • 串口控制:通过串口控制设备,如连接到PLC、工业设备等。

总结

串口通信中的数据传输由起始位、数据位、可选的校验位和停止位组成。起始位总是低电平,停止位则是高电平。串口数据传输适合简单、低速的设备间通信,被广泛应用于嵌入式系统中。

提问模型:GPT-4o-mini Free

提问时间:2024.09.13

2,问:

a. 想知道如何用代码在 FreeRTOS 中实现串口通信吗?
b. 需要进一步了解如何处理串口通信中的数据帧校验吗?

a和b都说说看

2,答:

我们先逐步探讨在 FreeRTOS 中实现串口通信的代码,以及如何处理串口通信中的数据帧校验。

a. 如何在 FreeRTOS 中实现串口通信?

在 FreeRTOS 中,串口通信通常是通过 UART 外设驱动实现的。由于不同的硬件平台和芯片(如 STM32、ESP32、NXP)有各自的 UART 硬件和驱动库,下面以 STM32 平台为例,结合 HAL 库 来介绍如何在 FreeRTOS 中使用串口通信。

步骤概述:
  1. 配置 UART 外设:在 STM32 的 CubeMX 工具中配置 UART 外设(波特率、数据位、校验位、停止位等)。
  2. 创建任务:在 FreeRTOS 中,使用任务或中断服务程序(ISR)进行串口收发操作。
  3. 使用消息队列或信号量:结合 FreeRTOS 的消息队列或信号量机制,可以同步串口收发任务。
代码示例(STM32 HAL + FreeRTOS)

初始化 UART: 使用 HAL 库初始化 UART 外设,配置波特率和其他参数。

// HAL 库初始化 UART 配置(在 main.c 中)
UART_HandleTypeDef huart1;void MX_USART1_UART_Init(void)
{huart1.Instance = USART1;huart1.Init.BaudRate = 9600;huart1.Init.WordLength = UART_WORDLENGTH_8B;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_NONE;huart1.Init.Mode = UART_MODE_TX_RX;huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart1.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart1) != HAL_OK){// 错误处理Error_Handler();}
}

创建 FreeRTOS 任务: 在 FreeRTOS 中创建两个任务:一个用于发送数据,另一个用于接收数据。

// 发送任务
void vUARTSendTask(void *pvParameters)
{const char *message = "Hello from FreeRTOS!\r\n";while (1){HAL_UART_Transmit(&huart1, (uint8_t *)message, strlen(message), HAL_MAX_DELAY); // 发送数据vTaskDelay(pdMS_TO_TICKS(1000));  // 每隔1秒发送一次}
}// 接收任务
void vUARTReceiveTask(void *pvParameters)
{uint8_t rxBuffer[20];while (1){HAL_UART_Receive(&huart1, rxBuffer, sizeof(rxBuffer), HAL_MAX_DELAY);  // 接收数据// 在此处理接收到的数据process_received_data(rxBuffer);}
}

消息队列和信号量的结合: 为了更好地管理串口收发,可以使用 FreeRTOS 消息队列信号量 进行数据的传递和同步。例如,接收数据时,将其放入消息队列以供其他任务处理。

// 定义队列句柄
QueueHandle_t uartQueue;// 创建队列
uartQueue = xQueueCreate(10, sizeof(uint8_t) * 20);// 在接收任务中将数据发送到队列中
void vUARTReceiveTask(void *pvParameters)
{uint8_t rxBuffer[20];while (1){HAL_UART_Receive(&huart1, rxBuffer, sizeof(rxBuffer), HAL_MAX_DELAY);xQueueSend(uartQueue, &rxBuffer, portMAX_DELAY);  // 将接收到的数据放入队列}
}// 在处理任务中从队列中取出数据进行处理
void vDataProcessTask(void *pvParameters)
{uint8_t receivedData[20];while (1){if (xQueueReceive(uartQueue, &receivedData, portMAX_DELAY) == pdPASS){process_received_data(receivedData);  // 处理队列中的数据}}
}

这种架构将串口的接收与处理解耦,使得任务之间的通信更加高效和灵活。

b. 如何处理串口通信中的数据帧校验?

串口通信中的数据帧校验主要是为了检测数据传输过程中可能发生的错误。常见的校验方式有奇校验(Odd Parity)和偶校验(Even Parity)。

1. 校验位的类型:
  • 无校验位:不使用校验位,适合对数据错误容忍度较高的场景。
  • 奇校验(Odd Parity):确保数据帧中的 1 的个数为奇数,如果不是,校验位被置为 1。
  • 偶校验(Even Parity):确保数据帧中的 1 的个数为偶数,如果不是,校验位被置为 1。
2. 校验位的实现(以 STM32 为例):

在配置 UART 外设时,可以启用校验位。通过设置 UART_InitTypeDef 中的 Parity 参数来选择是否使用校验位以及选择哪种校验方式。

// 使用偶校验配置 UART
void MX_USART1_UART_Init(void)
{huart1.Instance = USART1;huart1.Init.BaudRate = 9600;huart1.Init.WordLength = UART_WORDLENGTH_8B;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_EVEN;  // 偶校验huart1.Init.Mode = UART_MODE_TX_RX;huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart1.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart1) != HAL_OK){// 错误处理Error_Handler();}
}
3. 通过软件实现自定义校验机制:

有些场景下,可能需要自定义更复杂的校验机制(如 CRC 校验)。可以在发送数据前,计算校验值并将其附加在数据末尾,接收方在收到数据后进行校验。

// 计算简单的校验和(示例)
uint8_t calculate_checksum(uint8_t *data, size_t length)
{uint8_t checksum = 0;for (size_t i = 0; i < length; i++){checksum ^= data[i];  // XOR 计算}return checksum;
}// 发送带校验的数据
void send_data_with_checksum(uint8_t *data, size_t length)
{uint8_t checksum = calculate_checksum(data, length);HAL_UART_Transmit(&huart1, data, length, HAL_MAX_DELAY);HAL_UART_Transmit(&huart1, &checksum, 1, HAL_MAX_DELAY);  // 发送校验值
}// 接收数据并校验
void receive_data_with_checksum(void)
{uint8_t data[20];uint8_t received_checksum;HAL_UART_Receive(&huart1, data, sizeof(data), HAL_MAX_DELAY);HAL_UART_Receive(&huart1, &received_checksum, 1, HAL_MAX_DELAY);  // 接收校验值uint8_t calculated_checksum = calculate_checksum(data, sizeof(data));if (calculated_checksum == received_checksum){// 校验通过process_received_data(data);}else{// 校验失败handle_checksum_error();}
}

在这里,通过 异或(XOR) 计算简单的校验和。在发送方,先计算出数据的校验值并发送;在接收方,接收到数据后重新计算校验和并对比已发送的校验值。如果匹配,数据被认为是有效的。

总结

  1. 在 FreeRTOS 中实现串口通信:可以使用串口驱动库(如 STM32 HAL 库)结合 FreeRTOS 任务与消息队列,实现可靠的串口数据发送与接收。
  2. 串口通信中的数据帧校验:可以使用 UART 外设的内置校验功能(如奇偶校验),或者自定义软件校验机制(如 XOR 或 CRC)确保数据的完整性和正确性。

提问模型:GPT-4o-mini Free

提问时间:2024.09.13

3,问:

a. 需要进一步了解 FreeRTOS 下如何通过中断处理串口收发数据吗?
b. 想要优化串口通信任务的实时性和效率吗?

再细说说a和b

3,答:

接下来我们更深入探讨 如何在 FreeRTOS 下通过中断处理串口数据收发 以及 如何优化串口通信任务的实时性和效率

a. 在 FreeRTOS 下如何通过中断处理串口收发数据?

使用中断(ISR, Interrupt Service Routine)来处理串口收发可以提高系统的实时性,避免任务阻塞过久,特别是在高数据速率或频繁收发数据的场景中。通过中断处理,可以立即响应串口事件,而不是轮询串口的状态。

1. 中断处理的基本流程
  • 发送数据时:当需要发送数据时,通常是在没有数据发送的时候触发一次中断,之后每发送一个字节再触发一次中断,直到整个数据发送完成。
  • 接收数据时:每当接收到一个字节的数据,中断会被触发,将数据保存在缓冲区或消息队列中,等待任务处理。
2. 在 FreeRTOS 中如何结合中断和任务

在 FreeRTOS 中使用中断服务程序(ISR)时,注意以下几点:

  • FreeRTOS 的 ISR API:在中断中操作 FreeRTOS 的队列或信号量时,需要使用特殊的 ISR 版本函数,如 xQueueSendFromISR()xSemaphoreGiveFromISR()
  • 任务通知机制:使用 FreeRTOS 提供的 任务通知机制,可以在中断中通知任务去处理数据,避免频繁切换上下文。
3. 代码示例:UART 接收中断 + FreeRTOS 消息队列

STM32 HAL 库 为例,以下代码展示如何通过 UART 中断接收数据并使用 FreeRTOS 消息队列传递给处理任务。

(1)启用 UART 接收中断

在初始化 UART 时,启用接收中断模式。

// 初始化 UART 并启用接收中断
void MX_USART1_UART_Init(void)
{huart1.Instance = USART1;huart1.Init.BaudRate = 9600;huart1.Init.WordLength = UART_WORDLENGTH_8B;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_NONE;huart1.Init.Mode = UART_MODE_TX_RX;huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart1.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart1) != HAL_OK){// 错误处理Error_Handler();}// 启用接收中断HAL_UART_Receive_IT(&huart1, rxBuffer, 1);  // 以中断方式接收1字节
}
(2)UART 中断服务程序

每当接收到一个字节的数据,UART 中断会被触发。这里通过 HAL_UART_RxCpltCallback() 来处理接收到的数据,并将其放入 FreeRTOS 消息队列中。

// 声明消息队列
QueueHandle_t uartQueue;// 中断服务回调函数,处理接收到的字节
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{BaseType_t xHigherPriorityTaskWoken = pdFALSE;if (huart->Instance == USART1){// 将接收到的字节放入队列xQueueSendFromISR(uartQueue, &rxBuffer, &xHigherPriorityTaskWoken);// 继续接收下一个字节HAL_UART_Receive_IT(huart, rxBuffer, 1);}// 如果需要,切换到更高优先级的任务portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}
(3)接收任务:处理队列中的数据

接收任务从消息队列中读取数据并进行处理。此任务通过中断触发的队列接收数据,避免了轮询。

// 任务:从队列中接收数据并处理
void vUARTReceiveTask(void *pvParameters)
{uint8_t receivedByte;while (1){// 从队列中读取数据,等待时间为 portMAX_DELAY(阻塞等待)if (xQueueReceive(uartQueue, &receivedByte, portMAX_DELAY) == pdPASS){// 处理接收到的数据process_received_data(receivedByte);}}
}
(4)总结中断与任务的结合

通过启用 UART 中断,当每个字节到达时,会触发中断并将数据放入 FreeRTOS 消息队列。任务只需要从队列中读取数据即可,避免了对 UART 状态的轮询,从而提高了系统的响应性和实时性。

b. 如何优化串口通信任务的实时性和效率?

在 FreeRTOS 系统中,串口通信任务的实时性和效率优化可以从以下几个方面入手:

1. 减少任务阻塞时间

在任务中接收串口数据时,如果直接使用 HAL_UART_Receive(),任务可能会阻塞,尤其是在长时间没有数据到来的情况下。这会影响其他任务的运行。为了避免任务阻塞太久,可以使用以下两种方式:

  • 中断驱动方式:正如上文所述,使用中断处理串口收发可以减少任务阻塞,确保数据到来时立即处理。
  • 设置合理的超时时间:在调用串口收发函数时,使用一个合理的超时时间,避免无限期阻塞。
HAL_UART_Receive(&huart1, rxBuffer, sizeof(rxBuffer), 100);  // 100ms超时
2. DMA(直接存储器访问)优化大数据量通信

对于大量数据的串口通信,启用 DMA(Direct Memory Access) 可以极大地提升效率。DMA 可以在后台将数据直接传输到存储器,无需 CPU 参与,大大减轻了 CPU 的负担。

启用 DMA 传输的示例:
// 初始化 UART 并启用 DMA 传输
void MX_USART1_UART_Init(void)
{huart1.Instance = USART1;huart1.Init.BaudRate = 9600;huart1.Init.WordLength = UART_WORDLENGTH_8B;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_NONE;huart1.Init.Mode = UART_MODE_TX_RX;huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart1.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart1) != HAL_OK){// 错误处理Error_Handler();}// 启用 DMA 接收HAL_UART_Receive_DMA(&huart1, dma_rx_buffer, BUFFER_SIZE);
}

通过 DMA 方式,数据接收不需要等待,而是后台自动接收,接收完成后会触发中断或信号,任务可以根据数据量和应用需求及时处理数据。

3. 任务优先级调整

为了保证串口通信的实时性,可以根据应用场景调整串口通信任务的优先级:

  • 如果串口通信任务对实时性要求较高,考虑将它的优先级设置为高优先级,使其优先响应。
  • 如果数据处理任务要求耗时较多,可以将其分解为多个较小的任务,减少每次执行时间,以提高响应性。
// 创建任务时调整优先级
xTaskCreate(vUARTReceiveTask, "UART Receive Task", 128, NULL, tskIDLE_PRIORITY + 2, NULL);  // 高优先级
xTaskCreate(vDataProcessTask, "Data Process Task", 256, NULL, tskIDLE_PRIORITY + 1, NULL);  // 较低优先级
4. 优化任务的 CPU 占用

串口通信任务应避免占用太多 CPU 资源。常见的优化策略包括:

  • 使用消息队列:避免串口任务不断轮询接收数据,改为中断方式将数据放入消息队列中,任务仅在有数据时处理。
  • 使用任务通知机制:FreeRTOS 提供的任务通知机制比消息队列更加轻量,适用于简单的事件通知场景。
// 在中断中使用任务通知机制代替队列
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{BaseType_t xHigherPriorityTaskWoken = pdFALSE;if (huart->Instance == USART1){// 直接通知任务vTaskNotifyGiveFromISR(receiveTaskHandle, &xHigherPriorityTaskWoken);// 继续接收HAL_UART_Receive_IT(huart, rxBuffer, 1);}portYIELD_FROM

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/425282.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法刷题[比较两个字符串的最大公字符串(滑动窗口实现)]

题目&#xff1a;编程实现&#xff1a;找出两个字符串中最大公共子字符串,如"abccade","dgcadde"的最大子串为"cad" 代码如下所示&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #inclu…

C语言实现贪吃蛇小游戏

✅博客主页:爆打维c-CSDN博客​​​​​​ &#x1f43e; &#x1f539;分享c语言知识及代码 &#x1f43e; 目录 游戏展示视频 一、项目准备工作 二、功能实现分析 1.游戏开始 a.设置本地化、创建窗口、标题 b.隐藏光标,封装定位光标的函数 c.打印欢迎界面及提示信息 …

网盘隐私照片泄露?教你如何保护自己的隐私照片!

网盘内的隐私照片 好兄弟最近遇到了一个困难&#xff1a;“我之前一直都是把照片存在网盘里面的&#xff0c;但是最近听说了某网盘的照片泄露了&#xff0c;自己的生活照啊&#xff0c;私密照啊都被人看光了&#xff0c;这太可怕了&#xff01;我现在也很担心自己的网盘上照片…

2021高教社杯全国大学生数学建模竞赛C题 Python代码演示

目录 问题一1.1 根据附件 1&#xff0c;对 402 家供应商的供货特征进行量化分析计算供货特征数据标准化对正向指标归一化对负向指标归一化 1.2 建立反映保障企业生产重要性的数学模型熵权法熵权法-TOPSISAHP 1.3 在此基础上确定 50 家最重要的供应商&#xff0c;并在论文中列表…

钢轨缺陷检测-目标检测数据集(包括VOC格式、YOLO格式)

钢轨缺陷检测-目标检测数据集&#xff08;包括VOC格式、YOLO格式&#xff09; 数据集&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1h7Dc0MiiRgtd7524cBUOFQ?pwdfr9y 提取码&#xff1a;fr9y 数据集信息介绍&#xff1a; 共有 1493 张图像和一一对应的标注文件 标…

Neo4j入门案例:三星堆

创建一个关于三星堆的知识图谱可以是一个非常有趣的项目&#xff0c;它可以帮助理解如何使用Neo4j来存储和查询复杂的关系数据。三星堆文化以其独特的青铜器、金器和其他文物而闻名&#xff0c;这为我们提供了一个丰富的历史背景来构建知识图谱。 数据模型定义 实体类型&#…

RTMP直播播放器的几种选择

如何选择RTMP播放器&#xff1f; 在选择RTMP播放器时&#xff0c;需要综合考虑多个因素&#xff0c;以确保选择的播放器能够满足实际需求并提供良好的用户体验。以下是一些选择RTMP播放器的建议&#xff1a; 1. 功能需求 低延迟&#xff1a;对于直播场景&#xff0c;低延迟是…

解读 Java 经典巨著《Effective Java》90条编程法则,第5条:优先考虑依赖注入来引用资源

【前言】欢迎订阅【解读《Effective Java》】系列专栏 《Effective Java》是 Java 开发领域的经典著作&#xff0c;作者 Joshua Bloch 以丰富的经验和深入的知识&#xff0c;全面探讨了 Java 编程中的最佳实践。这本书被公认为 Java 开发者的必读经典&#xff0c;对提升编码技…

STM32巡回研讨会总结(2024)

前言 本次ST公司可以说是推出了7大方面&#xff0c;几乎可以说是覆盖到了目前生活中的方方面面&#xff0c;下面总结下我的感受。无线类 支持多种调制模式&#xff08;LoRa、(G)FSK、(G)MSK 和 BPSK&#xff09;满足工业和消费物联网 (IoT) 中各种低功耗广域网 (LPWAN) 无线应…

MelosBoom:解锁数据价值的新纪元

在当今的数字时代&#xff0c;数据被誉为“新的石油”&#xff0c;但用户在传统的Web2环境中&#xff0c;往往无法真正享受到自己贡献数据的价值。大型互联网公司通过集中化的系统和算法&#xff0c;垄断了数据的使用权&#xff0c;并从中获取巨大的商业利益&#xff0c;而数据…

计算机三级网络技术总结(一)

RPR环中每一个节点都执行SRP公平算法IEEE 802.11a和g将传输速率提高到54Mbps一个BGP发言人与其他自治系统中的BGP发言人要交换路由信息就要先建立TCP连接在一个区域内的路由器数一般不超过200个进入接口配置模式&#xff1a;Router(config)#interface <接口名> 封装ppp协…

Qt 实现自定义截图工具

目录 Qt 实现自定义截图工具实现效果图PrintScreen 类介绍PrintScreen 类的主要特性 逐步实现第一步&#xff1a;类定义第二步&#xff1a;初始化截图窗口第三步&#xff1a;处理鼠标事件第四步&#xff1a;计算截图区域第五步&#xff1a;捕获和保存图像 完整代码PrintScreen.…

WLAN实验简述

一&#xff1a;配置生产AP1上级接入层交换机LSW3 sys [Huawei]sysname LSW3 [LSW3]undo info-center enable [LSW3]vlan batch 10 100 [LSW3]int g0/0/2 [LSW3-GigabitEthernet0/0/2]port link-type trunk [LSW3-GigabitEthernet0/0/2]port trunk allow-pass vlan 10 100 [LSW…

Java企业面试题3

1. break和continue的作用(智*图) break&#xff1a;用于完全退出一个循环&#xff08;如 for, while&#xff09;或一个 switch 语句。当在循环体内遇到 break 语句时&#xff0c;程序会立即跳出当前循环体&#xff0c;继续执行循环之后的代码。continue&#xff1a;用于跳过…

STM32 的 CAN 通讯全攻略

目录 一、CAN 通讯概述 二、 CAN 通讯原理 1.ISO11898 标准下的物理层特征 2.CAN 协议的帧类型 3. 总线仲裁介绍 4.位时序 5.STM32 CAN 控制器简介 6.标识符筛选器 三、软件设计 1.发送流程 1.1初始化 CAN 控制器 1.2准备发送数据 1.3 将数据填充到发送缓冲区 1.4…

Vue.js入门系列(二十九):深入理解编程式路由导航、路由组件缓存与路由守卫

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

pikachu下

CSRF(跨站请求伪造) CSRF(get) url变成了这样了&#xff0c;我们就可以新开个页面直接拿url去修改密码 http://pikachu-master/vul/csrf/csrfget/csrf_get_login.php?username1&password2&submitLogin CSRF(post&#xff09; 这里只是请求的方式不同&#xff0c;…

简洁明了!中缀表达式转为后缀表达式规则及代码

简单来说&#xff0c;就是弄两个栈&#xff0c;判断执行&#xff1a; 上代码&#xff1a; #include<iostream> #include<stack> #include<cstring> using namespace std; stack<char>s1,s2; char now; int main(){string c;cin>>c;for(int i0;…

Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解

目录 一、Linux软件包管理器 - yum&#xff08;ubuntu用apt代替yum&#xff09;1、Linux下安装软件的方式2、认识 yum3、查找软件包4、安装软件5、如何实现本地机器和云服务器之间的文件互传 二、Linux编辑器 - vim1、vim 的基本概念2、vim 下各模式的切换3、vim 命令模式各命令…

形式向好、成本较低、可拓展性较高的名厨亮灶开源了

简介 AI视频监控平台, 是一款功能强大且简单易用的实时算法视频监控系统。愿景在最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;减少企业级应用约 95%的开发成本&#xff0c;在强大视频算法加…