refactor(FOC): 重构齿槽转矩校准状态机为独立函数
- 将原本在 calibrate_cogging_tick 中的大函数拆分为多个职责单一的函数 - 新增 start_cogging_calibration、cogging_settling_tick、cogging_sampling_tick、 cogging_stopping_tick、cogging_done_tick 等状态处理函数 - 添加 process_cogging_run_data、start_next_cogging_run、build_cogging_tables、 print_cogging_table、print_cogging_c_array 等辅助函数 - 移动全局 FOC 控制器单例注释到更合适位置 - 添加齿槽转矩校准参数常量定义和详细注释 - 添加防御性编程处理默认状态分支,避免状态机卡死 - 提高代码可读性和维护性 feat(tasks): 添加任务头文件到项目配置 - 在 Robot_V2.cproject.yml 中添加 tasks.h 和 tasks.cpp 文件引用 docs(ADC): 添加ADC转换常量说明注释 - 在 ADC.cpp 中添加关于ADC换算常量的详细注释 - 说明全局采样器单例的初始化和使用方式
This commit is contained in:
@@ -36,6 +36,7 @@
|
||||
#endif
|
||||
|
||||
extern CAN_transmiter CAN0_transmiter; // CAN 初始化
|
||||
// 全局版本管理器单例:构造函数只复制 constexpr 版本号常量,不依赖外设初始化。
|
||||
VersionManager Version;
|
||||
|
||||
VersionManager::VersionManager() {
|
||||
@@ -120,14 +121,48 @@ void VersionManager::setBootVersion(u16 major, u16 minor, u16 patch,
|
||||
bootVersion.build = build;
|
||||
}
|
||||
|
||||
static void appendVersionChar(char *&out, size_t &remaining, char ch) {
|
||||
if (remaining > 1U) {
|
||||
*out++ = ch;
|
||||
--remaining;
|
||||
*out = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
static void appendVersionU16(char *&out, size_t &remaining, u16 value) {
|
||||
char digits[5]; // u16 最大值 65535,最多 5 位十进制数字
|
||||
u8 count = 0;
|
||||
|
||||
do {
|
||||
digits[count++] = static_cast<char>('0' + (value % 10U));
|
||||
value = static_cast<u16>(value / 10U);
|
||||
} while (value > 0U && count < sizeof(digits));
|
||||
|
||||
while (count > 0U) {
|
||||
appendVersionChar(out, remaining, digits[--count]);
|
||||
}
|
||||
}
|
||||
|
||||
char *VersionManager::versionToString(const VersionInfo &version, char *buffer,
|
||||
size_t bufSize) const {
|
||||
if (buffer == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
if (bufSize == 0U) {
|
||||
return buffer;
|
||||
}
|
||||
|
||||
snprintf(buffer, bufSize, "%d.%d.%d.%d", version.major, version.minor,
|
||||
version.patch, version.build);
|
||||
char *out = buffer;
|
||||
size_t remaining = bufSize;
|
||||
*out = '\0';
|
||||
|
||||
appendVersionU16(out, remaining, version.major);
|
||||
appendVersionChar(out, remaining, '.');
|
||||
appendVersionU16(out, remaining, version.minor);
|
||||
appendVersionChar(out, remaining, '.');
|
||||
appendVersionU16(out, remaining, version.patch);
|
||||
appendVersionChar(out, remaining, '.');
|
||||
appendVersionU16(out, remaining, version.build);
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user