举报
针对在RT-Thread最新版为STM32C8T6添加AT_DEVICE软件包时出现的报错,以下是系统化的解决方案:
board.h 中确认控制台使用的串口号(如 BSP_USING_UART1)。// 修改 AT_DEVICE 配置文件
#define AT_DEVICE_UART_NAME "uart2" // 避免与控制台uart1冲突menuconfig 中检查配置路径:RT-Thread Online Packages → IoT - internet of things → AT DEVICE →
[*] Enable AT DEVICE
(uart2) AT client device name # 修改为实际串口
(9600) AT client device baudrate # 匹配模块波特率board.c 中初始化对应串口引脚(示例):static void at_device_uart_init(void) {
rt_pin_mode(PA2, PIN_MODE_AF_PP); // UART2_TX
rt_pin_mode(PA3, PIN_MODE_INPUT); // UART2_RX
}
INIT_DEVICE_EXPORT(at_device_uart_init);STM32C8T6仅20KB RAM,需精简资源:
at_socket.h 配置:#define AT_AGENT_THREAD_STACK_SIZE 512 // 原值1024,改为512
#define AT_CLI_THREAD_STACK_SIZE 256 // 原值512,改为256menuconfig 中禁用:RT-Thread Kernel →
(512) Main thread stack size # 默认1024改为512
[ ] Enable HW stack overflow # 关闭栈检查节省资源applications/main.c 中调整初始化顺序: int main(void) {
/* 硬件串口初始化(由驱动自动完成) */
/* 显式初始化AT设备 */
extern int at_client_init(const char *dev_name);
at_client_init("uart2"); // 确保串口已注册
return 0;
} // rtconfig.h 中开启日志
#define AT_DEBUG
#define AT_CLI_USING_SERVER[E/at] uart open failed!)。libc_hardfault 捕获异常位置,检查栈溢出。 cd project_dir
pkgs --updateat_device 是否支持当前RT-Thread版本(如v4.1.x),参考官方文档。| 报错信息 | 解决方案 |
|---|---|
[E/at] open serial failed! | 串口名错误或驱动未初始化 |
HardFault_Handler | 栈溢出 → 减小线程栈大小 |
assertion failed at rt_malloc | 内存不足 → 精简组件或优化堆分配 |
总结步骤:
通过逐步排查硬件、配置、内存和初始化顺序,可高效解决AT_DEVICE在C8T6上的运行问题。
举报
更多回帖