From 4adc78553c8d48ff122506195fa33641134bd7b1 Mon Sep 17 00:00:00 2001
From: yincheng.zhong <634916154@qq.com>
Date: 星期六, 13 十二月 2025 18:55:14 +0800
Subject: [PATCH] 路径点不重复的控制算法测试通了,但是好像不如之前路径点重复的版本好。增加了蓝牙接口部分。准备移植外包的MQTT。

---
 .github/copilot-instructions.md |   76 ++++++++++++++-----------------------
 1 files changed, 29 insertions(+), 47 deletions(-)

diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
index bcb14a9..b32fdb0 100644
--- a/.github/copilot-instructions.md
+++ b/.github/copilot-instructions.md
@@ -1,54 +1,36 @@
-## Repo overview (quick)
+# Quick instructions for AI coding agents
 
-- This is an STM32H7 firmware project for a lawnmower MCU. Key folders:
-  - `Core/` 鈥� HAL/RTOS entry (Cube-generated code; see `Core/Src/main.c`).
-  - `Drivers/` 鈥� STM32 HAL driver sources.
-  - `APL/` 鈥� high-level application config and app entry (`APL/app.c`, `APL/AppConfig.h`).
-  - `FML/` 鈥� feature modules (GPS, Internet, Bluetooth, UDPClient, etc.). Example: `FML/GPS.c` parses NMEA and uploads via `UDPClient`.
-  - `HIDOLibrary/Include` 鈥� shared utility types and helpers (HIDO_* API and types used everywhere).
-  - `MDK-ARM/` 鈥� Keil project files (`STM32H743.uvprojx`, `.uvoptx`) and build artifacts.
+Overview
+- STM32H743 (FreeRTOS) firmware for an autonomous lawnmower. Mix of CubeMX HAL, platform glue (HIDO_*), FML functional modules, and APL tasks.
 
-## What matters for edits
+What to read first
+- Entry: `STM32H743/Core/Src/main.c` (MX_* init, `app_main()`, osKernelStart)
+- App: `STM32H743/APL/app.c` (`app_task()` initializes modules and polls with a binary semaphore)
+- Modules: `STM32H743/FML/*` (GPS, SBUS, Motion, Internet, UDP/TCP)
+- Utilities: `STM32H743/HIDOLibrary/Include/` (HIDO_* helpers)
 
-- Entry flow: `Core/Src/main.c` initializes HAL, registers UARTs and starts the RTOS. It calls `app_main()` (implemented in `APL/app.c`) before `osKernelStart()`.
-- Main app loop runs in `APL/app_task` which polls subsystems after being awakened by a binary semaphore. ISR-to-main wake uses `app_trigger_from_isr()` (gives the same semaphore).
-- Use existing registration patterns: `Uart_Register(...)` for UART endpoints, `GPS_PinRegister(...)` for GPIO pins, and module init functions e.g. `GPS_Init()`, `Internet_Init()`, `UDPClient_Init()`.
-- Preserve Cube-generated sections: keep code inside/near `/* USER CODE BEGIN */` / `/* USER CODE END */` unchanged when modifying generated files.
+Core rules and patterns
+- Do not change CubeMX generated code outside `/* USER CODE BEGIN/END */` blocks. If you must regenerate, move logic to `FML/`/`APL/`.
+- Init & Poll pattern: implement `Module_Init()` and `Module_Poll()`; call Init in `app_task()` and Poll during app loop.
+- UARTs: register HAL handles with `Uart_Register(UART_ID_*, &huartX)` after `MX_USARTX_UART_Init()`; `Uart_Init()` config may require DMA buffers.
+- ISR wake: signal `app_task` using `app_trigger_from_isr()`; avoid direct task notification unless you match existing pattern.
+- Naming & API: follow `HIDO_*` typedefs and `HIDO_OK/HIDO_ERR` return conventions; use `HIDO_*` timers, queues, and helpers.
 
-## Build & debug notes (concrete)
+Build & debug
+- Two build modes: CubeMX + STM32CubeIDE (edit `.ioc`) or Keil MDK-uVision (`MDK-ARM/STM32H743.uvprojx`).
+- Use J-Link to flash; default debug UART: `USART1` (921600). Python telemetry/telemetry tool uses `UART5` (921600).
+- DMA/coherency: avoid enabling D-cache while using DMA unless buffer cache maintenance is implemented.
 
-- Two supported project entry points are present: STM32Cube `.ioc` (STM32H743/STM32H743.ioc) and Keil MDK `.uvprojx` (MDK-ARM/STM32H743.uvprojx). Developers typically:
-  - Open the `.ioc` in STM32CubeIDE and generate code, or
-  - Open the `.uvprojx` in Keil uVision (MDK) to build and flash.
-- Debug/log serial: `USART1` is used as debug (`huart1`) at 921600 (see `MX_USART1_UART_Init` in `main.c`). GPS is on `USART2` (115200 default).
-- UARTs use DMA for RX/TX in many places 鈥� be careful when changing buffer sizes or switching to interrupt-based I/O.
+Safe changes and examples
+- Add a new UART-based sensor:
+  1) Configure UART in CubeMX / MX_USARTX_UART_Init() in `main.c` (USER CODE blocks)
+  2) `Uart_Register(UART_ID_NEW, &huartX)` in `main.c` after init
+  3) Add `FML/NewModule_Init()` and `FML/NewModule_Poll()` and call from `app_task()`
+- Tuning: adjust motion PID and constants in `STM32H743/FML/motion_config.h` and `APL/global_param.h`. Persist via `save_com_map_to_flash()`.
 
-## Project-specific conventions & patterns
+Notes for AI agents
+- Only change generated code inside USER blocks. Prefer to add files in `FML/`/`APL/` and follow `HIDO_` conventions.
+- Minimize blocking work in `MotionControl_Task` and `app_task()`; keep real-time paths deterministic.
+- For deeper module rules and examples, consult `STM32H743/.github/copilot-instructions.md` and `docs/`.
 
-- Types and helpers use the `HIDO_` prefix (e.g. `HIDO_UINT32`, `HIDO_Util*`, `HIDO_Debug`). Search `HIDOLibrary/Include` for helper APIs.
-- Polling model: many subsystems expose `*_Init()` and `*_Poll()` (e.g. `GPS_Poll()`, `Internet_Poll()`). Work is driven by the `app_task` loop.
-- ISR -> application wake uses the global semaphore from `app_trigger_from_isr()` 鈥� prefer this pattern rather than direct task notifications in new code for consistency.
-- Generated HAL code pattern: keep peripheral init in `MX_*_Init()` functions within `main.c` and put higher-level logic in `APL/` or `FML/`.
-
-## Examples for common changes
-
-- Add a new UART-based sensor: call `Uart_Register(UART_ID_X, &huartX)` in `main.c` after the corresponding `MX_USARTX_UART_Init()`, then create `Sensor_Init()`/`Sensor_Poll()` in `FML/` and call from `app_task`.
-- Change debug log speed: edit `MX_USART1_UART_Init` in `Core/Src/main.c` and adjust callers that assume 921600.
-- Add a periodic job: use the existing `HIDO_Timer` utilities and the app semaphore wake flow; follow `app_task`'s pattern to poll on wake.
-
-## Where to look (quick file list)
-
-- Entry & init: `Core/Src/main.c`
-- App startup & scheduler task: `APL/app.c`, `Core/Src/freertos.c`
-- Feature modules: `FML/GPS.c`, `FML/Internet/*.c`, `FML/UDPClient.c`
-- Utilities and shared types: `HIDOLibrary/Include/*` (HIDO_* APIs)
-- Project files: `STM32H743/STM32H743.ioc`, `MDK-ARM/STM32H743.uvprojx`
-
-## Short guidelines for AI agents
-
-- Only change generated files inside USER CODE blocks unless you also regenerate the Cube project (.ioc); prefer adding new modules under `FML/` or `APL/`.
-- Follow existing naming and type conventions: use `HIDO_` helpers and typedefs for cross-module compatibility.
-- When modifying peripheral config, update `MX_*_Init()` in `main.c` and check related registration calls (`Uart_Register`, `GPIO` pin registers).
-- Use the semaphore-based `app_trigger_from_isr()` to wake the main loop from ISRs.
-
-If you'd like, I can convert this into a shorter or longer version, or merge any existing instructions you have. Any areas you want me to expand or examples to add?
+If any section should include deeper examples (UART template, module skeletons, or unit test patterns), tell me which piece to expand.

--
Gitblit v1.10.0