From a53aa38ed38a981bea9a35df99e660b9fcb0b354 Mon Sep 17 00:00:00 2001 From: wangbeihong Date: Thu, 2 Apr 2026 01:52:28 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=8D=8F=E8=AE=AE?= =?UTF-8?q?=E5=A4=84=E7=90=86=E5=92=8C=E6=A0=A1=E9=AA=8C=E5=92=8C=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=9B=B4=E6=96=B0=20UART?= =?UTF-8?q?=20=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 2 + Core/Bsp/bsp_uart.c | 52 +++---- Core/Bsp/checksum.c | 24 ++++ Core/Bsp/checksum.h | 17 +++ Core/Bsp/protocol.c | 126 +++++++++++++++++ Core/Bsp/protocol.h | 16 +++ Core/Src/freertos.c | 56 ++++++-- README.md | 130 ++++++++++++++++++ f103_car.ioc | 5 +- image-6.png | Bin 0 -> 62999 bytes .../esp_12f/TCPUDPDbg/config/lastsend.data | 2 +- 11 files changed, 390 insertions(+), 40 deletions(-) create mode 100644 Core/Bsp/checksum.c create mode 100644 Core/Bsp/checksum.h create mode 100644 Core/Bsp/protocol.c create mode 100644 Core/Bsp/protocol.h create mode 100644 image-6.png diff --git a/CMakeLists.txt b/CMakeLists.txt index bcfc9f2..5f20010 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,6 +51,8 @@ target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/Core/Bsp/easylogger/src/elog.c ${CMAKE_CURRENT_SOURCE_DIR}/Core/Bsp/easylogger/src/elog_utils.c ${CMAKE_CURRENT_SOURCE_DIR}/Core/Bsp/easylogger/port/elog_port.c + ${CMAKE_CURRENT_SOURCE_DIR}/Core/Bsp/checksum.c + ${CMAKE_CURRENT_SOURCE_DIR}/Core/Bsp/protocol.c ) # Add include paths diff --git a/Core/Bsp/bsp_uart.c b/Core/Bsp/bsp_uart.c index 73d65eb..b3ab987 100644 --- a/Core/Bsp/bsp_uart.c +++ b/Core/Bsp/bsp_uart.c @@ -1,5 +1,9 @@ #include "bsp_uart.h" +#include "checksum.h" #include "elog.h" +#include "protocol.h" +#include +#include /** * @brief 使用 UART1 和 DMA 发送数据到 ESP12F 模块(用于 TCP 透传) @@ -7,28 +11,27 @@ * @return HAL_StatusTypeDef: HAL_OK 表示成功,其他值表示失败 */ HAL_StatusTypeDef ESP12F_TCP_SendMessage(const char *data) { - if (data == NULL) { - return HAL_ERROR; // 参数无效 - } + if (data == NULL) { + return HAL_ERROR; // 参数无效 + } - // 计算数据大小 - uint16_t size = strlen(data); - if (size == 0) { - return HAL_ERROR; // 数据为空 - } + // 计算数据大小 + uint16_t size = strlen(data); + if (size == 0) { + return HAL_ERROR; // 数据为空 + } - // 启动 DMA 传输 - return HAL_UART_Transmit_DMA(&huart1, (uint8_t *)data, size); + // 启动 DMA 传输 + return HAL_UART_Transmit_DMA(&huart1, (uint8_t *)data, size); } - /* External DMA handle */ extern DMA_HandleTypeDef hdma_usart1_rx; /* DMA 接收缓冲区及状态变量 */ -uint8_t uart1_rx_buf[UART1_RX_BUF_SIZE]; -volatile uint16_t uart1_rx_len = 0; /* 记录最近一次接收到的数据包长度 */ -volatile uint8_t uart1_rx_flag = 0; /* 接收完成标志位:1表示有一帧新数据 */ +uint8_t uart1_rx_buf[UART1_RX_BUF_SIZE]; +volatile uint16_t uart1_rx_len = 0; /* 记录最近一次接收到的数据包长度 */ +volatile uint8_t uart1_rx_flag = 0; /* 接收完成标志位:1表示有一帧新数据 */ /** * @brief 初始化 UART1 并启动 DMA 接收 @@ -38,14 +41,13 @@ volatile uint8_t uart1_rx_flag = 0; /* 接收完成标志位:1表示 * @return 无 * @note 需要在调用此函数前确保 UART1 和 DMA 已经正确初始化 */ -void BSP_UART1_Init(void) -{ +void BSP_UART1_Init(void) { /* 停止并重置 DMA 状态 */ - HAL_UART_DMAStop(&huart1); + HAL_UART_DMAStop(&huart1); uart1_rx_len = 0; uart1_rx_flag = 0; memset(uart1_rx_buf, 0, sizeof(uart1_rx_buf)); - + /* 启动 DMA 接收,将接收到的数据存储到 uart1_rx_buf 缓冲区 */ HAL_UART_Receive_DMA(&huart1, uart1_rx_buf, UART1_RX_BUF_SIZE); @@ -66,7 +68,7 @@ void UART_IDLE_Callback(UART_HandleTypeDef *huart) { /* 清除空闲中断标志位(HAL库宏) */ __HAL_UART_CLEAR_IDLEFLAG(huart); - + /* 停止 DMA 以便安全读取计数器并更新状态 */ HAL_UART_DMAStop(huart); @@ -75,13 +77,13 @@ void UART_IDLE_Callback(UART_HandleTypeDef *huart) { if (recv_len > 0 && recv_len < UART1_RX_BUF_SIZE) { uart1_rx_len = recv_len; - uart1_rx_buf[recv_len] = '\0'; /* 添加字符串结束符,方便后续字符串处理 */ - uart1_rx_flag = 1; /* 置位标志,通知应用层新消息到达 */ - - /* 仅供调试:在中断中打印接收到的数据(注意:printf 可能会影响实时性) */ - elog_raw("UART1 Received: %s\r\n", (char *)uart1_rx_buf); + uart1_rx_buf[recv_len] = '\0'; /* 添加字符串结束符,方便后续字符串处理 */ + uart1_rx_flag = 1; /* 置位标志,通知应用层新消息到达 */ + + // 调用协议处理函数,通过消息队列发送接收到的数据 + Protocol_HandleMessage(uart1_rx_buf, recv_len); } /* 重新启动新一轮的 DMA 接收 */ HAL_UART_Receive_DMA(&huart1, uart1_rx_buf, UART1_RX_BUF_SIZE); -} \ No newline at end of file +} \ No newline at end of file diff --git a/Core/Bsp/checksum.c b/Core/Bsp/checksum.c new file mode 100644 index 0000000..333d7ff --- /dev/null +++ b/Core/Bsp/checksum.c @@ -0,0 +1,24 @@ +#include + +/** + * @brief 计算校验和 + * @param buf: 数据缓冲区指针 (即你的 uart1_rx_buf) + * @param start_pos: 校验数据的起始下标 (通常跳过帧头 "LOGI:") + * @param length: 需要校验的数据长度 (不包含校验位本身和帧尾) + * @return uint8_t: 计算得出的校验和 + * + * 算法说明: 将所有字节相加,取低8位 (相当于 % 256) + */ +uint8_t Calculate_CheckSum(uint8_t *buf, uint16_t start_pos, uint16_t length) +{ + uint32_t sum = 0; // 使用32位防止累加溢出,虽然uint8累加也不会溢出单片机寄存器 + uint16_t i; + + for (i = 0; i < length; i++) + { + sum += buf[start_pos + i]; + } + + // 返回低8位,相当于 sum % 256 + return (uint8_t)(sum & 0xFF); +} \ No newline at end of file diff --git a/Core/Bsp/checksum.h b/Core/Bsp/checksum.h new file mode 100644 index 0000000..f6ee6e6 --- /dev/null +++ b/Core/Bsp/checksum.h @@ -0,0 +1,17 @@ +#ifndef CHECKSUM_H +#define CHECKSUM_H + +#include + +/** + * @brief 计算校验和 + * @param buf: 数据缓冲区指针 (即你的 uart1_rx_buf) + * @param start_pos: 校验数据的起始下标 (通常跳过帧头 "LOGI:") + * @param length: 需要校验的数据长度 (不包含校验位本身和帧尾) + * @return uint8_t: 计算得出的校验和 + * + * 算法说明: 将所有字节相加,取低8位 (相当于 % 256) + */ +uint8_t Calculate_CheckSum(uint8_t *buf, uint16_t start_pos, uint16_t length); + +#endif // CHECKSUM_H \ No newline at end of file diff --git a/Core/Bsp/protocol.c b/Core/Bsp/protocol.c new file mode 100644 index 0000000..5c44509 --- /dev/null +++ b/Core/Bsp/protocol.c @@ -0,0 +1,126 @@ +/** + * @file protocol.c + * @brief 协议处理函数实现 + * @details 该文件包含了协议解析和处理的相关函数,主要用于处理从 ESP12F + * 模块接收到的数据。 + * @author Beihong Wang + * @date 2026-04-01 + */ + +#include "protocol.h" +#include "bsp_uart.h" +#include "checksum.h" +#include "cmsis_os.h" +#include "elog.h" +#include +#include + + +/* 定义日志 TAG */ +#define Protocol_TAG "Protocol" + +/* 引用在 freertos.c 中定义的消息队列句柄 */ +extern osMessageQueueId_t CmdQueueHandle; +/** + * @brief 协议处理函数 + * @details 严格按照协议文档:校验范围 = 帧头 + 命令 + 数据 + * 即从下标 0 开始,一直加到最后一个冒号之前 + */ +void Protocol_HandleMessage(uint8_t *data, uint16_t len) { + if (data == NULL) + return; + + // 1. 基础检查:长度必须足够,且必须以 '#' 结尾 + if (len < 10 || data[len - 1] != '#') { + elog_w(Protocol_TAG, "协议错误:长度不足或帧尾错误 (len: %d)", len); + return; + } + + // 2. 寻找校验位前的分隔符 + // 协议格式:LOGI:CMD:DATA:CS# + // 我们需要找到最后一个冒号 ':' 的位置,它前面是数据,后面是校验位 + int last_colon_pos = -1; + for (int i = 0; i < len; i++) { + if (data[i] == ':') { + last_colon_pos = i; + } + } + + // 如果找不到冒号,说明格式错误 + if (last_colon_pos == -1 || last_colon_pos < 5) { + elog_w(Protocol_TAG, "协议错误:找不到分隔符 ':' 或位置非法"); + return; + } + + // 3. 提取接收到的校验位 (从 ASCII 转为 Hex 数值) + // 校验位紧跟在 last_colon_pos 之后,长度为 2 字节 + char recv_cs_hex_str[3] = {0}; + // 防止越界 + if (last_colon_pos + 3 >= len) { + elog_w(Protocol_TAG, "协议错误:校验位数据越界"); + return; + } + + recv_cs_hex_str[0] = data[last_colon_pos + 1]; + recv_cs_hex_str[1] = data[last_colon_pos + 2]; + + unsigned int received_checksum = 0; + sscanf(recv_cs_hex_str, "%02X", &received_checksum); + + // 4. 计算本地校验和 + // 【核心修改点】 + // 严格按照协议文档:从下标 0 开始,长度为 last_colon_pos + // 也就是计算 "LOGI:SP:080" 的累加和 + uint8_t calculated_checksum = + Calculate_CheckSum(data, 0, (uint16_t)last_colon_pos); + + // 5. 对比校验和 + if (calculated_checksum == (uint8_t)received_checksum) { + elog_i(Protocol_TAG, "✅ 校验通过!执行指令: %s", (char *)data); + + /* 提取有效载荷发送到消息队列 */ + char cmd_payload[16] = {0}; + // 将 "LOGI:" 之后到最后一个冒号之前的内容作为指令 + uint16_t payload_len = last_colon_pos - 5; + uint16_t copy_len = (payload_len > 15) ? 15 : payload_len; + if (copy_len > 0) { + memcpy(cmd_payload, &data[5], copy_len); + } + + osStatus_t status = osMessageQueuePut(CmdQueueHandle, cmd_payload, 0, 0); + if (status != osOK) { + elog_e(Protocol_TAG, "Protocol: Queue put failed: %d", status); + } + } else { + elog_w(Protocol_TAG, "❌ 校验失败!计算值: 0x%02X, 接收值: 0x%02X", + calculated_checksum, (uint8_t)received_checksum); + + // 辅助调试:打印实际参与计算的数据段 + char debug_buf[32] = {0}; + if (last_colon_pos < 32) { + memcpy(debug_buf, data, last_colon_pos); + elog_i(Protocol_TAG, " -> 单片机正在计算这段数据的校验和: [%s]", + debug_buf); + elog_i(Protocol_TAG, " -> 请检查上位机是否也是按照此范围计算累加和"); + } + } +} + +#define CarCtrlTask_TAG "CarCtrlTask" + +void CarCtrl_Task(void *argument) { + /* USER CODE BEGIN CarCtrl_Task */ + char cmd_payload[16]; + /* Infinite loop */ + for (;;) { + /* 从消息队列中获取数据,阻塞等待 */ + if (osMessageQueueGet(CmdQueueHandle, cmd_payload, NULL, osWaitForever) == + osOK) { + elog_i(CarCtrlTask_TAG, "CarCtrl: Received command (ASCII: %s) from queue", + cmd_payload); + /* 可以在这里添加根据 cmd_payload 控制小车的逻辑 */ + } + // osDelay(1); // osMessageQueueGet 已经是阻塞的,不需要额外的 osDelay + } + /* USER CODE END CarCtrl_Task */ +} \ No newline at end of file diff --git a/Core/Bsp/protocol.h b/Core/Bsp/protocol.h new file mode 100644 index 0000000..2ccad7c --- /dev/null +++ b/Core/Bsp/protocol.h @@ -0,0 +1,16 @@ +#ifndef PROTOCOL_H +#define PROTOCOL_H + +#include "main.h" + +/** + * @brief 协议处理函数,解析接收到的数据并通过消息队列发送命令 + * @param data: 接收到的原始数据指针 + * @param len: 数据长度 + */ +void Protocol_HandleMessage(uint8_t *data, uint16_t len); + + +void CarCtrl_Task(void *argument); + +#endif /* PROTOCOL_H */ diff --git a/Core/Src/freertos.c b/Core/Src/freertos.c index 5d67b56..71ec707 100644 --- a/Core/Src/freertos.c +++ b/Core/Src/freertos.c @@ -29,6 +29,7 @@ #include "bsp_beep.h" #include "usart.h" #include "elog.h" +#include "protocol.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -57,6 +58,18 @@ const osThreadAttr_t initTask_attributes = { .stack_size = 128 * 4, .priority = (osPriority_t) osPriorityNormal, }; +/* Definitions for CarCtrlTask */ +osThreadId_t CarCtrlTaskHandle; +const osThreadAttr_t CarCtrlTask_attributes = { + .name = "CarCtrlTask", + .stack_size = 256 * 4, + .priority = (osPriority_t) osPriorityNormal, +}; +/* Definitions for CmdQueue */ +osMessageQueueId_t CmdQueueHandle; +const osMessageQueueAttr_t CmdQueue_attributes = { + .name = "CmdQueue" +}; /* Private function prototypes -----------------------------------------------*/ /* USER CODE BEGIN FunctionPrototypes */ @@ -73,6 +86,7 @@ PUTCHAR_PROTOTYPE { /* USER CODE END FunctionPrototypes */ void StartDefaultTask(void *argument); +void CarCtrl_Task(void *argument); void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */ @@ -103,6 +117,10 @@ void MX_FREERTOS_Init(void) { /* start timers, add new ones, ... */ /* USER CODE END RTOS_TIMERS */ + /* Create the queue(s) */ + /* creation of CmdQueue */ + CmdQueueHandle = osMessageQueueNew (16, 16, &CmdQueue_attributes); + /* USER CODE BEGIN RTOS_QUEUES */ /* add queues, ... */ /* USER CODE END RTOS_QUEUES */ @@ -111,6 +129,9 @@ void MX_FREERTOS_Init(void) { /* creation of initTask */ initTaskHandle = osThreadNew(StartDefaultTask, NULL, &initTask_attributes); + /* creation of CarCtrlTask */ + CarCtrlTaskHandle = osThreadNew(CarCtrl_Task, NULL, &CarCtrlTask_attributes); + /* USER CODE BEGIN RTOS_THREADS */ /* add threads, ... */ /* USER CODE END RTOS_THREADS */ @@ -134,24 +155,35 @@ void StartDefaultTask(void *argument) /* Infinite loop */ for(;;) { - const char *message = "Hello, ESP12F! This is a test message."; - HAL_StatusTypeDef status = ESP12F_TCP_SendMessage(message); - if (status == HAL_OK) { - HAL_GPIO_WritePin(RUN_LED_GPIO_Port, RUN_LED_Pin, GPIO_PIN_SET); - BEEP_On(); - osDelay(50); - BEEP_Off(); - osDelay(20); - - } else { - HAL_GPIO_WritePin(RUN_LED_GPIO_Port, RUN_LED_Pin, GPIO_PIN_RESET); - } + + HAL_GPIO_TogglePin(RUN_LED_GPIO_Port, RUN_LED_Pin); + osDelay(1000); } /* USER CODE END StartDefaultTask */ } +/* USER CODE BEGIN Header_CarCtrl_Task */ +/** +* @brief Function implementing the CarCtrlTask thread. +* @param argument: Not used +* @retval None +*/ +/* USER CODE END Header_CarCtrl_Task */ +__weak void CarCtrl_Task(void *argument) +{ + /* USER CODE BEGIN CarCtrl_Task */ + + /* Infinite loop */ + for(;;) + { + + osDelay(1); // osMessageQueueGet 已经是阻塞的,不需要额外的 osDelay + } + /* USER CODE END CarCtrl_Task */ +} + /* Private application code --------------------------------------------------*/ /* USER CODE BEGIN Application */ diff --git a/README.md b/README.md index 8907520..a29d8c9 100644 --- a/README.md +++ b/README.md @@ -177,3 +177,133 @@ void UART_IDLE_Callback(UART_HandleTypeDef *huart) { const char *message = "Hello, ESP12F! This is a test message."; HAL_StatusTypeDef status = ESP12F_TCP_SendMessage(message); ``` + + +这些是上位机发送的指令: +按照这些来写代码 + +这是一个基于 TCP/IP 局域网通信的物流小车控制指令协议设计方案。 + +为了方便调试和开发,本协议采用 **ASCII 文本格式**(类似于 Modbus ASCII 或简单的串口透传格式),而不是二进制格式。这样你可以直接使用网络调试助手(如 NetAssist)手动发送字符串来测试小车,而无需编写专门的上位机软件。 + +--- + +### 📡 通信基础参数 + +- **通信方式**:TCP Client (上位机) 连接 TCP Server (单片机/小车) +- **数据格式**:ASCII 字符串 +- **换行符**:建议使用 `\r\n` (回车+换行) 作为每条指令的结束标志,以便单片机解析。 +- **字节序**:N/A (文本协议不涉及大小端问题) + +--- + +### 📦 指令帧结构 + +每条指令由以下几个部分组成,字段之间用英文冒号 `:` 分隔: + +`[帧头][命令字][数据内容][校验和][帧尾]` + +- **帧头**:固定为 `LOGI` (代表 Logistics),用于快速识别有效数据包。 +- **命令字**:2位字符,代表具体操作(如 `GS` 代表去站点)。 +- **数据内容**:具体的参数,长度可变。 +- **校验和**:2位十六进制数,用于验证数据完整性(防止丢包或乱码)。 +- **帧尾**:固定为 `#`。 + +--- + +### 📝 具体控制指令定义 + +以下是针对你提出的四个需求(去站点、停止、启动、速度)的具体指令格式。 + +#### 1. 去往指定站点 +- **功能**:指示小车移动到编号为 N 的站点。 +- **指令格式**:`LOGI:GS:NNN:CS#` +- **参数说明**: + - `GS`: 命令字 (Go to Station)。 + - `NNN`: 站点编号,3位数字,不足补0。例如:1号站写为 `001`,12号站写为 `012`。 + - `CS`: 校验和。 +- **示例**: + - 去往 **5号站点**:`LOGI:GS:005:15#` (假设校验和计算结果为15) + +#### 2. 启动运行 +- **功能**:让处于停止或待机状态的小车开始执行任务或继续运行。 +- **指令格式**:`LOGI:ST:RUN:CS#` +- **参数说明**: + - `ST`: 命令字 (Start/Status)。 + - `RUN`: 固定参数,表示启动。 +- **示例**: + - 启动小车:`LOGI:ST:RUN:2A#` + +#### 3. 紧急停止/暂停 +- **功能**:立即停止小车的运动,通常用于急停或到达站点后的确认暂停。 +- **指令格式**:`LOGI:ST:STOP:CS#` +- **参数说明**: + - `STOP`: 固定参数,表示停止。 +- **示例**: + - 停止小车:`LOGI:ST:STOP:32#` + +#### 4. 设置运行速度 +- **功能**:动态调整小车的行驶速度。 +- **指令格式**:`LOGI:SP:VVV:CS#` +- **参数说明**: + - `SP`: 命令字 (Set Speed)。 + - `VVV`: 速度值,3位数字 (000-100),代表百分比或具体PWM占空比等级。 + - `000`: 停止 + - `050`: 50% 速度 + - `100`: 全速 +- **示例**: + - 设置速度为 **80%**:`LOGI:SP:080:04#` + +--- + +### 🧮 校验和算法 + +为了防止无线信号干扰导致指令错误,我们需要一个简单的校验和。 + +- **算法**:将 **帧头** 到 **数据内容** 结束的所有字符的 ASCII 码值相加,然后对 256 取余,最后转换为 2位十六进制字符串。 +- **公式**:`Sum = (Byte1 + Byte2 + ... + ByteN) % 256` + +**举例计算 (去往 1 号站点):** +1. 原始字符串:`LOGI:GS:001` +2. ASCII 码值相加: + - 'L'(76) + 'O'(79) + 'G'(71) + 'I'(73) + ':'(58) + 'G'(71) + 'S'(83) + ':'(58) + '0'(48) + '0'(48) + '1'(49) + - 总和 = 614 +3. 取余:`614 % 256 = 102` +4. 转十六进制:`102` -> `66` +5. 最终发送指令:`LOGI:GS:001:66#` + +--- + +### 💬 小车回复机制 (可选但推荐) + +单片机执行指令后,应向上位机返回执行结果,以便上位机显示状态。 + +**回复格式**:`[命令字]:[状态码]:[描述]#` + +- **状态码定义**: + - `OK`: 指令接收正确并执行。 + - `ERR`: 指令格式错误或校验失败。 + - `BUSY`: 小车正在忙,无法执行新指令。 + +**示例回复**: +- 成功去往站点:`GS:OK:Arrived#` +- 速度设置成功:`SP:OK:SpeedSet#` +- 校验错误:`CMD:ERR:CheckSum#` + +--- + +### 📌 总结清单 + +你可以直接将下表发给单片机开发人员: + +| 功能 | 指令模板 | 示例 (假设校验和为 XX) | 说明 | +| :--- | :--- | :--- | :--- | +| **去站点** | `LOGI:GS:NNN:XX#` | `LOGI:GS:003:XX#` | NNN为3位站点号 | +| **启动** | `LOGI:ST:RUN:XX#` | `LOGI:ST:RUN:XX#` | 开始运动 | +| **停止** | `LOGI:ST:STOP:XX#` | `LOGI:ST:STOP:XX#` | 立即停止 | +| **设速度** | `LOGI:SP:VVV:XX#` | `LOGI:SP:050:XX#` | VVV为0-100 | + + +我创建了 处理解析指令的任务和传递消息的消息队列。 +![指令处理任务和队列](image-6.png) + diff --git a/f103_car.ioc b/f103_car.ioc index 8baecb1..e31d925 100644 --- a/f103_car.ioc +++ b/f103_car.ioc @@ -40,8 +40,9 @@ Dma.USART2_TX.2.PeriphInc=DMA_PINC_DISABLE Dma.USART2_TX.2.Priority=DMA_PRIORITY_LOW Dma.USART2_TX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority FREERTOS.FootprintOK=true -FREERTOS.IPParameters=Tasks01,FootprintOK -FREERTOS.Tasks01=initTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL +FREERTOS.IPParameters=Tasks01,FootprintOK,Queues01 +FREERTOS.Queues01=CmdQueue,16,16,1,Dynamic,NULL,NULL +FREERTOS.Tasks01=initTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;CarCtrlTask,24,256,CarCtrl_Task,As weak,NULL,Dynamic,NULL,NULL File.Version=6 GPIO.groupedBy=Group By Peripherals KeepUserPlacement=false diff --git a/image-6.png b/image-6.png new file mode 100644 index 0000000000000000000000000000000000000000..752ec58ccc0402b1ef80d8b738f1ba0078846665 GIT binary patch literal 62999 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 K@oG_E(EkD4B?99B literal 0 HcmV?d00001 diff --git a/物流小车/esp_12f/TCPUDPDbg/config/lastsend.data b/物流小车/esp_12f/TCPUDPDbg/config/lastsend.data index 6b4ac24..211494f 100644 --- a/物流小车/esp_12f/TCPUDPDbg/config/lastsend.data +++ b/物流小车/esp_12f/TCPUDPDbg/config/lastsend.data @@ -1 +1 @@ -0ո \ No newline at end of file +0hhh \ No newline at end of file