
🎬 渡水无言 :个人主页渡水无言
❄专栏传送门 : 《linux专栏》《嵌入式linux驱动开发》《linux系统移植专栏》
❄专栏传送门 : 《freertos专栏》 《STM32 HAL库专栏》《linux裸机开发专栏》
❄专栏传送门 :《产品测评专栏》 《Ai智能体专栏) 《ROS开发专栏》
❄专栏传送门 :《BMS专栏》
⭐️流水不争先,争的是滔滔不绝
📚博主简介:第二十届中国研究生电子设计竞赛全国二等奖 |国家奖学金 | 省级三好学生
| 省级优秀毕业生获得者 | csdn新星杯TOP1 | 半导纵横专栏博主 | 211在读研究生
在这里主要分享自己学习的linux嵌入式领域知识;有分享错误或者不足的地方欢迎大佬指导,也欢迎各位大佬互相三连
目录
前言
前面已经讲解完采集、保护、SOC 算法、充放电均衡、调试打印五大核心任务,本期博客介绍整套架构最后一个任务:CommTask通信管理任务。
该任务作为 BMS 与外部设备(上位机、触摸屏、储能逆变器)交互的统一入口,当前为预留空框架,未集成具体通信协议,后期可快速对接自定义串口协议。
整体调度规则、优先级、栈配置和 Info 信息任务保持统一,通信优先级最低,保障电池保护、采集等高实时业务优先运行。
一、任务定位与调用关系
数据上行:打包 SOC、电压、电流、温度、故障、均衡状态上传上位机;
指令下行:接收远程指令,遥控充放电、均衡开关、参数配置;
整套任务优先级排序(数值越大优先级越低)
Protect > Monitor > Analysis > Energy > Info > Comm
调用栈
cpp
BMS_CommInit // 通信任务初始化、创建线程
└── BMS_CommTaskEntry // 2000ms周期主循环,预留通信处理逻辑
二、freeertos完整源码
cpp
#define BMS_DBG_TAG "Comm"
#include <stdio.h>
// FreeRTOS内核头文件
#include "FreeRTOS.h"
#include "task.h"
#include "main.h"
#include "bms_comm.h"
// 底层硬件驱动
#include "bms_hal_monitor.h"
#include "bms_hal_control.h"
// 全业务全局数据
#include "bms_monitor.h"
#include "bms_energy.h"
#include "bms_analysis.h"
#include "bms_global.h"
#include "bms_debug.h"
// 任务配置参数
#define COMM_TASK_STACK_SIZE 512U
#define COMM_TASK_PRIORITY 13U
#define COMM_TASK_TIMESLICE 25U
#define COMM_TASK_PERIOD 2000U
static void BMS_CommTaskEntry(void *pvParameters);
// 通信任务初始化
void BMS_CommInit(void)
{
BaseType_t xRet;
TaskHandle_t commHandle = NULL;
xRet = xTaskCreate(
BMS_CommTaskEntry,
"CommTask",
COMM_TASK_STACK_SIZE,
NULL,
COMM_TASK_PRIORITY,
&commHandle
);
if (xRet != pdPASS)
{
BMS_ERROR("Create Comm Task Fail\r\n");
}
}
// 通信任务主循环,预留通信业务处理区域
static void BMS_CommTaskEntry(void *pvParameters)
{
(void)pvParameters;
BMS_INFO("Communication task ready, waiting protocol development");
while(1)
{
// ====================待开发区域====================
// 1.Modbus RTU报文接收、CRC校验、指令解析
// 2.CAN报文组包,上传电池实时数据
// 3.上位机遥控指令处理:启停充放电、均衡开关、故障复位
// 4.定时上报SOC、压差、温度、故障码等整机参数
// ==================================================
// 周期阻塞延时,让出CPU给高优先级安全任务
vTaskDelay(pdMS_TO_TICKS(COMM_TASK_PERIOD));
}
}
BMS 通信任务上电由BMS_CommInit调用 FreeRTOS 接口周期创建后台线程,任务以 2000ms 为周期循环阻塞运行,当前预留空白业务处理区域,暂无实际收发逻辑,后期可在此添加 Modbus、CAN 等通信代码,实现电池数据向上位机上报、远程控制指令解析功能;该任务整机优先级最低,运行时主动让出 CPU,保障采集、保护等高实时性电池业务优先调度。
总结
本期博客介绍了本套系统的CommTask通信管理任务。