Compare commits

..
12 Commits
Author SHA1 Message Date
cbb f3580f38e4 docs(review): 专家评审 2026-10-19 2026-10-20 21:11:29 +08:00
cbb 86ca7666fa feat(motor): 引入运行禁止机制重构电机控制安全系统
- 添加 run_inhibit.h/cpp 模块作为全局运行闸门,统一管理所有停机/唤醒逻辑
- 移除 FOC 控制器中的 5 个相互引用的开关机函数(shut_down/resume 等)
- 将 nFAULT 硬件故障检测从仅上报改为运行门控制,连续采样故障时申请禁止位
- 改进电压检测逻辑,欠压判定现在通过 run_inhibit 统一执行停机动作
- 修正 PB2(nFAULT) 引脚配置为内部上拉输入,避免浮空误读导致系统锁死
- 在 CAN 状态帧中新增 RunInhibit 位图(字节 36-39),实时反映禁止运行的故障源
- 电流采样失效、过热故障现在通过禁止位管理而非直接操作驱动状态
- 校准函数增加运行许可检查,防止在停机状态下意外唤醒驱动
2026-10-13 00:47:52 +08:00
cbb 72cc10b40d chore(gitignore): 忽略 worktree/评审过程稿与 IDE 缓存
变更点:
- 忽略 .worktrees/、.zcode/、SECURITY_AUDIT_REPORT.*、*.html 过程稿
- 本仓代码无业务变更(最近功能改动已在 40fea32 等提交中)
2026-09-20 22:58:17 +08:00
cbb 40fea328b0 feat(can): 反馈报文刷新率逐帧可配置并持久化
STATUS/CONFIG 反馈帧各自独立按 period_ms(1ms 节拍分频,0=停发)发送,
默认 STATUS 1kHz、CONFIG 250Hz,可运行时修改:

- 0x0400 扩展格式(DLC=4):[选择器 u16][值 u16],选择器 0x0000=节点 ID
  (仅单播),0x0100/0x0101=对应帧刷新周期;回 5B ACK,广播只应用不应答
- 0x0401 扩展格式(DLC=2):查询选择器对应值,回 [sel][val](4B);
  DLC<=1 及 SET DLC 1~2 保持旧格式行为完全不变
- 刷新率经 FlashEEPROM 独立 u16 记录(虚拟地址 0x08/0x09)持久化,
  不并入 6 参数 CRC 组,避免老设备升级后整组参数回退默认值
- save_system_config 追加从 RAM 副本回写两条记录,页满 format()
  重建后配置不丢失;read() 增加保留字节校验防 CRC 头部字误匹配
- CANFD_all_Send 拆分为 send_status_frame/send_config_frame,
  初始化失败上报路径直调 STATUS 帧不受分频影响

GATE_DRIVER_DRV8323 0/1 两种板型均编译通过
2026-09-12 19:00:06 +08:00
cbb 0d3bd9cbc6 chore: 忽略 Qoder IDE 生成的 repowiki 缓存目录 2026-09-09 02:54:39 +08:00
cbb 6bdae905d3 chore(rte): 同步 Debug 上下文 RTE_Components.h 生成结果
由 csolution 重新生成,外设组件版本由陈旧的 1.0.0 更正为 1.3.0,与
Release 上下文及构建实际链接的包版本一致(构建目标名 ..._1_3_0)。

该文件头部标注 "CSOLUTION generated file: DO NOT EDIT",此前手工添加的
Doxygen 注释块在重新生成时被覆盖移除,属预期行为。生成器版本戳为 2.12.0,
低于 Release 的 2.13.0,仅记录最后一次生成所用工具版本,不影响构建。
2026-09-09 02:54:20 +08:00
cbb 42dd1adc06 feat(can): CAN-FD 数据段波特率 2Mbps 提升至 5Mbps
数据段改为 prescaler=2、BS1=4TQ、BS2=1TQ:60MHz / (2 × 6TQ) = 5Mbps,
采样点 (1+4)/6 = 83.3%。仲裁段保持 1Mbps(prescaler=6、7TQ+2TQ)不变。

原注释称"数据段 prescaler 必须与非数据段相同",实际 CAN_DBT 的 DBAUDPSC
独立于仲裁段 BAUDPSC,数据段可自取分频,该约束不成立。

TDC 参数维持 filter=4 / offset=4 不变并补注说明:TDCMOD=CALC_AND_OFFSET
下硬件自动测得回路延时 TDCV,TDCO 仅作微调,经验取值约等于数据段 BS1 的
tq 数,不随波特率等比缩放;放大到 12 会使本节点回采错开约 6 个数据位,
自发帧被判为错误帧。
2026-09-09 02:53:34 +08:00
cbb 9fbd9c3d30 refactor(FOC): 移除齿槽转矩补偿功能
对硬编码的两张 128 点补偿表做谐波分解后确认该补偿无效:
- 能量集中在 k=1(11次/转) 16.1% 与 k=2(22次/转) 82.2%,合计 98.3%;
  而 22 极电机的真实齿槽基频应落在槽极 LCM 处(12槽=132次/转 k=12、
  18槽 k=18、24槽 k=24),实测幅值仅 0.46/0.12/0.08 mA,在噪声地板内。
  即表中属于齿槽的成分不足总能量 0.1%,k=1/k=2 实为电角度零位偏差与
  电流采样通道增益/零点失配的特征。
- 表按电角度查表,而电角度含每台独立的 calibration_angle(Flash 读回)。
  相位偏 φ 时残差比为 2sin(kφ/2):零点差 30° 电角度时 k=2 残差即等于
  原幅值,补偿由减小扰动变为增大扰动。22 极下 2.7° 机械偏差即达此量级,
  硬编码全局共用一张表不成立。
- 表采集于 bec7c11(2026-05),其电流链路为改版前方案,此后陆续修正了
  采样时刻落在上管导通窗、PA3/4/5 未配 AIN、零点配平未应用等问题。
  用当时的链路去测量比其自身误差小三个数量级的量,采到的是链路误差。

删除内容:get_cogging_compensation 查表插值、FOC_DEBUG 校准状态机及
其打印函数与静态缓冲、init() 中两张硬编码表、COGGING_TABLE_SIZE/
COGGING_COMP_SCALE、tasks.cpp 调度 tick、RESET 帧 bit4 触发(该位保留)。

六个控制模式的 Uq 输出去掉补偿项;angle_el_cog 仍供 update_el_sincos
使用,改名回 angle_el。mode3 注释中"反转阻力差异由 REV 齿槽补偿表承担"
的描述一并订正(该依赖本已失效)。
2026-09-09 02:53:11 +08:00
cbb 25ed2a2bde feat(adc): 添加三相电流零点配平并扩展初始化错误上报
- ADC: 新增 zero_calibrate() 函数,在上电后采集 200 帧计算各通道零点偏差
- ADC: 修改 current_adc_to_ma() 支持逐通道扣除配平后的零点偏移
- ADC: 调整电流采样引脚为模拟输入模式并优化采样时间至 13.5 周期
- CAN: STATUS 帧字节 32~35 新增 InitStatus 字段,反馈初始化错误位图
- main: 细化初始化错误检测,分别标记角度/ADC/CAN/Kalman/FOC/门驱动故障
- config.h: 新增 INIT_ERR_* 错误码定义及 CURRENT_ZERO_CAL_LIMIT 阈值
2026-09-07 03:34:47 +08:00
cbb 7c4aaa5ee6 feat(FOC): 优化FOC控制算法并修复多个控制环路问题
- 重构cal_Iq_Id函数,移除电角度参数传递,改用预计算的sin/cos值
  以避免重复三角函数计算,提升性能约15-300周期
- 修复角度同步Uq前馈学习中的运动方向判断逻辑,解决反转时的
  震荡问题和正转正常反转震荡的根本原因
- 实现低速缩放因子函数get_mode3_velocity_scale,改进静摩擦
  hunting抑制效果
- 优化电压检测逻辑,将阻塞式ADC读取改为连续模式零等待,
  提升实时性能
- 修复初始化期间电压分母为零的问题,添加下限保护防止P增益
  无穷大
- 实现PID控制器测量微分功能,消除目标阶跃时的微分冲击
- 改进积分抗饱和策略,添加外部饱和泄放功能,优化到位稳定
  性能

perf(Filter): 优化中值滤波算法性能

- 针对ADC_FILTER_SIZE=6的固定场景实现最优排序网络,
  用12次比较替代通用std::nth_element算法,显著提升性能
- 保留通用回退路径处理其他尺寸情况
2026-09-01 02:46:25 +08:00
cbb 76f7987238 feat(FOC): 实现电角度零位自动校准并修复ADC采样干扰问题
- 新增FlashEEPROM用于保存零位校准角,掉电不丢失
- 实现安全的零位校准算法:运行中禁止校准、对齐后重新采样、保存到Flash
- 重构ADC架构:分离ADC0(PWM同步电流采样)和ADC1(VBUS/DRV温度轮询)
- 解决ADC采样冲突:移除ADC0的regular连续扫描,避免与注入组抢占资源
- 修复VBUS电压读取错误:从DMA缓冲区改为直接ADC1单次转换
- 修正开环控制Uq幅值限幅逻辑,保留符号避免反转时抖动
- 更新CAN协议:电流数据改为有符号16位打包,支持负电流传输
- 调整版本号至v26.8.16.7
2026-08-16 02:13:37 +08:00
cbb 42c9f2f669 feat(can): 添加节点ID设置命令的安全防护和改进闪存写入逻辑
- 添加目标节点验证机制,防止SET_NODE_ID命令被错误处理
- 修改节点ID范围验证逻辑,限制为1到0xFF
- 调整闪存写入顺序,在确认写入成功后再发送响应
- 修复SET_NODE_ID消息处理中的边界条件检查

fix(can): 启用自动总线离线恢复功能

- 将CAN参数auto_bus_off_recovery从DISABLE改为ENABLE
- 提高CAN通信的稳定性和自动恢复能力

chore(config): 更新软件版本号并添加编译时间信息

- 将软件补丁版本从24更新到25
- 添加APP_BUILD_DATE和APP_BUILD_TIME宏定义
- 新增getAppBuildTime函数获取编译时间信息
- 添加Flash页大小相关注释说明

perf(debug): 调整ST-Link调试器时钟频率

- 将调试器时钟从10MHz降低到4MHz
- 提高调试连接的稳定性

refactor(static_test): 移除静态测试文件列表

- 删除static_test_automotive_business_20260523/files.csv文件内容
2026-08-13 01:14:07 +08:00
48 changed files with 2219 additions and 9500 deletions
+15
View File
@@ -80,3 +80,18 @@ uv2csolution.log
# legacy intermediate project file
*.cprj
# Qoder IDE generated repowiki cache
.qoder/
# Compose worktrees
.worktrees/
# Multi-agent review process files
.agents/
ORIGINAL_REQUEST.md
.zcode/
# 安全评审过程稿(不入库)
SECURITY_AUDIT_REPORT.*
*.html
+1 -1
View File
@@ -33,7 +33,7 @@ solution:
- project-context: Robot_V2.Release
debugger:
name: ST-Link@pyOCD
clock: 10000000
clock: 4000000
protocol: swd
# List of different build configurations.
+216 -425
View File
@@ -11,8 +11,10 @@
#include "adc.h"
#include "ang_sensor.h"
#include "config.h"
#include "flash.h"
#include "motor.h"
#include "pid.h"
#include "run_inhibit.h"
#include "systick.h"
#include <arm_math.h>
#include <cmath>
@@ -29,234 +31,7 @@ extern angle_sensor KTH7823;
extern CAN_transmiter CAN0_transmiter;
extern EncoderVelocityKalman Vel_kalman; // 速度滤波
extern CurrentKalman Current_kalman;
extern u16 adc_value[3]; // regular DMA缓冲区:MCU温度 / DRV温度 / VBUS
// 齿槽转矩补偿:查表 + 线性插值
// angle_el: 电角度(度)
// 返回: 补偿电压值 (V),叠加到 Uq 上
/**
* @brief 获取 get_cogging_compensation 对应的数据或状态
* @param[in] angle_el 参数
* @return float 返回值
*/
inline float FOC_Controller::get_cogging_compensation(float angle_el) {
if (!cogging_comp_enabled) return 0.0f;
// angle_el 已由调用方归一化到 [0, 360),无需重复
float angle = angle_el;
// 线性插值查表
float index_f = angle / 360.0f * (float)COGGING_TABLE_SIZE;
u16 idx0 = (u16)index_f;
u16 idx1 = (idx0 + 1) % COGGING_TABLE_SIZE;
float frac = index_f - (float)idx0;
// 根据转向选择补偿表(带滞回,避免零速附近跳变)
static float *last_table = cogging_table;
if (rt_velocity < -0.5f) last_table = cogging_table_rev;
else if (rt_velocity > 0.5f) last_table = cogging_table;
float *table = last_table;
float comp = table[idx0] * (1.0f - frac) + table[idx1] * frac;
return -comp * cogging_comp_scale; // mA→V: 补偿电流(mA) × 换算系数(V/mA)
}
// === 齿槽转矩校准(DEBUG,平时不启用)===
// 启用方法:config.h 中 FOC_DEBUG 改为 1,通过 CAN 命令触发(RESET_ID bit4)
// 校准完成后把 C Array 硬编码到 init() 中,再改回 FOC_DEBUG 0
#if FOC_DEBUG
// 齿槽转矩校准参数
constexpr u32 COG_CALIB_SETTLE_TICKS = 16000; // 800ms / 50us
constexpr u32 COG_CALIB_STOP_TICKS = 10000; // 500ms / 50us
constexpr u32 COG_CALIB_TARGET_SAMPLES = 3 * COGGING_TABLE_SIZE * 8;
constexpr float COG_CALIB_SLOW_VEL = 1.0f; // 开环速度 rad/s
constexpr u32 COG_CALIB_SAMPLE_DIV = 20; // 1ms / 50us
constexpr u8 COG_CALIB_TOTAL_RUNS = 6; // 3正+3反
// 齿槽转矩校准静态数据
float FOC_Controller::cog_calib_run_data[6][COGGING_TABLE_SIZE] = {};
float FOC_Controller::cog_calib_accum[COGGING_TABLE_SIZE] = {};
u32 FOC_Controller::cog_calib_count[COGGING_TABLE_SIZE] = {};
/**
* @brief 齿槽转矩校准 - 非阻塞状态机
* 正转3次 + 反转3次,分开存储补偿表。
*/
void FOC_Controller::calibrate_cogging_tick(void) {
// 入口只做状态派发,避免单函数堆叠所有校准分支。
switch (cog_calib_state) {
case CogCalibState::IDLE:
start_cogging_calibration();
return;
case CogCalibState::SETTLING:
cogging_settling_tick();
return;
case CogCalibState::SAMPLING:
cogging_sampling_tick();
return;
case CogCalibState::STOPPING:
cogging_stopping_tick();
return;
case CogCalibState::DONE:
cogging_done_tick();
return;
default:
// 防御性处理:枚举值异常时回到空闲态,避免状态机卡死。
cog_calib_state = CogCalibState::IDLE;
return;
}
}
void FOC_Controller::start_cogging_calibration(void) {
// IDLE 状态下没有请求则保持空闲,不扰动正常控制路径。
if (!cogging_calib_request) return;
cogging_calib_request = false;
cog_calib_run = 0;
// 保存原控制状态,校准完成后恢复现场。
cog_calib_saved_mode = control_mode;
cog_calib_saved_vel = target_velocity;
cogging_comp_enabled = false;
memset(cog_calib_run_data, 0, sizeof(cog_calib_run_data));
printf("\r\n[COG] === Cogging Calibration: 3 fwd + 3 rev ===\r\n");
control_mode = 6;
target_velocity = COG_CALIB_SLOW_VEL;
cog_calib_settle_tick = 0;
cog_calib_state = CogCalibState::SETTLING;
}
void FOC_Controller::cogging_settling_tick(void) {
// 给低速开环运行留出稳定时间,再开始采样。
cog_calib_settle_tick++;
if (cog_calib_settle_tick < COG_CALIB_SETTLE_TICKS) return;
cog_calib_state = CogCalibState::SAMPLING;
cog_calib_sample_count = 0;
memset(cog_calib_accum, 0, sizeof(cog_calib_accum));
memset(cog_calib_count, 0, sizeof(cog_calib_count));
}
void FOC_Controller::cogging_sampling_tick(void) {
static u32 sample_div = 0;
// 每 1ms 采一次,降低校准数据相关处理对实时控制的影响。
sample_div++;
if (sample_div < COG_CALIB_SAMPLE_DIV) return;
sample_div = 0;
float real_angle = KTH7823.getcurrent_sensorangle();
float angle_el = normalizeAngle360(real_angle * PP + KTH7823.calibration_angle);
float iq = rt_current;
if (fabsf(iq) < 5000.0f) {
u16 idx = (u16)(angle_el / 360.0f * (float)COGGING_TABLE_SIZE);
if (idx >= COGGING_TABLE_SIZE) idx = COGGING_TABLE_SIZE - 1;
cog_calib_accum[idx] += iq;
cog_calib_count[idx]++;
}
cog_calib_sample_count++;
if (cog_calib_sample_count >= COG_CALIB_TARGET_SAMPLES) {
target_velocity = 0;
cog_calib_state = CogCalibState::STOPPING;
cog_calib_stop_tick = 0;
}
}
void FOC_Controller::cogging_stopping_tick(void) {
// 每轮采样结束后先停稳,再计算本轮去直流数据。
cog_calib_stop_tick++;
if (cog_calib_stop_tick < COG_CALIB_STOP_TICKS) return;
float dc = process_cogging_run_data();
printf("[COG] Run %d/%d done. DC=%.2f mA\r\n",
cog_calib_run + 1, COG_CALIB_TOTAL_RUNS, dc);
cog_calib_run++;
if (cog_calib_run < COG_CALIB_TOTAL_RUNS) {
start_next_cogging_run();
} else {
cog_calib_state = CogCalibState::DONE;
}
}
float FOC_Controller::process_cogging_run_data(void) {
// 先求每个角度桶的平均电流,再统一去除直流偏置。
float dc = 0;
for (int i = 0; i < COGGING_TABLE_SIZE; i++) {
cog_calib_run_data[cog_calib_run][i] =
(cog_calib_count[i] > 0) ? cog_calib_accum[i] / (float)cog_calib_count[i] : 0.0f;
dc += cog_calib_run_data[cog_calib_run][i];
}
dc /= (float)COGGING_TABLE_SIZE;
for (int i = 0; i < COGGING_TABLE_SIZE; i++) {
cog_calib_run_data[cog_calib_run][i] -= dc;
}
return dc;
}
void FOC_Controller::start_next_cogging_run(void) {
control_mode = 6;
target_velocity = (cog_calib_run < 3) ? COG_CALIB_SLOW_VEL : -COG_CALIB_SLOW_VEL;
cog_calib_state = CogCalibState::SETTLING;
cog_calib_settle_tick = 0;
}
void FOC_Controller::cogging_done_tick(void) {
// 生成最终表后恢复用户进入校准前的控制模式和目标速度。
build_cogging_tables();
cogging_comp_enabled = true;
control_mode = cog_calib_saved_mode;
target_velocity = cog_calib_saved_vel;
print_cogging_table("\r\n[COG] === FWD Average ===\r\n", cogging_table);
print_cogging_table("\r\n[COG] === REV Average ===\r\n", cogging_table_rev);
print_cogging_c_array("\r\n[COG] --- FWD C Array ---\r\n",
"COGGING_TABLE_FWD", cogging_table);
print_cogging_c_array("\r\n[COG] --- REV C Array ---\r\n",
"COGGING_TABLE_REV", cogging_table_rev);
printf("\r\n[COG] === Done. ===\r\n");
cog_calib_state = CogCalibState::IDLE;
}
void FOC_Controller::build_cogging_tables(void) {
// 前 3 轮为正转,后 3 轮为反转,分别求平均表。
for (int i = 0; i < COGGING_TABLE_SIZE; i++) {
cogging_table[i] = (cog_calib_run_data[0][i] +
cog_calib_run_data[1][i] +
cog_calib_run_data[2][i]) / 3.0f;
cogging_table_rev[i] = (cog_calib_run_data[3][i] +
cog_calib_run_data[4][i] +
cog_calib_run_data[5][i]) / 3.0f;
}
}
void FOC_Controller::print_cogging_table(const char *title, float *table) {
printf("%s", title);
for (int i = 0; i < COGGING_TABLE_SIZE; i++) {
float angle_deg = (float)i / (float)COGGING_TABLE_SIZE * 360.0f;
printf("[COG] %.2f, %.2f\r\n", angle_deg, table[i]);
fwdgt_counter_reload();
}
}
void FOC_Controller::print_cogging_c_array(const char *title,
const char *arrayName,
float *table) {
printf("%s", title);
printf("static const float %s[COGGING_TABLE_SIZE] = {\r\n", arrayName);
for (int i = 0; i < COGGING_TABLE_SIZE; i++) {
if (i % 8 == 0) printf(" ");
printf("%.2ff", table[i]);
if (i < COGGING_TABLE_SIZE - 1) printf(", ");
if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf("\r\n");
fwdgt_counter_reload();
}
printf("};\r\n");
}
#endif // FOC_DEBUG
extern FlashEEPROM flashEEP;
// 初始变量及函数定义
#define _constrain(amt, low, high) \
@@ -271,26 +46,33 @@ void FOC_Controller::print_cogging_c_array(const char *title,
* @return void
*/
void calibrate_zero_position(void) {
// Set_3Pwm(.25, 0, 0); // 起劲
// delay_1ms(1000);
// KTH7823.update();
// 运行中禁止校准:要求控制模式为停止(0)且基本静止,
// 否则转子无法对齐到电气 0°,标定结果错误,甚至因电角度突变导致失控。
// 被禁止运行时同样拒绝:本函数会直接 motor_resume() 唤醒驱动,
// 不判闸门就成了停机态下的旁路通道。
if (FOC.control_mode != 0 || !run_inhibit.permitted() ||
fabsf(FOC.rt_velocity) > CALIB_MAX_SPEED) {
return;
}
// // 改进校准算法:获取当前传感器角度并计算补偿值
// float current_sensor_angle = KTH7823.getcurrent_sensorangle();
// float electrical_angle = fmodf(current_sensor_angle * PP, 360.0f); //
// 计算当前电角度
// 使能电机驱动器,准备对齐
motor_resume();
// // 计算需要的补偿值,使得当前位置对应0°电角度
// KTH7823.calibration_angle = -electrical_angle;
// 施加固定电压矢量(A 相高电平),让转子对齐到电气 0° 位置
Set_3Pwm(ALIGN_PWM_DUTY, 0.0f, 0.0f);
delay_1ms(ALIGN_SETTLE_MS);
// // 对补偿角进行归一化处理,确保在[-180, 180]范围内
// KTH7823.calibration_angle = fmodf(KTH7823.calibration_angle + 180.0f,
// 360.0f); if (KTH7823.calibration_angle < 0) { KTH7823.calibration_angle
// += 360.0f;
// }
// KTH7823.calibration_angle -= 180.0f;
// 对齐稳定后重新采样传感器角度,再计算零位补偿角,使当前位置对应电气 0°
KTH7823.update();
float current_sensor_angle = KTH7823.getcurrent_sensorangle();
float electrical_angle = fmodf(current_sensor_angle * PP, 360.0f);
KTH7823.set_calibration(-electrical_angle);
// Set_3Pwm(0, 0, 0); // 停止
// 停止施加电压
Set_3Pwm(0.0f, 0.0f, 0.0f);
// 保存校准角到 Flash,掉电不丢
flashEEP.save_calibration_angle(KTH7823.calibration_angle);
}
// 通过Ia,Ib,Ic计算Iq,Id(目前仅输出Iq)
@@ -303,7 +85,7 @@ void calibrate_zero_position(void) {
* @return float 返回值
*/
inline float FOC_Controller::cal_Iq_Id(float current_a, float current_b,
float current_c, float angle_el) {
float current_c) {
if (current_a == ERROR_ADC_VAL || current_b == ERROR_ADC_VAL ||
current_c == ERROR_ADC_VAL) {
return Current_kalman.getCurrent();
@@ -315,19 +97,17 @@ inline float FOC_Controller::cal_Iq_Id(float current_a, float current_b,
current_b -= current_avg;
current_c -= current_avg;
// 电气角度由调用方传入,避免重复计算
// Clarke变换 (使用三相电流)
float I_alpha, I_beta;
I_alpha = (2.0f / 3.0f) * current_a - (1.0f / 3.0f) * current_b -
(1.0f / 3.0f) * current_c;
I_beta = _1_SQRT3 * current_b - _1_SQRT3 * current_c;
// Park变换
float sin_el, cos_el;
arm_sin_cos_f32(angle_el, &sin_el, &cos_el);
// Park变换:sin/cos 由 update_el_sincos() 每周期算一次,
// 与 setSVPWM_PhaseVoltage 的逆 Park 共用,省一次三角函数
float I_q, I_d;
I_q = I_beta * cos_el - I_alpha * sin_el;
I_d = I_beta * sin_el + I_alpha * cos_el;
I_q = I_beta * el_cos - I_alpha * el_sin;
I_d = I_beta * el_sin + I_alpha * el_cos;
// 返回Iq值,乘以1000以转换为mA
return Current_kalman.update(I_q * 1000 - KE_FACTOR * rt_velocity);
@@ -349,6 +129,7 @@ float FOC_Controller::update_angle_sync_uq_feedforward(
float min_target = 0.0f;
float stop_speed = 0.0f;
float brake_err = 0.0f;
float learn_err_max = 0.0f;
float learn_alpha = 0.0f;
float gain = 0.0f;
float max_ff = 0.0f;
@@ -361,6 +142,7 @@ float FOC_Controller::update_angle_sync_uq_feedforward(
min_target = MODE2_UQ_FF_MIN_TARGET;
stop_speed = MODE2_UQ_FF_STOP_SPEED;
brake_err = MODE2_UQ_FF_BRAKE_ERR;
learn_err_max = MODE2_UQ_FF_LEARN_ERR_MAX;
learn_alpha = MODE2_UQ_FF_LEARN_ALPHA;
gain = MODE2_UQ_FF_GAIN;
max_ff = MODE2_UQ_FF_MAX;
@@ -372,6 +154,7 @@ float FOC_Controller::update_angle_sync_uq_feedforward(
min_target = MODE3_UQ_FF_MIN_TARGET;
stop_speed = MODE3_UQ_FF_STOP_SPEED;
brake_err = MODE3_UQ_FF_BRAKE_ERR;
learn_err_max = MODE3_UQ_FF_LEARN_ERR_MAX;
learn_alpha = MODE3_UQ_FF_LEARN_ALPHA;
gain = MODE3_UQ_FF_GAIN;
max_ff = MODE3_UQ_FF_MAX;
@@ -381,10 +164,16 @@ float FOC_Controller::update_angle_sync_uq_feedforward(
return 0.0f;
}
// 超速/制动判定必须沿"运动方向":velocity_error×dir_sign 是 PID 系误差,
// 再乘运动方向符号后,< -brake_err 才表示"沿运动方向明显超速"。
// 原实现只乘 dir_sign:反转(负速度)时判定极性恰好相反——反转超速时
// 前馈继续输出、反转欠速时前馈反而被切断,已学到的电压(可达±MAX)
// 随误差符号通断,形成正转没有、反转独有的 bang-bang 震荡。
const float motion_sign = (target_vel * dir_sign >= 0.0f) ? 1.0f : -1.0f;
const bool active = (fabsf(target_vel) > stop_speed) &&
(fabsf(actual_vel) > stop_speed) &&
((target_vel * actual_vel) > 0.0f) &&
((velocity_error * dir_sign) > -brake_err);
((velocity_error * dir_sign * motion_sign) > -brake_err);
float angle = normalizeAngle360(mech_angle);
float index_f = angle / 360.0f * (float)table_size;
@@ -397,7 +186,11 @@ float FOC_Controller::update_angle_sync_uq_feedforward(
if (ff > max_ff) ff = max_ff;
else if (ff < -max_ff) ff = -max_ff;
if (learn_enable && active && fabsf(target_vel) > min_target) {
// 学习仅在误差带内进行:启停/换向瞬态误差可达上百 °/s,直接学习会把
// ±MAX 钳位值写进途经的角度桶,下一轮运动经过该角度时突加满幅前馈
// 电压,本身就是一次转矩扰动。
if (learn_enable && active && fabsf(target_vel) > min_target &&
fabsf(velocity_error * dir_sign) < learn_err_max) {
float ff_target = velocity_error * dir_sign * gain;
if (ff_target > max_ff) ff_target = max_ff;
else if (ff_target < -max_ff) ff_target = -max_ff;
@@ -407,32 +200,44 @@ float FOC_Controller::update_angle_sync_uq_feedforward(
return (enable && active && fabsf(target_vel) > min_target) ? ff : 0.0f;
}
/**
* @brief mode3 低速/静止附近降低速度内环 P,运行速度升高后平滑恢复。
* @brief mode3 低速缩放因子:静止附近降到 min_scale,速度升高后线性恢复到 1。
* @note P/I 使用各自的地板(I 地板更低):低速段保持"比例主导",
* 积分充电足够慢,压制静摩擦 hunting(停下瞬间小幅来回抖动)。
* D 不衰减,保持阻尼。
*/
float FOC_Controller::get_mode3_velocity_p(float target_vel, float actual_vel) {
float vel_p = vel_angloop_p;
if (target_vel < -120.0f) {
vel_p = vel_angloop_p * 2.0f;
} else if (target_vel < -30.0f) {
vel_p = vel_angloop_p * 1.5f;
float FOC_Controller::get_mode3_velocity_scale(float target_vel,
float actual_vel,
float min_scale) {
if (!MODE3_LOW_SPEED_P_SCALE_ENABLE) {
return 1.0f;
}
if (MODE3_LOW_SPEED_P_SCALE_ENABLE) {
float abs_target = fabsf(target_vel);
float abs_speed = fabsf(actual_vel);
float speed_ref = (abs_target > abs_speed) ? abs_target : abs_speed;
float p_scale = 1.0f;
if (speed_ref <= MODE3_LOW_SPEED_P_LOW) {
p_scale = MODE3_LOW_SPEED_P_MIN_SCALE;
} else if (speed_ref < MODE3_LOW_SPEED_P_FULL) {
p_scale = MODE3_LOW_SPEED_P_MIN_SCALE +
(1.0f - MODE3_LOW_SPEED_P_MIN_SCALE) *
(speed_ref - MODE3_LOW_SPEED_P_LOW) /
return min_scale;
}
if (speed_ref < MODE3_LOW_SPEED_P_FULL) {
return min_scale +
(1.0f - min_scale) * (speed_ref - MODE3_LOW_SPEED_P_LOW) /
(MODE3_LOW_SPEED_P_FULL - MODE3_LOW_SPEED_P_LOW);
}
vel_p *= p_scale;
return 1.0f;
}
return vel_p;
/**
* @brief mode3 速度内环 P:低速缩放因子(方向无关)。
* @note 历史上曾有"反转 P 提升到 ×2"的增益调度(先是 −120/−30 硬台阶,
* 后改为连续线性过渡):连续化后反转仍剧烈震荡,说明问题不在
* 台阶突跳,而在增益本身——×2 只对反转生效,把反转环路增益整体
* 翻倍而正转不变,正是"正转正常、反转震荡"的直接来源之一。
* 已移除。反转阻力差异由 Uq 前馈学习承担;
* 若实测反转欠速/偏慢,优先增大前馈学习限幅,不要恢复非对称 P。
*/
float FOC_Controller::get_mode3_velocity_p(float target_vel, float actual_vel) {
return vel_angloop_p * get_mode3_velocity_scale(target_vel, actual_vel,
MODE3_LOW_SPEED_P_MIN_SCALE);
}
/**
@@ -443,55 +248,23 @@ float FOC_Controller::get_mode3_velocity_p(float target_vel, float actual_vel) {
u8 FOC_Controller::init() {
motor_init(); // 电机驱动初始化
// 齿槽转矩补偿表(硬编码,3正+3反平均,用真实角度算Iq)
static const float COGGING_TABLE_FWD[COGGING_TABLE_SIZE] = {
29.28f, 28.84f, 28.26f, 28.83f, 29.79f, 30.26f, 29.52f, 28.77f,
28.23f, 27.68f, 26.65f, 25.19f, 23.92f, 22.59f, 19.61f, 16.77f,
13.32f, 10.40f, 7.64f, 3.51f, -0.83f, -4.96f, -8.19f, -11.11f,
-13.40f, -14.39f, -15.69f, -15.99f, -16.39f, -15.50f, -14.76f, -14.21f,
-13.76f, -13.88f, -13.22f, -11.18f, -10.65f, -10.54f, -10.62f, -10.23f,
-9.52f, -8.19f, -6.31f, -4.14f, -1.94f, -0.25f, 2.06f, 4.08f,
6.05f, 8.30f, 9.74f, 11.38f, 13.32f, 15.65f, 17.55f, 20.22f,
21.72f, 22.28f, 23.30f, 24.78f, 23.53f, 23.35f, 23.00f, 21.42f,
20.35f, 20.57f, 20.07f, 18.18f, 17.04f, 16.03f, 14.81f, 13.71f,
12.47f, 10.93f, 9.38f, 6.53f, 4.63f, 3.37f, 1.29f, -1.28f,
-5.08f, -11.11f, -16.35f, -21.00f, -24.61f, -28.30f, -31.11f, -33.48f,
-35.25f, -36.54f, -38.01f, -38.69f, -39.27f, -39.52f, -38.18f, -36.55f,
-34.96f, -33.14f, -31.92f, -31.45f, -31.32f, -30.25f, -29.60f, -28.72f,
-27.51f, -25.30f, -22.66f, -20.87f, -18.19f, -16.10f, -13.25f, -10.81f,
-8.00f, -4.67f, -2.28f, 0.87f, 3.83f, 7.25f, 10.56f, 13.70f,
17.70f, 19.90f, 22.14f, 23.62f, 24.53f, 26.03f, 26.96f, 27.95f,
};
static const float COGGING_TABLE_REV[COGGING_TABLE_SIZE] = {
22.45f, 24.95f, 26.05f, 26.01f, 26.11f, 25.87f, 26.20f, 26.23f,
26.19f, 25.87f, 25.97f, 26.09f, 24.77f, 24.22f, 23.71f, 22.10f,
19.84f, 17.60f, 15.36f, 12.99f, 9.54f, 5.35f, 1.71f, -1.94f,
-4.15f, -6.16f, -7.93f, -9.10f, -10.01f, -10.25f, -10.85f, -11.74f,
-11.98f, -10.78f, -9.65f, -8.89f, -8.14f, -6.85f, -5.94f, -5.37f,
-4.28f, -3.38f, -3.36f, -3.40f, -2.81f, -2.36f, -1.04f, -0.18f,
1.08f, 2.15f, 4.19f, 5.51f, 7.33f, 8.64f, 10.46f, 11.89f,
13.42f, 14.83f, 17.11f, 19.12f, 20.76f, 21.88f, 22.35f, 22.86f,
22.73f, 22.13f, 21.10f, 20.53f, 18.65f, 17.09f, 15.47f, 14.76f,
14.02f, 12.94f, 11.98f, 10.29f, 8.11f, 5.83f, 4.23f, 2.42f,
1.03f, -1.80f, -4.01f, -7.93f, -11.79f, -15.90f, -20.22f, -23.04f,
-25.66f, -28.80f, -30.45f, -32.11f, -33.17f, -33.97f, -34.68f, -34.26f,
-34.18f, -33.78f, -32.47f, -31.11f, -29.40f, -27.89f, -27.05f, -26.72f,
-25.59f, -24.86f, -23.61f, -22.97f, -22.89f, -21.81f, -20.78f, -19.23f,
-17.74f, -15.09f, -13.18f, -10.51f, -8.18f, -5.89f, -3.35f, -0.02f,
2.02f, 3.87f, 6.37f, 9.11f, 12.33f, 14.63f, 17.12f, 19.12f,
};
memcpy(cogging_table, COGGING_TABLE_FWD, sizeof(COGGING_TABLE_FWD));
memcpy(cogging_table_rev, COGGING_TABLE_REV, sizeof(COGGING_TABLE_REV));
cogging_comp_enabled = true;
FOC.cur_loop_p = DEFAULT_current_loop_p * 100 / limit_voltage;
FOC.cur_MIT_p = DEFAULT_current_MIT_p * 100 / limit_voltage;
FOC.vel_loop_p = DEFAULT_vel_loop_p * 100 / limit_voltage;
// limit_voltage 从 Flash/CAN 恢复,可能为 0:分母下限保护,防止 P=inf
const float denom = (limit_voltage > MIN_LIMIT_VOLTAGE)
? limit_voltage
: voltage_power_supply;
FOC.cur_loop_p = DEFAULT_current_loop_p * 100 / denom;
FOC.cur_MIT_p = DEFAULT_current_MIT_p * 100 / denom;
FOC.vel_loop_p = DEFAULT_vel_loop_p * 100 / denom;
FOC.vel_angloop_p = DEFAULT_vel_angloop_p * 100;
FOC.vel_MIT_p = DEFAULT_vel_MIT_p * 100;
FOC.ang_loop_p = DEFAULT_angle_loop_p * 100 / limit_voltage;
FOC.ang_angloop_p = DEFAULT_angle_angloop_p * 100 / limit_voltage;
FOC.ang_MIT_p = DEFAULT_angle_MIT_p * 100 / limit_voltage;
FOC.ang_loop_p = DEFAULT_angle_loop_p * 100 / denom;
FOC.ang_angloop_p = DEFAULT_angle_angloop_p * 100 / denom;
FOC.ang_MIT_p = DEFAULT_angle_MIT_p * 100 / denom;
// 运行期不每周期 set_P 的环路(mode1/mode5)在此同步一次有效增益,
// 避免沿用构造期的临时值
angle_loop.set_P(ang_loop_p);
current_loop.set_P(cur_loop_p);
return 0;
}
@@ -501,6 +274,15 @@ u8 FOC_Controller::init() {
*/
FOC_Controller::FOC_Controller() { ; }
/**
* @brief 每控制周期调用一次:计算当前电角度的 sin/cos。
* @note cal_Iq_Id 的 Park 变换与 setSVPWM_PhaseVoltage 的逆 Park 变换
* 使用同一电角度,三角函数每周期只算这一次,两处共用。
*/
inline void FOC_Controller::update_el_sincos(float angle_el) {
arm_sin_cos_f32(angle_el, &el_sin, &el_cos);
}
/**
* @brief 使用SVPWM算法设置电机输出
*
@@ -509,13 +291,12 @@ FOC_Controller::FOC_Controller() { ; }
*
* 优化:atan2f → X/Y/Z 符号法判扇区(~15周期 vs atan2f ~300周期)
* 边界上扇区编号可能与 atan2f 差1,但 duty 输出完全一致(已数值验证)
* 逆 Park 所需 sin/cos 由 update_el_sincos() 预计算,不再重复计算
*/
inline void FOC_Controller::setSVPWM_PhaseVoltage(float Uq, float Ud, float angle_el) {
// ① 逆Park变换(angle_el 由调用方传入)
float sin_el, cos_el;
arm_sin_cos_f32(angle_el, &sin_el, &cos_el);
float Ualpha = Ud * cos_el - Uq * sin_el;
float Ubeta = Ud * sin_el + Uq * cos_el;
inline void FOC_Controller::setSVPWM_PhaseVoltage(float Uq, float Ud) {
// ① 逆Park变换(sin/cos 为本周期预计算值)
float Ualpha = Ud * el_cos - Uq * el_sin;
float Ubeta = Ud * el_sin + Uq * el_cos;
// ② 扇区判定(替代 atan2f)
float X = Ubeta;
@@ -610,43 +391,6 @@ inline void FOC_Controller::setSVPWM_PhaseVoltage(float Uq, float Ud, float angl
Set_3Pwm(duty_a, duty_b, duty_c);
}
/**
* @brief 电机关机(通用关机,不带原因标记)
*
*/
void FOC_Controller::shut_down() {
drv_stop();
motor_sleep();
is_shut_down = true;
}
/**
* @brief 过热关机
*
*/
void FOC_Controller::shut_down_thermal() {
drv_stop();
motor_sleep();
is_shut_down = true;
thermal_shutdown = true;
}
/**
* @brief 过热恢复
*
*/
void FOC_Controller::resume_from_thermal() {
thermal_shutdown = false;
if (!voltage_error && !over_current) {
is_shut_down = false;
motor_resume();
}
}
/**
* @brief 占空比置0
*
*/
void FOC_Controller::drv_stop() { Set_3Pwm(0.0f, 0.0f, 0.0f); }
/**
* @brief 电机锁止
*/
@@ -672,28 +416,17 @@ float FOC_Controller::PWM_out() {
}
/**
* @brief 电机恢复
*
*/
void FOC_Controller::resume() {
over_current = false;
voltage_error = false;
is_shut_down = false;
motor_resume();
}
/**
* @brief 更新电源电压
*
* @note 读数不在合理区间(含采样链给的 ERROR_ADC_VAL 哨兵值)时保留上次值,
* 不更新。这里不再置"电压故障"标志:欠压判定与停机都在
* fast_voltage_check() → run_inhibit 那条路上做。
*/
void FOC_Controller::update_power(float voltage) {
if (voltage < 36.0f and voltage > 8.0f) {
voltage_error = false;
voltage_power_supply = voltage;
v_half = voltage * 0.5f;
v_safe = voltage * 1.1f;
} else {
voltage_error = true;
}
}
@@ -722,8 +455,11 @@ void FOC_Controller::update_power(float voltage) {
* @return void
*/
void FOC_Controller::fast_voltage_check(void) {
// 直接从DMA缓冲区读取最新ADC值(regular rank2 是 VBUS)
float current_vbus = adc_value[2] * (3.3f / 4096.0f) * 11.0f;
// ADC1 连续模式零等待读最新 VBUS(ch6,11:1 分压)。
// 旧实现 adc1_read_raw 阻塞式"触发+等EOC":10kHz 调用每次 ~1.5μs 死等。
// 通道顺序问题的历史注释已随 ADC1 连续模式改造失效(本函数只读 DR)。
float current_vbus =
adc1_read_vbus_latest() * (3.3f / 4096.0f) * 11.0f;
// 更新基准电压(峰值检测)
// 电压上升时,基准电压跟随;电压下跌时,基准电压保持
@@ -744,15 +480,15 @@ void FOC_Controller::fast_voltage_check(void) {
bool drop_exceeded = (voltage_drop > VBUS_DROP_THRESHOLD);
bool below_absolute = (current_vbus < VBUS_ABSOLUTE_MIN);
if ((drop_exceeded || below_absolute) && (!is_shut_down)) {
// 只看本来源是否已经申请过:不查别的故障源,避免欠压判定被过热/nFAULT 挡住
if ((drop_exceeded || below_absolute) &&
(run_inhibit.sources() & INHIBIT_UNDERVOLTAGE) == 0U) {
// 电压跌落计数(防抖)
vbus_drop_count++;
if (vbus_drop_count >= VBUS_DEBOUNCE_COUNT) {
// 确认需要关机,立即停机
drv_stop();
motor_sleep();
is_shut_down = true;
// 确认需要关机:只申请禁止位,停机动作由 run_inhibit 在控制任务里执行
run_inhibit.request(INHIBIT_UNDERVOLTAGE);
emergency_shutdown = true; // 标记紧急关机,低频任务会执行保存
vbus_drop_count = 0; // 重置计数器
}
@@ -772,15 +508,29 @@ float FOC_Controller::velocity_open_loop() {
// 通过时间间隔和目标速度计算需要转动的机械角度,存储在 shaft_angle 中
shaft_angle =
normalizeAngle360(shaft_angle + target_velocity * REDUCTION_RATIO / MOTOR_FREQUENCY);
// 电气角度(算一次,供 cal_Iq_Id / 齿槽补偿 / setSVPWM 共用)
float angle_el_cog = normalizeAngle360(shaft_angle * PP + KTH7823.calibration_angle);
// 电气角度(算一次,供 cal_Iq_Id / setSVPWM 共用)
float angle_el = normalizeAngle360(shaft_angle * PP + KTH7823.calibration_angle);
update_el_sincos(angle_el);
rt_current = cal_Iq_Id(sampler.get_current('U'), sampler.get_current('V'),
sampler.get_current('W'), angle_el_cog);
sampler.get_current('W'));
// 因为在开环控制中,Ud 始终为 0,只控制 Uq
const float Uq = _constrain(target_velocity * REDUCTION_RATIO * 0.005f,
2.0f, voltage_power_supply * 0.5f);
setSVPWM_PhaseVoltage(Uq + get_cogging_compensation(angle_el_cog), 0.0f, angle_el_cog);
// 幅度限幅必须保留符号:原 _constrain 下限为 +2V,负速度会被钳到 +2V,
// 磁场角度反向而 Uq 仍为正,导致反转时电机原地抖动。
float Uq = target_velocity * REDUCTION_RATIO * 0.005f;
const float UQ_MIN_MAG = 2.0f;
const float UQ_MAX_MAG = voltage_power_supply * 0.5f;
// 零速不输出,避免 2V 最小幅值导致静止时缓慢爬行
if (Uq != 0.0f) {
float Uq_mag = fabsf(Uq);
if (Uq_mag < UQ_MIN_MAG) {
Uq_mag = UQ_MIN_MAG;
} else if (Uq_mag > UQ_MAX_MAG) {
Uq_mag = UQ_MAX_MAG;
}
Uq = (Uq < 0.0f) ? -Uq_mag : Uq_mag;
}
setSVPWM_PhaseVoltage(Uq, 0.0f);
return limit_voltage;
}
@@ -791,17 +541,19 @@ float FOC_Controller::velocity_open_loop() {
* @return float: 当前角度
*/
float FOC_Controller::angle_control() {
// PID 控制计算
float Uq = angle_loop(target_angle - rt_angle);
// PID 控制计算(D 项对测量微分+低通,目标阶跃无微分踢)
angle_loop.set_P(ang_loop_p);
float Uq = angle_loop(target_angle - rt_angle, rt_angle);
// 获取电机轴角度
shaft_angle = KTH7823.getcurrent_sensorangle();
// 电气角度(算一次,供 cal_Iq_Id / 齿槽补偿 / setSVPWM 共用)
float angle_el_cog = normalizeAngle360(shaft_angle * PP + KTH7823.calibration_angle);
// 电气角度(算一次,供 cal_Iq_Id / setSVPWM 共用)
float angle_el = normalizeAngle360(shaft_angle * PP + KTH7823.calibration_angle);
update_el_sincos(angle_el);
rt_current = cal_Iq_Id(sampler.get_current('U'), sampler.get_current('V'),
sampler.get_current('W'), angle_el_cog);
sampler.get_current('W'));
// 设置相电压
setSVPWM_PhaseVoltage(Uq + get_cogging_compensation(angle_el_cog), 0.0f, angle_el_cog);
setSVPWM_PhaseVoltage(Uq, 0.0f);
return shaft_angle;
}
@@ -821,24 +573,45 @@ float FOC_Controller::velocity_control() {
// mode2 使用独立速度环参数。
vel_loop.set_PID(vel_loop_p, vel_loop_Ki, vel_loop_Kd);
vel_loop.set_limit(limit_voltage);
float Uq_pid = vel_loop(velocity_error);
// 仅"实质性换向"时清积分:目标速度变号且新幅值够大(真实反向指令)才清。
// 最终贴合阶段误差过零引起的微小变号(|target|=150×0.01°≈1.5°/s)不清——
// 否则积分被反复清空,低速段缩小的 P 项(0.12V@0.01°)推不过静摩擦,
// 永远停在差 ~0.01° 的位置
static float last_mode2_target_vel = 0.0f;
if (last_mode2_target_vel * target_velocity < 0.0f &&
fabsf(target_velocity) > 5.0f) {
vel_loop.reset_integral();
}
last_mode2_target_vel = target_velocity;
float Uq_pid =
vel_loop(velocity_error, rt_velocity * DIR * REDUCTION_RATIO);
static float uq_ff_table[MODE2_UQ_FF_TABLE_SIZE] = {0.0f};
float Uq_ff = update_angle_sync_uq_feedforward(
2, uq_ff_table, MODE2_UQ_FF_TABLE_SIZE, shaft_angle,
target_velocity, rt_velocity, velocity_error);
// PID 输出已内部钳位;前馈叠加后超限时泄放积分,
// 让 PID 感知真实饱和(否则重载下积分继续累积→释载超调振荡)
float Uq = Uq_pid + Uq_ff;
if (Uq > limit_voltage) Uq = limit_voltage;
else if (Uq < -limit_voltage) Uq = -limit_voltage;
if (Uq > limit_voltage) {
vel_loop.bleed_integral(Uq - limit_voltage);
Uq = limit_voltage;
} else if (Uq < -limit_voltage) {
vel_loop.bleed_integral(Uq + limit_voltage);
Uq = -limit_voltage;
}
CAN0_transmiter.testfloat_union.f = Uq;
// 电气角度(算一次,供 cal_Iq_Id / 齿槽补偿 / setSVPWM 共用)
float angle_el_cog = normalizeAngle360(shaft_angle * PP + KTH7823.calibration_angle);
// 电气角度(算一次,供 cal_Iq_Id / setSVPWM 共用)
float angle_el = normalizeAngle360(shaft_angle * PP + KTH7823.calibration_angle);
update_el_sincos(angle_el);
// 设置相电压
setSVPWM_PhaseVoltage(Uq + get_cogging_compensation(angle_el_cog), 0.0f, angle_el_cog);
setSVPWM_PhaseVoltage(Uq, 0.0f);
rt_current = cal_Iq_Id(sampler.get_current('U'), sampler.get_current('V'),
sampler.get_current('W'), angle_el_cog);
sampler.get_current('W'));
return rt_velocity;
}
@@ -851,20 +624,22 @@ float FOC_Controller::current_control() {
// 获取电机轴角度
shaft_angle = KTH7823.getcurrent_sensorangle();
CAN0_transmiter.testfloat_union.f = shaft_angle;
// 电气角度(算一次,供 cal_Iq_Id / 齿槽补偿 / setSVPWM 共用)
float angle_el_cog = normalizeAngle360(shaft_angle * PP + KTH7823.calibration_angle);
// 电气角度(算一次,供 cal_Iq_Id / setSVPWM 共用)
float angle_el = normalizeAngle360(shaft_angle * PP + KTH7823.calibration_angle);
update_el_sincos(angle_el);
// PID 控制计算
float Iq = rt_current =
cal_Iq_Id(sampler.get_current('U'), sampler.get_current('V'),
sampler.get_current('W'), angle_el_cog);
float Uq = current_loop(target_current - Iq);
sampler.get_current('W'));
current_loop.set_P(cur_loop_p);
float Uq = current_loop(target_current - Iq, Iq);
if (Uq > limit_voltage) {
Uq = limit_voltage;
} else if (Uq < -limit_voltage) {
Uq = -limit_voltage;
}
// 设置相电压
setSVPWM_PhaseVoltage(Uq + get_cogging_compensation(angle_el_cog), 0.0f, angle_el_cog);
setSVPWM_PhaseVoltage(Uq, 0.0f);
return 1;
}
@@ -880,21 +655,28 @@ float FOC_Controller::angle_control_with_velocity_limit() {
float angle_error = target_angle - rt_angle;
ang_inVelAngloop.set_P(ang_angloop_p);
// 使用角度PID控制器计算目标速度
float target_velocity = ang_inVelAngloop(angle_error);
// 使用角度PID控制器计算目标速度(D 项对测量微分+低通)
float target_velocity = ang_inVelAngloop(angle_error, rt_angle);
// 使用速度PID控制器计算最终输出电压
vel_inVelAngloop.set_P(get_mode3_velocity_p(target_velocity, rt_velocity));
// 低速段 P/I 各自按地板衰减(D 保持满值):I 地板更低(0.15),
// 停止瞬间积分充电速率仅为全速的 15%,进一步压制静摩擦 hunting
float i_scale = get_mode3_velocity_scale(target_velocity, rt_velocity,
MODE3_LOW_SPEED_I_MIN_SCALE);
vel_inVelAngloop.set_PID(get_mode3_velocity_p(target_velocity, rt_velocity),
vel_angloop_Ki * i_scale, vel_angloop_Kd);
float velocity_error = target_velocity - rt_velocity;
// 目标速度突变检测:target 大幅变化时清积分
// 仅"实质性换向"时清积分(变号且新幅值>5°/s)。制动段不清(防欠程);
// 最终贴合阶段误差过零的微小变号也不清(防积分反复被清、停在差0.01°)
static float last_vang_target_vel = 0.0f;
if (fabsf(target_velocity - last_vang_target_vel) > 5.0f) {
if (last_vang_target_vel * target_velocity < 0.0f &&
fabsf(target_velocity) > 5.0f) {
vel_inVelAngloop.reset_integral();
}
last_vang_target_vel = target_velocity;
float Uq_pid = vel_inVelAngloop(velocity_error) * DIR;
float Uq_pid = vel_inVelAngloop(velocity_error, rt_velocity) * DIR;
// 获取电机轴角度:mode3 Uq 前馈补偿按物理 360° 查表。
shaft_angle = KTH7823.getcurrent_sensorangle();
@@ -903,18 +685,25 @@ float FOC_Controller::angle_control_with_velocity_limit() {
3, mode3_uq_ff_table, MODE3_UQ_FF_TABLE_SIZE, shaft_angle,
target_velocity, rt_velocity, velocity_error);
// 前馈叠加后超限时泄放积分(×DIR 补偿:Uq = PID输出×DIR + 前馈)
float Uq = Uq_pid + Uq_ff;
if (Uq > limit_voltage) Uq = limit_voltage;
else if (Uq < -limit_voltage) Uq = -limit_voltage;
if (Uq > limit_voltage) {
vel_inVelAngloop.bleed_integral(DIR * (Uq - limit_voltage));
Uq = limit_voltage;
} else if (Uq < -limit_voltage) {
vel_inVelAngloop.bleed_integral(DIR * (Uq + limit_voltage));
Uq = -limit_voltage;
}
CAN0_transmiter.testfloat_union.f = shaft_angle;
// 电气角度(算一次,供 cal_Iq_Id / 齿槽补偿 / setSVPWM 共用)
float angle_el_cog = normalizeAngle360(shaft_angle * PP + KTH7823.calibration_angle);
// 电气角度(算一次,供 cal_Iq_Id / setSVPWM 共用)
float angle_el = normalizeAngle360(shaft_angle * PP + KTH7823.calibration_angle);
update_el_sincos(angle_el);
// 获取当前实际电流值
rt_current = cal_Iq_Id(sampler.get_current('U'), sampler.get_current('V'),
sampler.get_current('W'), angle_el_cog);
sampler.get_current('W'));
// 设置相电压
setSVPWM_PhaseVoltage(Uq + get_cogging_compensation(angle_el_cog), 0.0f, angle_el_cog);
setSVPWM_PhaseVoltage(Uq, 0.0f);
return shaft_angle;
}
@@ -931,36 +720,38 @@ float FOC_Controller::MIT_Mode() {
float angle_error = target_angle - rt_angle;
ang_inMITloop.set_P(ang_MIT_p);
float target_velocity =
ang_inMITloop(angle_error);
ang_inMITloop(angle_error, rt_angle);
// 第二层:速度环(中环)
float velocity_error = (target_velocity - rt_velocity)* DIR;
// 目标速度变化检测:target 大幅变化时清积分
// 仅"实质性换向"时清积分(变号且新幅值>5°/s,理由同 mode3)
static float last_mit_target_vel = 0.0f;
if (fabsf(target_velocity - last_mit_target_vel) > 5.0f) {
if (last_mit_target_vel * target_velocity < 0.0f &&
fabsf(target_velocity) > 5.0f) {
vel_inMITloop.reset_integral();
}
last_mit_target_vel = target_velocity;
vel_inMITloop.set_P(vel_MIT_p);
float target_current = vel_inMITloop(velocity_error);
float target_current = vel_inMITloop(velocity_error, rt_velocity * DIR);
// 获取电机轴角度
shaft_angle = KTH7823.getcurrent_sensorangle();
// 电气角度(算一次,供 cal_Iq_Id / 齿槽补偿 / setSVPWM 共用)
float angle_el_cog = normalizeAngle360(shaft_angle * PP + KTH7823.calibration_angle);
// 电气角度(算一次,供 cal_Iq_Id / setSVPWM 共用)
float angle_el = normalizeAngle360(shaft_angle * PP + KTH7823.calibration_angle);
update_el_sincos(angle_el);
// 第三层:电流环(内环)
rt_current = cal_Iq_Id(sampler.get_current('U'), sampler.get_current('V'),
sampler.get_current('W'), angle_el_cog);
sampler.get_current('W'));
float current_error = target_current - rt_current;
current_inMITloop.set_P(cur_MIT_p);
float Uq = current_inMITloop(current_error);
float Uq = current_inMITloop(current_error, rt_current);
// 设置相电压
setSVPWM_PhaseVoltage(Uq + get_cogging_compensation(angle_el_cog), 0.0f, angle_el_cog);
setSVPWM_PhaseVoltage(Uq, 0.0f);
return shaft_angle;
}
+30 -145
View File
@@ -39,16 +39,13 @@ class FOC_Controller {
float rt_velocity = 0.0f;
float rt_current = 0.0f;
bool over_current = false;
bool voltage_error = false;
bool is_shut_down = false;
bool thermal_shutdown = false; // 过热关机标志
// 关机事件标记:通知低频任务把当前状态落盘(不是"能不能运行"的判据,
// 运行许可一律看 sys/run_inhibit.h)
bool emergency_shutdown = false; // 紧急电压跌落关机标志
float voltage_power_supply = 24.0f; // 电源电压
float v_safe = voltage_power_supply / 1.05f;
float duty_a = 0, duty_b = 0, duty_c = 0;
float Ua = 0, Ub = 0, Uc = 0;
// 快速电压检测相关成员(基于跌幅检测)
float vbus_reference = 0.0f; // 基准电压(峰值检测,跟踪当前额定电压)
@@ -109,21 +106,6 @@ class FOC_Controller {
* @return void
*/
void DFOC_alignSensor(int _PP);
/**
* @brief shut_down 函数
* @return void
*/
void shut_down(void);
/**
* @brief resume 函数
* @return void
*/
void resume(void);
/**
* @brief drv_stop 函数
* @return void
*/
void drv_stop(void);
/**
* @brief drv_hold 函数
* @return float 返回值
@@ -134,131 +116,26 @@ class FOC_Controller {
* @return float 返回值
*/
float PWM_out(void);
/**
* @brief shut_down_thermal 函数
* @return void
*/
void shut_down_thermal(void); // 过热关机
/**
* @brief resume_from_thermal 函数
* @return void
*/
void resume_from_thermal(void); // 过热恢复
/**
* @brief fast_voltage_check 函数
* @return void
*/
void fast_voltage_check(void); // 快速电压检测(100us周期调用)
// 齿槽转矩补偿
bool cogging_comp_enabled = false;
float cogging_comp_scale = COGGING_COMP_SCALE;
float cogging_table[COGGING_TABLE_SIZE] = {0}; // 齿槽补偿表-正转 (mA)
float cogging_table_rev[COGGING_TABLE_SIZE] = {0}; // 齿槽补偿表-反转 (mA)
/**
* @brief 获取 get_cogging_compensation 对应的数据或状态
* @param[in] angle_el 参数
* @return float 返回值
*/
inline float get_cogging_compensation(float angle_el);
// === 校准相关(DEBUG,平时不启用)===
// 启用方法:config.h 中 FOC_DEBUG 改为 1
#if FOC_DEBUG
volatile bool cogging_calib_request = false;
/**
* @brief 齿槽校准状态机入口,每个周期按当前状态派发到对应处理函数
* @return void
*/
void calibrate_cogging_tick(void);
/**
* @brief 处理齿槽校准空闲态,收到请求后保存现场并进入稳定等待态
* @return void
*/
void start_cogging_calibration(void);
/**
* @brief 处理齿槽校准稳定等待态,等待电机进入稳定低速运行
* @return void
*/
void cogging_settling_tick(void);
/**
* @brief 处理齿槽校准采样态,按分频周期累计每个电角度桶的电流
* @return void
*/
void cogging_sampling_tick(void);
/**
* @brief 处理齿槽校准停止态,等待停稳后完成本轮数据归一化
* @return void
*/
void cogging_stopping_tick(void);
/**
* @brief 处理齿槽校准完成态,生成补偿表并打印校准结果
* @return void
*/
void cogging_done_tick(void);
/**
* @brief 计算当前校准轮次的平均电流并去除直流偏置
* @return float 当前轮次直流偏置,单位 mA
*/
float process_cogging_run_data(void);
/**
* @brief 切换到下一轮齿槽校准运行方向并重新进入稳定等待态
* @return void
*/
void start_next_cogging_run(void);
/**
* @brief 根据 3 次正转和 3 次反转采样结果生成最终补偿表
* @return void
*/
void build_cogging_tables(void);
/**
* @brief 打印齿槽补偿表的人类可读角度/电流列表
* @param[in] title 表格标题字符串
* @param[in] table 待打印的补偿表
* @return void
*/
void print_cogging_table(const char *title, float *table);
/**
* @brief 打印可直接复制回源码的齿槽补偿 C 数组
* @param[in] title 输出标题字符串
* @param[in] arrayName C 数组名
* @param[in] table 待打印的补偿表
* @return void
*/
void print_cogging_c_array(const char *title, const char *arrayName,
float *table);
/**
* @brief CogCalibState 枚举定义
*/
enum class CogCalibState : u8 {
IDLE = 0,
SETTLING,
SAMPLING,
STOPPING,
DONE
};
CogCalibState cog_calib_state = CogCalibState::IDLE;
u8 cog_calib_run = 0;
u32 cog_calib_sample_count = 0;
u32 cog_calib_settle_tick = 0;
u32 cog_calib_stop_tick = 0;
u8 cog_calib_saved_mode = 0;
float cog_calib_saved_vel = 0;
static float cog_calib_run_data[6][COGGING_TABLE_SIZE]; // 3正+3反
static float cog_calib_accum[COGGING_TABLE_SIZE];
static u32 cog_calib_count[COGGING_TABLE_SIZE];
#endif // FOC_DEBUG
// 此处默认值不作数
// 注意:构造期 limit_voltage 尚为 0,分母一律用 voltage_power_supply(24V),
// 否则 P 初始化为 +inf;运行期各模式每周期 set_P/set_PID 覆盖。
// 内环 output_ramp 保持原值:实测收紧到 2000 V/s 会在制动段引入相位滞后,
// 导致到位抖动,已回退。
PIDController vel_loop =
PIDController{DEFAULT_vel_loop_p * 100 / limit_voltage, vel_loop_Ki,
vel_loop_Kd, 10000, voltage_power_supply}; // 12V
PIDController{DEFAULT_vel_loop_p * 100 / voltage_power_supply, vel_loop_Ki,
vel_loop_Kd, 10000, voltage_power_supply};
PIDController angle_loop =
PIDController{DEFAULT_angle_loop_p * 100 / limit_voltage, 100.0f, 0.2f,
10000000, voltage_power_supply}; // 12V
PIDController{DEFAULT_angle_loop_p * 100 / voltage_power_supply, 100.0f,
0.02f, 10000000, voltage_power_supply};
PIDController current_loop = PIDController{
DEFAULT_current_loop_p * 100 / limit_voltage, current_loop_Ki,
current_loop_Kd, 1500, voltage_power_supply}; // 12V
DEFAULT_current_loop_p * 100 / voltage_power_supply, current_loop_Ki,
current_loop_Kd, 1500, voltage_power_supply};
PIDController vel_inVelAngloop =
PIDController{DEFAULT_vel_angloop_p * 100, vel_angloop_Ki,
vel_angloop_Kd, 1e6, v_safe};
@@ -267,13 +144,13 @@ class FOC_Controller {
ang_angloop_Ki, ang_angloop_Kd, 1e4, 100};
PIDController ang_inMITloop =
PIDController{DEFAULT_angle_MIT_p * 100 / limit_voltage, angle_MIT_Ki,
PIDController{DEFAULT_angle_MIT_p * 100 / voltage_power_supply, angle_MIT_Ki,
angle_MIT_Kd, 1e5, 100};
PIDController vel_inMITloop = PIDController{
DEFAULT_vel_MIT_p * 100, vel_MIT_Ki, vel_MIT_Kd, 1e9, 1000};
PIDController current_inMITloop = PIDController{
DEFAULT_current_loop_p * 100 / limit_voltage, current_loop_Ki,
current_loop_Kd, 1500, voltage_power_supply}; // 12V
DEFAULT_current_loop_p * 100 / voltage_power_supply, current_loop_Ki,
current_loop_Kd, 1500, voltage_power_supply};
/**
* @brief 更新 pid_limits 相关状态
@@ -289,32 +166,40 @@ class FOC_Controller {
protected:
float shaft_angle = 0;
float Ualpha, Ubeta = 0;
float zero_electric_angle = 0;
float v_half = voltage_power_supply * 0.5f; // 电源电压的一半
float startup_ramp_val = 0.0f; // 软启动系数
float startup_ramp_step = 0.01f; // 启动斜坡步长,可调节以控制启动速度
// 本周期电角度的 sin/cos:update_el_sincos() 每周期算一次,
// Park 变换与逆 Park 变换共用,避免同一角度算两次三角函数
float el_sin = 0.0f;
float el_cos = 0.0f;
/**
* @brief 每周期计算一次电角度 sin/cos 供 Park/逆Park 共用
* @param[in] angle_el 电角度(度)
* @return void
*/
inline void update_el_sincos(float angle_el);
/**
* @brief 设置 setSVPWM_PhaseVoltage 对应的参数或状态
* @param[in] Uq 参数
* @param[in] Ud 参数
* @param[in] angle_el 参数
* @return void
*/
void setSVPWM_PhaseVoltage(float Uq, float Ud, float angle_el);
void setSVPWM_PhaseVoltage(float Uq, float Ud);
/**
* @brief cal_Iq_Id 函数
* @param[in] current_a 参数
* @param[in] current_b 参数
* @param[in] current_c 参数
* @param[in] angle_el 参数
* @return float 返回值
* @note 电气角度三角函数用 update_el_sincos() 的预计算结果
*/
float cal_Iq_Id(float current_a, float current_b, float current_c, float angle_el);
float cal_Iq_Id(float current_a, float current_b, float current_c);
float update_angle_sync_uq_feedforward(u8 mode, float table[],
u16 table_size, float mech_angle,
float target_vel, float actual_vel,
float velocity_error);
float get_mode3_velocity_p(float target_vel, float actual_vel);
float get_mode3_velocity_scale(float target_vel, float actual_vel,
float min_scale);
};
// 定义函数指针类型
+28 -7
View File
@@ -58,17 +58,38 @@ CurrentKalman Current_kalman( CURRENT_KALMAN_INITIAL_STATE, CURRENT_KALMAN_INITI
\param[in] values 待滤波的数据数组
\param[in] size 数组大小
\retval 滤波后的中值
\note 使用部分排序优化算法提高效率
\note size==6(ADC_FILTER_SIZE,唯一实际调用)走固定 12 次比较的
排序网络:std::nth_element 是通用算法,对 6 个元素的开销
数倍于固定网络,而本函数在 1kHz 慢速任务里被 3 处调用。
语义与旧版一致:返回上中值(完全排序后的 [size/2])。
*/
static inline void median_cswap(float &a, float &b) {
if (a > b) {
float t = a;
a = b;
b = t;
}
}
float medium_filter(float values[], u8 size) {
// 使用局部数组避免动态内存分配
float sorted[size];
if (size == 6) {
float s0 = values[0], s1 = values[1], s2 = values[2];
float s3 = values[3], s4 = values[4], s5 = values[5];
// n=6 最优排序网络(12 个比较器,Knuth AoCP Vol.3)
median_cswap(s1, s2); median_cswap(s4, s5);
median_cswap(s0, s2); median_cswap(s3, s5);
median_cswap(s0, s1); median_cswap(s3, s4); median_cswap(s2, s5);
median_cswap(s0, s3); median_cswap(s1, s4); median_cswap(s2, s4);
median_cswap(s1, s3); median_cswap(s2, s3);
return s3;
}
// 其他尺寸的通用回退路径(当前无调用者)
float sorted[16];
if (size > 16U) size = 16U;
memcpy(sorted, values, size * SIZE_FLOAT);
// 这比完整排序更高效,时间复杂度从O(n log n)降低到O(n)
std::nth_element(sorted, sorted + size / 2, sorted + size);
return sorted[size / 2]; // 返回中值
return sorted[size / 2];
}
// EncoderVelocityKalman类的实现
+2
View File
@@ -7,6 +7,8 @@
#ifndef _FILTER_H
#define _FILTER_H
#include "config.h"
#ifdef __cplusplus
extern "C" {
#endif
+56 -12
View File
@@ -12,33 +12,55 @@
#include <cmath>
extern CAN_transmiter CAN0_transmiter;
// 微分项一阶低通离散系数:α = Ts / (τ + Ts)
constexpr float DERIV_LPF_ALPHA = TIME_SLICE / (DERIV_LPF_TAU + TIME_SLICE);
PIDController::PIDController(float P, float I, float D, float ramp, float limit)
: P(P), I(I), D(D), output_ramp(ramp) // PID控制器加速度限幅
,
limit(limit) // PID控制器输出限幅
,
error_prev(0.0f), output_prev(0.0f), integral_prev(0.0f) {}
error_prev(0.0f), output_prev(0.0f), integral_prev(0.0f),
measurement_prev(0.0f), derivative_filt(0.0f), deriv_init(false) {}
// PID 控制器函数
float PIDController::operator()(float error) {
// 测量微分版本:D 项对测量量而非误差微分,目标阶跃不再产生微分踢
float PIDController::operator()(float error, float measurement) {
// 首次调用只建立测量基线,避免 (meas-0)/Ts 的假微分尖峰
if (!deriv_init) {
measurement_prev = measurement;
deriv_init = true;
}
float d_raw = -(measurement - measurement_prev) / TIME_SLICE;
derivative_filt += DERIV_LPF_ALPHA * (d_raw - derivative_filt);
measurement_prev = measurement;
return step(error, D * derivative_filt);
}
// 公共计算路径:Tustin 积分 + 条件积分抗饱和 + 输出斜坡
float PIDController::step(float error, float derivative) {
// P环
float proportional = P * error;
// Tustin 散点积分(I环)
// 添加积分限幅,防止积分饱和
float integral =
integral_prev + I * TIME_SLICE * 0.5f * (error + error_prev);
// 将P,I,D三环的计算值加起来,与限幅比较得到未饱和/饱和输出
float output_unsat = proportional + integral + derivative;
float output = _constrain(output_unsat, -limit, limit);
// 抗积分饱和(条件积分):输出饱和且误差仍在推高饱和方向时冻结积分。
// 不用大增益反算回退——深饱和时(P 项单独超限幅)反算会把积分压成反号,
// 误差一缩小输出瞬间反向,实测表现为到位疯狂抖动/停不到位。
if (output != output_unsat) {
if ((output_unsat > limit && error > 0.0f) ||
(output_unsat < -limit && error < 0.0f)) {
integral = integral_prev; // 冻结:不再向饱和方向累积
}
}
integral = _constrain(integral, -limit, limit);
// D环(微分环节)
float derivative = D * (error - error_prev) / TIME_SLICE;
// 将P,I,D三环的计算值加起来
float output = proportional + integral + derivative;
output = _constrain(output, -limit, limit);
// 输出斜坡限制
// 简化的斜坡限制(单行逻辑)
if (output_ramp > 0) {
float max_delta = output_ramp * TIME_SLICE;
output = output_prev +
@@ -52,6 +74,25 @@ float PIDController::operator()(float error) {
return output;
}
/**
* @brief 外部饱和泄放积分:前馈叠加后超出限幅时调用
* @param[in] excess 超出限幅的部分(带符号)
* @return void
* @note 仅当积分与超限同号(积分在加剧超限)时泄放,且不泄过零点:
* 防止前馈导致的饱和把积分抽干成反号,到位段失去保持力。
*/
void PIDController::bleed_integral(float excess) {
if (excess > 0.0f && integral_prev > 0.0f) {
float bleed = ANTI_WINDUP_GAIN * excess;
integral_prev = (integral_prev > bleed) ? (integral_prev - bleed)
: 0.0f;
} else if (excess < 0.0f && integral_prev < 0.0f) {
float bleed = ANTI_WINDUP_GAIN * (-excess);
integral_prev = (integral_prev < -bleed) ? (integral_prev + bleed)
: 0.0f;
}
}
/**
* @brief 设置PID参数
*
@@ -93,6 +134,9 @@ void PIDController::reset() {
error_prev = 0.0f;
output_prev = 0.0f;
integral_prev = 0.0f;
measurement_prev = 0.0f;
derivative_filt = 0.0f;
deriv_init = false;
}
/**
+28 -6
View File
@@ -15,9 +15,15 @@ class PIDController {
PIDController(float P, float I, float D, float ramp, float limit);
~PIDController() = default;
float operator()(float error);
/**
* @brief 设置 set_PID 对应的参数或状态
* @brief PID 计算(唯一入口)
* @param[in] error 控制误差
* @param[in] measurement 反馈测量量(D 项对它微分,目标阶跃不产生微分踢)
* @return float PID 输出
*/
float operator()(float error, float measurement);
/**
* @brief 设置 set_PID 对应的参数
* @param[in] P 参数
* @param[in] I 参数
* @param[in] D 参数
@@ -25,13 +31,13 @@ class PIDController {
*/
void set_PID(float P, float I, float D);
/**
* @brief 设置 set_P 对应的参数或状态
* @brief 设置 set_P 对应的参数
* @param[in] pp 参数
* @return void
*/
void set_P(float pp);
/**
* @brief 设置 set_limit 对应的参数或状态
* @brief 设置 set_limit 对应的参数
* @param[in] limit 参数
* @return void
*/
@@ -46,6 +52,13 @@ class PIDController {
* @return void
*/
void reset_integral(); // 仅清除积分项,保留输出斜坡状态
/**
* @brief 外部饱和泄放积分(反算抗饱和的补充入口)
* @param[in] excess 输出超出限幅的部分(带符号),如前馈叠加后超限
* @return void
* @note 调用方向须与 PID 输出到最终 Uq 的符号一致(有 ×DIR 的要乘上 DIR)
*/
void bleed_integral(float excess);
float P; //!< 比例增益(P环增益)
float I; //!< 积分增益(I环增益)
@@ -54,11 +67,20 @@ class PIDController {
float limit;
protected:
/**
* @brief 公共计算路径:积分、抗饱和、输出斜坡
* @param[in] error 控制误差
* @param[in] derivative 已完成低通滤波的微分项(D 已乘入)
* @return float PID 输出
*/
float step(float error, float derivative);
float error_prev; //!< 最后的跟踪误差值
float output_prev; //!< 最后一个 pid 输出值
float integral_prev; //!< 最后一个积分分量值
unsigned long timestamp_prev; //!< 上次执行时间戳
float integral_separation_threshold; //!< 积分分离阈值,用于抗积分饱和
float measurement_prev; //!< 上次测量值(对测量微分用)
float derivative_filt; //!< 微分项一阶低通滤波后的变化率
bool deriv_init; //!< 测量微分是否已完成首次采样
};
#endif
+19 -44
View File
@@ -1,12 +1,6 @@
/**
* @file RTE/_Debug_GD32C103CB/RTE_Components.h
* @brief GD32 RTE 外设库或运行时配置源文件
* @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。
*/
/*
* CSOLUTION generated file: DO NOT EDIT!
* Generated by: csolution version 2.13.0+p3-g40b6564e
* Generated by: csolution version 2.12.0
*
* Project: 'Robot_V2.Debug+GD32C103CB'
* Target: 'Debug+GD32C103CB'
@@ -19,62 +13,43 @@
/*
* Define the Device Header File:
*/
/** @brief CMSIS_device_header 宏定义 */
#define CMSIS_device_header "gd32c10x.h"
/* GigaDevice::Device:GD32C10x_StdPeripherals:ADC@1.0.0 */
/** @brief RTE_DEVICE_STDPERIPHERALS_ADC 宏定义 */
/* GigaDevice::Device:GD32C10x_StdPeripherals:ADC@1.3.0 */
#define RTE_DEVICE_STDPERIPHERALS_ADC
/* GigaDevice::Device:GD32C10x_StdPeripherals:BKP@1.0.0 */
/** @brief RTE_DEVICE_STDPERIPHERALS_BKP 宏定义 */
/* GigaDevice::Device:GD32C10x_StdPeripherals:BKP@1.3.0 */
#define RTE_DEVICE_STDPERIPHERALS_BKP
/* GigaDevice::Device:GD32C10x_StdPeripherals:CAN@1.0.0 */
/** @brief RTE_DEVICE_STDPERIPHERALS_CAN 宏定义 */
/* GigaDevice::Device:GD32C10x_StdPeripherals:CAN@1.3.0 */
#define RTE_DEVICE_STDPERIPHERALS_CAN
/* GigaDevice::Device:GD32C10x_StdPeripherals:CRC@1.0.0 */
/** @brief RTE_DEVICE_STDPERIPHERALS_CRC 宏定义 */
/* GigaDevice::Device:GD32C10x_StdPeripherals:CRC@1.3.0 */
#define RTE_DEVICE_STDPERIPHERALS_CRC
/* GigaDevice::Device:GD32C10x_StdPeripherals:DBG@1.0.0 */
/** @brief RTE_DEVICE_STDPERIPHERALS_DBG 宏定义 */
/* GigaDevice::Device:GD32C10x_StdPeripherals:DBG@1.3.0 */
#define RTE_DEVICE_STDPERIPHERALS_DBG
/* GigaDevice::Device:GD32C10x_StdPeripherals:DMA@1.0.0 */
/** @brief RTE_DEVICE_STDPERIPHERALS_DMA 宏定义 */
/* GigaDevice::Device:GD32C10x_StdPeripherals:DMA@1.3.0 */
#define RTE_DEVICE_STDPERIPHERALS_DMA
/* GigaDevice::Device:GD32C10x_StdPeripherals:EXTI@1.0.0 */
/** @brief RTE_DEVICE_STDPERIPHERALS_EXTI 宏定义 */
/* GigaDevice::Device:GD32C10x_StdPeripherals:EXTI@1.3.0 */
#define RTE_DEVICE_STDPERIPHERALS_EXTI
/* GigaDevice::Device:GD32C10x_StdPeripherals:FMC@1.0.0 */
/** @brief RTE_DEVICE_STDPERIPHERALS_FMC 宏定义 */
/* GigaDevice::Device:GD32C10x_StdPeripherals:FMC@1.3.0 */
#define RTE_DEVICE_STDPERIPHERALS_FMC
/* GigaDevice::Device:GD32C10x_StdPeripherals:FWDGT@1.0.0 */
/** @brief RTE_DEVICE_STDPERIPHERALS_FWDGT 宏定义 */
/* GigaDevice::Device:GD32C10x_StdPeripherals:FWDGT@1.3.0 */
#define RTE_DEVICE_STDPERIPHERALS_FWDGT
/* GigaDevice::Device:GD32C10x_StdPeripherals:GPIO@1.0.0 */
/** @brief RTE_DEVICE_STDPERIPHERALS_GPIO 宏定义 */
/* GigaDevice::Device:GD32C10x_StdPeripherals:GPIO@1.3.0 */
#define RTE_DEVICE_STDPERIPHERALS_GPIO
/* GigaDevice::Device:GD32C10x_StdPeripherals:MISC@1.0.0 */
/** @brief RTE_DEVICE_STDPERIPHERALS_MISC 宏定义 */
/* GigaDevice::Device:GD32C10x_StdPeripherals:MISC@1.3.0 */
#define RTE_DEVICE_STDPERIPHERALS_MISC
/* GigaDevice::Device:GD32C10x_StdPeripherals:PMU@1.0.0 */
/** @brief RTE_DEVICE_STDPERIPHERALS_PMU 宏定义 */
/* GigaDevice::Device:GD32C10x_StdPeripherals:PMU@1.3.0 */
#define RTE_DEVICE_STDPERIPHERALS_PMU
/* GigaDevice::Device:GD32C10x_StdPeripherals:RCU@1.0.0 */
/** @brief RTE_DEVICE_STDPERIPHERALS_RCU 宏定义 */
/* GigaDevice::Device:GD32C10x_StdPeripherals:RCU@1.3.0 */
#define RTE_DEVICE_STDPERIPHERALS_RCU
/* GigaDevice::Device:GD32C10x_StdPeripherals:RTC@1.0.0 */
/** @brief RTE_DEVICE_STDPERIPHERALS_RTC 宏定义 */
/* GigaDevice::Device:GD32C10x_StdPeripherals:RTC@1.3.0 */
#define RTE_DEVICE_STDPERIPHERALS_RTC
/* GigaDevice::Device:GD32C10x_StdPeripherals:SPI_I2S@1.0.0 */
/** @brief RTE_DEVICE_STDPERIPHERALS_SPI 宏定义 */
/* GigaDevice::Device:GD32C10x_StdPeripherals:SPI_I2S@1.3.0 */
#define RTE_DEVICE_STDPERIPHERALS_SPI
/* GigaDevice::Device:GD32C10x_StdPeripherals:TIMER@1.0.0 */
/** @brief RTE_DEVICE_STDPERIPHERALS_TIMER 宏定义 */
/* GigaDevice::Device:GD32C10x_StdPeripherals:TIMER@1.3.0 */
#define RTE_DEVICE_STDPERIPHERALS_TIMER
/* GigaDevice::Device:GD32C10x_StdPeripherals:USART@1.0.0 */
/** @brief RTE_DEVICE_STDPERIPHERALS_USART 宏定义 */
/* GigaDevice::Device:GD32C10x_StdPeripherals:USART@1.3.0 */
#define RTE_DEVICE_STDPERIPHERALS_USART
/* GigaDevice::Device:GD32C10x_StdPeripherals:WWDGT@1.0.0 */
/** @brief RTE_DEVICE_STDPERIPHERALS_WWDGT 宏定义 */
/* GigaDevice::Device:GD32C10x_StdPeripherals:WWDGT@1.3.0 */
#define RTE_DEVICE_STDPERIPHERALS_WWDGT
+2
View File
@@ -14,6 +14,8 @@ project:
- file: sys/initial.h
- file: sys/health.h
- file: sys/health.cpp
- file: sys/run_inhibit.h
- file: sys/run_inhibit.cpp
- file: sys/flash.h
- file: sys/flash.cpp
- file: sys/config.h
+264 -77
View File
@@ -13,8 +13,8 @@
#include "math.h"
#include "systick.h"
#include <cstdint>
#include <cstdio>
#include <cstring>
#include <gd32c10x_dma.h>
// ADC 换算常量均为编译期常量,非可变全局状态。
// 用于 ADC 原始值到电压、温度、电流的固定比例换算。
@@ -24,106 +24,232 @@ constexpr float ADC_SCALE = 3.3f / 4096.0f;
constexpr float TEMP_FACTOR = 1000.0f / 4.3f;
/** @brief VCC_FACTOR 常量定义 */
constexpr float VCC_FACTOR = 11.0f;
/** @brief CURRENT_FACTOR 常量定义 */
#if GATE_DRIVER_DRV8323
/** @brief CURRENT_FACTOR 常量定义(新板:DRV8323 片上 CSA)
* SOx = VREF/2 ± I×R×G(SPI 已配置 VREF_DIV=1、GAIN 见 config.h)。
* ADC_SCALE 输出为伏特,故系数单位为 mA/V = 1000/(G×R):
* G=10V/V、R=10mΩ → 10000 mA/V,量程约 ±16.5A。
* 修改 config.h 的 DRV8323_CSA_GAIN_VV 后此系数自动跟随。 */
constexpr float CURRENT_FACTOR =
1000.0f / (DRV8323_CSA_GAIN_VV * DRV8323_SHUNT_OHM);
#elif CURRENT_SENSE_INA240
/** @brief CURRENT_FACTOR 常量定义(低边采样板:下桥臂 10mΩ + INA240A2)
* 电流链路单位为安培:get_current() 返回 A,cal_Iq_Id/Can 上报处 ×1000 转 mA。
* OUT = 1.65V ± I×R×G(REF1=AGND、REF2=A3V3,芯片内部分压取中点 1.65V),
* G=50V/V、R=10mΩ → 0.5V/A → 2.0 A/V,ADC 3.3V 满量程对应约 ±3.3A。
* 与老板外置放大链(50倍×10mΩ)标定数值恰好一致;换增益/阻值时此系数
* 随 config.h 的 INA240_CSA_GAIN_VV / INA240_SHUNT_OHM 自动跟随。 */
constexpr float CURRENT_FACTOR =
1.0f / (INA240_CSA_GAIN_VV * INA240_SHUNT_OHM);
#else
/** @brief CURRENT_FACTOR 常量定义(老板:外置放大链,保持原标定) */
constexpr float CURRENT_FACTOR =
1.0f / 50.0f * 100.0f; // 50倍放大,100倍电流采样电阻, 单位mA
#endif
extern CAN_transmiter CAN0_transmiter;
extern FOC_Controller FOC;
// 全局采样器单例:系统只有一组 ADC 采样缓存,由 hardware_init() 调用 sampler.init() 初始化。
// regular DMA 写 adc_value[];injected ADC 中断写 adc_current_value[] 并置位 adc_current_frame_ready。
// ADC0 只跑 injected 组(PWM 同步):中断写 adc_current_value[](U/V/W)与
// adc_mcu_temp_raw(温度,挂注入序列尾部同步转换)并置位 adc_current_frame_ready。
// VBUS / DRV温度 由 ADC1 在慢速任务中软件触发轮询,与电流采样彻底隔离。
// 背景:此前温度/VBUS/DRV 放在 ADC0 regular 组连续扫描,与 injected 抢占同一 ADC。
// 温度通道提到 239.5 周期后,稳态下注入触发几乎必然打断温度采样中段:
// regular 被打断后从 rank0 重启而 DMA 计数不复位 → adc_value[] 数据错位;
// 采样电容长期挂在高内阻温度源电压上,干扰注入组首通道 → 相电流检测故障。
sampler sampler; // 采样器初始化
u16 adc_value[3] = {0}; // regular DMA: MCU温度 / DRV温度 / VBUS
volatile u16 adc_mcu_temp_raw = 0; // ADC0 injected rank3: MCU温度原始值
static volatile u16 adc_current_value[3] = {0}; // injected 同步采样: U / V / W
static volatile u8 adc_current_frame_ready = 0;
// ---- 三相电流零点配平结果(上电一次,hardware_init 在 gate_driver_bringup
// 之后调用 zero_calibrate 采集)。含义:各通道实测零点相对 CURRENT_OFFSET
// 基准的偏差(V),采样换算时逐通道扣除,吸收 REF 中点偏差、AGND/PGND 地差
// 与 INA 失调。初始 0 = 未配平(按标称零点换算)。
static float adc_zero_offset_v[3] = {0.0f, 0.0f, 0.0f};
/**
* @brief 将电流 ADC 原始值换算为毫安值
* @param[in] raw_adc 参数
* @brief 将电流 ADC 原始值换算为电流值
* @param[in] raw_adc 注入组转换原始值
* @param[in] ch 通道号 0/1/2 = U/V/W(逐通道扣除上电配平零点偏差)
* @return float 返回值
* @note 函数名沿用历史(_to_ma),实际返回单位是安培:MIN/MAX_CURRENT(±40)
* 为安培阈值,cal_Iq_Id / CAN 上报处再 ×1000 转 mA。
*/
static inline float current_adc_to_ma(u16 raw_adc) {
return (raw_adc * ADC_SCALE + CURRENT_OFFSET) * CURRENT_FACTOR;
static inline float current_adc_to_ma(u16 raw_adc, u8 ch) {
return (raw_adc * ADC_SCALE + CURRENT_OFFSET - adc_zero_offset_v[ch]) *
CURRENT_FACTOR;
}
// ADC1 连续转换运行标志:adc1_config() 启动后置位,
// adc1_read_raw() 据此判断是否需要暂停/恢复连续模式。
static bool adc1_continuous_active = false;
/*!
\brief configure the DMA peripheral
\brief configure the ADC1 peripheral(VBUS 连续转换 / DRV温度 单次轮询)
\param[in] none
\param[out] none
\retval none
\note ADC1 独占慢速量:ch6(VBUS) 连续转换,读取零等待;ch9(DRV NTC)
由 adc1_read_raw() 按需暂停连续模式单次轮询。无 DMA、无中断,
与 ADC0 的 PWM 同步注入组互不干扰(独立外设)。
原实现每次读取都要"软件触发+死等EOC":fast_voltage_check
10kHz 调用,每次阻塞 ~1.5μs,纯浪费在等待上。
*/
void dma_config(void) {
/* enable DMA0 clock */
rcu_periph_clock_enable(RCU_DMA0);
/* ADC_DMA_channel configuration */
dma_parameter_struct dma_data_parameter;
void adc1_config(void) {
/* enable ADC1 clock(ADC 时钟分频与 ADC0 共用 RCU 配置) */
rcu_periph_clock_enable(RCU_ADC1);
/* ADC DMA_channel configuration */
dma_deinit(DMA0, DMA_CH0);
adc_deinit(ADC1);
adc_mode_config(ADC_MODE_FREE);
adc_data_alignment_config(ADC1, ADC_DATAALIGN_RIGHT);
/* initialize DMA single data mode */
dma_data_parameter.periph_addr = (uint32_t)(&ADC_RDATA(ADC0));
dma_data_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
dma_data_parameter.memory_addr = (uint32_t)(adc_value);
dma_data_parameter.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
dma_data_parameter.periph_width = DMA_PERIPHERAL_WIDTH_16BIT;
dma_data_parameter.memory_width = DMA_MEMORY_WIDTH_16BIT;
dma_data_parameter.direction = DMA_PERIPHERAL_TO_MEMORY;
dma_data_parameter.number = 3;
dma_data_parameter.priority = DMA_PRIORITY_HIGH;
dma_init(DMA0, DMA_CH0, &dma_data_parameter);
/* VBUS 单通道连续转换:软件触发一次后自持续 */
adc_channel_length_config(ADC1, ADC_REGULAR_CHANNEL, 1);
adc_regular_channel_config(ADC1, 0, ADC_CHANNEL_6, ADC_SAMPLETIME_28POINT5);
adc_external_trigger_source_config(ADC1, ADC_REGULAR_CHANNEL,
ADC0_1_EXTTRIG_REGULAR_NONE);
adc_external_trigger_config(ADC1, ADC_REGULAR_CHANNEL, ENABLE);
dma_circulation_enable(DMA0, DMA_CH0);
adc_enable(ADC1);
/* ADC校准(校准完成后再进入连续模式,避免校准期间 CONT 位参与) */
adc_calibration_enable(ADC1);
adc_special_function_config(ADC1, ADC_CONTINUOUS_MODE, ENABLE);
/* enable DMA channel */
dma_channel_enable(DMA0, DMA_CH0);
/* 启动连续转换并等待首个结果,保证 DR 立即有效 */
adc_flag_clear(ADC1, ADC_FLAG_EOC);
adc_software_trigger_enable(ADC1, ADC_REGULAR_CHANNEL);
while (adc_flag_get(ADC1, ADC_FLAG_EOC) == RESET) {
}
adc_flag_clear(ADC1, ADC_FLAG_EOC);
adc1_continuous_active = true;
}
/*!
\brief configure the ADC peripheral
\brief 零等待读取最新 VBUS 转换结果
\retval u16 最近一次完成转换的原始值
\note 仅在 VBUS 连续模式运行时调用(主循环任务上下文)。
读 DR 硬件清 EOC,下一次完成转换会重新刷新 DR;两次读取之间
完成的转换被静默丢弃(F1 型 ADC 无溢出标志问题),
读到的值陈旧度 ≤1 个转换周期(41 周期 @30MHz ≈ 1.4μs)。
*/
u16 adc1_read_vbus_latest(void) {
return (u16)adc_regular_data_read(ADC1);
}
/*!
\brief ADC1 单次软件触发转换并等待完成
\param[in] channel ADC 通道号(如 ADC_CHANNEL_9)
\retval u16 转换原始值(超时返回上次 RDATA 残留值)
\note 仅在主循环任务上下文调用(所有任务由调度器串行派发,无并发,
与 fast_voltage_check / update_vbus_voltage 不会交错执行)。
单次转换约 41 周期 ≈ 1.4μs @30MHz ADC 时钟。
连续模式运行中调用时:暂停→单次转换→恢复,VBUS 流中断约 3~5μs。
*/
u16 adc1_read_raw(u8 channel) {
const bool was_continuous = adc1_continuous_active;
u16 timeout = 0;
if (was_continuous) {
adc_special_function_config(ADC1, ADC_CONTINUOUS_MODE, DISABLE);
/* 先清 EOC 再等置位:连续模式下 EOC 常态置位(DR 久未读,
* 后续转换溢出丢失),直接等会观察到陈旧标志而另有转换在飞行中。
* 清除后观察到的置位必然来自"暂停瞬间在飞行中"的最后一次转换
* 完成后才置位——此时 ADC 真正静止,后续配置/触发不会再被
* 飞行中的转换干扰(SWSTART 被忽略、读到上一通道的 DR,
* 曾表现为 DRV 温度偶发出错)。超时兜底覆盖"暂停恰好落在
* 两次转换间隙"的无在飞行转换情形。 */
adc_flag_clear(ADC1, ADC_FLAG_EOC);
while (adc_flag_get(ADC1, ADC_FLAG_EOC) == RESET) {
/* 超时只需覆盖一个转换周期(41 ADC 周期 ≈ 20 次循环),
* 仅"暂停恰好落在转换间隙"时才会走到超时 */
if (++timeout > 100U) break;
}
adc_flag_clear(ADC1, ADC_FLAG_EOC);
}
adc_regular_channel_config(ADC1, 0, channel, ADC_SAMPLETIME_28POINT5);
adc_software_trigger_enable(ADC1, ADC_REGULAR_CHANNEL);
timeout = 0;
while (adc_flag_get(ADC1, ADC_FLAG_EOC) == RESET) {
if (++timeout > 2000U) { // 硬件异常保护,避免死等
break;
}
}
u16 raw = (u16)adc_regular_data_read(ADC1);
adc_flag_clear(ADC1, ADC_FLAG_EOC);
if (was_continuous) {
/* 恢复 VBUS 连续转换 */
adc_regular_channel_config(ADC1, 0, ADC_CHANNEL_6,
ADC_SAMPLETIME_28POINT5);
adc_special_function_config(ADC1, ADC_CONTINUOUS_MODE, ENABLE);
adc_software_trigger_enable(ADC1, ADC_REGULAR_CHANNEL);
/* 等恢复后的首个 ch6 转换完成并读走(清 EOC),
* 避免 vbus 零等待读取在接下来的 ~1.4μs 窗口内
* 读到 ch9 的残留值 */
timeout = 0;
while (adc_flag_get(ADC1, ADC_FLAG_EOC) == RESET) {
if (++timeout > 2000U) break;
}
(void)adc_regular_data_read(ADC1);
}
return raw;
}
/*!
\brief configure the ADC0 peripheral(PWM 同步电流采样专用)
\param[in] none
\param[out] none
\retval none
\note ADC0 只保留 injected 组,regular 组整体移除:
此前 regular 连续扫描与 injected 触发抢占同一 ADC,注入打断后
regular 从头重启而 DMA 不复位导致数据错位,且温度长采样被打断后
采样电容残余污染注入组首通道。移除 regular 后注入组再无打断源。
*/
void adc_config(void) {
/* 电流采样引脚配模拟输入:U/V/W = PA3/PA4/PA5(ADC0_IN3/4/5)。
* 手册要求 ADC 引脚必须配 AIN——复位默认浮空输入态下数字输入缓冲器
* 挂在引脚上,静态 1.65V 中点正处于线性区,开关噪声环境下会向引脚
* 注入电荷、污染 13.5 周期短采样窗口(v1 外置放大链下凑合未暴露)。
* 顺手关掉该三脚的数字输入缓冲(低功耗&抗扰)。 */
rcu_periph_clock_enable(RCU_GPIOA);
gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_2MHZ,
GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5);
/* enable ADC clock */
rcu_periph_clock_enable(RCU_ADC0);
/* config ADC clock */
/* config ADC clock(ADC0/ADC1 共用分频:120MHz/4 = 30MHz) */
rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV4);
/* 复位ADC */
adc_deinit(ADC0);
/* ADC模式配置 */
adc_mode_config(ADC_MODE_FREE);
/* regular 组保留连续扫描,用于温度/VBUS 后台采样 */
adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE);
/* 扫描模式:注入序列内 4 通道触发后自动连续转换 */
adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);
/* injected 组用于 PWM 同步电流采样,关闭自动串联,独立由 TIMER1 触发 */
adc_special_function_config(ADC0, ADC_INSERTED_CHANNEL_AUTO, DISABLE);
/* ADC数据右对齐配置 */
adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);
/* 使能ADC温度传感器和内部参考电压 */
/* 使能ADC温度传感器(内部通道仅连接 ADC0 的 ch16/ch17) */
adc_tempsensor_vrefint_enable();
/* 配置ADC通道长度 */
adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 3);
/* 配置ADC规则通道 */
adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_16,
ADC_SAMPLETIME_41POINT5);
adc_regular_channel_config(ADC0, 1, ADC_CHANNEL_9, ADC_SAMPLETIME_28POINT5);
adc_regular_channel_config(ADC0, 2, ADC_CHANNEL_6, ADC_SAMPLETIME_28POINT5);
/* regular 组继续软件触发连续转换:本组只服务低速量 */
adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL,
ADC0_1_EXTTRIG_REGULAR_NONE);
adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);
/* injected 组改为 TIMER1 CH3 导出的 TRGO 触发,实现三相同一采样时刻锁存 */
/* injected 组:rank0=U, rank1=V, rank2=W, rank3=MCU温度,TIMER1 TRGO 触发。
* 电流通道用最短 13.5 周期采样(INA240 低阻输出足以驱动采样电容):
* 每通道 26 周期,U/V/W 的采样保持窗末端仅滞后触发点 0.45/1.32/2.18µs
* (54/158/262 个计数),三相样本整体压进下管导通窗头部,最大占空比
* ~90% 时仍全部有效;温度通道 ch16 高内阻按手册仍需 239.5 周期,挂尾部。
* 整段 26×3+252 = 330 周期 = 11µs。
* 触发点紧贴计数峰顶(见 config.h):中心对齐下 CH3 每周期匹配两次
* (上升沿 2989 / 下降沿 3011,仅差 22 计数),无论第二次触发是被 ADC
* 忽略(注入忙)还是重启序列,帧的等效采样位置都贴着峰顶——三相下管
* 同时导通窗的正中,帧率 20kHz 与控制环同频。
* 序列空闲期采样电容挂在温度通道(~1.3V),U 相(ch3 运放低阻输出)的
* 13.5 周期保持窗足以完成重建。 */
adc_channel_length_config(ADC0, ADC_INSERTED_CHANNEL, 4);
adc_inserted_channel_config(ADC0, 0, ADC_CHANNEL_3, ADC_SAMPLETIME_55POINT5);
adc_inserted_channel_config(ADC0, 1, ADC_CHANNEL_3, ADC_SAMPLETIME_55POINT5);
adc_inserted_channel_config(ADC0, 2, ADC_CHANNEL_4, ADC_SAMPLETIME_55POINT5);
adc_inserted_channel_config(ADC0, 3, ADC_CHANNEL_5, ADC_SAMPLETIME_55POINT5);
adc_inserted_channel_config(ADC0, 0, ADC_CHANNEL_3, ADC_SAMPLETIME_13POINT5);
adc_inserted_channel_config(ADC0, 1, ADC_CHANNEL_4, ADC_SAMPLETIME_13POINT5);
adc_inserted_channel_config(ADC0, 2, ADC_CHANNEL_5, ADC_SAMPLETIME_13POINT5);
adc_inserted_channel_config(ADC0, 3, ADC_CHANNEL_16,
ADC_SAMPLETIME_239POINT5);
adc_external_trigger_source_config(ADC0, ADC_INSERTED_CHANNEL,
ADC0_1_EXTTRIG_INSERTED_T1_TRGO);
adc_external_trigger_config(ADC0, ADC_INSERTED_CHANNEL, ENABLE);
@@ -132,43 +258,100 @@ void adc_config(void) {
adc_enable(ADC0);
/* ADC校准 */
adc_calibration_enable(ADC0);
/* 使能ADC DMA功能 */
adc_dma_mode_enable(ADC0);
/* injected 完成中断负责搬运完整三相样本 */
/* injected 完成中断负责搬运完整三相样本与温度原始值 */
adc_interrupt_enable(ADC0, ADC_INT_EOIC);
/* 先启动 regular 组连续后台采样 */
adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);
}
/**
* @brief 采样类初始化
*/
u8 sampler::init() {
dma_config(); // DMA采样ADC初始化
adc_config(); // ADC初始化
adc_config(); // ADC0:PWM 同步注入组(U/V/W + MCU温度)
adc1_config(); // ADC1:VBUS / DRV温度 慢速轮询
current_sample_head = 0;
adc_current_frame_ready = 0;
delay_1ms(1);
const float current_init = current_adc_to_ma(
static_cast<u16>((-CURRENT_OFFSET / ADC_SCALE) + 0.5f));
static_cast<u16>((-CURRENT_OFFSET / ADC_SCALE) + 0.5f), 0); // 配平前按标称零点
// 初始采样
for (int i = 0; i < ADC_FILTER_SIZE; i++) {
mcu_temp_samples[i] =
(1.43f - adc_value[0] * ADC_SCALE) * TEMP_FACTOR + 35.0f;
(1.43f - adc_mcu_temp_raw * ADC_SCALE) * TEMP_FACTOR + 35.0f;
currU_samples[i] = current_init;
currV_samples[i] = current_init;
currW_samples[i] = current_init;
vbus_samples[i] = adc_value[2] * ADC_SCALE * VCC_FACTOR;
vbus_samples[i] = adc1_read_vbus_latest() * ADC_SCALE * VCC_FACTOR;
float R_now = (float)adc_value[1] / (4096 - (float)adc_value[1]) * 4700;
const float drv_raw = (float)adc1_read_raw(ADC_CHANNEL_9);
float R_now = drv_raw / (4096 - drv_raw) * 4700;
drv_temp_samples[i] =
1.0f / (0.00335f + 0.00025f * log(R_now / 10000.0f)) - 273.15f;
delay_1ms(1);
}
return 0;
}
// ---- 三相电流零点配平(上电一次,hardware_init 在 gate_driver_bringup 之后调用) ----
// 必须在门驱动唤醒后进行:DRV8323 板唤醒后 INLx=DRVSLP 常高,0% 占空比下
// 三相下管导通、采样电阻经下管接地,INA240 输入有确定共模(0V),输出即
// 真实零点;若在芯片睡眠 Hi-Z 时采样,下管源极悬空,INA240 IN+ 浮空会把
// 输出拉到轨,配平值无效(老板下管常通,两种时序均有效,但统一放后面)。
// 采集 N 帧均值作为每通道零点偏差(V,相对 CURRENT_OFFSET 基准),折算
// 电流超过 CURRENT_ZERO_CAL_LIMIT 视为电流检测初始化错误。
/**
* @brief 三相电流零点配平并校验
* @return u8 0=成功;1=无采样帧(ADC/触发链路异常);
* 2=配平值超过 CURRENT_ZERO_CAL_LIMIT(电流检测初始化错误)
* @note 阻塞约 15ms(跳过 5ms 上电瞬态 + 采集 200 帧 @20kHz),仅限
* hardware_init 上下文调用(看门狗在其后才初始化,无喂狗需求)。
* main 循环尚未启动,期间 EOIC 中断只刷新 adc_current_value,
* 不会与 update_current 并发写环形缓冲。
*/
u8 sampler::zero_calibrate(void) {
delay_1ms(5); // 跳过上电瞬态(INA 建立、驱动使能稳定),≈100 帧
u32 zero_acc[3] = {0, 0, 0};
const u16 ZERO_CAL_FRAMES = 200;
for (u16 i = 0; i < ZERO_CAL_FRAMES; i++) {
u32 timeout = 0;
while (adc_current_frame_ready == 0U) {
/* 帧周期 50µs,超时覆盖 ~30ms 无帧:ADC/触发链路异常 */
if (++timeout > 600000U) {
printf("[ADC] zero cal fail: no sample frame\r\n");
return 1;
}
}
zero_acc[0] += adc_current_value[0];
zero_acc[1] += adc_current_value[1];
zero_acc[2] += adc_current_value[2];
adc_current_frame_ready = 0U;
}
u8 result = 0;
printf("[ADC] zero cal:");
for (u8 ch = 0; ch < 3U; ch++) {
/* 实测零点偏差(V)= 样本均值电压 + CURRENT_OFFSET 基准 */
adc_zero_offset_v[ch] =
((float)zero_acc[ch] / (float)ZERO_CAL_FRAMES) * ADC_SCALE +
CURRENT_OFFSET;
/* 配平值折算电流(A)超限 → 电流检测初始化错误 */
float offset_a = adc_zero_offset_v[ch] * CURRENT_FACTOR;
printf(" %c=%dmA", "UVW"[ch], (int)(offset_a * 1000.0f));
if (offset_a > CURRENT_ZERO_CAL_LIMIT ||
offset_a < -CURRENT_ZERO_CAL_LIMIT) {
result = 2;
}
}
if (result == 2) {
printf(" -> over limit, current sense init error\r\n");
} else {
printf(" ok\r\n");
}
return result;
}
/**
* @brief 获取MCU温度
* @return float
@@ -243,7 +426,7 @@ float sampler::get_vbus_voltage() {
void sampler::update_mcu_temp() {
// 环形缓冲区写入,替代 memmove
mcu_temp_samples[mcu_temp_head] =
(1.43f - adc_value[0] * ADC_SCALE) * TEMP_FACTOR + 35.0f;
(1.43f - adc_mcu_temp_raw * ADC_SCALE) * TEMP_FACTOR + 35.0f;
mcu_temp_head++;
if (mcu_temp_head >= ADC_FILTER_SIZE) mcu_temp_head = 0;
@@ -260,8 +443,10 @@ void sampler::update_mcu_temp() {
* @brief 更新MCU温度
*/
void sampler::update_drv_temp() {
// ADC1 单次轮询转换 ch9(NTC 分压,低阻源)
const float drv_raw = (float)adc1_read_raw(ADC_CHANNEL_9);
// 环形缓冲区写入,替代 memmove
float R_now = (float)adc_value[1] / (4096 - (float)adc_value[1]) * 4700;
float R_now = drv_raw / (4096 - drv_raw) * 4700;
drv_temp_samples[drv_temp_head] =
1.0f / (0.00335f + 0.00025f * log(R_now / 10000.0f)) - 273.15f;
drv_temp_head++;
@@ -285,9 +470,9 @@ void sampler::update_current() {
}
const u8 idx = current_sample_head;
currU_samples[idx] = current_adc_to_ma(adc_current_value[0]);
currV_samples[idx] = current_adc_to_ma(adc_current_value[1]);
currW_samples[idx] = current_adc_to_ma(adc_current_value[2]);
currU_samples[idx] = current_adc_to_ma(adc_current_value[0], 0);
currV_samples[idx] = current_adc_to_ma(adc_current_value[1], 1);
currW_samples[idx] = current_adc_to_ma(adc_current_value[2], 2);
current_sample_head++;
if (current_sample_head >= ADC_FILTER_SIZE) {
@@ -300,8 +485,10 @@ void sampler::update_current() {
* @brief 更新供电电压
*/
void sampler::update_vbus_voltage() {
// ADC1 连续模式零等待读最新 VBUS(ch6,电阻分压,低阻源)
// 环形缓冲区写入,替代 memmove
vbus_samples[temp_vbus_head] = adc_value[2] * ADC_SCALE * VCC_FACTOR;
vbus_samples[temp_vbus_head] =
adc1_read_vbus_latest() * ADC_SCALE * VCC_FACTOR;
temp_vbus_head++;
if (temp_vbus_head >= ADC_FILTER_SIZE) temp_vbus_head = 0;
@@ -321,11 +508,11 @@ void sampler::update_vbus_voltage() {
*/
extern "C" void ADC0_1_IRQHandler(void) {
if (adc_interrupt_flag_get(ADC0, ADC_INT_FLAG_EOIC) != RESET) {
/* 丢弃 rank0 dummy,真实样本使用 rank1/2/3,对应 U/V/W 同一 PWM 时刻 */
(void)adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_0);
adc_current_value[0] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_1);
adc_current_value[1] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_2);
adc_current_value[2] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_3);
/* rank0/1/2 = U/V/W 同一 PWM 时刻样本,rank3 = MCU温度(序列尾部) */
adc_current_value[0] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_0);
adc_current_value[1] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_1);
adc_current_value[2] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_2);
adc_mcu_temp_raw = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_3);
adc_current_frame_ready = 1U;
adc_interrupt_flag_clear(ADC0, ADC_INT_FLAG_EOIC);
+218 -312
View File
@@ -18,11 +18,11 @@
#include "gd32c10x_gpio.h"
#include "initial.h"
#include "motor.h"
#include "run_inhibit.h"
#include "systick.h"
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <random>
// CAN 调试宏定义
#if CAN_DEBUG
@@ -33,9 +33,6 @@
#define CAN_DEBUG_PRINT(fmt, ...) ((void)0)
#endif
// CAN0 固定外设号,编译期常量,非可变全局状态。
/** @brief CANX 常量定义 */
constexpr u16 CANX = CAN0;
extern FOC_Controller FOC;
extern sampler sampler;
extern angle_sensor KTH7823;
@@ -150,7 +147,8 @@ void CAN_transmiter::set_node_id(u16 new_id) {
\param[out] none
\retval FLASH_EEPROM_OK: 加载成功
其他:加载失败,使用默认值
\note 使用独立的节点 ID 存储区域,带魔数验证和 CRC 校验
\note 使用独立的节点 ID 双备份存储区(主/备独立 Flash 页),
单份损坏自动回退另一份;带魔数验证和 CRC 校验
防止位翻转导致错读
*/
u8 CAN_transmiter::load_node_id_from_flash() {
@@ -185,7 +183,8 @@ u8 CAN_transmiter::load_node_id_from_flash() {
\param[out] none
\retval FLASH_EEPROM_OK: 保存成功
其他:保存失败
\note 写入主备份和备用备份,确保数据可靠性
\note 乒乓式写入主/备两个独立 Flash 页之一,另一页始终保有
旧的有效记录,掉电时至少保留一份有效数据
*/
u8 CAN_transmiter::save_node_id_to_flash(u16 new_id) {
if (new_id > MAX_NODE_ID) {
@@ -337,67 +336,6 @@ void can_dma_init(void) {
memset(can_rx_dma_words, 0, sizeof(can_rx_dma_words));
}
/*!
\brief 初始化 CAN0 2.0B 模式
\param[in] none
\param[out] none
\retval none
*/
void can_config(void) {
can_gpio_init();
can_dma_init(); // 初始化 DMA
can_parameter_struct can_parameter;
can_filter_parameter_struct can_filter;
can_struct_para_init(CAN_INIT_STRUCT, &can_parameter);
/* initialize CAN register */
can_deinit(CAN0);
/* initialize CAN parameters */
can_parameter.time_triggered = DISABLE;
can_parameter.auto_bus_off_recovery = DISABLE;
can_parameter.auto_wake_up = DISABLE;
can_parameter.auto_retrans = DISABLE;
can_parameter.rec_fifo_overwrite = DISABLE;
can_parameter.trans_fifo_order = DISABLE;
can_parameter.working_mode = CAN_NORMAL_MODE;
/* configure CAN0 baud rate 1MBps, sample point at 80% */
can_parameter.resync_jump_width = CAN_BT_SJW_1TQ;
can_parameter.time_segment_1 = CAN_BT_BS1_7TQ;
can_parameter.time_segment_2 = CAN_BT_BS2_2TQ;
can_parameter.prescaler = 6;
/* initialize CAN */
if (can_init(CAN0, &can_parameter) != SUCCESS) {
while (1)
CAN_DEBUG_PRINT("can init error \r\n");
}
/* initialize filter */
/* configure filter mode */
can_filter.filter_mode = CAN_FILTERMODE_MASK;
can_filter.filter_bits = CAN_FILTERBITS_32BIT;
/* configure filter mask */
can_filter.filter_mask_high = 0x0000;
can_filter.filter_mask_low = 0x0000;
/* select receiver fifo */
can_filter.filter_fifo_number = CAN_FIFO0;
can_filter.filter_enable = ENABLE;
/* configure filter number */
can_filter.filter_number = 0;
can_filter_init(&can_filter);
/* configure CAN0 NVIC */
nvic_irq_enable(CAN0_RX0_IRQn, 1, 0);
nvic_irq_enable(CAN0_TX_IRQn, 1, 1); // 添加发送中断
/* enable can receive FIFO0 not empty interrupt */
can_interrupt_enable(CAN0, CAN_INTEN_RFNEIE0);
/* enable can transmit mailbox empty interrupt */
can_interrupt_enable(CAN0, CAN_INTEN_TMEIE);
// 使能 DMA 中断
nvic_irq_enable(DMA0_Channel4_IRQn, 1, 1);
dma_interrupt_enable(DMA0, DMA_CH4, DMA_INT_FTF);
}
/*!
\brief 初始化 CAN0 CANFD 模式
@@ -418,7 +356,7 @@ void canfd_config(void) {
/* initialize CAN */
can_parameter.time_triggered = DISABLE;
can_parameter.auto_bus_off_recovery = DISABLE;
can_parameter.auto_bus_off_recovery = ENABLE;
can_parameter.auto_wake_up = DISABLE;
can_parameter.auto_retrans = ENABLE;
can_parameter.rec_fifo_overwrite = ENABLE;
@@ -435,19 +373,21 @@ void canfd_config(void) {
can_fd_parameter.fd_frame = ENABLE;
can_fd_parameter.excp_event_detect = ENABLE;
can_fd_parameter.delay_compensation = ENABLE;
/* TDCF/TDCO 不随数据波特率等比缩放:TDCMOD=CALC_AND_OFFSET 下硬件已自动测得
* 回路延时(TDCV),这里只是微调,经验取 TDCO ≈ 数据段 BS1 的 tq 数(4TQ→4)。
* 放到 12 会让本节点回采时错开约 6 个数据位,自己发出的帧被判成错误帧。 */
can_fd_tdc_parameter.tdc_filter = 0x04;
can_fd_tdc_parameter.tdc_mode = CAN_TDCMOD_CALC_AND_OFFSET;
can_fd_tdc_parameter.tdc_offset = 0x04;
can_fd_parameter.p_delay_compensation = &can_fd_tdc_parameter;
can_fd_parameter.iso_bosch = CAN_FDMOD_ISO;
can_fd_parameter.esi_mode = CAN_ESIMOD_HARDWARE;
/* FD mode data baudrate 2Mbps, sample piont at 80% */
/* FD mode data baudrate 5Mbps = 60MHz / (2 × 6TQ), sample point at 83.3%.
* CAN_DBT 的 DBAUDPSC 独立于仲裁段 BAUDPSC,数据段 prescaler 可自取。 */
can_fd_parameter.data_resync_jump_width = CAN_BT_SJW_1TQ;
can_fd_parameter.data_time_segment_1 = CAN_BT_BS1_3TQ;
can_fd_parameter.data_time_segment_1 = CAN_BT_BS1_4TQ;
can_fd_parameter.data_time_segment_2 = CAN_BT_BS2_1TQ;
/* CAN-FD data segement prescaler should be the same as non-data segement
* prescaler */
can_fd_parameter.data_prescaler = 6;
can_fd_parameter.data_prescaler = 2;
can_fd_init(CAN0, &can_fd_parameter);
/* initialize filter */
@@ -476,198 +416,6 @@ void canfd_config(void) {
dma_interrupt_enable(DMA0, DMA_CH4, DMA_INT_FTF | DMA_INT_ERR);
}
/*!
\brief 初始化 CAN0 回环测试
\param[in] none
\param[out] none
\retval none
*/
void can_loopback_init(void) {
can_gpio_init();
can_parameter_struct can_parameter;
can_filter_parameter_struct can_filter;
/* initialize CAN register */
can_deinit(CANX);
/* initialize CAN */
can_parameter.time_triggered = DISABLE;
can_parameter.auto_bus_off_recovery = DISABLE;
can_parameter.auto_wake_up = DISABLE;
can_parameter.auto_retrans = DISABLE;
can_parameter.rec_fifo_overwrite = DISABLE;
can_parameter.trans_fifo_order = DISABLE;
can_parameter.working_mode = CAN_NORMAL_MODE;
/* baudrate 1Mbps, sample piont at 80% */
can_parameter.resync_jump_width = CAN_BT_SJW_1TQ;
can_parameter.time_segment_1 = CAN_BT_BS1_7TQ;
can_parameter.time_segment_2 = CAN_BT_BS2_2TQ;
can_parameter.prescaler = 6;
if (can_init(CANX, &can_parameter) != SUCCESS) {
u16 i = 200;
while (--i > 0) {
delay_1ms(10);
CAN_DEBUG_PRINT("can init error \r\n");
}
system_soft_reset();
}
/* initialize filter */
/* configure filter mode */
can_filter.filter_mode = CAN_FILTERMODE_MASK;
can_filter.filter_bits = CAN_FILTERBITS_32BIT;
/* configure filter ID */
can_filter.filter_list_high = (uint16_t)(DEV_CAN_LOOPBACK_ID >> 13U);
can_filter.filter_list_low =
((uint16_t)(DEV_CAN_LOOPBACK_ID)) << 3U | (1U << 2);
/* configure filter mask */
can_filter.filter_mask_high = 0x0000;
can_filter.filter_mask_low = 0x0000;
/* select receiver fifo */
can_filter.filter_fifo_number = CAN_FIFO0;
can_filter.filter_enable = ENABLE;
/* configure filter number */
can_filter.filter_number = 0;
can_filter_init(&can_filter);
}
/*!
\brief CAN0 FD 回环测试
\param[in] none
\param[out] none
\retval ErrStatus
*/
void canfd_loopback_test(void) {
can_trasnmit_message_struct transmit_message;
can_receive_message_struct receive_message;
uint32_t timeout = 0xFFFF;
uint8_t transmit_mailbox = 0;
std::mt19937 gen;
/**
* @brief dis 函数
* @return std::uniform_int_distribution<int> 返回值
*/
std::uniform_int_distribution<int> dis(0, 255);
can_struct_para_init(CAN_FD_FRAME_STRUCT, &transmit_message);
transmit_message.tx_sfid = DEV_CAN_LOOPBACK_ID;
transmit_message.tx_efid = 0x00;
transmit_message.tx_ft = CAN_FT_DATA;
transmit_message.tx_ff = CAN_FF_EXTENDED;
transmit_message.tx_dlen = 7;
transmit_message.fd_flag = 1;
transmit_message.fd_brs = 1;
transmit_message.fd_esi = 0;
int i = 0;
while (i++ < transmit_message.tx_dlen) {
transmit_message.tx_data[i] = dis(gen);
CAN_DEBUG_PRINT("%x\n", transmit_message.tx_data[i]);
}
/* transmit message */
transmit_mailbox = can_message_transmit(CAN0, &transmit_message);
/* waiting for transmit completed */
while ((CAN_TRANSMIT_OK != can_transmit_states(CAN0, transmit_mailbox)) &&
(0 != timeout)) {
timeout--;
}
timeout = 0xFFFF;
/* waiting for receive completed */
while ((can_receive_message_length_get(CAN0, CAN_FIFO0) < 1) &&
(0 != timeout)) {
timeout--;
}
can_struct_para_init(CAN_RX_MESSAGE_STRUCT, &receive_message);
can_message_receive(CAN0, CAN_FIFO0, &receive_message);
/* check the receive message */
if ((transmit_message.tx_sfid == receive_message.rx_sfid) &&
(transmit_message.tx_ff == receive_message.rx_ff) &&
(transmit_message.tx_dlen == receive_message.rx_dlen)) {
/* loopback test is success */
CAN_DEBUG_PRINT("CAN LO0PBACK SUCCESS\r\n");
} else {
/* loopback test is failed */
CAN_DEBUG_PRINT("CAN LO0PBACK FAIL\r\n");
}
}
/**
\brief CAN0 回环测试
\param[in] none
\param[out] none
\retval none
*/
void can_loopback_test(void) {
can_trasnmit_message_struct transmit_message;
can_receive_message_struct receive_message;
uint32_t timeout = 0xFF;
uint8_t transmit_mailbox = 0;
/**
* @brief gen 函数
* @param[in] rand 参数
* @return std::mt19937 返回值
*/
std::mt19937 gen(rand()); // 使用随机设备生成的种子
/**
* @brief dis 函数
* @param[in] xff 参数
* @return std::uniform_int_distribution<int> 返回值
*/
std::uniform_int_distribution<int> dis(0, 0xff);
can_struct_para_init(CAN_TX_MESSAGE_STRUCT, &transmit_message);
/* initialize transmit message */
transmit_message.tx_sfid = DEV_CAN_LOOPBACK_ID;
transmit_message.tx_ft = CAN_FT_DATA;
transmit_message.tx_ff = CAN_FF_STANDARD;
transmit_message.tx_dlen = 7;
int i = 0;
while (i++ < transmit_message.tx_dlen) {
// transmit_message.tx_data[i] = dis(gen);
transmit_message.tx_data[i] = i;
}
/* transmit message */
transmit_mailbox = can_message_transmit(CANX, &transmit_message);
/* waiting for transmit completed */
while ((CAN_TRANSMIT_OK != can_transmit_states(CANX, transmit_mailbox)) &&
(0 != timeout)) {
CAN_DEBUG_PRINT("sending:%x...\n",
can_transmit_states(CANX, transmit_mailbox));
timeout--;
}
timeout = 0xFF;
/* waiting for receive completed */
while ((can_receive_message_length_get(CANX, CAN_FIFO0) < 1) &&
(0 != timeout)) {
timeout--;
}
can_struct_para_init(CAN_RX_MESSAGE_STRUCT, &receive_message);
can_message_receive(CANX, CAN_FIFO0, &receive_message);
/* check the receive message */
if ((DEV_CAN_LOOPBACK_ID == receive_message.rx_sfid) &&
(CAN_FF_STANDARD == receive_message.rx_ff) &&
(transmit_message.tx_dlen == receive_message.rx_dlen)) {
i = transmit_message.tx_dlen;
while (i-- > 0) {
CAN_DEBUG_PRINT("rx %d:%x:%x\n", i, transmit_message.tx_data[i],
receive_message.rx_data[i]);
}
if (std::memcmp(receive_message.rx_data, transmit_message.tx_data,
transmit_message.tx_dlen) == 0) {
/* loopback test is success */
CAN_DEBUG_PRINT("loopback success\n");
} else {
/* loopback test is failed */
CAN_DEBUG_PRINT("loopback failed\n");
}
} else {
/* loopback test is failed */
CAN_DEBUG_PRINT("loopback failed\n");
}
}
/*!
\brief CAN_transmiter 构造函数
@@ -675,7 +423,6 @@ void can_loopback_test(void) {
*/
u8 CAN_transmiter::init() {
// 初始化 CAN 硬件
// can_config();
canfd_config();
// 初始化发送消息结构体
@@ -702,6 +449,13 @@ u8 CAN_transmiter::init() {
// 从 Flash 加载节点 ID (如果 Flash 中有有效值则覆盖默认值)
load_node_id_from_flash();
// 加载周期反馈帧刷新率(flashEEP.init() 已从 Flash 读入 RAM 副本,
// 无记录时为其默认值),注意 hardware_init 保证 flashEEP.init() 先执行
status_period_ms = flashEEP.tx_period_status_ms;
config_period_ms = flashEEP.tx_period_config_ms;
status_period_counter = 0;
config_period_counter = 0;
return 0;
}
@@ -1013,7 +767,8 @@ void CAN_transmiter::update(void) {
mcu_temp = sampler.get_mcu_temp() * 100;
motor_temp = sampler.get_drv_temp() * 100;
Power_Voltage = sampler.get_vbus_voltage() * 1000;
MotorStatus = gpio_input_bit_get(GPIOB, GPIO_PIN_2) == RESET;
// MotorStatus 不在此读取:改由 health.cpp 的 1ms nFAULT 轮询写入,
// 那份判据同时决定是否停机,避免"上报的位"和"停机的依据"分家。
EEPROMStatus = flashEEP.EEPROMStatus;
Target_Control_Mode = FOC.control_mode;
controller_Mode = FOC.control_mode;
@@ -1026,26 +781,24 @@ void CAN_transmiter::update(void) {
}
/**
* @brief CANFD 发送函数
* @retval 0: 发送失败(或处于静默模式)
* @brief 打包并发送 STATUS 反馈帧(实时状态 + 初始化错误位图)
* @note 不做分频与静默检查,由周期任务按 status_period_ms 分频调用;
* 初始化失败上报路径(main.cpp)也直接调用
* @retval 0: 发送失败
* 1: 发送成功
*/
u8 CAN_transmiter::CANFD_all_Send() {
// 检查是否在静默模式中,如果是则不发送
if (is_in_silent_mode()) {
check_silent_mode(); // 检查是否已退出静默
return 0;
}
u32 success_flag = 0;
// 打包 status 数据 - 只清零实际使用的 32 字节
memset(transmit_data, 0, 32);
u8 CAN_transmiter::send_status_frame() {
// 打包 status 数据 - 只清零实际使用的 48 字节
// v0.74:字节 32~35 新增 InitStatus(初始化错误码位图,0=全部正常,
// 定义见 config.h INIT_ERR_*,含电流检测配平超限/无采样帧)
// 本版:字节 36~39 新增 RunInhibit(当前"禁止运行"来源位图,0=允许运行,
// 定义见 sys/run_inhibit.h InhibitSource)。DBC 尚未加信号,抓原始帧即可读。
memset(transmit_data, 0, 48);
pack_u16_to_bytes(transmit_data, 0, mcu_temp);
pack_u16_to_bytes(transmit_data, 2, motor_temp);
pack_u16_to_bytes(transmit_data, 4, u16(u_current_union.f));
pack_u16_to_bytes(transmit_data, 6, u16(v_current_union.f));
pack_u16_to_bytes(transmit_data, 8, u16(w_current_union.f));
pack_current_s16_to_bytes(transmit_data, 4, u_current_union.f);
pack_current_s16_to_bytes(transmit_data, 6, v_current_union.f);
pack_current_s16_to_bytes(transmit_data, 8, w_current_union.f);
transmit_data[10] =
(transmit_data[10] & ~0x07) |
((MotorStatus & 0x01) | ((MagStatus & 0x01) << 1) |
@@ -1058,10 +811,17 @@ u8 CAN_transmiter::CANFD_all_Send() {
transmit_data[29] = test_u16 & 0xFF;
transmit_data[30] = (test_u16 >> 8) & 0xFF;
transmit_data[31] = cpu_usage;
pack_u32_to_bytes(transmit_data, 32, (u32)init_error_flags);
pack_u32_to_bytes(transmit_data, 36, run_inhibit.sources());
// 使用节点 ID 构建发送 ID (高 16 位为节点 ID)
success_flag +=
CANFD_AsyncSend(build_can_id(CANFD_STATUS_ID), 32, transmit_data);
return CANFD_AsyncSend(build_can_id(CANFD_STATUS_ID), 48, transmit_data);
}
/**
* @brief 打包并发送 CONFIG 反馈帧(控制模式与目标设定回显)
* @note 不做分频与静默检查,由周期任务按 config_period_ms 分频调用
*/
void CAN_transmiter::send_config_frame() {
// 打包 config 数据 - 只清零实际使用的 24 字节
memset(transmit_data, 0, 24);
transmit_data[0] = controller_Mode;
@@ -1070,10 +830,7 @@ u8 CAN_transmiter::CANFD_all_Send() {
pack_float_to_bytes(transmit_data, 7, target_velocity_union);
pack_float_to_bytes(transmit_data, 11, target_angle_union);
// 使用节点 ID 构建发送 ID (高 16 位为节点 ID)
success_flag +=
CANFD_AsyncSend(build_can_id(CANFD_CONFIG_ID), 24, transmit_data);
return success_flag;
}
/**
@@ -1097,7 +854,19 @@ void CAN_transmiter::handle_periodic_send_tick() {
if (!is_in_silent_mode()) {
update();
CANFD_all_Send();
// STATUS 与 CONFIG 各自独立分频(period_ms=0 停发),节拍仍为
// 1ms(Timer.cpp task_schedule_100us[9] = TASK_CAN_TRANSMIT),
// 修改周期经 SET 命令(0x0400 扩展格式)即时生效并清零计数器
if (status_period_ms != 0U &&
++status_period_counter >= status_period_ms) {
status_period_counter = 0;
send_status_frame();
}
if (config_period_ms != 0U &&
++config_period_counter >= config_period_ms) {
config_period_counter = 0;
send_config_frame();
}
} else {
check_silent_mode();
}
@@ -1154,7 +923,41 @@ void CAN_transmiter::handle_boot_message(u16 sender_node_id) {
jumpToBOOT();
}
/**
* @brief 校验并保存新节点 ID 到 Flash(不组应答帧)
* @param new_id: 新节点 ID
* @retval 1: 成功(save_node_id_to_flash 内部已更新 node_id)
* 0: 非法 ID 或 Flash 写入失败(node_id 保持不变)
*/
u8 CAN_transmiter::apply_new_node_id(u16 new_id) {
if (new_id < 1 || new_id > SETTABLE_NODE_ID_MAX) {
CAN_DEBUG_PRINT("SET_NODE_ID: invalid new_id=%d (range 1~%d)\r\n",
new_id, SETTABLE_NODE_ID_MAX);
return 0;
}
// 先写 Flash,成功后再由调用方回确认,避免 Flash 失败时上位机已收到 OK。
u8 save_status = save_node_id_to_flash(new_id);
CAN_DEBUG_PRINT("SET_NODE_ID: save_status=%d\r\n", save_status);
return (save_status == FLASH_EEPROM_OK) ? 1U : 0U;
}
void CAN_transmiter::handle_set_node_id_message(can_receive_message_struct &current_message) {
// ── 防护:只处理发给本节点(或广播)的 SET_NODE_ID ──
u16 target_node = (u16)((current_message.rx_efid >> 16) & 0xFFFF);
if (target_node != node_id && target_node != BROADCAST_NODE_ID) {
return;
}
// DLC=4 为扩展格式参数设置:[选择器 u16][值 u16],
// 选择器 0x0000=节点 ID,反馈帧基础 ID=刷新周期(ms)
if (current_message.rx_dlen == 4) {
handle_set_param_message(current_message);
return;
}
// 支持 1 字节和 2 字节节点 ID 命令,兼容旧上位机。
CAN_DEBUG_PRINT(
"SET_NODE_ID: rx_dlen=%d, data[0]=%02X data[1]=%02X\r\n",
@@ -1173,34 +976,99 @@ void CAN_transmiter::handle_set_node_id_message(can_receive_message_struct &curr
// 响应帧使用旧节点 ID 构造,确保上位机能收到确认。
node_id = old_node_id;
if (new_node_id > MAX_NODE_ID || new_node_id == BROADCAST_NODE_ID) {
CAN_DEBUG_PRINT("SET_NODE_ID: invalid new_id=%d (max=%d)\r\n",
new_node_id, MAX_NODE_ID);
transmit_data[0] = 0x00;
CANFD_AsyncSend(build_can_id(CANFD_SET_NODE_ID), 3, transmit_data);
return;
}
if (apply_new_node_id(new_node_id)) {
transmit_data[0] = 0x01;
u8 send_result = CANFD_AsyncSend(build_can_id(CANFD_SET_NODE_ID), 3,
transmit_data);
u8 save_status = save_node_id_to_flash(new_node_id);
CAN_DEBUG_PRINT("SET_NODE_ID: save_status=%d, send_result=%d\r\n",
save_status, send_result);
if (save_status == FLASH_EEPROM_OK) {
CANFD_AsyncSend(build_can_id(CANFD_SET_NODE_ID), 3, transmit_data);
CAN_DEBUG_PRINT("SET_NODE_ID: SUCCESS, node_id updated from %d to %d\r\n",
old_node_id, new_node_id);
return;
}
CAN_DEBUG_PRINT("SET_NODE_ID: Flash write FAILED, status=%d\r\n", save_status);
// 非法 ID 或 Flash 写入失败:node_id 保持旧值,NAK
transmit_data[0] = 0x00;
node_id = old_node_id;
CANFD_AsyncSend(build_can_id(CANFD_SET_NODE_ID), 3, transmit_data);
}
/**
* @brief 处理 0x0400 扩展格式参数设置(DLC=4)
* @param current_message: [选择器 u16 LE][值 u16 LE]
* 选择器 0x0000=节点 ID(仅单播),反馈帧基础 ID=该帧刷新周期 ms(0=停发)
* @note 写 Flash 成功后立即生效;广播目标只应用不应答
* (多节点同时应答会占总线冲突),单播回 5 字节应答
* [status, sel_lo, sel_hi, val_lo, val_hi]
*/
void CAN_transmiter::handle_set_param_message(can_receive_message_struct &current_message) {
u16 selector = unpack_bytes_to_u16(current_message.rx_data, 0);
u16 value = unpack_bytes_to_u16(current_message.rx_data, 2);
// 目标已由 handle_set_node_id_message 过滤为本节点或广播
u16 target_node = (u16)((current_message.rx_efid >> 16) & 0xFFFF);
bool is_broadcast = (target_node == BROADCAST_NODE_ID);
u8 ok = 0;
if (selector == CANFD_PARAM_NODE_ID) {
// 广播改节点 ID 会使所有节点同 ID,仅允许单播,广播时直接忽略
if (is_broadcast) return;
ok = apply_new_node_id(value);
} else if (selector == CANFD_STATUS_ID || selector == CANFD_CONFIG_ID) {
ok = set_tx_period(selector, value);
} else {
CAN_DEBUG_PRINT("SET_PARAM: unknown selector 0x%04X\r\n", selector);
}
if (is_broadcast) return;
transmit_data[0] = ok ? 0x01 : 0x00;
pack_u16_to_bytes(transmit_data, 1, selector);
pack_u16_to_bytes(transmit_data, 3, value);
// 节点 ID 修改成功时 node_id 已更新,应答以新节点 ID 发出(与旧格式一致)
CANFD_AsyncSend(build_can_id(CANFD_SET_NODE_ID), 5, transmit_data);
}
/**
* @brief 设置反馈帧刷新周期并持久化到 Flash
* @param base_id: 反馈帧基础 ID(CANFD_STATUS_ID/CANFD_CONFIG_ID)
* @param period_ms: 刷新周期 ms(0=停发,上限 1kHz 由 1ms 节拍决定)
* @retval 1: 成功且已立即生效
* 0: 未知帧 ID 或 Flash 写入失败(不生效)
*/
u8 CAN_transmiter::set_tx_period(u16 base_id, u16 period_ms) {
u16 old_period;
if (base_id == CANFD_STATUS_ID) {
old_period = flashEEP.tx_period_status_ms;
flashEEP.tx_period_status_ms = period_ms;
} else if (base_id == CANFD_CONFIG_ID) {
old_period = flashEEP.tx_period_config_ms;
flashEEP.tx_period_config_ms = period_ms;
} else {
return 0;
}
// 先写 Flash 成功后再生效,与 SET_NODE_ID 的"写即存"握手一致;
// 页满 format() 重建时 save_system_config 会从 RAM 副本恢复本次修改
if (flashEEP.write_tx_periods() != FLASH_EEPROM_OK) {
// 写入失败回滚 RAM 副本,保证失败不残留(否则关机保存路径
// 会把未确认的值持久化)
if (base_id == CANFD_STATUS_ID) {
flashEEP.tx_period_status_ms = old_period;
} else {
flashEEP.tx_period_config_ms = old_period;
}
CAN_DEBUG_PRINT("SET_PARAM: tx period 0x%04X flash write failed\r\n",
base_id);
return 0;
}
if (base_id == CANFD_STATUS_ID) {
status_period_ms = period_ms;
status_period_counter = 0;
} else {
config_period_ms = period_ms;
config_period_counter = 0;
}
CAN_DEBUG_PRINT("SET_PARAM: base 0x%04X period %d ms\r\n", base_id, period_ms);
return 1;
}
void CAN_transmiter::handle_node_message(can_receive_message_struct &current_message,
u32 base_id) {
// 这里只处理已经确认发给本节点的普通协议消息。
@@ -1213,8 +1081,33 @@ void CAN_transmiter::handle_node_message(can_receive_message_struct &current_mes
} else if (base_id == CANFD_OTA_ACK_ID) {
handle_ota_ack_message();
} else if (base_id == CANFD_GET_NODE_ID) {
// 仅 DLC=2 判为扩展格式 [选择器 u16 LE],避免旧上位机带填充的
// 长 DLC 查询被误解析;其余长度按旧格式回节点 ID(2 字节)
if (current_message.rx_dlen == 2) {
// 扩展格式:查询参数 [选择器 u16 LE]
// 应答 [sel_lo, sel_hi, val_lo, val_hi](4 字节)
u16 selector = unpack_bytes_to_u16(current_message.rx_data, 0);
u16 value = 0;
if (selector == CANFD_PARAM_NODE_ID) {
value = get_node_id();
} else if (selector == CANFD_STATUS_ID) {
value = status_period_ms;
} else if (selector == CANFD_CONFIG_ID) {
value = config_period_ms;
} else {
// 未知选择器回 0(0 对周期含义为停发,注意与真实配置区分;
// 权威写路径 0x0400 有显式状态字节)
CAN_DEBUG_PRINT("GET_PARAM: unknown selector 0x%04X\r\n",
selector);
}
pack_u16_to_bytes(transmit_data, 0, selector);
pack_u16_to_bytes(transmit_data, 2, value);
CANFD_AsyncSend(build_can_id(CANFD_GET_NODE_ID), 4, transmit_data);
} else {
// 旧格式:回节点 ID(2 字节),兼容旧上位机
pack_u16_to_bytes(transmit_data, 0, get_node_id());
CANFD_AsyncSend(build_can_id(CANFD_GET_NODE_ID), 2, transmit_data);
}
} else {
CAN_DEBUG_PRINT("Unknown CAN ID: %X (node_id=%d)\n",
current_message.rx_efid, node_id);
@@ -1223,6 +1116,12 @@ void CAN_transmiter::handle_node_message(can_receive_message_struct &current_mes
void CAN_transmiter::handle_control_command(can_receive_message_struct &current_message) {
// 控制帧布局:模式、电压限制、目标电流/速度/角度、三组 P 参数。
// 这里不再直接碰驱动使能:唤醒功率级是 run_inhibit 闸门在 50us 控制任务里做的。
// 非零模式 = 上位机使能意图,撤销"未使能"这一禁止位;模式 0(静止待机/锁止)
// 不解除,保持上电默认睡眠。被禁止期间本函数照常收下参数,但控制函数不会被派发。
if (current_message.rx_data[0] != 0U) {
run_inhibit.release(INHIBIT_NOT_ENABLED);
}
FOC.control_mode = current_message.rx_data[0];
FOC.limit_voltage = float(unpack_bytes_to_u16(current_message.rx_data, 1)) / 1000;
target_current_union.f = unpack_bytes_to_float(current_message.rx_data, 3).f;
@@ -1236,7 +1135,11 @@ void CAN_transmiter::handle_control_command(can_receive_message_struct &current_
FOC.target_velocity = target_velocity_union.f;
FOC.target_current = target_current_union.f;
// limit_voltage=0 时 P 换算除零会得到 inf 增益,钳到下限
float voltage = FOC.limit_voltage;
if (voltage < MIN_LIMIT_VOLTAGE) {
voltage = MIN_LIMIT_VOLTAGE;
}
u16 P_config = unpack_bytes_to_u16(current_message.rx_data, 15);
FOC.cur_loop_p = DEFAULT_current_loop_p * P_config / voltage;
FOC.cur_MIT_p = DEFAULT_current_MIT_p * P_config / voltage;
@@ -1258,6 +1161,10 @@ void CAN_transmiter::handle_reset_command(can_receive_message_struct &current_me
u8 eigth_byte = current_message.rx_data[7];
if (first_byte & 0x01) {
// motReset = 撤销 nFAULT 这一禁止申请。之后能否真的重新运行由闸门看位图;
// 若故障源还在,1ms 的 nFAULT 轮询会立刻重新 request(),而驱动唤醒建立期
// (DRV_WAKE_SETTLE_50US)内输出保持 0,不会带故障出 torque。
run_inhibit.release(INHIBIT_DRV_NFAULT);
motor_reset();
testfloat_union.f = KTH7823.getcurrent_sensorangle();
}
@@ -1272,11 +1179,11 @@ void CAN_transmiter::handle_reset_command(can_receive_message_struct &current_me
Angle_kalman.init(0);
Vel_kalman.init(0);
}
#if FOC_DEBUG
if (first_byte >> 4 & 0x01) {
FOC.cogging_calib_request = true;
if (first_byte >> 5 & 0x01) {
// 零位校准:施加对齐电压、读传感器角、计算并保存校准角
calibrate_zero_position();
}
#endif
// bit4 曾用于触发齿槽转矩校准,该功能已移除,该位现为保留位
if (eigth_byte & 0x80 >> 7) {
app_prepare_deep_sleep(true);
}
@@ -1290,7 +1197,6 @@ void CAN_transmiter::handle_ota_ack_message() {
u32 app_check = *flash_ptr;
transmit_data[0] = 0x0A;
transmit_data[1] = 0xAC;
delay_1ms(1);
if (app_enable == OTA_AVAL && app_check == OTA_AVAL) {
CANFD_AsyncSend(build_can_id(CANFD_OTA_ACK_ID), 2, transmit_data);
}
+78 -26
View File
@@ -38,6 +38,41 @@ static inline void pack_u16_to_bytes(u8 *buffer, u16 offset, u16 value) {
buffer[offset + 1] = (u8)((value >> 8) & 0xFF);
}
/**
* @brief pack_u32_to_bytes 函数(小端)
* @param[in] buffer 参数
* @param[in] offset 参数
* @param[in] value 参数
* @return void
*/
static inline void pack_u32_to_bytes(u8 *buffer, u16 offset, u32 value) {
pack_u16_to_bytes(buffer, offset, (u16)(value & 0xFFFF));
pack_u16_to_bytes(buffer, offset + 2, (u16)((value >> 16) & 0xFFFF));
}
// 将 mA 电流值饱和转换为 int16 后按小端打包。
// DBC 中 U/V/W current 定义为 signed int16([-32768,32767] mA);
// 相电流有正有负,此前用 u16() 打包负值被削成 0,上位机波形下半周丢失。
/**
* @brief pack_current_s16_to_bytes 函数
* @param[in] buffer 参数
* @param[in] offset 参数
* @param[in] value_mA 参数
* @return void
*/
static inline void pack_current_s16_to_bytes(u8 *buffer, u16 offset,
float value_mA) {
short value;
if (value_mA > 32767.0f) {
value = 32767; // 饱和,避免 float→int 超范围截断环绕
} else if (value_mA < -32768.0f) {
value = -32768;
} else {
value = (short)value_mA;
}
pack_u16_to_bytes(buffer, offset, (u16)value);
}
// 添加辅助函数用于将 float 类型数据打包到 u8 数组中
/**
* @brief pack_float_to_bytes 函数
@@ -99,11 +134,6 @@ static inline float_union_t unpack_bytes_to_float(u8 *buffer, u16 offset) {
* @return u8 返回值
*/
u8 can_gpio_init(void); // CAN 引脚初始化
/**
* @brief 配置 CAN 外设
* @return void
*/
void can_config(void); // CAN 初始化
/**
* @brief 配置 CAN FD 外设
* @return void
@@ -140,16 +170,6 @@ void DMA0_Channel5_IRQHandler(void); // DMA 通道 5 中断处理函数 (CAN 发
*/
void jumpToBOOT();
/**
* @brief can_loopback_init 函数
* @return void
*/
void can_loopback_init(void);
/**
* @brief can_loopback_test 函数
* @return void
*/
void can_loopback_test(void);
/*!
\brief CAN 通信类
@@ -187,13 +207,21 @@ class CAN_transmiter {
float_union_t w_current_union = {0}; // W 相电流
float_union_t v_current_union = {0}; // V 相电流
bool MotorStatus = 0; // 电机状态码
u8 EEPROMStatus = 0; // EEPROM 状态码
// MotorStatus 不在此处:判据与上报都收在 health 的 1ms nFAULT 轮询里,
// 声明见 public 段(与 MagStatus/ThermalStatus 同处),避免出现第二个写手。
can_trasnmit_message_struct transmit_message; // 发送消息结构体
u8 transmit_mailbox = CAN_NOMAILBOX; // 初始化为无 mailbox 状态
u8 transmit_data[64]; // CANFD 最大 64 字节
// 周期反馈帧独立刷新率(ms,0=停发)与 1ms 节拍分频计数器。
// init() 从 flashEEP 的 RAM 副本加载,SET 命令(0x0400 扩展格式)运行时修改
u16 status_period_ms = CANFD_TX_PERIOD_STATUS_DEFAULT_MS;
u16 status_period_counter = 0;
u16 config_period_ms = CANFD_TX_PERIOD_CONFIG_DEFAULT_MS;
u16 config_period_counter = 0;
// CAN 接收消息队列
can_receive_message_struct rx_message_buffer[CAN_RX_BUFFER_SIZE];
volatile uint8_t rx_buffer_head = 0;
@@ -204,6 +232,11 @@ class CAN_transmiter {
* @return void
*/
void update(); // 更新数据
/**
* @brief 打包并发送 CONFIG 反馈帧(0x0101,控制模式/目标设定回显)
* @return void
*/
void send_config_frame(); // CONFIG 反馈帧发送
/**
* @brief CAN_Receive 函数
* @return u8 返回值
@@ -269,6 +302,26 @@ class CAN_transmiter {
* @return void
*/
void handle_set_node_id_message(can_receive_message_struct &current_message);
/**
* @brief 处理 0x0400 扩展格式参数设置(DLC=4:[选择器 u16][值 u16]),
* 选择器 0x0000=节点 ID、反馈帧基础 ID=对应帧刷新周期(ms)
* @param[in,out] current_message 当前 CAN 消息
* @return void
*/
void handle_set_param_message(can_receive_message_struct &current_message);
/**
* @brief 校验并保存新节点 ID 到 Flash(不修改应答帧)
* @param[in] new_id 新节点 ID
* @return u8 1=成功,0=非法 ID 或 Flash 写入失败
*/
u8 apply_new_node_id(u16 new_id);
/**
* @brief 设置反馈帧刷新周期并持久化到 Flash
* @param[in] base_id 反馈帧基础 ID(CANFD_STATUS_ID/CANFD_CONFIG_ID)
* @param[in] period_ms 刷新周期 ms(0=停发)
* @return u8 1=成功,0=未知帧或 Flash 写入失败
*/
u8 set_tx_period(u16 base_id, u16 period_ms);
/**
* @brief 处理已经确认发给本节点的普通协议消息
* @param[in,out] current_message 当前 CAN 消息
@@ -325,11 +378,20 @@ class CAN_transmiter {
bool MagStatus = 0; // 磁状态码
bool ThermalStatus = 0; // 热能状态码
// nFAULT 状态位(STATUS 帧 motStatus)。唯一写手 = health.cpp 的 1ms nFAULT
// 轮询,值与"是否允许运行"的判据同源;CAN update() 不再自行读引脚。
bool MotorStatus = 0; // 门驱动故障状态码
/**
* @brief communication_check 函数
* @return void
*/
void communication_check(); // 通信检查
/**
* @brief 打包并发送 STATUS 反馈帧(0x0100,实时状态与错误位图)。
* 不做分频与静默检查,初始化失败上报路径直接调用
* @return u8 1=已提交发送,0=发送失败
*/
u8 send_status_frame(); // STATUS 反馈帧发送
/**
* @brief CAN_Sleep 函数
* @return u8 返回值
@@ -356,16 +418,6 @@ class CAN_transmiter {
* @return u8 返回值
*/
u8 CANFD_AsyncSend(u32 ID, u8 length, u8 *data); // CANFD 异步发送 (使用 DMA)
/**
* @brief CAN_all_Send 函数
* @return u8 返回值
*/
u8 CAN_all_Send(); // CAN 发送
/**
* @brief CANFD_all_Send 函数
* @return u8 返回值
*/
u8 CANFD_all_Send(); // CANFD 发送
/**
* @brief enter_silent_mode 函数
* @return void
+33 -9
View File
@@ -8,6 +8,7 @@
#include "Can.h"
#include "FOC.h"
#include "Timer.h"
#include "config.h"
#include "gd32c10x.h"
#include "gd32c10x_gpio.h"
#include "gd32c10x_misc.h"
@@ -16,7 +17,6 @@
#include "initial.h"
volatile u32 total_us100_counter = 0; // TIMER2 ISR 内部 100us 调度索引
extern u16 adc_value[3];
extern FOC_Controller FOC;
extern TaskScheduler scheduler;
extern CAN_transmiter CAN0_transmiter;
@@ -24,16 +24,13 @@ extern CAN_transmiter CAN0_transmiter;
extern u32 cnt_test;
// 任务调度查找表 - 每 100us 执行的任务 (1ms 周期内)
// MCU/DRV 温度保持 1kHz:热模型兼作过流保护,温度积累按 1ms 步进,
// 每毫秒都要拿到新温度采样。
static const u32 task_schedule_100us[10] = {
(1u << TASK_MCU_TEMP_UPDATE), // 0: MCU 温度更新
(1u << TASK_DRV_TEMP_UPDATE), // 1: 驱动温度更新
(1u << TASK_VBUS_UPDATE), // 2: 电压更新
0, // 3: 空闲
0, // 4: 空闲
0, // 5: 空闲
0, // 6: 空闲
0, // 7: 空闲
0, // 8: 空闲
0, 0, 0, 0, 0, 0, // 3~8: 空闲
(1u << TASK_CAN_TRANSMIT) // 9: CAN 发送
};
@@ -198,10 +195,18 @@ void timer1_gpio_config(void) {
gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2);
#if GATE_DRIVER_DRV8323
/* 新板:PB12(DRVSLP=ENABLE+INLx) 由 gate_driver 统一管理——
* gate_driver_preinit() 已置低保持芯片睡眠,gate_driver_bringup()
* 在 SPI 配置完成后才拉高。此处严禁提前置高(SPI 未配置前芯片
* 带默认 6x PWM 模式醒来,INLx=1 时上管永远无法导通)。
* PB0 板上接地未用,不配置。 */
#else
gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,
GPIO_PIN_0 | GPIO_PIN_12);
gpio_bit_set(GPIOB, GPIO_PIN_0);
gpio_bit_set(GPIOB, GPIO_PIN_12);
#endif
/* 配置 TIMER1 完全重映射*/
gpio_pin_remap_config(GPIO_TIMER1_FULL_REMAP, DISABLE);
@@ -261,7 +266,8 @@ void timer1_pwm_config(void) {
TIMER1_DEFAULT_PULSE);
timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_2,
TIMER1_DEFAULT_PULSE);
// 设置 CH3 为固定 ADC 采样点,避免与三相 PWM duty 耦合
// 设置 CH3 为固定 ADC 采样点(低边采样:必须落在三相下管同时导通窗,
// 即中心对齐计数的峰顶附近,见 config.h TIMER1_CH3_COMPARE_VALUE 说明)
timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_3,
TIMER1_CH3_COMPARE_VALUE);
@@ -296,6 +302,15 @@ void TIMER1_IRQHandler(void) {
void Set_Pwm(u16 channel, float duty_cycle) {
float pulse = duty_cycle * TIMER1_PERIOD;
#if GATE_DRIVER_DRV8323
/* 新板通道重映射:逻辑相 A→CH2、B→CH1、C→CH0(硬件 INHA/B/C
* 分别接 PWM1/2/3 = PA2/PA1/PA0),与 Set_3Pwm 保持一致 */
if (channel == 0) {
channel = 2;
} else if (channel == 2) {
channel = 0;
}
#endif
if (channel <= 3) {
timer_channel_output_pulse_value_config(TIMER1, channel, pulse);
} else {
@@ -312,8 +327,17 @@ void Set_Pwm(u16 channel, float duty_cycle) {
\note The channel parameter must be between 0 and 3 inclusive.
*/
void Set_3Pwm(float duty_cycle0, float duty_cycle1, float duty_cycle2) {
// 直接写寄存器
#if GATE_DRIVER_DRV8323
/* 新板硬件映射:CH0(PA0)→PWM3→INHC,CH1(PA1)→PWM2→INHB,
* CH2(PA2)→PWM1→INHA。入参按 (A,B,C) 相序书写,此处把 A/C 换到
* 物理通道,修正新板与老板相反的 INHx 接线。 */
TIMER_CH0CV(TIMER1) = (uint32_t)(duty_cycle2 * TIMER1_PERIOD);
TIMER_CH1CV(TIMER1) = (uint32_t)(duty_cycle1 * TIMER1_PERIOD);
TIMER_CH2CV(TIMER1) = (uint32_t)(duty_cycle0 * TIMER1_PERIOD);
#else
// 直接写寄存器(老板:CH0/1/2 = IN1/2/3 = A/B/C 相)
TIMER_CH0CV(TIMER1) = (uint32_t)(duty_cycle0 * TIMER1_PERIOD);
TIMER_CH1CV(TIMER1) = (uint32_t)(duty_cycle1 * TIMER1_PERIOD);
TIMER_CH2CV(TIMER1) = (uint32_t)(duty_cycle2 * TIMER1_PERIOD);
#endif
}
+2
View File
@@ -7,6 +7,8 @@
#ifndef _TIMER_H
#define _TIMER_H
#include "config.h"
#ifdef __cplusplus
extern "C" {
#endif
+32
View File
@@ -40,6 +40,12 @@ class sampler {
* @return u8 返回值
*/
u8 init(void);
/**
* @brief 三相电流零点配平并校验(hardware_init 在 FOC.init 之后调用)
* @return u8 0=成功;1=无采样帧(ADC/触发链路异常);
* 2=配平值超过 CURRENT_ZERO_CAL_LIMIT(电流检测初始化错误)
*/
u8 zero_calibrate(void);
/**
* @brief 更新 mcu_temp 相关状态
* @return void
@@ -90,6 +96,32 @@ class sampler {
*/
void ADC0_1_IRQHandler(void);
/**
* @brief ADC1 初始化:VBUS 连续转换模式(零等待读取)
* @return void
* @note ADC1 上电后即对 ch6(VBUS) 连续转换,软件触发一次后自持续,
* 之后读取 DR 寄存器即可拿到最新完成的转换值(无需阻塞等待)。
*/
void adc1_config(void);
/**
* @brief 零等待读取最新 VBUS 原始值(连续模式下任意时刻可调)
* @return u16 最近一次完成转换的原始值(陈旧度约 1 个转换周期 ≈1.4μs)
* @note 仅主循环任务上下文调用(与其他 ADC1 访问串行,无并发)。
* 原理:读 DR 硬件清 EOC,随后下一次完成转换会刷新 DR,
* 其间完成的转换被丢弃——每次读到的都是刚完成的样本。
*/
u16 adc1_read_vbus_latest(void);
/**
* @brief ADC1 单次软件触发转换并等待完成(仅主循环任务上下文调用)
* @param[in] channel ADC 通道号(如 ADC_CHANNEL_9)
* @return u16 转换原始值
* @note 会临时暂停 VBUS 连续模式、切到目标通道单次转换、再恢复连续,
* 全程约 3~5μs,期间 VBUS 读数最多滞后该时长。drv 温度 1kHz 用。
*/
u16 adc1_read_raw(u8 channel);
#ifdef __cplusplus
}
#endif
+34 -107
View File
@@ -34,10 +34,6 @@
/** @brief DRV_SPI_CS_DISABLE 宏定义 */
#define DRV_SPI_CS_DISABLE() gpio_bit_set(GPIOB, GPIO_PIN_14)
// SPI DMA 完成标志:由 DMA ISR 置位,spi_rw_half_word_dma() 发起传输前清零并等待。
volatile bool spi_dma_tx_complete = false;
volatile bool spi_dma_rx_complete = false;
// 全局角度传感器单例:系统只有一个 KTH7823 角度传感器。
// 初始化顺序由 main::hardware_init() 调用 KTH7823.init() 保证。
angle_sensor KTH7823; // 角度传感器初始化
@@ -47,120 +43,42 @@ extern EncoderVelocityKalman Vel_kalman;
extern CAN_transmiter CAN0_transmiter; // CAN 初始化
/**
* @brief SPI DMA initialization
*/
void spi_dma_init(void) {
dma_parameter_struct dma_init_struct;
// 使能 DMA 时钟
rcu_periph_clock_enable(RCU_DMA0);
// 初始化发送 DMA 通道
dma_deinit(DMA0, DMA_CH2);
dma_struct_para_init(&dma_init_struct);
dma_init_struct.direction = DMA_MEMORY_TO_PERIPHERAL;
dma_init_struct.memory_addr = (uint32_t)0; // 实际地址将在传输时设置
dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
dma_init_struct.memory_width = DMA_MEMORY_WIDTH_16BIT;
dma_init_struct.number = 1;
dma_init_struct.periph_addr = (uint32_t)(&SPI_DATA(SPI0));
dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_16BIT;
dma_init_struct.priority = DMA_PRIORITY_HIGH;
dma_init(DMA0, DMA_CH2, &dma_init_struct);
// 初始化接收 DMA 通道
dma_deinit(DMA0, DMA_CH1);
dma_struct_para_init(&dma_init_struct);
dma_init_struct.direction = DMA_PERIPHERAL_TO_MEMORY;
dma_init_struct.memory_addr = (uint32_t)0; // 实际地址将在传输时设置
dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
dma_init_struct.memory_width = DMA_MEMORY_WIDTH_16BIT;
dma_init_struct.number = 1;
dma_init_struct.periph_addr = (uint32_t)(&SPI_DATA(SPI0));
dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_16BIT;
dma_init_struct.priority = DMA_PRIORITY_HIGH;
dma_init(DMA0, DMA_CH1, &dma_init_struct);
// 使能 SPI 的 DMA 发送和接收功能
spi_dma_enable(SPI0, SPI_DMA_TRANSMIT);
spi_dma_enable(SPI0, SPI_DMA_RECEIVE);
// 配置 DMA 中断
nvic_irq_enable(DMA0_Channel2_IRQn, 0, 1);
nvic_irq_enable(DMA0_Channel1_IRQn, 0, 1);
// 使能 DMA 传输完成中断
dma_interrupt_enable(DMA0, DMA_CH2, DMA_INT_FTF);
dma_interrupt_enable(DMA0, DMA_CH1, DMA_INT_FTF);
}
/**
* @brief Send or read half word through SPI using DMA
* @brief Send or read half word through SPI by register polling
*
* @param[in] spi_periph SPI peripheral
* @param[in] tx_data Data to transmit
* @param[out] rx_data Pointer to store received data
* @return 0 if success, -1 if error
* @note 单半字轮询收发。DMA 版本(已移除)每次传输需要:重配 2 个 DMA
* 通道(约 10 次寄存器写) + 2 次 FTF 中断 + 忙等完成标志,而 16bit
* @5MHz 帧本身只有 3.2μs——DMA 的准备与中断开销和传输时间同量级。
* 轮询同样忙等帧时间,但砍掉了全部 DMA 开销与 40k 次/秒的中断。
*/
int spi_rw_half_word_dma(uint32_t spi_periph, uint16_t tx_data,
int spi_rw_half_word_polling(uint32_t spi_periph, uint16_t tx_data,
uint16_t *rx_data) {
// 重置完成标志
spi_dma_tx_complete = false;
spi_dma_rx_complete = false;
u32 timeout = 1000;
// 配置发送 DMA
dma_channel_disable(DMA0, DMA_CH2);
dma_memory_address_config(DMA0, DMA_CH2, (uint32_t)&tx_data);
dma_transfer_number_config(DMA0, DMA_CH2, 1);
dma_channel_enable(DMA0, DMA_CH2);
// 配置接收 DMA
dma_channel_disable(DMA0, DMA_CH1);
dma_memory_address_config(DMA0, DMA_CH1, (uint32_t)rx_data);
dma_transfer_number_config(DMA0, DMA_CH1, 1);
dma_channel_enable(DMA0, DMA_CH1);
// 等待传输完成,超时时间为 100 个循环
uint32_t timeout = 100;
while ((!spi_dma_tx_complete || !spi_dma_rx_complete) && --timeout) {
// 空循环等待 DMA 传输完成
}
// 检查是否超时
if (timeout == 0) {
// 禁用 DMA 通道
dma_channel_disable(DMA0, DMA_CH2);
dma_channel_disable(DMA0, DMA_CH1);
ANG_SENS_DEBUG_PRINT("SPI DMA transfer timeout\r\n");
while (spi_i2s_flag_get(spi_periph, SPI_FLAG_TBE) == RESET) {
if (--timeout == 0U) {
return -1;
}
}
spi_i2s_data_transmit(spi_periph, tx_data);
timeout = 1000;
while (spi_i2s_flag_get(spi_periph, SPI_FLAG_RBNE) == RESET) {
if (--timeout == 0U) {
return -1;
}
}
*rx_data = spi_i2s_data_receive(spi_periph);
// 等待移位完成再返回:调用方返回后立即拉高 CS,
// 若最后一位仍在移位会截断帧
while (spi_i2s_flag_get(spi_periph, SPI_FLAG_TRANS) != RESET) {
}
return 0;
}
/**
* @brief DMA0_Channel2 中断处理函数
* @param 无
*/
extern "C" void DMA0_Channel2_IRQHandler(void) {
if (dma_interrupt_flag_get(DMA0, DMA_CH2, DMA_INT_FLAG_FTF)) {
dma_interrupt_flag_clear(DMA0, DMA_CH2, DMA_INT_FLAG_FTF);
spi_dma_tx_complete = true;
}
}
/**
* @brief DMA0_Channel1 中断处理函数
* @param 无
*/
extern "C" void DMA0_Channel1_IRQHandler(void) {
if (dma_interrupt_flag_get(DMA0, DMA_CH1, DMA_INT_FLAG_FTF)) {
dma_interrupt_flag_clear(DMA0, DMA_CH1, DMA_INT_FLAG_FTF);
spi_dma_rx_complete = true;
}
}
/**
* @brief 角度传感器初始化
* @param 无
@@ -216,7 +134,6 @@ void KTH7823_spi_init(void) {
u8 angle_sensor::init(void) {
KTH7823_gpio_init(); // GPIO 初始化
KTH7823_spi_init(); // SPI 初始化
spi_dma_init(); // DMA 初始化
return 0;
}
@@ -239,7 +156,7 @@ inline float angle_sensor::read_sensorAngle(void) {
uint16_t raw_data;
ANG_SPI_CS_ENABLE();
u8 result = spi_rw_half_word_dma(SPI0, DEFAULT_COMMAND, &raw_data);
u8 result = spi_rw_half_word_polling(SPI0, DEFAULT_COMMAND, &raw_data);
ANG_SPI_CS_DISABLE();
if (result == 0) {
@@ -310,3 +227,13 @@ float angle_sensor::getRawAngle(void) const { return m_cumulativeAngle; }
float angle_sensor::getcurrent_sensorangle(void) const{
return current_angle_deg;
}
/**
* @brief 设置电角度零位校准角
* @param[in] angle 校准角(度)
* @return 0 成功
*/
u8 angle_sensor::set_calibration(float angle) {
calibration_angle = normalizeAngle360(angle);
return 0;
}
+9 -8
View File
@@ -21,13 +21,16 @@ extern "C" {
*/
u16 spi_rw_half_word(u32 spi_periph, const u16 i_HalfWord);
/**
* @brief spi_rw_half_word_dma 函数
* @param[in] spi_periph 参数
* @param[in] tx_data 参数
* @param[in] rx_data 参数
* @return int 返回值
* @brief spi_rw_half_word_polling 函数
* @param[in] spi_periph SPI 外设
* @param[in] tx_data 发送的半字
* @param[out] rx_data 接收数据输出指针
* @return int 0 成功,-1 超时
* @note 单个半字收发:直接寄存器轮询。原 DMA 实现每次传输要重配两个
* DMA 通道并触发两次 FTF 中断,之后 CPU 仍忙等完成——对单半字
* 传输 DMA 只有开销没有收益(20kHz 调用下约 40k 次/秒额外中断)。
*/
int spi_rw_half_word_dma(uint32_t spi_periph, uint16_t tx_data,
int spi_rw_half_word_polling(uint32_t spi_periph, uint16_t tx_data,
uint16_t *rx_data);
@@ -91,8 +94,6 @@ class angle_sensor {
float current_angle_rad;
bool m_firstUpdate;
float m_lastAngle;
float m_lastcumulativeAngle;
float velocity[VEL_FILTER_SIZE] = {0.0f};
};
/**
* @brief 快速角度归一化到 [0, 360)
+214 -11
View File
@@ -1,15 +1,218 @@
/**
* @file device/motor.cpp
* @brief 底层设备驱动与外设封装源文件
* @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。
* @note 功率级门驱动芯片抽象层:
* - 老板 DRV8313(集成 FET 三半桥,无 SPI):保持原使能时序
* - 新板 DRV8323RS(外置 MOS):使能前经 SPI 配置 3x PWM 模式、
* CSA 增益、VDS 过流门限、死区与 IDRIVE,并逐条回读校验
*/
#include "motor.h"
#include "Timer.h"
#include "config.h"
#include "ang_sensor.h"
#include "gd32c10x_eval.h"
#include "gd32c10x_gpio.h"
#include "gd32c10x_spi.h"
#include "systick.h"
#include <cstdio>
/* 角度传感器 SPI 初始化(ang_sensor.cpp):DRV 配置完成后恢复其 SPI 模式 */
extern void KTH7823_spi_init(void);
/**
* @brief 门驱动芯片引脚预初始化
* @note 新板:DRVSLP(PB12) 置低保持 DRV8323 睡眠、片选 PB14 释放、
* PB2(nFAULT) 内部上拉输入。必须在任何可能拉高使能脚的代码之前调用;
* 老板:无操作(原时序在 timer1_gpio_config 中保持不变)。
*/
void gate_driver_preinit(void) {
#if GATE_DRIVER_DRV8323
rcu_periph_clock_enable(RCU_GPIOB);
/* 使能脚推挽输出并保持低:芯片睡眠,栅极全 Hi-Z,寄存器默认值不起作用 */
gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_12);
gpio_bit_reset(GPIOB, GPIO_PIN_12);
/* SPI 片选默认释放(SCLK 空闲低时才允许 CS 翻转) */
gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_14);
gpio_bit_set(GPIOB, GPIO_PIN_14);
/* nFAULT 低有效,开漏输出 → 内部上拉,避免浮空误读成故障 */
gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_2);
#endif
}
#if GATE_DRIVER_DRV8323
/* ---------------- DRV8323 SPI ----------------
* 帧格式:[15:11] 寄存器地址 [10] 1读0写 [9:0] 数据。
* 时序:SCLK 空闲低、SDI 下降沿采样(SPI 模式1),与角度传感器
* (模式3)不同:配置前重初始化 SPI0,配置完调 KTH7823_spi_init() 恢复。
* 寄存器/位定义来源:TI SLVSDJ3D(DRV832x datasheet)Register Maps。 */
#define DRV_CS_ENABLE() gpio_bit_reset(GPIOB, GPIO_PIN_14)
#define DRV_CS_DISABLE() gpio_bit_set(GPIOB, GPIO_PIN_14)
#define DRV8323_REG_FAULT1 0x00u /* FAULT/VDS_OCP/GDF/UVLO/OTSD/VDS_Hx,VDS_Lx */
#define DRV8323_REG_VGS2 0x01u /* SA/SB/SC_OC、OTW、CPUV、VGS_Hx,VGS_Lx */
#define DRV8323_REG_DRVCTRL 0x02u /* [6:5]PWM_MODE [2]COAST [1]BRAKE [0]CLR_FLT */
#define DRV8323_REG_GDRV_HS 0x03u /* [10]LOCK [9:6]IDRIVEP_HS [5:2]IDRIVEN_HS */
#define DRV8323_REG_GDRV_LS 0x04u /* [10]CBC [9:8]TDRIVE [7:4]IDRIVEP_LS [3:0]IDRIVEN_LS */
#define DRV8323_REG_OCPCTRL 0x05u /* [10]TRETRY [9:8]DEAD_TIME [7:6]OCP_MODE [5:4]OCP_DEG [3:0]VDS_LVL */
#define DRV8323_REG_CSACTRL 0x06u /* [10]CSA_FET [9]VREF_DIV [8]LS_REF [7:6]CSA_GAIN [1:0]SEN_LVL */
/* PWM_MODE=01b:3x PWM。INHx 低→下管开、高→上管开,死区芯片内部插入。
芯片复位默认 00b(6x PWM),6x 下 INLx 语义不同,本板 INLx=DRVSLP 常高,
必须切到 3x,否则上管永远开不了(电流全走体二极管)。 */
#define DRV8323_PWM_MODE_3X (1u << 5)
/* 栅驱动电流:源 170mA/灌 190mA(WSD6035DN33 Qg≈12.6nC,边沿约 75ns,
* 无栅电阻布局下避免过快边沿加重振铃) */
#define DRV8323_IDRIVE_HS ((0x6u << 6) | (0x7u << 2))
#define DRV8323_IDRIVE_HS_MASK ((0xFu << 6) | (0xFu << 2))
#define DRV8323_IDRIVE_LS ((0x6u << 4) | (0x7u << 0))
#define DRV8323_IDRIVE_LS_MASK ((0xFu << 4) | (0xFu << 0))
/* 死区 200ns(20kHz 大 Qg 管的安全值);OCP_MODE=10b 仅上报不动作:
* VDS 门限受 RDSon 温漂影响大(热态 20→30mΩ),先靠软件限流+热模型,
* 避免误跳闸;VDS_LVL=0.75V(默认),故障位可经 drv_fault_status() 读取 */
#define DRV8323_OCP_CFG ((0x2u << 8) | (0x2u << 6) | (0x9u << 0))
#define DRV8323_OCP_CFG_MASK ((0x3u << 8) | (0x3u << 6) | (0xFu << 0))
/** @brief CSA 增益值(V/V) → 0x06[7:6] 编码(5:00b 10:01b 20:10b 40:11b) */
constexpr u16 drv8323_gain_code(float g) {
return (g <= 5.0f) ? 0x0u : (g <= 10.0f) ? 0x1u : (g <= 20.0f) ? 0x2u : 0x3u;
}
#define DRV8323_CSA_GAIN_BITS (drv8323_gain_code(DRV8323_CSA_GAIN_VV) << 6)
/**
* @brief DRV8323 单帧 SPI 收发(片选内 16bit,帧间隔由调用节奏保证)
* @param[in] frame 完整 16bit 帧
* @return u16 从机返回的 10bit 数据
*/
static u16 drv8323_xfer(u16 frame) {
u16 rx = 0;
DRV_CS_ENABLE();
spi_rw_half_word_polling(SPI0, frame, &rx);
DRV_CS_DISABLE();
return rx & 0x03FFu;
}
/**
* @brief 读改写一个寄存器并回读校验
* @param[in] addr 寄存器地址
* @param[in] clrmask 要清零的位
* @param[in] setmask 要置一的位
* @return u8 0=回读一致 1=校验失败
*/
static u8 drv8323_write_verify(u8 addr, u16 clrmask, u16 setmask) {
u16 cur = drv8323_xfer((u16)(((u16)addr << 11) | (1u << 10)));
u16 nv = (u16)((cur & ~clrmask) | setmask);
drv8323_xfer((u16)(((u16)addr << 11) | nv));
u16 rb = drv8323_xfer((u16)(((u16)addr << 11) | (1u << 10)));
return (rb == nv) ? 0u : 1u;
}
#endif /* GATE_DRIVER_DRV8323 */
/**
* @brief 门驱动芯片上电配置
* @return u8 0=成功;非 0 按位指示回读校验失败的寄存器
* (bit0:DRVCTRL bit1:GDRV_HS bit2:GDRV_LS bit3:OCPCTRL bit4:CSACTRL)
* @note 调用时机:TIMER1/PWM 已配置且占空比为 0 之后。拉高 DRVSLP 唤醒
* 芯片的瞬间 INHx=0、INLx=1,默认 6x 模式下为"三相下管导通",
* 静止电机零电流,与 3x 模式 0% 占空比稳态一致,随后写模式无扰动。
*/
u8 gate_driver_bringup(void) {
#if GATE_DRIVER_DRV8323
/* 1. 唤醒芯片:DRVSLP 网络 200nF + 芯片内部复位,留足建立时间 */
drv_enable(1);
delay_1ms(10);
/* 2. SPI0 切到 DRV8323 时序(模式1:CPOL=0/下降沿采样,2MHz) */
spi_parameter_struct spi_init_str;
spi_struct_para_init(&spi_init_str);
spi_init_str.device_mode = SPI_MASTER;
spi_init_str.trans_mode = SPI_TRANSMODE_FULLDUPLEX;
spi_init_str.frame_size = SPI_FRAMESIZE_16BIT;
spi_init_str.clock_polarity_phase = SPI_CK_PL_LOW_PH_2EDGE;
spi_init_str.nss = SPI_NSS_SOFT;
spi_init_str.endian = SPI_ENDIAN_MSB;
spi_init_str.prescale = 60; /* 120MHz/60 = 2MHz */
spi_init(SPI0, &spi_init_str);
spi_nss_output_enable(SPI0);
spi_nssp_mode_enable(SPI0);
spi_enable(SPI0);
/* 3. 配置并逐条回读校验(读改写,保留未触碰位的出厂默认:
* VREF_DIV=1→SOx 中点 VREF/2,与 CURRENT_OFFSET 的 1.655V 一致;
* CSA_FET=0→正端 SPx,与 shunt 的 SP/SN 接法一致) */
u8 err = 0;
err |= (u8)(drv8323_write_verify(DRV8323_REG_DRVCTRL, 0x0000u,
DRV8323_PWM_MODE_3X)
<< 0);
err |= (u8)(drv8323_write_verify(DRV8323_REG_GDRV_HS,
DRV8323_IDRIVE_HS_MASK, DRV8323_IDRIVE_HS)
<< 1);
err |= (u8)(drv8323_write_verify(DRV8323_REG_GDRV_LS,
DRV8323_IDRIVE_LS_MASK, DRV8323_IDRIVE_LS)
<< 2);
err |= (u8)(drv8323_write_verify(DRV8323_REG_OCPCTRL, DRV8323_OCP_CFG_MASK,
DRV8323_OCP_CFG)
<< 3);
err |= (u8)(drv8323_write_verify(DRV8323_REG_CSACTRL, 0x3u << 6,
DRV8323_CSA_GAIN_BITS)
<< 4);
/* 4. CLR_FLT 脉冲清一次上电故障锁存,再恢复正常值 */
drv8323_xfer((u16)((DRV8323_REG_DRVCTRL << 11) | DRV8323_PWM_MODE_3X | 0x1u));
drv8323_xfer((u16)((DRV8323_REG_DRVCTRL << 11) | DRV8323_PWM_MODE_3X));
/* 5. 恢复角度传感器的 SPI 模式(模式3) */
KTH7823_spi_init();
return err;
#else
return 0; /* 老板 DRV8313 无 SPI,原使能时序保持不变 */
#endif
}
/**
* @brief 门驱动运行时使能/睡眠
* @note 新板:PB12 同时是 DRV8323 的 ENABLE 与 INLA/B/C 电平——
* 高=正常运转,低=芯片睡眠三相 Hi-Z(惯性滑行,兼作 MCU 复位
* 时的天然 fail-safe);老板:PB12+PC13 双脚,保持原行为。
*/
void drv_enable(u8 en) {
if (en) {
gpio_bit_set(GPIOB, GPIO_PIN_12);
#if !GATE_DRIVER_DRV8323
gpio_bit_set(MOTOR_EN_GPIO_PORT, MOTOR_EN_GPIO_PIN);
#endif
} else {
gpio_bit_reset(GPIOB, GPIO_PIN_12);
#if !GATE_DRIVER_DRV8323
gpio_bit_reset(MOTOR_EN_GPIO_PORT, MOTOR_EN_GPIO_PIN);
#endif
}
}
/**
* @brief 读取 nFAULT 引脚状态(PB2,低有效)
* @return u8 1=故障有效 0=正常
*/
u8 drv_nfault_active(void) {
return (gpio_input_bit_get(GPIOB, GPIO_PIN_2) == RESET) ? 1u : 0u;
}
/**
* @brief 读取门驱动故障状态寄存器
* @return u32 [9:0]=Fault Status1(0x00) [19:10]=VGS Status2(0x01);老板返回 0
*/
u32 drv_fault_status(void) {
#if GATE_DRIVER_DRV8323
u32 f1 = drv8323_xfer((u16)((DRV8323_REG_FAULT1 << 11) | (1u << 10)));
u32 f2 = drv8323_xfer((u16)((DRV8323_REG_VGS2 << 11) | (1u << 10)));
return f1 | (f2 << 10);
#else
return 0;
#endif
}
/**
* @brief driver输出初始化
*/
@@ -18,16 +221,20 @@ void motor_init(void) {
timer1_pwm_config();
// 使能GPIOB时钟
rcu_periph_clock_enable(RCU_GPIOB);
// 配置PB2为输入引脚,用于读取电机状态
gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_2);
// 配置PB2为输入引脚,用于读取电机状态(nFAULT)。
// 用内部上拉(GPIO_MODE_IPU)而不是浮空:nFAULT 是开漏输出,无故障时靠
// 上拉保持高。现在 PB2 电平直接决定"允不允许运行",浮空输入在接线未确认
// 或无上拉时会随机读低,把整机锁死;内部上拉(~40kΩ)与外部上拉并联无害。
gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_2);
/* 配置GPIOB的PB14为推挽输出 SPICS */
gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,
GPIO_PIN_14 | GPIO_PIN_12);
#if !GATE_DRIVER_DRV8323
// 使能GPIOC时钟,用于电机驱动使能引脚
rcu_periph_clock_enable(RCU_MOTOR_EN_GPIO);
// 配置PC13为推挽输出,用于控制电机驱动器使能
// 配置PC13为推挽输出,用于控制电机驱动器使能(老板专用)
gpio_init(MOTOR_EN_GPIO_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, MOTOR_EN_GPIO_PIN);
#endif
}
/**
@@ -45,16 +252,12 @@ void motor_reset(void) {
* @brief 电机休眠
*/
void motor_sleep(void) {
gpio_bit_reset(GPIOB, GPIO_PIN_12);
// 同时禁用电机驱动器
gpio_bit_reset(MOTOR_EN_GPIO_PORT, MOTOR_EN_GPIO_PIN);
drv_enable(0);
}
/**
* @brief 电机启动
*/
void motor_resume(void) {
gpio_bit_set(GPIOB, GPIO_PIN_12);
// 同时启用电机驱动器
gpio_bit_set(MOTOR_EN_GPIO_PORT, MOTOR_EN_GPIO_PIN);
drv_enable(1);
}
+37
View File
@@ -7,6 +7,10 @@
#ifndef _MOTOR_H
#define _MOTOR_H
#include "config.h"
#include "gd32c10x_eval.h"
// 定义电机驱动使能引脚
/** @brief MOTOR_EN_GPIO_PORT 宏定义 */
#define MOTOR_EN_GPIO_PORT GPIOC
@@ -36,4 +40,37 @@ void motor_resume(void);
*/
void motor_sleep(void);
/**
* @brief 门驱动芯片引脚预初始化(全部置安全态:使能拉低、CS 释放)
* @note 必须在任何可能拉高使能脚的代码之前调用
* @return void
*/
void gate_driver_preinit(void);
/**
* @brief 门驱动芯片上电配置
* 新板(DRV8323RS):拉高使能 → SPI 写 3x PWM 模式/CSA 增益/VDS
* 保护/死区/IDRIVE 并逐条回读校验,最后恢复角度传感器 SPI 模式;
* 老板(DRV8313):无 SPI,保持原上电序列(无操作)。
* @return u8 0 成功;非 0 为配置/回读校验失败的寄存器位图
* @note 调用时机:TIMER1/PWM 已配置且占空比为 0 之后(此时使能芯片,
* 半桥只会进入"下管常开"的静止安全态)
*/
u8 gate_driver_bringup(void);
/**
* @brief 门驱动运行时使能/睡眠(分板封装 PB12,老板同时控制 PC13)
* @param[in] en 1=使能 0=睡眠
* @return void
*/
void drv_enable(u8 en);
/**
* @brief 读取 nFAULT 引脚状态
* @return u8 1=故障有效(低电平) 0=正常
*/
u8 drv_nfault_active(void);
/**
* @brief 读取门驱动故障状态寄存器(仅 DRV8323 有效)
* @return u16 [9:0]=Fault Status1(0x00) [19:10]=VGS Status2(0x01);老板返回 0
*/
u32 drv_fault_status(void);
#endif
+60 -9
View File
@@ -15,6 +15,7 @@
#include "flash.h"
#include "health.h"
#include "initial.h"
#include "motor.h"
#include "systick.h"
// MAIN 调试宏定义
@@ -40,6 +41,9 @@ TaskScheduler scheduler = {0};
u32 motor_runtime_50us = 0;
// 负载检测/通信心跳计数:主循环递增,CAN 周期发送任务清零。
u32 cnt_test = 0;
// 初始化错误位图(INIT_ERR_*,config.h):hardware_init 按模块置位,
// CAN STATUS 帧 InitStatus 反馈给上位机,0 表示全部初始化正常
volatile u32 init_error_flags = 0;
/**
* @brief 应用程序入口函数
@@ -49,7 +53,11 @@ int main(void) {
u8 init_status = hardware_init();
while (init_status) { // 初始化检测
MAIN_DEBUG_PRINT("初始化失败\r\n");
// 初始化失败:持续通过 CAN STATUS 帧上报 InitStatus 错误码
// (含电流检测配平超限/无采样帧),上位机无需调试串口即可识别故障模块
printf("初始化失败 InitStatus=0x%08X\r\n", init_error_flags);
CAN0_transmiter.send_status_frame(); // STATUS 帧字节 32~35 携带错误位图
delay_1ms(100);
}
OTA_initial(); // OTA 初始化,A/B 分区处理
@@ -81,22 +89,65 @@ u8 hardware_init(void) {
__enable_irq();
systick_config(); // 系统时钟初始化
unused_pin_init(); // 未使用引脚初始化
gate_driver_preinit(); // 门驱动使能脚预置安全态(新板:DRVSLP 低=芯片睡眠)
USART0_init(); // 调试串口初始化
User_timer_init(); // 任务 Timer 初始化
u8 init_status = 0;
init_status += KTH7823.init(); // 角度传感器初始化
init_status += sampler.init(); // 采样器初始化
// 初始化错误码按模块置位(INIT_ERR_*,位或组合;0=全部正常),
// 经 CAN STATUS 帧 InitStatus 反馈
init_error_flags = 0;
if (KTH7823.init()) {
init_error_flags |= INIT_ERR_ANGLE_SENSOR; // 角度传感器初始化
}
if (sampler.init()) {
init_error_flags |= INIT_ERR_ADC; // 采样器/ADC 初始化
}
// EEPROM 初始化 (必须在 CAN 初始化之前,因为 CAN 会从 Flash 读取节点 ID)
flashEEP.init(); // EEPROM 初始化
// CAN 初始化 (会先设置默认节点 ID,然后从 Flash 加载已保存的节点 ID)
init_status += CAN0_transmiter.init(); // CAN 初始化
if (CAN0_transmiter.init()) {
init_error_flags |= INIT_ERR_CAN; // CAN 初始化
}
init_status += Angle_kalman.init(KTH7823.getAngle()); // 角度滤波初始化
init_status += Vel_kalman.init(0.0f); // 速度滤波初始化
init_status += FOC.init(); // FOC 初始化
return init_status;
if (Angle_kalman.init(KTH7823.getAngle())) {
init_error_flags |= INIT_ERR_ANG_KALMAN; // 角度滤波器初始化
}
if (Vel_kalman.init(0.0f)) {
init_error_flags |= INIT_ERR_VEL_KALMAN; // 速度滤波器初始化
}
if (FOC.init()) {
init_error_flags |= INIT_ERR_FOC; // FOC 初始化
}
// 门驱动上电配置放在 FOC 校验之后:此时 TIMER1/PWM 已启动且占空比为 0,
// 新板(DRV8323)在此拉高 DRVSLP 唤醒芯片并经 SPI 配置 3x PWM/增益/保护,
// 随后即使任务立即输出 0 占空比,桥臂也处于"下管常开"的静止安全态
if (gate_driver_bringup()) {
init_error_flags |= INIT_ERR_GATE_DRIVER; // 门驱动 bringup
}
// 三相电流零点配平:采样前唤醒门驱动,让 0% 占空比下三相下管导通,
// PGNDx 与功率地等电位、共模与运行时一致,配平结果才可用。
// 老板 bringup 是空操作、上电默认睡眠:此处临时唤醒(此时占空比 0=
// 三相下管导通,静止安全态),配平完恢复睡眠,保持"上电未使能"的
// 原始安全态(模式 0 的 drv_hold 恒占空比不会真实输出);新板
// bringup 已唤醒并保持常醒,无需额外操作。配平值超限/无采样帧
// 分别置独立错误位。
#if !GATE_DRIVER_DRV8323
motor_resume();
#endif
u8 current_cal = sampler.zero_calibrate();
#if !GATE_DRIVER_DRV8323
motor_sleep();
#endif
if (current_cal == 1) {
init_error_flags |= INIT_ERR_CURRENT_NOFRAME; // 无采样帧
} else if (current_cal == 2) {
init_error_flags |= INIT_ERR_CURRENT_BAL; // 配平值超限
}
return (init_error_flags != 0U) ? 1U : 0U;
}
+2
View File
@@ -34,6 +34,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef MAIN_H
#define MAIN_H
#include "config.h"
#include <cstdint>
/**
+188 -53
View File
@@ -1,4 +1,4 @@
/**
/**
* @file sys/config.h
* @brief 系统服务与平台支持源文件
* @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。
@@ -9,6 +9,18 @@
#include "gd32c10x_eval.h"
#include <cstdint>
// 项目级定宽类型别名(u8/u16/u32 等):整个工程统一从这里取,
// 重复 typedef 同一类型在 C++ 中合法,包含多次无副作用
typedef uint8_t u8;
typedef uint16_t u16;
typedef uint32_t u32;
typedef int8_t s8;
typedef int16_t s16;
typedef int32_t s32;
typedef volatile uint8_t vu8;
typedef volatile uint16_t vu16;
typedef volatile uint32_t vu32;
// 如果使用 CMSIS DSP 库,需要定义 ARM_MATH_CM4
#define ARM_MATH_CM4
@@ -20,24 +32,101 @@
#define MAIN_DEBUG 0
#define FOC_DEBUG 0
// 版本号定义 - 可根据实际项目进行调整
constexpr u16 SOFTWARE_VERSION_MAJOR = 26;
constexpr u16 SOFTWARE_VERSION_MINOR = 5;
constexpr u16 SOFTWARE_VERSION_PATCH = 24;
constexpr u16 SOFTWARE_VERSION_BUILD = 2;
// ===================== 版本号定义 =====================
// 软件版本 = 编译日期自动生成(年.月.日)+ 当天构建小版本号(手动递增)
// __DATE__ 形如 "Mmm dd yyyy"(如 "Aug 29 2026"):2026-08-29 当天第一次
// 构建得到 26.8.29.1;同一天多次出固件时把 SOFTWARE_VERSION_BUILD +1
#define CFG_VER_YEAR \
((__DATE__[7] - '0') * 1000 + (__DATE__[8] - '0') * 100 + \
(__DATE__[9] - '0') * 10 + (__DATE__[10] - '0'))
#define CFG_VER_IS_JAN (__DATE__[0] == 'J' && __DATE__[1] == 'a' && __DATE__[2] == 'n')
#define CFG_VER_IS_FEB (__DATE__[0] == 'F' && __DATE__[1] == 'e' && __DATE__[2] == 'b')
#define CFG_VER_IS_MAR (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'r')
#define CFG_VER_IS_APR (__DATE__[0] == 'A' && __DATE__[1] == 'p' && __DATE__[2] == 'r')
#define CFG_VER_IS_MAY (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'y')
#define CFG_VER_IS_JUN (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'n')
#define CFG_VER_IS_JUL (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'l')
#define CFG_VER_IS_AUG (__DATE__[0] == 'A' && __DATE__[1] == 'u' && __DATE__[2] == 'g')
#define CFG_VER_IS_SEP (__DATE__[0] == 'S' && __DATE__[1] == 'e' && __DATE__[2] == 'p')
#define CFG_VER_IS_OCT (__DATE__[0] == 'O' && __DATE__[1] == 'c' && __DATE__[2] == 't')
#define CFG_VER_IS_NOV (__DATE__[0] == 'N' && __DATE__[1] == 'o' && __DATE__[2] == 'v')
#define CFG_VER_IS_DEC (__DATE__[0] == 'D' && __DATE__[1] == 'e' && __DATE__[2] == 'c')
#define CFG_VER_MONTH \
(CFG_VER_IS_JAN ? 1 \
: CFG_VER_IS_FEB ? 2 \
: CFG_VER_IS_MAR ? 3 \
: CFG_VER_IS_APR ? 4 \
: CFG_VER_IS_MAY ? 5 \
: CFG_VER_IS_JUN ? 6 \
: CFG_VER_IS_JUL ? 7 \
: CFG_VER_IS_AUG ? 8 \
: CFG_VER_IS_SEP ? 9 \
: CFG_VER_IS_OCT ? 10 \
: CFG_VER_IS_NOV ? 11 \
: CFG_VER_IS_DEC ? 12 \
: 0)
/* 日字段两位,个位数时首字符为空格(如 "Aug 5 2026") */
#define CFG_VER_DAY \
((__DATE__[4] == ' ') ? (__DATE__[5] - '0') \
: ((__DATE__[4] - '0') * 10 + (__DATE__[5] - '0')))
constexpr u16 SOFTWARE_VERSION_MAJOR = CFG_VER_YEAR % 100; // 年后两位,如 26
constexpr u16 SOFTWARE_VERSION_MINOR = CFG_VER_MONTH; // 月
constexpr u16 SOFTWARE_VERSION_PATCH = CFG_VER_DAY; // 日
// 当天第几次构建(日期由 __DATE__ 自动带出):
// 26.10.10.2 = nFAULT(MotorStatus) 由"仅上报"改为运行门
// 26.10.11.1 = 停机/解除统一收进 RunInhibit 闸门,删掉 FOC 里 5 个互引的开关机函数
constexpr u16 SOFTWARE_VERSION_BUILD = 1;
// 硬件版本:全手写,仅在 PCB 改版时修改(编译 APP 不影响)
constexpr u16 HARDWARE_VERSION_MAJOR = 25;
constexpr u16 HARDWARE_VERSION_MINOR = 12;
constexpr u16 HARDWARE_VERSION_PATCH = 01;
constexpr u16 HARDWARE_VERSION_PATCH = 1;
constexpr u16 HARDWARE_VERSION_BUILD = 0;
// BOOT 版本:全手写,仅在 bootloader 更新时修改(APP 编译不影响)
constexpr u16 BOOT_VERSION_MAJOR = 26;
constexpr u16 BOOT_VERSION_MINOR = 1;
constexpr u16 BOOT_VERSION_PATCH = 12;
constexpr u16 BOOT_VERSION_BUILD = 0;
// ===================== 功率级门驱动芯片选择 =====================
// 1 = 新板 DRV8323RS(外置 WSD6035DN33):使能前经 SPI 配置 3x PWM 模式、
// CSA 增益、VDS 过流门限;3 路 PWM 接 INHA/B/C(CH2/CH1/CH0,
// 固件内已做通道重映射);PB12(DRVSLP) 同时是使能脚与 INLA/B/C 电平
// (高=正常运转,低=三相 Hi-Z 睡眠滑行)。
// 0 = 老板 DRV8313(集成 FET 三半桥):无 SPI,保持原使能时序与相序。
#define GATE_DRIVER_DRV8323 0
#if GATE_DRIVER_DRV8323
// DRV8323 片上 CSA 增益(V/V),经 SPI 写入 0x06[7:6],仅 5/10/20/40 有效。
// 双极性量程 = ±1.655V/(G×Rshunt):G=10、R=10mΩ 时约 ±16.5A。
// 修改后电流换算系数 CURRENT_FACTOR(ADC.cpp)自动跟随,但软件限流标定需复核。
constexpr float DRV8323_CSA_GAIN_VV = 10.0f;
constexpr float DRV8323_SHUNT_OHM = 0.010f;
#endif
// ===================== 相电流采样前端选择(独立于门驱动芯片) =====================
// 1 = 低边采样板(DRV8313 + 下桥臂 10mΩ + INA240A2):采样电阻串在各相下管
// 源极(PGNDx)与功率地之间,INA240A2(50V/V)放大后接 ADC0 注入组。
// OUT 静态中点 = (V_REF1+V_REF2)/2 = 1.65V(REF1 接 AGND、REF2 接 A3V3,
// 由芯片内部分压取中,数据手册支持的接法)。
// 换算 0.5V/A → 2.0 A/V,与老板外置放大链(50倍×10mΩ)数值一致,
// 电流链路单位为安培(get_current 返回 A,上报处 ×1000 转 mA)。
// 注意:下桥臂采样电阻只有对应下管导通(INx=0)时才有相电流流过,
// ADC 采样点必须在三相下管同时导通的窗口内(见 TIMER1_CH3_COMPARE_VALUE)。
// 0 = 老板(DRV8313 + 外置放大链):保持原标定系数与采样点。
#define CURRENT_SENSE_INA240 1
#if CURRENT_SENSE_INA240
constexpr float INA240_CSA_GAIN_VV = 50.0f; // INA240A2 = 50V/V(A1=20/A3=100/A4=200)
constexpr float INA240_SHUNT_OHM = 0.010f; // 低边采样电阻 10mΩ
#endif
// 编译时间(AC6 编译器自动生成)
#define APP_BUILD_DATE __DATE__
#define APP_BUILD_TIME __TIME__
// Flash 分区配置
constexpr u32 BOOTLOADER_SIZE = 0x6000; // 24KB
constexpr u32 BOOTLOADER_START_ADDR = 0x08000000; // BOOT 起始地址
constexpr u32 APPLATEST_START_ADDR = 0x08012000; // APP 起始地址
constexpr u32 APPBACK_START_ADDR = 0x08006000; // APPBACK 起始地址
@@ -47,38 +136,43 @@ constexpr u32 SLEEP_CONFIG_START = 0x0801E400; // 睡眠配置起始地址
constexpr u32 SLEEP_CONFIG_END = 0x0801E800; // 睡眠配置结束地址
constexpr u32 FLASH_EMPTY = 0xFFFFFFFF; // 空数据
constexpr u32 SLEEP_ENABLE = 0x11111111; // 睡眠使能
constexpr u32 SLEEP_DISABLE = 0x00000000; // 睡眠禁止
// 节点 ID 配置 (用于多电机 CAN 总线隔离)
// 使用 CAN ID 高 16 位 (bits 31-16) 存储节点 ID,低 16 位 (bits 15-0) 存储基础 ID
// 格式:[节点 ID(16 位)][基础 ID(16 位)],例如:node_id=1, base_id=0x0200 → 0x00010200
//
// 节点 ID 存储方案:
// - 使用独立 Flash 页 (NODE_ID_PAGE_ADDR) 存储节点 ID,与EEPROM完全隔离
// - 采用双重备份机制 (主备份 + 备用备份)
// - 使用独立 Flash 页存储节点 ID,与EEPROM完全隔离
// - 采用双重备份机制:主备份与备用备份分属两个独立 1KB 页,
// 擦写其一不影响另一份,掉电时至少保留一份有效数据
// - 写入采用乒乓方式:总是写入"非最新"的那一页,另一页全程保有旧值
// - 使用魔数 (NODE_ID_MAGIC) 验证数据有效性,防止位翻转导致错读
// - 使用写入计数器区分最新数据
constexpr u32 NODE_ID_PAGE_ADDR = 0x0801E800; // 节点 ID 存储页 (1KB,独立区域)
constexpr u32 NODE_ID_PRIMARY_ADDR = 0x0801E800; // 主存储地址
constexpr u32 NODE_ID_BACKUP_ADDR = 0x0801E840; // 备份存储地址 (偏移64字节)
// - 使用写入计数器区分最新数据(计数器跳过 0,比较用有符号差值容忍回绕)
constexpr u32 NODE_ID_PAGE_ADDR = 0x0801E800; // 节点 ID 主存储页 (1KB,独立区域)
constexpr u32 NODE_ID_PRIMARY_ADDR = 0x0801E800; // 主备份地址
constexpr u32 NODE_ID_BACKUP_ADDR = 0x0801EC00; // 备用备份地址(独立 1KB 页)
constexpr u32 NODE_ID_MAGIC = 0x4E4F4445; // 魔数 'NODE' 用于验证数据有效性
constexpr u16 DEFAULT_NODE_ID = 1; // 默认节点 ID
constexpr u16 BROADCAST_NODE_ID = 0x1FFF; // 广播 ID (所有节点响应)
constexpr u16 MAX_NODE_ID = 0x1FFE; // 最大有效节点 ID (0~0x1FFE)
constexpr u16 SETTABLE_NODE_ID_MAX = 0x00FF; // SET_NODE_ID 命令允许设置的上限 (1~0xFF)
// 节点 ID 存储结构 (存储在Flash中的格式)
// 节点 ID 存储结构 (主备份/备用备份各一份,每份 16 字节,位于各自页首)
// 地址偏移 0x00: 魔数 (0x4E4F4445 = 'NODE')
// 地址偏移 0x04: 节点 ID (u16)
// 地址偏移 0x06: 保留 (u16,填充为0xFFFF)
// 地址偏移 0x08: 写入计数器 (u32,用于区分最新数据)
// 地址偏移 0x0C: CRC32 校验 (u32)
constexpr u8 NODE_ID_STRUCT_SIZE = 0x10; // 结构体大小 16 字节
constexpr u8 NODE_ID_MAGIC_OFFSET = 0x00; // 魔数偏移
constexpr u8 NODE_ID_VALUE_OFFSET = 0x04; // 节点ID值偏移
constexpr u8 NODE_ID_COUNTER_OFFSET = 0x08; // 写入计数器偏移
constexpr u8 NODE_ID_CRC_OFFSET = 0x0C; // CRC偏移
// BOOT 相关
// 版图/页大小核验:以下 6 个 OTA 标志位共处 0x0801E000 所在的 1KB Flash 页。
// OTA_SET 会整页擦除该页,故必须保证 FMC 页大小为 1KB(0x400),否则会连带擦除
// 相邻的 SLEEP_CONFIG(0x0801E400)/NODE_ID(0x0801E800)。GD32C103CB 实测页大小为
// 1KB(睡眠/节点 ID/EEPROM 分居相邻 1KB 页且互不影响即为佐证),与 FMC_PAGE_SIZE 一致。
constexpr u32 OTA_CONFIG_NUM = 6;
constexpr u32 n_APP_LATEST_AVAL_ADDR = 0x0801E000; // 最新 APP 可用地址
constexpr u32 n_APP_BACKUP_AVAL_ADDR = 0x0801E004; // 备份 APP 可用地址
@@ -93,10 +187,32 @@ constexpr u32 OTA_AVAL = 0x00000000; // 全零表示可用
constexpr u8 PP = 11;
constexpr float DIR = 1.0f; // 默认方向:-1.0f 反转,1.0f 正转
constexpr u16 REDUCTION_RATIO = 25;
constexpr float CURRENT_OFFSET = -3.31f / 2.0f; // 当前电流传感器的零点偏移
constexpr float CURRENT_OFFSET = -3.31f / 2.0f; // 电流通道零点偏移(V),
// 与 INA240 中点 1.65V / DRV8323 SO 中点 VREF/2 一致
// 三相电流零点配平:配平值(各通道实测零偏折算电流)超过该限值视为
// 电流检测初始化错误,随 init_status 阻止启动
constexpr float CURRENT_ZERO_CAL_LIMIT = 0.1f; // 100mA
// ===================== 初始化错误码(CAN STATUS 帧 InitStatus 反馈) =====================
// hardware_init 按模块置位(可位或组合),InitStatus=0 表示全部初始化正常;
// 信号定义见 DBC v0.74 的 STATUS 帧字节 32~35
constexpr u32 INIT_ERR_ANGLE_SENSOR = 1u << 0; // 角度传感器 KTH7823 初始化错误
constexpr u32 INIT_ERR_ADC = 1u << 1; // 采样器/ADC 初始化错误
constexpr u32 INIT_ERR_CAN = 1u << 2; // CAN 初始化错误
constexpr u32 INIT_ERR_ANG_KALMAN = 1u << 3; // 角度滤波器初始化错误
constexpr u32 INIT_ERR_VEL_KALMAN = 1u << 4; // 速度滤波器初始化错误
constexpr u32 INIT_ERR_FOC = 1u << 5; // FOC 初始化错误
constexpr u32 INIT_ERR_CURRENT_BAL = 1u << 6; // 电流检测:零点配平值超限(>100mA)
constexpr u32 INIT_ERR_CURRENT_NOFRAME = 1u << 7; // 电流检测:无采样帧(触发链路异常)
constexpr u32 INIT_ERR_GATE_DRIVER = 1u << 8; // 门驱动 bringup 错误
extern volatile u32 init_error_flags; // 初始化错误位图,定义在 main.cpp
constexpr float HOLD_PWM_DUTY = 0.1f;
constexpr u16 ANGLESENS_OFFSET = 0;
constexpr float ANGLESENS_CALIBRATION_ANGLE = 83.0f;
// 电角度零位校准:施加的对齐占空比与稳定等待时间
constexpr float ALIGN_PWM_DUTY = 0.25f;
constexpr u32 ALIGN_SETTLE_MS = 1000;
constexpr float CALIB_MAX_SPEED = 5.0f; // 输出级速度阈值(deg/s),超过则拒绝校准
constexpr float KE_FACTOR = 0.0f;
// 角度/速度 α-β 观测器参数
@@ -124,14 +240,24 @@ constexpr float CURRENT_KALMAN_MEASUREMENT_NOISE_R = 5e-5f; // 增大测量噪
// PID 配置
constexpr float DEFAULT_current_loop_p = 0.1f / 100 * 12; // 电流 P
constexpr float current_loop_Ki = 0.55f; // 电流 P
constexpr float current_loop_Kd = 3e-4f; // 电流 P
// 电流反馈噪声大(CurrentKalman 稳态增益≈1,几乎无滤波),D 项只放大噪声,置零
constexpr float current_loop_Kd = 0.0f;
constexpr float DEFAULT_vel_loop_p = 0.005f / 100 * 12; // 速度 P
constexpr float vel_loop_Ku = 3.600000e-03 * 0.7 * 100 / 12;
constexpr float vel_loop_Tu = 17.0f * 1e-3f;
constexpr float vel_loop_Ki = 1.2 * vel_loop_Ku / vel_loop_Tu;
// 速度 D 恢复(提供加速度阻尼);现走"测量微分+1ms低通"路径,无目标阶跃踢、
// 噪声被低通抑制,比旧的裸误差微分安全
constexpr float vel_loop_Kd = 0.075 * vel_loop_Ku * vel_loop_Tu * 2;
// PID 抗饱和与微分滤波(负载稳定性优化,2026-08)
// 抗饱和主体为条件积分(饱和方向冻结,见 pid.cpp);此增益仅用于
// bleed_integral() 外部饱和泄放(前馈叠加超限时),且带同号保护不过零
constexpr float ANTI_WINDUP_GAIN = 0.3f; // 外部饱和泄放比例
constexpr float DERIV_LPF_TAU = 0.001f; // 微分项一阶低通时间常数 (s)
constexpr float MIN_LIMIT_VOLTAGE = 0.1f; // P 增益换算分母下限,防 limit_voltage=0 除零
// mode2 角度同步 Uq 前馈补偿:固定 Uq 下的真实速度波动不应从反馈中滤掉,
// 而应按物理 360° 提前补偿负载/阻力差异,降低速度 PID 的周期性纠偏量。
constexpr bool MODE2_UQ_FF_ENABLE = true;
@@ -143,6 +269,7 @@ constexpr float MODE2_UQ_FF_GAIN = 0.003f; // 速度误差(deg/s)到前馈
constexpr float MODE2_UQ_FF_MAX = 3.5f; // 前馈补偿电压限幅(V)
constexpr float MODE2_UQ_FF_STOP_SPEED = 2.0f; // 目标/实际速度低于该值时不输出前馈
constexpr float MODE2_UQ_FF_BRAKE_ERR = 3.0f; // 明显超速/刹车时不输出前馈,单位同 velocity_error
constexpr float MODE2_UQ_FF_LEARN_ERR_MAX = 375.0f; // 速度误差带内才学习(≈15°/s×25),防启停瞬态污染表
// mode3 角度同步 Uq 前馈补偿:单独建表,避免和 mode2 互相污染。
constexpr bool MODE3_UQ_FF_ENABLE = true;
@@ -154,16 +281,21 @@ constexpr float MODE3_UQ_FF_GAIN = 0.3f; // mode3 速度误差未乘减
constexpr float MODE3_UQ_FF_MAX = 3.5f;
constexpr float MODE3_UQ_FF_STOP_SPEED = 2.0f; // mode3 内部目标/实际速度低于该值时不输出前馈
constexpr float MODE3_UQ_FF_BRAKE_ERR = 3.0f; // 明显超速/刹车时不输出前馈,单位同 velocity_error
constexpr float MODE3_UQ_FF_LEARN_ERR_MAX = 15.0f; // 速度误差带内(°/s)才学习,防启停瞬态污染表
constexpr float DEFAULT_vel_angloop_p = 0.4f / 100; // 速度 速度 - 角度 P
constexpr float vel_angloop_Ki = 5.0f; // 速度 速度 - 角度 I
constexpr float vel_angloop_Kd = 5e-05f; // 速度 速度 - 角度 D
constexpr float vel_angloop_Kd = 5e-05f; // 速度 速度 - 角度 D(恢复,走测量微分+低通)
// mode3 低速/静止附近速度 P 降低,减少速度反馈噪声、齿槽和摩擦导致的来回拉扯。
// mode3 低速/静止附近速度内环增益调度(D 保持满值):
// P/I 各自独立地板——I 地板更低,停止瞬间积分充电速率仅为全速的 15%,
// 与静摩擦相互作用(到位 hunting:停下瞬间小幅来回抖动)的能量被大幅压缩;
// P 地板保持足够刚度,减小突破静摩擦所需的误差。
constexpr bool MODE3_LOW_SPEED_P_SCALE_ENABLE = true;
constexpr float MODE3_LOW_SPEED_P_MIN_SCALE = 0.2f;
constexpr float MODE3_LOW_SPEED_P_MIN_SCALE = 0.5f;
constexpr float MODE3_LOW_SPEED_I_MIN_SCALE = 0.15f;
constexpr float MODE3_LOW_SPEED_P_LOW = 1.0f;
constexpr float MODE3_LOW_SPEED_P_FULL = 5.0f;
constexpr float MODE3_LOW_SPEED_P_FULL = 8.0f;
constexpr float DEFAULT_angle_angloop_p =
150.0f / 100 * 12; // 角度 速度 - 角度 P
@@ -178,45 +310,39 @@ constexpr float angle_MIT_Kd = 8e-04f;
constexpr float DEFAULT_vel_MIT_p = 5.0f / 100; // 速度 MIT P
constexpr float vel_MIT_Ki = 15.0f;
constexpr float vel_MIT_Kd = 1e-04f;
constexpr float vel_MIT_Kd = 1e-04f; // 速度 MIT D(恢复,走测量微分+低通)
constexpr float DEFAULT_current_MIT_p = 0.2f / 100 * 12; // 电流 MIT P
constexpr float current_MIT_Ki = 0.1f;
constexpr float current_MIT_Kd = 3e-4f;
constexpr float current_MIT_Kd = 0.0f; // 电流 MIT D(置零,同 current_loop_Kd)
// 常量定义
constexpr u8 SIZE_FLOAT = sizeof(float);
constexpr u8 SIZE_U32 = sizeof(uint32_t);
constexpr float ADC_MAX = 65536.0f;
constexpr float PI = 3.14159265358979323846f;
constexpr float INV_PI_3 = 3.0f / PI;
constexpr float PI_3 = PI / 3.0f;
constexpr float _1_SQRT3 = 0.57735026919f; // 1/sqrt(3)
constexpr float _3PI_2 = 4.71238898038f;
constexpr float SQRT3 = 1.7320508075688772f;
constexpr float SQRT3DV2 = 0.8660254037844386f; // sqrt(3)/2
constexpr float COS_PI_3 = 0.5f;
constexpr float ANGLE_FACTOR = 25.0f / 180.0f * PI;
constexpr float DEG2RAD = 1.0f / 180.0f * PI;
constexpr float RAD2DEG = 180.0f / PI; // 修正 RAD2DEG 定义,应该是 180/π
constexpr u8 DEFAULT_VALUE = 0;
constexpr u8 CONFIG_SAVED_NUM = 6;
// 三角函数快速计算 LUT
constexpr u16 LUT_SIZE = 1024;
constexpr u16 LUT_MASK = (LUT_SIZE - 1);
constexpr u16 LUT_SCALE = (LUT_SIZE / (2.0f * PI));
// CAN 相关
// 注意:以下为 CAN 基础 ID(只保留低 16 位),实际发送/接收时会自动叠加节点 ID
// 到高 16 位 格式:[节点 ID(16 位)][基础 ID(16 位)] 例如:节点 ID=1,发送命令
// ID = (1 << 16) | CANFD_CMD_ID = 0x00010200
constexpr u16 DEV_CAN0_ID = 0x0000;
constexpr u16 DEV_CAN0_MASK = 0x0000;
constexpr u16 DEV_CAN_LOOPBACK_ID = 0x0000;
// 反馈基础 ID
constexpr u16 CANFD_STATUS_ID = 0x0100; // 状态反馈基础 ID
constexpr u16 CANFD_CONFIG_ID = 0x0101; // 配置信息基础 ID
constexpr u16 CANFD_VERSION_ID = 0x00FF; // 版本信息基础 ID
// 周期反馈帧刷新周期(单位 ms,基于 1ms CAN 任务节拍分频;0=停发),
// 可通过 SET_NODE_ID(0x0400) 扩展格式运行时修改并持久化,
// 未配置时使用以下默认值(CONFIG 帧内容为控制模式/目标设定回显,
// 不实时依赖,默认 250Hz 降低总线占用)
constexpr u16 CANFD_TX_PERIOD_STATUS_DEFAULT_MS = 1; // STATUS 帧默认 1kHz
constexpr u16 CANFD_TX_PERIOD_CONFIG_DEFAULT_MS = 4; // CONFIG 帧默认 250Hz
// 0x0400/0x0401 扩展格式(DLC>=2/4)的参数选择器:0x0000=节点 ID,
// 其余选择器直接使用目标反馈帧的基础 ID(如 0x0100/0x0101)
constexpr u16 CANFD_PARAM_NODE_ID = 0x0000;
// 命令基础 ID
constexpr u16 CANFD_CMD_ID = 0x0200; // 控制命令基础 ID
constexpr u16 CANFD_RESET_ID = 0x0301; // 重置命令基础 ID
@@ -226,14 +352,10 @@ constexpr u16 CANFD_GET_NODE_ID = 0x0401; // 查询节点 ID 基础 ID
// OTA 相关基础 ID 不受到node ID影响
constexpr u16 CANFD_BOOT_ID = 0x0000; // BOOT 模式基础 ID (进入 BOOT 使用此 ID)
constexpr u16 CANFD_OTA_REQ_ID = 0x0100; // OTA 请求基础 ID
constexpr u16 CANFD_OTA_DATA_ID = 0x0101; // OTA 数据基础 ID
constexpr u16 CANFD_OTA_ACK_ID = 0x0102; // OTA 确认基础 ID
constexpr u16 CANFD_OTA_WAIT_ID = 0x0103; // OTA 等待基础 ID
// ADC
constexpr u8 ADC_FILTER_SIZE = 6;
constexpr u8 BLOCK_SIZE = ADC_FILTER_SIZE * SIZE_FLOAT;
constexpr float ERROR_ADC_VAL = 255.0f;
constexpr float MAX_TEMP = 150.0f;
constexpr float MIN_TEMP = -40.0f;
@@ -243,12 +365,10 @@ constexpr float MAX_VCC = 65.0f;
constexpr float MIN_VCC = -0.1f;
// ang_sensor
constexpr u16 VEL_FILTER_SIZE = 4;
constexpr u16 DEFAULT_COMMAND = 0x0000;
constexpr u16 FAULT_RECEIVE = 0xFFFF;
constexpr float ANGLE_WRAP_THRESHOLD = 300.0f;
constexpr float ANGLE_WRAP_VALUE = 360.0f;
constexpr float RAD_FACTOR = 1.0f / ADC_MAX * 2.0f * PI;
constexpr float ANGLESENS_FACTOR = 1.0f / ADC_MAX * 360.0f;
// TIMER2-任务调度
@@ -257,19 +377,24 @@ constexpr int TIMER2_PERIOD = 49; // 1 / 1MHz * 50 = 50us
constexpr int MOTOR_PERIOD = 1; // 控制每50us执行一次,无分频
constexpr float TIME_SLICE =
(TIMER2_PERIOD + 1) * (TIMER2_PRESCALER + 1) / 120000000.0f; // 周期
constexpr float TIMER2_FREQUENCY = 1 / TIME_SLICE; // 频率
constexpr float MOTOR_FREQUENCY = 1 / TIME_SLICE / MOTOR_PERIOD; // 频率
// TIMER1-PWM
constexpr int TIMER1_PRESCALER = 0; // 不分频,计数器时钟为 120MHz
constexpr int TIMER1_PERIOD = 2999; // 120MHz / (0+1) / (2999+1) = 40kHz计数, 中心对齐实际PWM 20kHz
constexpr int TIMER1_DEFAULT_PULSE = 0;
constexpr int TIMER1_CH3_COMPARE_VALUE =
(TIMER1_PERIOD + 1) * 0.41 - 1; // PWM 周期 41% 位置触发ADC采样
// 齿槽转矩补偿
constexpr u16 COGGING_TABLE_SIZE = 128; // 每电周期采样点数
constexpr float COGGING_COMP_SCALE = 0.005f; // 补偿换算系数 V/mA,40mA × 0.005 = 0.2V
// CH3 为固定 ADC 采样触发点(TRGO=O3CPRE)。低边采样要求触发落在"三相下管
// 同时导通"的窗口内:中心对齐 PWM0 下 INx 高(上管导通)区间以计数谷底
// CNT=0 为中心,INx 低(下管导通)区间以计数峰顶 CNT=PERIOD 为中心,故采样
// 点必须贴近峰顶(在线采样时代取 41% 是任意有效点,直接沿用会采到上管
// 导通期、三相电流恒读零)。
// 取 PERIOD-10:紧贴峰顶。中心对齐下每周期匹配两次(上升沿 2989 / 下降沿
// 3011,仅差 22 计数),无论第二次触发被 ADC 忽略(注入转换忙)还是重启
// 序列,帧的等效采样位置都在峰顶附近——行为确定,不依赖芯片的触发丢弃
// 策略;配合 ADC.cpp 电流通道 13.5 周期短采样,最大占空比 ~90% 时三相样本
// 仍全部落在下管导通窗内。占空比更高时序列末位的 W 相先落出窗口(读数
// 趋零、U+V+W≠0),软件侧需对占空比限幅。
constexpr int TIMER1_CH3_COMPARE_VALUE = TIMER1_PERIOD - 10;
// 电压检测参数(基于跌幅检测,不依赖固定额定电压)
// 快速检测层(fast_voltage_check,100us周期):
@@ -284,9 +409,19 @@ constexpr float VBUS_ABSOLUTE_MIN = 12.0f; // 绝对最低电压 (V)
constexpr u32 VBUS_DEBOUNCE_COUNT = 5; // 快速检测:防抖计数 (5次×100us = 500us)
constexpr float VBUS_RECOVERY_RATIO = 0.9f; // 恢复比例(基准电压的90%)
// ===================== 门驱动 nFAULT(STATUS 帧 motStatus / MotorStatus)=====================
// PB2 读门驱动 nFAULT(开漏低有效,固件已配内部上拉)。DRV8313/DRV8323 的
// UVLO、热关断、过流都会把它拉低,因此它就是"电机侧出错"的硬件凭据。
// 轮询点在 thermalController.update()(TASK_THERMAL_CONTROL,1ms)。
constexpr u8 DRV_FAULT_DEBOUNCE_MS = 3u; // 连续 N 次 1ms 采样为低才判故障
// 解除禁止后驱动需要重新建立:DRV8313 手册 7.4.1 给 ≈1ms,按 50us 控制节拍取 20 拍。
// 建立期内输出保持 0、不派发控制函数(见 sys/run_inhibit.cpp)。
constexpr u8 DRV_WAKE_SETTLE_50US = 20u;
#endif
+207 -66
View File
@@ -73,6 +73,28 @@ u8 FlashEEPROM::init() {
// 读取系统配置
read_saved_system_config();
// 加载电角度零位校准角(首次无存储则用默认值)
float calib = ANGLESENS_CALIBRATION_ANGLE;
if (readFloat(ADDR_CALIBRATION_ANGLE, &calib) != FLASH_EEPROM_OK) {
calib = ANGLESENS_CALIBRATION_ANGLE;
} else if (calib == 0.0f) {
// 校准值为 0 视为未校准/异常,回退默认值,避免换向角度错误
calib = ANGLESENS_CALIBRATION_ANGLE;
}
KTH7823.set_calibration(calib);
// 加载周期反馈帧刷新率(独立 u16 记录,无记录/读取失败回退默认值,
// 不影响 EEPROMStatus 的 CRC 参数组判定)
u16 tx_period = 0;
tx_period_status_ms =
(read(ADDR_TX_PERIOD_STATUS, &tx_period) == FLASH_EEPROM_OK)
? tx_period
: CANFD_TX_PERIOD_STATUS_DEFAULT_MS;
tx_period_config_ms =
(read(ADDR_TX_PERIOD_CONFIG, &tx_period) == FLASH_EEPROM_OK)
? tx_period
: CANFD_TX_PERIOD_CONFIG_DEFAULT_MS;
if (EEPROMStatus == FLASH_EEPROM_OK) {
return FLASH_EEPROM_OK;
} else {
@@ -179,8 +201,9 @@ FlashEepromStatus FlashEEPROM::read(u8 virtualAddr, u16 *data) const {
// 检查是否是有效数据(非擦除状态)
if (data_word != 0xFFFFFFFF) {
u8 addr = (u8)(data_word & DATA_ADDR_MASK);
// 找到匹配的虚拟地址
if (addr == virtualAddr) {
// u16 记录保留字节恒为 0(write() 写入格式 [data:16][rsvd:8][addr:8]),
// 借此排除 EEPROM 头部区 CRC 字(低 8 位恰为虚拟地址)的误匹配
if (addr == virtualAddr && (data_word & 0x0000FF00) == 0) {
// 右移 16 位以提取高 16 位的 u16 数据
*data = (u16)((data_word & DATA_U16_MASK) >> 16);
EEP_DEBUG_PRINT("read u16: addr=0x%x, val=%d\r\n", address, *data);
@@ -477,20 +500,53 @@ FlashEepromStatus FlashEEPROM::save_system_config(bool saved) {
CRC_NUM = crc_block_data_calculate(crc_data_words, CONFIG_SAVED_NUM);
writeCRC(CRC_NUM, saved);
// 周期反馈帧刷新率(独立记录,非 CRC 组):从 RAM 副本追加写入。
// 放在 CRC 组保存之后,写入失败不影响参数组状态(下次上电回退默认值);
// 页满 format() 重建时也经此路径从 RAM 副本恢复,刷新率配置不丢失
status = write(ADDR_TX_PERIOD_STATUS, tx_period_status_ms);
if (status != FLASH_EEPROM_OK) {
EEP_DEBUG_PRINT("save tx period STATUS failed (%d)\r\n", status);
}
status = write(ADDR_TX_PERIOD_CONFIG, tx_period_config_ms);
if (status != FLASH_EEPROM_OK) {
EEP_DEBUG_PRINT("save tx period CONFIG failed (%d)\r\n", status);
}
EEPROMStatus = FLASH_EEPROM_OK;
return FLASH_EEPROM_OK;
}
/**
* @brief 读取角度数据从 Flash
* @return float: 角度数据
* @brief 将 RAM 副本中的两帧刷新周期写入 Flash
* @note 独立 u16 记录(非 CRC 参数组),值不变时 write() 自动跳过以减少
* 磨损。运行时 SET 命令修改 RAM 副本后调用本函数持久化;若触发
* 页满 format() 重建,save_system_config() 会从 RAM 副本重写这两
* 条记录,本次修改不会丢失。
* @return FlashEepromStatus 操作状态
*/
float FlashEEPROM::read_angle() {
float angle = DEFAULT_VALUE;
if (readFloat(ADDR_ANGLE, &angle) != FLASH_EEPROM_OK) {
angle = DEFAULT_VALUE;
FlashEepromStatus FlashEEPROM::write_tx_periods() {
FlashEepromStatus status = write(ADDR_TX_PERIOD_STATUS, tx_period_status_ms);
if (status != FLASH_EEPROM_OK) {
EEP_DEBUG_PRINT("write_tx_periods: STATUS period write failed (%d)\r\n",
status);
return status;
}
return angle;
status = write(ADDR_TX_PERIOD_CONFIG, tx_period_config_ms);
if (status != FLASH_EEPROM_OK) {
EEP_DEBUG_PRINT("write_tx_periods: CONFIG period write failed (%d)\r\n",
status);
}
return status;
}
/**
* @brief 保存电角度零位校准角到 Flash
* @param[in] angle 校准角(度)
* @return FlashEepromStatus 操作状态
*/
FlashEepromStatus FlashEEPROM::save_calibration_angle(float angle) {
return writeFloat(ADDR_CALIBRATION_ANGLE, angle);
}
// ============================================================================
@@ -511,6 +567,35 @@ static u32 calculate_node_id_crc(u16 node_id, u32 counter) {
return crc_block_data_calculate(crc_data, 2);
}
/*!
* @brief 比较写入计数器新旧(有符号差值比较,容忍 u32 回绕)
* @param a: 计数器 a
* @param b: 计数器 b
* @retval bool: a 比 b 新则为 true
* @note 计数器写入时跳过 0,只要两次写入间隔不超过 2^31 次即可正确比较
*/
static bool node_id_counter_newer(u32 a, u32 b) {
return (int32_t)(a - b) > 0;
}
/*!
* @brief 擦除单个 1KB Flash 页
* @param page_addr: 页起始地址(1KB 对齐)
* @retval FlashEepromStatus: 操作状态
*/
static FlashEepromStatus erase_flash_page(u32 page_addr) {
fmc_unlock();
fmc_state_enum fmc_status = fmc_page_erase(page_addr);
if (fmc_status != FMC_READY) {
fmc_lock();
EEP_DEBUG_PRINT("Page erase failed at 0x%08X, status=%d\r\n",
page_addr, fmc_status);
return FLASH_EEPROM_ERASE_ERROR;
}
fmc_lock();
return FLASH_EEPROM_OK;
}
/*!
* @brief 从指定地址读取节点 ID 数据结构
* @param addr: Flash 地址
@@ -599,60 +684,87 @@ static FlashEepromStatus write_node_id_struct(u32 addr, u16 node_id, u32 counter
}
/*!
* @brief 擦除节点 ID 存储页
* @brief 擦除节点 ID 存储区(主备份页 + 备用备份页,恢复默认值)
* @retval FlashEepromStatus: 操作状态
* @note 仅用于恢复出厂/调试场景,会同时清除两份备份
*/
FlashEepromStatus FlashEEPROM::eraseNodeId() {
fmc_state_enum fmc_status;
EEP_DEBUG_PRINT("Erasing Node ID pages at 0x%08X / 0x%08X\r\n",
NODE_ID_PRIMARY_ADDR, NODE_ID_BACKUP_ADDR);
EEP_DEBUG_PRINT("Erasing Node ID page at 0x%08X\r\n", NODE_ID_PAGE_ADDR);
fmc_unlock();
fmc_status = fmc_page_erase(NODE_ID_PAGE_ADDR);
if (fmc_status != FMC_READY) {
fmc_lock();
EEP_DEBUG_PRINT("Node ID page erase failed, status=%d\r\n", fmc_status);
return FLASH_EEPROM_ERASE_ERROR;
FlashEepromStatus status = erase_flash_page(NODE_ID_PRIMARY_ADDR);
if (status != FLASH_EEPROM_OK) {
return status;
}
fmc_lock();
return FLASH_EEPROM_OK;
return erase_flash_page(NODE_ID_BACKUP_ADDR);
}
/*!
* @brief 从 Flash 读取节点 ID
* @brief 从 Flash 读取节点 ID(双重备份回退机制)
* @param node_id: 输出节点 ID 值
* @retval FlashEepromStatus: 操作状态
* @note 读取主备份与备用备份两份记录:
* - 两份均有效:取写入计数器更新的一份
* - 仅一份有效:回退使用该份(另一份损坏或未写入)
* - 均无效:返回 DATA_NOT_FOUND,由调用方使用默认值
*/
FlashEepromStatus FlashEEPROM::readNodeId(u16 *node_id) const {
if (node_id == nullptr) {
return FLASH_EEPROM_INVALID_ADDR;
}
u16 id_value = 0;
u32 counter = 0;
u16 id_primary = 0, id_backup = 0;
u32 counter_primary = 0, counter_backup = 0;
// 从主存储区读取
FlashEepromStatus status = read_node_id_struct(NODE_ID_PRIMARY_ADDR, &id_value, &counter);
FlashEepromStatus status_primary = read_node_id_struct(
NODE_ID_PRIMARY_ADDR, &id_primary, &counter_primary);
FlashEepromStatus status_backup = read_node_id_struct(
NODE_ID_BACKUP_ADDR, &id_backup, &counter_backup);
if (status == FLASH_EEPROM_OK) {
*node_id = id_value;
EEP_DEBUG_PRINT("Node ID read from primary (counter=%u): %d\r\n", counter, *node_id);
return FLASH_EEPROM_OK;
if (status_primary == FLASH_EEPROM_OK &&
status_backup == FLASH_EEPROM_OK) {
// 双备份均有效:取计数器更新的一份(计数器相同时优先主备份)
if (node_id_counter_newer(counter_backup, counter_primary)) {
*node_id = id_backup;
EEP_DEBUG_PRINT("Node ID read from backup (counter=%u): %d\r\n",
counter_backup, *node_id);
} else {
EEP_DEBUG_PRINT("Node ID read failed from primary: status=%d\r\n", status);
*node_id = id_primary;
EEP_DEBUG_PRINT("Node ID read from primary (counter=%u): %d\r\n",
counter_primary, *node_id);
}
} else if (status_primary == FLASH_EEPROM_OK) {
// 主备份有效,备用备份损坏/为空:回退主备份
*node_id = id_primary;
EEP_DEBUG_PRINT(
"Node ID fallback to primary (backup status=%d): %d\r\n",
status_backup, *node_id);
} else if (status_backup == FLASH_EEPROM_OK) {
// 主备份损坏/为空,备用备份有效:回退备用备份
*node_id = id_backup;
EEP_DEBUG_PRINT(
"Node ID fallback to backup (primary status=%d): %d\r\n",
status_primary, *node_id);
} else {
EEP_DEBUG_PRINT("Node ID not found in both slots (primary=%d, backup=%d)\r\n",
status_primary, status_backup);
return FLASH_EEPROM_DATA_NOT_FOUND;
}
return FLASH_EEPROM_OK;
}
/*!
* @brief 保存节点 ID 到 Flash(每次写入前先擦除整个页面,写入后校验)
* @brief 保存节点 ID 到 Flash(乒乓式双重备份,写入后校验)
* @param node_id: 要保存的节点 ID 值
* @retval FlashEepromStatus: 操作状态
* @note 由于Flash只能将1写为0,不能将0写为1,因此每次写入新数据前
* 需要先擦除整个页面。简化方案:不再使用备用备份区,
* 每次写入前擦除页面,然后写入主存储区。
* 写入后立即校验数据,如果不对则再次写入,最多3次。
* @note 主备份与备用备份分属两个独立 1KB Flash 页。写入流程:
* 1. 读取两份备份,定位计数器最新的有效记录作为基准
* 2. 选择"非最新"的一页作为写入目标(乒乓交替)
* 3. 只擦除并写入目标页,另一页全程保有旧的有效记录,
* 掉电时至少一份数据存活
* 4. 写入后立即校验,失败则重试,最多3次
* 某一页损坏时无需专门修复:下一次写入目标即切换到该页,
* 擦除+重写天然完成自愈。
*/
FlashEepromStatus FlashEEPROM::writeNodeId(u16 node_id) {
if (node_id > MAX_NODE_ID) {
@@ -660,34 +772,59 @@ FlashEepromStatus FlashEEPROM::writeNodeId(u16 node_id) {
return FLASH_EEPROM_INVALID_ADDR;
}
// 获取当前写入计数器(从主存储区读取)
u16 current_id = 0;
u32 current_counter = 0;
// 读取两份备份,确定当前最新有效记录(计数器基准 + 乒乓目标选择)
u16 id_primary = 0, id_backup = 0;
u32 counter_primary = 0, counter_backup = 0;
FlashEepromStatus primary_status = read_node_id_struct(NODE_ID_PRIMARY_ADDR, &current_id, &current_counter);
FlashEepromStatus status_primary = read_node_id_struct(
NODE_ID_PRIMARY_ADDR, &id_primary, &counter_primary);
FlashEepromStatus status_backup = read_node_id_struct(
NODE_ID_BACKUP_ADDR, &id_backup, &counter_backup);
// 计数器 +1
u32 new_counter = current_counter + 1;
// 如果计数器溢出(0xFFFFFFFF + 1 = 0),则使用1
bool primary_latest = false;
bool backup_latest = false;
if (status_primary == FLASH_EEPROM_OK &&
status_backup == FLASH_EEPROM_OK) {
// 两份均有效:计数器新的为最新(相同时视为主备份最新)
if (node_id_counter_newer(counter_backup, counter_primary)) {
backup_latest = true;
} else {
primary_latest = true;
}
} else if (status_primary == FLASH_EEPROM_OK) {
primary_latest = true;
} else if (status_backup == FLASH_EEPROM_OK) {
backup_latest = true;
}
// 计数器 +1(跳过 0;两份均无效时从 1 开始)
u32 new_counter = 1;
if (primary_latest) {
new_counter = counter_primary + 1;
} else if (backup_latest) {
new_counter = counter_backup + 1;
}
if (new_counter == 0) {
new_counter = 1;
}
// 先擦除整个页面
EEP_DEBUG_PRINT("Erasing Node ID page before write\r\n");
FlashEepromStatus status = eraseNodeId();
if (status != FLASH_EEPROM_OK) {
return status;
}
// 乒乓写入:目标为"非最新有效"的一页,最新有效的一页保持不动
u32 target_addr = primary_latest ? NODE_ID_BACKUP_ADDR : NODE_ID_PRIMARY_ADDR;
// 写入并校验,最多3次
// 写入并校验,最多3次(重试期间另一页的旧记录始终有效)
/** @brief MAX_WRITE_RETRY 宏定义 */
#define MAX_WRITE_RETRY 3
for (u8 retry = 0; retry < MAX_WRITE_RETRY; retry++) {
// 写入主存储区
EEP_DEBUG_PRINT("Writing to primary (counter=%u, retry=%d)\r\n", new_counter, retry);
FlashEepromStatus write_status = write_node_id_struct(NODE_ID_PRIMARY_ADDR, node_id, new_counter);
EEP_DEBUG_PRINT("Writing to 0x%08X (counter=%u, retry=%d)\r\n",
target_addr, new_counter, retry);
FlashEepromStatus status = erase_flash_page(target_addr);
if (status != FLASH_EEPROM_OK) {
continue;
}
FlashEepromStatus write_status =
write_node_id_struct(target_addr, node_id, new_counter);
if (write_status != FLASH_EEPROM_OK) {
EEP_DEBUG_PRINT("Node ID write failed: status=%d\r\n", write_status);
continue;
@@ -696,20 +833,18 @@ FlashEepromStatus FlashEEPROM::writeNodeId(u16 node_id) {
// 立即校验数据
u16 read_id = 0;
u32 read_counter = 0;
FlashEepromStatus read_status = read_node_id_struct(NODE_ID_PRIMARY_ADDR, &read_id, &read_counter);
FlashEepromStatus read_status =
read_node_id_struct(target_addr, &read_id, &read_counter);
if (read_status == FLASH_EEPROM_OK && read_id == node_id && read_counter == new_counter) {
EEP_DEBUG_PRINT("Node ID saved and verified successfully: %d (counter=%u)\r\n", node_id, new_counter);
if (read_status == FLASH_EEPROM_OK && read_id == node_id &&
read_counter == new_counter) {
EEP_DEBUG_PRINT("Node ID saved and verified: %d (counter=%u, slot=0x%08X)\r\n",
node_id, new_counter, target_addr);
return FLASH_EEPROM_OK;
} else {
EEP_DEBUG_PRINT("Node ID verification failed: read_id=%d (expected=%d), read_counter=%u (expected=%u)\r\n",
}
EEP_DEBUG_PRINT("Node ID verify failed: read_id=%d (expected=%d), "
"read_counter=%u (expected=%u)\r\n",
read_id, node_id, read_counter, new_counter);
// 校验失败,重新擦除并写入
if (retry < MAX_WRITE_RETRY - 1) {
EEP_DEBUG_PRINT("Retrying...\r\n");
eraseNodeId();
}
}
}
EEP_DEBUG_PRINT("Node ID save failed after %d retries\r\n", MAX_WRITE_RETRY);
@@ -722,7 +857,9 @@ FlashEepromStatus FlashEEPROM::writeNodeId(u16 node_id) {
* @return FlashEepromStatus: 状态
*/
FlashEepromStatus FlashEEPROM::writeCRC(u32 CRC_NUM, bool saved) {
static u32 next_address;
// 每次调用重新扫描可写入位置,不跨调用残留旧地址
// (循环至少执行一次,next_address 必被赋值)
u32 next_address = EEPROM_START_ADDRESS;
// 遍历 Flash 页面寻找下一个可写入 crc 的位置
for (u32 address = EEPROM_DATA_START_ADDRESS - SIZE_U32;
address > EEPROM_START_ADDRESS; address -= SIZE_U32) {
@@ -884,6 +1021,8 @@ u8 OTA_SET(u32 addr, u32 data) {
* @retval 无
*/
void jumpToBOOT() {
// 0. 进 BOOT 前保存系统配置与运行参数(兜底,确保数据落盘)
flashEEP.save_system_config(false);
// 1. 关闭所有中断
__disable_irq();
for (int i = 0; i < 8; i++) {
@@ -912,6 +1051,8 @@ void jumpToBOOT() {
uint32_t reset_handler = *(__IO uint32_t *)(BOOTLOADER_START_ADDR + 4);
typedef void (*AppEntryFunc)(void);
AppEntryFunc app_entry = (AppEntryFunc)reset_handler;
// 跳转前喂狗,给 BOOT 留出一个完整看门狗周期做早期初始化
fwdgt_counter_reload();
__set_MSP(msp_value);
// 7. 跳转
app_entry();
+26 -8
View File
@@ -7,6 +7,8 @@
#ifndef __FLASH_H
#define __FLASH_H
#include "config.h"
#include "gd32c10x.h" // 添加GD32主头文件以确保外设函数声明可用
#include <cstdint>
@@ -54,10 +56,17 @@ class FlashEEPROM {
static constexpr u8 ADDR_VOLTAGE_LIMIT = 0x4; // 电压限制
static constexpr u8 ADDR_VEL_LIMIT = 0x05; // 角度数据存储地址
static constexpr u8 ADDR_NODE_ID = 0x06; // 节点 ID 存储地址
static constexpr u8 ADDR_CALIBRATION_ANGLE = 0x07; // 电角度零位校准角存储地址
static constexpr u8 ADDR_TX_PERIOD_STATUS = 0x08; // STATUS 帧刷新周期(ms)存储地址
static constexpr u8 ADDR_TX_PERIOD_CONFIG = 0x09; // CONFIG 帧刷新周期(ms)存储地址
bool angle_saved = false;
bool system_config_saved = false;
u8 EEPROMStatus;
// 周期反馈帧刷新周期 RAM 副本(ms,0=停发)。init() 从 Flash 加载,
// 无记录时回退 config.h 默认值;CAN_transmiter::init() 读取应用,
// SET 命令修改后经 write_tx_periods() 持久化
u16 tx_period_status_ms = CANFD_TX_PERIOD_STATUS_DEFAULT_MS;
u16 tx_period_config_ms = CANFD_TX_PERIOD_CONFIG_DEFAULT_MS;
// 构造函数
FlashEEPROM();
@@ -120,27 +129,36 @@ class FlashEEPROM {
*/
u8 read_saved_system_config(void);
/**
* @brief 读取保存的角度值
* @return float 返回值
* @brief 保存电角度零位校准角到 Flash
* @param[in] angle 校准角(度)
* @return FlashEepromStatus 操作状态
*/
float read_angle();
FlashEepromStatus save_calibration_angle(float angle);
// 节点 ID 独立读写函数(使用魔数+双重备份+计数器机制)
// 从 Flash 读取节点 ID(带魔数验证和双重备份回退)
// 周期反馈帧刷新率持久化(独立 u16 记录,不属于 CRC 参数组,
// 读取失败/无记录由调用方回退默认值,避免老设备升级后 CRC 全组失效)
/**
* @brief 将 RAM 副本中的两帧刷新周期写入 Flash(值不变自动跳过)
* @return FlashEepromStatus 操作状态
*/
FlashEepromStatus write_tx_periods();
// 节点 ID 独立读写函数(主/备双备份分属独立 Flash 页 + 魔数 + 计数器 + CRC)
// 从 Flash 读取节点 ID(双备份均有效取计数器最新,单份有效则回退)
/**
* @brief 读取节点 ID 配置
* @param[in] node_id 参数
* @return FlashEepromStatus 返回值
*/
FlashEepromStatus readNodeId(u16 *node_id) const;
// 保存节点 ID 到 Flash(写入主备份和备用备份)
// 保存节点 ID 到 Flash(乒乓写入非最新页,另一页保有旧值,掉电安全)
/**
* @brief 写入节点 ID 配置
* @param[in] node_id 参数
* @return FlashEepromStatus 返回值
*/
FlashEepromStatus writeNodeId(u16 node_id);
// 擦除节点 ID 存储区(恢复默认值)
// 擦除节点 ID 双备份存储页(恢复默认值)
/**
* @brief 擦除节点 ID 配置
* @return FlashEepromStatus 返回值
+99 -28
View File
@@ -10,6 +10,9 @@
#include "FOC.h"
#include "adc.h"
#include "flash.h"
#include "motor.h"
#include "run_inhibit.h"
#include <cmath>
extern sampler sampler;
@@ -19,11 +22,10 @@ extern FlashEEPROM flashEEP;
// 全局热管理控制器单例:由 main 任务周期调用 update(),用于维护过热保护状态。
ThermalController thermalController; // 热量控制器初始化
/** @brief max 宏定义 */
#define max(a, b, c) \
((a) > (b) ? ((a) > (c) ? (a) : (c)) : ((b) > (c) ? (b) : (c)))
/** @brief PROTECT_TIME 常量定义 */
constexpr u16 PROTECT_TIME = 6000; // 过热保护时间,单位*10ms
// 三相电流连续全部失效帧数(×10ms)阈值,达到后按过热关机处理
constexpr u16 CURRENT_ERROR_SHUTDOWN_COUNT = 100;
// 电压管理状态机:仅 power_manage() 慢速任务访问,文件内封装。
static VoltageState voltage_state = VoltageState::NORMAL;
@@ -34,6 +36,32 @@ static float last_vbus_slow = 0.0f; // 上次电压值(慢速任务用)
** @retval 热量值
*/
u32 ThermalController::update() {
// nFAULT 检测(STATUS 帧 motStatus / MotorStatus):本函数 1ms 执行一次。
// 旧实现整段被 #if GATE_DRIVER_DRV8323 圈住,而当前固件按 DRV8313 编译
// (config.h 该宏 = 0)→ 驱动报故障(UVLO / 热关断 / OCP 锁存,三者都会
// 拉低 nFAULT)只上报不动作,控制环照常输出。现在两板都判:
// 连续 DRV_FAULT_DEBOUNCE_MS 次采到低电平 → 申请禁止位,
// 停机由 run_inhibit 在 50us 控制任务里执行;解除只认上位机 motReset。
// DRV8323 板的 VDS 过流配置为"仅上报不动作",不会拉低 nFAULT,不在此触发。
static u8 nfault_busy_ms = 0;
const bool nfault = (drv_nfault_active() != 0U);
if (nfault) {
if (++nfault_busy_ms >= DRV_FAULT_DEBOUNCE_MS) {
nfault_busy_ms = 0;
run_inhibit.request(INHIBIT_DRV_NFAULT);
}
} else {
nfault_busy_ms = 0;
}
// MotorStatus 唯一写手:闸门里还有没有 nFAULT 这一位,或此刻引脚确实在低
CAN0_transmiter.MotorStatus =
(run_inhibit.sources() & INHIBIT_DRV_NFAULT) != 0U || nfault;
// 上报位与闸门同源:每拍从禁止位图派生,不要再在各处置 0/1
// (历史上"停机了但状态位说正常"就是多处写造成的)
CAN0_transmiter.ThermalStatus =
(run_inhibit.sources() & INHIBIT_THERMAL) != 0U;
thermal_value = Q16_16_MUL(thermal_value, thermalRate);
// 添加温度积累
int drv_temp = (int)sampler.get_drv_temp();
@@ -44,6 +72,22 @@ u32 ThermalController::update() {
mcu_temp = 0;
thermal_value += drv_temp * drv_temp + mcu_temp * mcu_temp;
// 三相电流采样有效性先算好:热积累与"冷却到点该不该撤销采样失效禁止位"都要用
const float raw_current[3] = {sampler.get_current('U'),
sampler.get_current('V'),
sampler.get_current('W')};
u32 currents[3] = {0, 0, 0};
bool valid[3] = {false, false, false};
for (u8 i = 0; i < 3; i++) {
if (raw_current[i] == ERROR_ADC_VAL) {
continue;
}
// get_current 已保证有效值 |I| ≤ MAX_CURRENT(40A),转 mA ≤ 40000
currents[i] = (u32)(fabsf(raw_current[i]) * 1000.0f);
valid[i] = true;
}
const bool any_valid = valid[0] || valid[1] || valid[2];
if (remainingTime10Ms) {
// 过热停机状态
// 检查是否可以恢复
@@ -52,43 +96,70 @@ u32 ThermalController::update() {
if (thermal_value < recovery_threshold) {
remainingTime10Ms = 1; // 可以恢复工作
}
if (remainingTime10Ms == 1) { // 过热恢复
FOC.resume_from_thermal();
CAN0_transmiter.ThermalStatus = 0;
if (remainingTime10Ms == 1) { // 冷却到点:各自撤销自己申请的禁止位
run_inhibit.release(INHIBIT_THERMAL);
if (any_valid) {
run_inhibit.release(INHIBIT_ISENSE_FAIL);
}
return --remainingTime10Ms;
}
return --remainingTime10Ms;
} else {
// 当前没有过热停机
// 添加电流热积累
u32 currents[3] = {(u32)(sampler.get_current('U') * 1000),
(u32)(sampler.get_current('V') * 1000),
(u32)(sampler.get_current('W') * 1000)};
// 添加电流热积累:取三相有效相的最大绝对值(热量与电流方向无关,
// 负半周同样发热)。采样失效帧(ERROR_ADC_VAL)不参与积累:
// 失效值 255 按 mA 参与平方运算会超出 int/u32 范围,热积累不可控;
// 三相持续全部失效说明采样链异常,按独立原因 fail-safe 停机
// (不再并入"过热"上报,上位机看到的是 INHIBIT_ISENSE_FAIL)。
static u16 current_error_frames = 0;
// 找最大电流(原始ADC值)
current_max = max(currents[0], currents[1], currents[2]);
if (!any_valid) {
if (++current_error_frames >= CURRENT_ERROR_SHUTDOWN_COUNT) {
current_error_frames = 0;
run_inhibit.request(INHIBIT_ISENSE_FAIL);
remainingTime10Ms = PROTECT_TIME;
return thermal_value;
}
return thermal_value;
}
current_error_frames = 0;
// 找最大电流(mA,绝对值);个别相失效时用剩余有效相
u32 max_current = 0;
for (u8 i = 0; i < 3; i++) {
if (valid[i] && currents[i] > max_current) {
max_current = currents[i];
}
}
current_max = (u16)max_current;
// 平方运算先转 float:40A 档 40000²×10 超 int 范围,整数运算会溢出
const float imax = (float)current_max;
// 电流系数按"绝对值全周期"口径标定:取 fabs 后正负半周都积累,
// 交流负载下积累速度约为旧版(仅正半周)的 2 倍,故系数统一取旧值一半,
// 保持原实测触发时机不变;温度积累与恢复阈值不受此补偿影响。
if (current_max < 2000) {
thermal_value += current_max * current_max * gapTimeMs *
0.00007f; // 计算当前电流热积累值
thermal_value += (u32)(imax * imax * gapTimeMs *
0.000035f); // 计算当前电流热积累值
} else if (current_max > 3800) {
thermal_value += current_max * current_max * gapTimeMs *
0.01f; // 添加当前电流热积累值
thermal_value += (u32)(imax * imax * gapTimeMs *
0.005f); // 添加当前电流热积累值
} else if (current_max > 3400) {
thermal_value += current_max * current_max * gapTimeMs *
0.005f; // 计算当前电流热积累值
thermal_value += (u32)(imax * imax * gapTimeMs *
0.0025f); // 计算当前电流热积累值
} else if (current_max > 3000) {
thermal_value += current_max * current_max * gapTimeMs *
0.0002f; // 计算当前电流热积累值
thermal_value += (u32)(imax * imax * gapTimeMs *
0.0001f); // 计算当前电流热积累值
} else if (current_max > 2000) {
thermal_value += current_max * current_max * gapTimeMs *
0.0001f; // 计算当前电流热积累值
thermal_value += (u32)(imax * imax * gapTimeMs *
0.00005f); // 计算当前电流热积累值
}
}
if (thermal_value > thermal_capacity) {
FOC.shut_down_thermal();
// 过热:只申请本模块的禁止位,停机由 run_inhibit 执行;
// ThermalStatus 由位图派生(见本函数开头),此处不再单独写
run_inhibit.request(INHIBIT_THERMAL);
remainingTime10Ms = PROTECT_TIME; // 过热停机
CAN0_transmiter.ThermalStatus = 1;
return remainingTime10Ms;
}
return thermal_value;
@@ -135,13 +206,13 @@ void power_manage(void) {
case VoltageState::SHUTDOWN_SAVE:
// 关机保存状态:检查是否可以恢复
// 恢复条件:电压恢复到基准电压的90%以上
// 恢复条件:电压恢复到基准电压的90%以上。
// 只撤销欠压这一位;是否真的能运行由闸门看位图是否清空决定,
// 这里不查其它故障源(过热/nFAULT 各自有各自的解除方)。
if (FOC.vbus_reference > 0 && vbus > FOC.vbus_reference * VBUS_RECOVERY_RATIO) {
if (!FOC.thermal_shutdown) {
FOC.resume();
run_inhibit.release(INHIBIT_UNDERVOLTAGE);
voltage_state = VoltageState::NORMAL;
}
}
break;
default:
+2 -1
View File
@@ -7,6 +7,8 @@
#ifndef _HEALTH_H
#define _HEALTH_H
#include "config.h"
#include <cstdint>
typedef int32_t q16_16_t; // Q16.16格式
// 定点数运算宏
@@ -36,7 +38,6 @@ enum class VoltageState : uint8_t {
*/
class ThermalController {
private:
u8 temperature;
u16 current_max;
q16_16_t thermalRate; // 热耗散系数(每单位时间散热比例)
+2 -42
View File
@@ -1,4 +1,4 @@
/**
/**
* @file sys/initial.cpp
* @brief 系统服务与平台支持源文件
* @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。
@@ -231,6 +231,7 @@ void VersionManager::printVersions() const {
versionToString(getBootVersion(), versionStr, sizeof(versionStr)));
}
/* retarget the C library printf function to the USART */
/**
* @brief 初始化 USART0 调试串口
@@ -282,47 +283,6 @@ void unused_pin_init() {
gpio_bit_reset(GPIOC, GPIO_PIN_14 | GPIO_PIN_15);
}
/*!
\brief 检测并打印复位源信息
\param[in] none
\param[out] none
\retval none
*/
u16 get_reset_cause(void) {
u16 cause = 0;
if (RESET != rcu_flag_get(RCU_FLAG_FWDGTRST)) {
// OTA_DEBUG_PRINT("Free Watchdog Timer Reset\r\n");
cause = RCU_FLAG_FWDGTRST;
}
if (RESET != rcu_flag_get(RCU_FLAG_EPRST)) {
// OTA_DEBUG_PRINT("External Pin Reset\r\n");
cause = RCU_FLAG_EPRST;
}
if (RESET != rcu_flag_get(RCU_FLAG_PORRST)) {
// OTA_DEBUG_PRINT("Power Reset\r\n");
cause = RCU_FLAG_PORRST;
}
if (RESET != rcu_flag_get(RCU_FLAG_WWDGTRST)) {
// OTA_DEBUG_PRINT("Window Watchdog Timer Reset\r\n");
cause = RCU_FLAG_WWDGTRST;
}
if (RESET != rcu_flag_get(RCU_FLAG_LPRST)) {
// OTA_DEBUG_PRINT("Low Power Reset\r\n");
cause = RCU_FLAG_LPRST;
}
if (RESET != rcu_flag_get(RCU_FLAG_SWRST)) {
// OTA_DEBUG_PRINT("Software Reset\r\n");
cause = RCU_FLAG_SWRST;
}
// 清除所有复位标志
rcu_all_reset_flag_clear();
// OTA_DEBUG_PRINT("cause:%d\r\n", cause);
return cause;
}
/**
* @brief 初始化 OTA 与 A/B 分区状态
+2 -6
View File
@@ -1,4 +1,4 @@
/**
/**
* @file sys/initial.h
* @brief 系统服务与平台支持源文件
* @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。
@@ -59,11 +59,6 @@ u8 USART0_init(void);
* @return u8 返回值
*/
u8 watchdog_init(u32 time);
/**
* @brief 获取复位原因
* @return u16 返回值
*/
u16 get_reset_cause(void);
/**
* @brief 初始化未使用引脚状态
* @return void
@@ -155,6 +150,7 @@ class VersionManager {
char *versionToString(const VersionInfo &version, char *buffer,
size_t bufSize) const;
// 打印所有版本信息
/**
* @brief printVersions 函数
+50
View File
@@ -0,0 +1,50 @@
/**
* @file sys/run_inhibit.cpp
* @brief 电机"禁止运行"闸门实现
*/
#include "run_inhibit.h"
#include "Timer.h"
#include "motor.h"
// 全局单例:定义放本文件,声明在 main.cpp 之外由各调用方 extern(见 run_inhibit.h)
RunInhibit run_inhibit;
/**
* @brief 申请禁止
*/
void RunInhibit::request(u32 src) { bits |= src; }
/**
* @brief 撤销本来源的禁止申请
*/
void RunInhibit::release(u32 src) { bits &= ~src; }
/**
* @brief 执行闸门:禁止/唤醒建立期封 PWM,禁止时让驱动睡眠;解除后唤醒并等建立时间
* @note 睡眠(nSLEEP 拉低)本身会复位 DRV8313 内部逻辑含故障锁存,所以
* "芯片侧锁存"由这里顺带清掉;"要不要继续禁止"完全由位图决定。
* 解除后不立即派发控制函数:DRV8313 手册 7.4.1 要求唤醒后约 1ms 才
* 完全工作,这段建立期内输出保持 0。若故障源还在,检测方会在下一轮
* 轮询里重新 request(),本模块不需要知道是谁、为什么。
*/
void RunInhibit::update(void) {
if (bits != 0U) {
if (!stopped) {
motor_sleep();
stopped = true;
}
// 建立窗口每拍重置:解除后要重新等满 DRV_WAKE_SETTLE_50US
wake_ticks = DRV_WAKE_SETTLE_50US;
Set_3Pwm(0.0f, 0.0f, 0.0f);
return;
}
if (stopped) {
motor_resume();
stopped = false;
}
if (wake_ticks != 0U) {
Set_3Pwm(0.0f, 0.0f, 0.0f);
wake_ticks--;
}
}
+77
View File
@@ -0,0 +1,77 @@
/**
* @file sys/run_inhibit.h
* @brief 电机"禁止运行"闸门:唯一有权决定桥臂能不能输出的模块。
* @note 分层约定(新增故障必须照此办,不要在检测处写停机动作):
* - 故障检测方 只调 request(来源位) —— 申请禁止,不碰 PWM/使能脚
* - 故障解除方 只调 release(来源位) —— 撤销自己的申请,不查别人的位
* - 功率级动作 只发生在本模块 update() —— 由 50us 控制任务驱动
* 因此任何一处都不需要知道其它故障源的存在;"能不能运行"= 位图是否为空。
*/
#ifndef _RUN_INHIBIT_H
#define _RUN_INHIBIT_H
#include "config.h"
/**
* @brief 禁止来源位图(每一位一个独立申请方,可并存)
*/
enum InhibitSource : u32 {
INHIBIT_DRV_NFAULT = 1u << 0, // 门驱动 nFAULT(PB2) 有效:UVLO/热关断/OCP 锁存
INHIBIT_UNDERVOLTAGE = 1u << 1, // 母线跌幅超阈值或低于绝对下限
INHIBIT_THERMAL = 1u << 2, // 热模型过热(含温度采集正常时的电流热积累)
INHIBIT_ISENSE_FAIL = 1u << 3, // 三相电流采样持续失效(原先被并入"过热"上报)
// 上位机还没下发过非零模式:保持驱动睡眠。这不是故障,而是"未被使能",
// 放在同一张位图里是为了让功率级只有一个执行者。老板 v2 的 EN 有 10k 下拉、
// DRV8313 上电默认睡眠;若上电即唤醒,模式 0(drv_hold 恒 10% 占空比锁止)
// 会立刻给 A 相通流发热,而"上电先发模式 0 当静止待机"是现有上位机行为。
INHIBIT_NOT_ENABLED = 1u << 7,
};
/**
* @brief RunInhibit 类:禁止运行闸门
*/
class RunInhibit {
// 上电即禁止:等上位机首次下发非零模式解除(见 INHIBIT_NOT_ENABLED)
u32 bits = INHIBIT_NOT_ENABLED;
bool stopped = false; // 上一拍是否已施加停机(避免每 50us 重复翻转使能脚)
u8 wake_ticks = 0; // 唤醒建立倒计时(50us 节拍)
public:
/**
* @brief 申请禁止(幂等;同一位重复申请无副作用)
* @param[in] src InhibitSource 位
* @return void
*/
void request(u32 src);
/**
* @brief 撤销本来源的禁止申请;位图清空后才允许运行
* @param[in] src InhibitSource 位
* @return void
*/
void release(u32 src);
/**
* @brief 是否允许运行(只看位图,不看唤醒状态)
* @return bool true=允许
*/
bool permitted() const { return bits == 0U; }
/**
* @brief 允许运行且驱动唤醒建立已完成,控制函数可派发
* @return bool true=可派发
*/
bool ready() const { return bits == 0U && wake_ticks == 0U; }
/**
* @brief 当前禁止来源位图(上报/诊断用)
* @return u32 位图
*/
u32 sources() const { return bits; }
/**
* @brief 执行闸门:50us 控制任务每拍调用,唯一碰 PWM 与驱动使能的地方
* @return void
*/
void update(void);
};
extern RunInhibit run_inhibit;
#endif
+3 -12
View File
@@ -39,6 +39,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "gd32c10x.h"
#include "gd32c10x_fmc.h"
#include "motor.h"
#include "tasks.h"
#include <cstdio>
// SLEEP 调试宏定义
@@ -149,18 +150,8 @@ extern "C" void SysTick_Handler(void) {
busy_cycles_accum = 0;
sample_seconds = 0;
}
}
/*!
\brief delay a time in seconds
\param[in] count: count in seconds
\param[out] none
\retval none
*/
void delay_1s(uint32_t count) {
uint32_t i;
for (i = 0; i < count; i++) {
delay_1ms(1000);
// 按任务负载统计与全局口径同步:同一秒窗口
task_busy_cycles_reset();
}
}
-7
View File
@@ -59,13 +59,6 @@ uint32_t get_systick_ms(void);
* @return void
*/
void delay_1ms(uint32_t count);
/* delay a time in seconds */
/**
* @brief 秒级阻塞延时
* @param[in] count 参数
* @return void
*/
void delay_1s(uint32_t count);
/* delay decrement */
/**
* @brief 递减延时计数器
+46 -19
View File
@@ -10,7 +10,9 @@
#include "adc.h"
#include "ang_sensor.h"
#include "health.h"
#include "run_inhibit.h"
#include "systick.h"
#include "gd32c10x.h"
extern CAN_transmiter CAN0_transmiter;
extern sampler sampler;
@@ -45,6 +47,29 @@ static bool has_task(u32 currentTasks, SystemTask task) {
return (currentTasks & (1u << task)) != 0U;
}
// 按任务 DWT 负载计量:定位 CPU 占用分布(与全局 cpu_usage 同 1s 口径,
// 由 SysTick 统计块调用 task_busy_cycles_reset() 同步清零)。
// 120MHz 下 120000 周期 ≈ 1% CPU。仅统计任务本体,不含中断抢占时间。
static volatile u32 task_busy_cycles[TASK_COUNT] = {0};
u32 get_task_busy_cycles(u8 task) {
return (task < TASK_COUNT) ? task_busy_cycles[task] : 0U;
}
void task_busy_cycles_reset(void) {
for (u8 i = 0; i < TASK_COUNT; i++) {
task_busy_cycles[i] = 0;
}
}
// 执行任务并累计其忙碌周期
#define RUN_TIMED(task_enum, call) \
do { \
u32 t0_ = DWT->CYCCNT; \
call; \
task_busy_cycles[task_enum] += DWT->CYCCNT - t0_; \
} while (0)
/**
* @brief 控制模式变化时复位所有控制环,避免积分项跨模式继承
* @return void
@@ -78,15 +103,18 @@ static void run_motor_control_task(void) {
FOC.fast_voltage_check();
}
// 运行闸门:全工程唯一执行停机/唤醒功率级的地方。放在模式判断之前,
// 这样即使 control_mode 非法(>=8)也照样封住输出。
run_inhibit.update();
if (!run_inhibit.ready()) {
return; // 被禁止运行,或刚解除还在驱动唤醒建立期(输出已由闸门保持 0)
}
if (FOC.control_mode >= 8) return;
// 模式合法时再派发控制函数,防止数组越界。
reset_control_loops_on_mode_change();
if (!FOC.is_shut_down) {
(FOC.*control_functions[FOC.control_mode])();
} else {
FOC.drv_stop();
}
}
/**
@@ -96,17 +124,19 @@ static void run_motor_control_task(void) {
*/
static void run_fast_sample_tasks(u32 currentTasks) {
if (has_task(currentTasks, TASK_CURRENT_UPDATE)) {
sampler.update_current();
RUN_TIMED(TASK_CURRENT_UPDATE, sampler.update_current());
}
if (has_task(currentTasks, TASK_ANGLE_UPDATE)) {
KTH7823.update();
FOC.rt_angle = Angle_kalman.update(KTH7823.getAngle());
RUN_TIMED(TASK_ANGLE_UPDATE, KTH7823.update());
RUN_TIMED(TASK_ANGLE_UPDATE,
FOC.rt_angle = Angle_kalman.update(KTH7823.getAngle()));
}
if (has_task(currentTasks, TASK_VELOCITY_UPDATE)) {
FOC.rt_velocity = Angle_kalman.getVelocity();
RUN_TIMED(TASK_VELOCITY_UPDATE,
FOC.rt_velocity = Angle_kalman.getVelocity());
}
if (has_task(currentTasks, TASK_MOTOR_CONTROL)) {
run_motor_control_task();
RUN_TIMED(TASK_MOTOR_CONTROL, run_motor_control_task());
}
}
@@ -117,19 +147,19 @@ static void run_fast_sample_tasks(u32 currentTasks) {
*/
static void run_housekeeping_tasks(u32 currentTasks) {
if (has_task(currentTasks, TASK_MCU_TEMP_UPDATE)) {
sampler.update_mcu_temp();
RUN_TIMED(TASK_MCU_TEMP_UPDATE, sampler.update_mcu_temp());
}
if (has_task(currentTasks, TASK_DRV_TEMP_UPDATE)) {
sampler.update_drv_temp();
RUN_TIMED(TASK_DRV_TEMP_UPDATE, sampler.update_drv_temp());
}
if (has_task(currentTasks, TASK_THERMAL_CONTROL)) {
thermalController.update();
RUN_TIMED(TASK_THERMAL_CONTROL, thermalController.update());
}
if (has_task(currentTasks, TASK_MAGNETIC_CHECK)) {
angsens_MG_check();
RUN_TIMED(TASK_MAGNETIC_CHECK, angsens_MG_check());
}
if (has_task(currentTasks, TASK_VBUS_UPDATE)) {
power_manage();
RUN_TIMED(TASK_VBUS_UPDATE, power_manage());
}
}
@@ -138,11 +168,13 @@ static void run_housekeeping_tasks(u32 currentTasks) {
* @return void
*/
static void run_can_task(void) {
u32 t0 = DWT->CYCCNT;
CAN0_transmiter.test_u16 = CAN0_transmiter.get_node_id();
cnt_test = 0;
CAN0_transmiter.can0_send_flag = SET;
CAN0_transmiter.communication_check();
fwdgt_counter_reload();
task_busy_cycles[TASK_CAN_TRANSMIT] += DWT->CYCCNT - t0;
}
/**
@@ -157,11 +189,6 @@ void do_task(u32 currentTasks) {
// 高频任务先执行,保持电机控制优先级。
run_fast_sample_tasks(currentTasks);
// 齿槽转矩校准 tick(DEBUG,平时不启用)
#if FOC_DEBUG
FOC.calibrate_cogging_tick();
#endif
run_housekeeping_tasks(currentTasks);
// CAN 发送放在最后,避免通信处理影响前面的实时控制任务。
+15
View File
@@ -1,6 +1,8 @@
#ifndef TASKS_H
#define TASKS_H
#include "config.h"
#include "initial.h"
#ifdef __cplusplus
@@ -14,6 +16,19 @@ extern "C" {
*/
void do_task(u32 currentTasks);
/**
* @brief 读取上一统计周期(1s)内指定任务累计消耗的 CPU 周期数
* @param[in] task SystemTask 枚举值
* @return u32 周期数(120MHz 下 120000 = 1% CPU)
*/
u32 get_task_busy_cycles(u8 task);
/**
* @brief 清零按任务负载统计(SysTick 每秒统计 cpu_usage 时同步调用)
* @return void
*/
void task_busy_cycles_reset(void);
#ifdef __cplusplus
}
#endif
-1
View File
@@ -13,7 +13,6 @@
以下 `constexpr` 对象为编译期常量,非可变全局状态,无运行期写入、并发访问或动态初始化顺序风险:
- `device/ADC.cpp`: `ADC_SCALE`, `TEMP_FACTOR`, `VCC_FACTOR`, `CURRENT_FACTOR`
- `device/Can.cpp`: `CANX`
- `sys/health.cpp`: `PROTECT_TIME`
- `sys/config.h`: 版本号、Flash 地址、协议 ID、滤波/PID 参数、数学常量、Timer 参数等 `constexpr` 配置项
File diff suppressed because one or more lines are too long
@@ -0,0 +1,34 @@
# STATIC_ANALYSIS_NOTES 复核修订版(2026-10-19)
> 原文件:仓库根目录 `STATIC_ANALYSIS_NOTES.md`(最后修改于 7c4aaa5,2026-09-01),本次保留未改。
> 复核基线:master `86ca766`(2026-10-13)。完整评审见 [Motor_v2_专家评审_2026-10-19.html](Motor_v2_专家评审_2026-10-19.html)。
| 条目 | 原结论 | 当前状态 | 证据 / 说明 |
|---|---|---|---|
| SUP-GLB-001 编译期常量(ADC/health/config constexpr) | 误报/偏离 | **仍成立** | ADC.cpp:22-47;health.cpp:107;config.h 全部为 constexpr |
| 硬件单例 FOC / sampler / CAN0_transmiter / KTH7823 / thermalController / Version | 接受单例 | **仍成立** | FOC.cpp:28;ADC.cpp:60;Can.cpp:86;ang_sensor.cpp:39;health.cpp:104;initial.cpp:218 |
| TaskScheduler scheduler 短临界区 | 已保护,接受 | **仍成立** | main.cpp:68-72 关中断取快照并清位;taskFlags volatile(initial.h:75);两写入方同抢占级 |
| CAN RX/TX 队列临界区与 PRIMASK 恢复 | 已保护,接受 | **基本成立,但有遗漏** | Can.cpp:644-731、480;遗漏:主循环 CANFD_AsyncSend 直接写邮箱与 TX ISR 竞争(Can.cpp:1395/744,见M21) |
| ADC injected 电流缓存不加临界区 | 保留现状 | **风险仍在** | ADC.cpp:62-63、467-481 存在三相撕裂/丢 ready(M33);建议序号双读而非 PRIMASK |
| “加 PRIMASK 后实机连续重启”归因于时序 | 归因时序 | **归因不成立** | 10 周期级临界区不足以致复位;更可能是 update_current 提前返回分支(ADC.cpp:468)未恢复中断 + 与 systick 改动捆绑未隔离 + 50 ms 看门狗(IRC40K)余量小;无复位原因记录无法定位 |
| systick DWT CPU 占用统计 | 允许小误差 | **仍成立** | systick.cpp:75-79、193-206;仅诊断值 |
| ang_sensor SPI DMA 完成标志 | 接受 volatile 标志 | **已过时** | 已改为寄存器轮询 spi_rw_half_word_polling(ang_sensor.cpp:57-82),标志不存在;新问题:TRANS 等待无超时(:78) |
| Timer total_us100_counter | 仅 ISR 使用,接受 | **仍成立** | Timer.cpp:19、149-153;可改为 ISR 内 static |
| health voltage_state / last_vbus_slow | 模块私有,接受 | **仍成立(有残留)** | health.cpp:112-113 文件内 static;last_vbus_slow 只写不读 |
| SUP-CMP-001 normalizeAngle360 浮点比较 | 无需容差 | **比较结论成立,但有新缺陷** | ang_sensor.h:103-111 输入 Inf/NaN 时死循环(M16) |
| printf:FOC 齿槽校准打印位于 FOC_DEBUG | 正式版不编译 | **已过时** | 9fbd9c3 已移除齿槽补偿;FOC_DEBUG 仅剩 motor.cpp:245 一处 |
| versionToString 去 snprintf | 已改 | **仍成立** | initial.cpp:302-346 |
| AUTO-MET-001 calibrate_cogging_tick 拆分 | 已拆分 | **已过时** | 函数随齿槽功能删除;Can.cpp:1186 bit4 改为保留位 |
| AUTO-MET-001 communication_check 拆分 | 已拆分 | **已落实** | Can.cpp:841-1115 |
| AUTO-MET-001 do_task 拆分 | 已拆分 | **已落实** | tasks.cpp:296-399 |
| “实编仍需在 Keil/CMSIS/cbuild 环境验证” | 待验证 | **仍未验证** | 本次评审为静态评审,未实编;cproject -O3 覆盖 build-types(M38)需一并处理 |
## 需要写回原记录的修订要点
1. 删除/标注过时:齿槽校准相关两条(FOC_DEBUG 打印、calibrate_cogging_tick 拆分),9fbd9c3 已移除齿槽补偿。
2. ang_sensor 已改为寄存器轮询,“SPI DMA 完成标志”条目应替换为“轮询超时”条目,并补 TRANS 等待超时。
3. ADC 电流缓存:保留“不加长临界区”的原则,但撕裂风险真实存在,建议改用序号双读;“加 PRIMASK 导致重启”的归因应改为“未定位”,并在启动时记录复位原因后在独立分支复现。
4. CAN 队列:补充“主循环 CANFD_AsyncSend 直接写邮箱与 TX ISR 竞争”的偏离说明或修复。
5. normalizeAngle360:比较结论成立,但需补充非有限输入保护。
6. health:`last_vbus_slow` 只写不读,可删除。
7. 实编验证仍未完成;同时修正 cproject 中强制 -O3 覆盖 build-types 的问题。
@@ -1,30 +0,0 @@
file,sha256_16,total_lines,nonblank_code_lines,comment_lines_approx
Algorithm/FOC.cpp,bf24c35a8386ebef,842,507,241
Algorithm/FOC.h,90d7f21da9e4d751,268,121,121
Algorithm/Filter.cpp,90d298a82e3bc14d,283,97,94
Algorithm/Filter.h,80cadefec99079e3,304,115,105
Algorithm/pid.cpp,52d182f02a4359b7,103,46,44
Algorithm/pid.h,e6333f5571fdfefb,64,25,33
Algorithm/thermal.cpp,c7fc8d63d064ab62,5,0,5
Algorithm/thermal.h,5499445022c02c37,13,3,5
device/ADC.cpp,6e847c602dd61aed,330,193,96
device/Can.cpp,b4484d3cfdf023d2,1513,938,357
device/Can.h,1f807194e6745e2a,364,125,206
device/Timer.cpp,3d006216c96dd4f6,319,173,87
device/Timer.h,dfc4a4e688be439b,62,17,38
device/adc.h,a541fdcbd7f8dae4,97,38,49
device/ang_sensor.cpp,b2d8799eb1fb4851,310,175,96
device/ang_sensor.h,0d0da02eb2f85172,102,36,59
device/motor.cpp,69a1c4b5ef126a03,58,28,24
device/motor.h,74d08896b2e68e2d,39,10,25
main.cpp,24cc061dbaad56fc,205,145,36
main.h,57a31fca9ed82289,52,6,13
sys/config.h,7dfdd00046239393,434,179,220
sys/flash.cpp,705d6caf8fc8309c,1030,665,257
sys/flash.h,8cbfcfe7014cd773,179,57,107
sys/health.cpp,eeb413b91f26ff47,149,98,37
sys/health.h,395415726314f996,80,37,34
sys/initial.cpp,4dffaa8ab1614908,351,212,95
sys/initial.h,3631974693d368cb,182,61,100
sys/systick.cpp,1b82db28eb3681d6,298,143,66
sys/systick.h,95cbb9678989e9a4,123,22,67
1 file sha256_16 total_lines nonblank_code_lines comment_lines_approx
2 Algorithm/FOC.cpp bf24c35a8386ebef 842 507 241
3 Algorithm/FOC.h 90d7f21da9e4d751 268 121 121
4 Algorithm/Filter.cpp 90d298a82e3bc14d 283 97 94
5 Algorithm/Filter.h 80cadefec99079e3 304 115 105
6 Algorithm/pid.cpp 52d182f02a4359b7 103 46 44
7 Algorithm/pid.h e6333f5571fdfefb 64 25 33
8 Algorithm/thermal.cpp c7fc8d63d064ab62 5 0 5
9 Algorithm/thermal.h 5499445022c02c37 13 3 5
10 device/ADC.cpp 6e847c602dd61aed 330 193 96
11 device/Can.cpp b4484d3cfdf023d2 1513 938 357
12 device/Can.h 1f807194e6745e2a 364 125 206
13 device/Timer.cpp 3d006216c96dd4f6 319 173 87
14 device/Timer.h dfc4a4e688be439b 62 17 38
15 device/adc.h a541fdcbd7f8dae4 97 38 49
16 device/ang_sensor.cpp b2d8799eb1fb4851 310 175 96
17 device/ang_sensor.h 0d0da02eb2f85172 102 36 59
18 device/motor.cpp 69a1c4b5ef126a03 58 28 24
19 device/motor.h 74d08896b2e68e2d 39 10 25
20 main.cpp 24cc061dbaad56fc 205 145 36
21 main.h 57a31fca9ed82289 52 6 13
22 sys/config.h 7dfdd00046239393 434 179 220
23 sys/flash.cpp 705d6caf8fc8309c 1030 665 257
24 sys/flash.h 8cbfcfe7014cd773 179 57 107
25 sys/health.cpp eeb413b91f26ff47 149 98 37
26 sys/health.h 395415726314f996 80 37 34
27 sys/initial.cpp 4dffaa8ab1614908 351 212 95
28 sys/initial.h 3631974693d368cb 182 61 100
29 sys/systick.cpp 1b82db28eb3681d6 298 143 66
30 sys/systick.h 95cbb9678989e9a4 123 22 67
@@ -1,554 +0,0 @@
severity,rule_id,rule_level,standard_ref,file,line,description,evidence,disposition,recommendation
warning,AUTO-CTRL-002,Advisory,MISRA C:2012 Rule 15.5 advisory / structured control flow,device/Can.cpp,1124,continue 需避免或说明偏离,continue;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-CTRL-002,Advisory,MISRA C:2012 Rule 15.5 advisory / structured control flow,device/Can.cpp,1194,continue 需避免或说明偏离,continue;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-CTRL-002,Advisory,MISRA C:2012 Rule 15.5 advisory / structured control flow,device/Can.cpp,1199,continue 需避免或说明偏离,continue;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-CTRL-002,Advisory,MISRA C:2012 Rule 15.5 advisory / structured control flow,main.cpp,80,continue 需避免或说明偏离,continue;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-CTRL-002,Advisory,MISRA C:2012 Rule 15.5 advisory / structured control flow,sys/flash.cpp,693,continue 需避免或说明偏离,continue;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-CTRL-002,Advisory,MISRA C:2012 Rule 15.5 advisory / structured control flow,sys/systick.cpp,264,continue 需避免或说明偏离,continue;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,Algorithm/FOC.cpp,100,printf/格式化输出需确认调试隔离和实时性影响,"printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,Algorithm/FOC.cpp,161,printf/格式化输出需确认调试隔离和实时性影响,"printf("""",",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,Algorithm/FOC.cpp,195,printf/格式化输出需确认调试隔离和实时性影响,"printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,Algorithm/FOC.cpp,198,printf/格式化输出需确认调试隔离和实时性影响,"printf("""", angle_deg, cogging_table[i]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,Algorithm/FOC.cpp,203,printf/格式化输出需确认调试隔离和实时性影响,"printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,Algorithm/FOC.cpp,206,printf/格式化输出需确认调试隔离和实时性影响,"printf("""", angle_deg, cogging_table_rev[i]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,Algorithm/FOC.cpp,211,printf/格式化输出需确认调试隔离和实时性影响,"printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,Algorithm/FOC.cpp,212,printf/格式化输出需确认调试隔离和实时性影响,"printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,Algorithm/FOC.cpp,214,printf/格式化输出需确认调试隔离和实时性影响,"if (i % 8 == 0) printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,Algorithm/FOC.cpp,215,printf/格式化输出需确认调试隔离和实时性影响,"printf("""", cogging_table[i]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,Algorithm/FOC.cpp,216,printf/格式化输出需确认调试隔离和实时性影响,"if (i < COGGING_TABLE_SIZE - 1) printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,Algorithm/FOC.cpp,217,printf/格式化输出需确认调试隔离和实时性影响,"if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,Algorithm/FOC.cpp,220,printf/格式化输出需确认调试隔离和实时性影响,"printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,Algorithm/FOC.cpp,223,printf/格式化输出需确认调试隔离和实时性影响,"printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,Algorithm/FOC.cpp,224,printf/格式化输出需确认调试隔离和实时性影响,"printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,Algorithm/FOC.cpp,226,printf/格式化输出需确认调试隔离和实时性影响,"if (i % 8 == 0) printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,Algorithm/FOC.cpp,227,printf/格式化输出需确认调试隔离和实时性影响,"printf("""", cogging_table_rev[i]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,Algorithm/FOC.cpp,228,printf/格式化输出需确认调试隔离和实时性影响,"if (i < COGGING_TABLE_SIZE - 1) printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,Algorithm/FOC.cpp,229,printf/格式化输出需确认调试隔离和实时性影响,"if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,Algorithm/FOC.cpp,232,printf/格式化输出需确认调试隔离和实时性影响,"printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,Algorithm/FOC.cpp,234,printf/格式化输出需确认调试隔离和实时性影响,"printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,device/Can.cpp,30,printf/格式化输出需确认调试隔离和实时性影响,"#define CAN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,device/ang_sensor.cpp,22,printf/格式化输出需确认调试隔离和实时性影响,"#define ANG_SENS_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,device/motor.cpp,38,printf/格式化输出需确认调试隔离和实时性影响,"printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,main.cpp,22,printf/格式化输出需确认调试隔离和实时性影响,"#define MAIN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,sys/flash.cpp,22,printf/格式化输出需确认调试隔离和实时性影响,"#define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,sys/flash.cpp,31,printf/格式化输出需确认调试隔离和实时性影响,"#define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,sys/initial.cpp,23,printf/格式化输出需确认调试隔离和实时性影响,"#define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,sys/initial.cpp,32,printf/格式化输出需确认调试隔离和实时性影响,"#define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,sys/initial.cpp,129,printf/格式化输出需确认调试隔离和实时性影响,"snprintf(buffer, bufSize, """", version.major, version.minor,",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-FUNC-002,Advisory,MISRA Dir 4.12 / project safety rule,sys/systick.cpp,47,printf/格式化输出需确认调试隔离和实时性影响,"#define SLEEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning,AUTO-MET-001,Advisory,Project metric threshold CC <= 15,Algorithm/FOC.cpp,75,圈复杂度 33 超过建议阈值 15,FOC_Controller::calibrate_cogging_tick,open_review,建议人工评审分支完整性;后续允许时再考虑拆分或增加单元测试覆盖。
warning,AUTO-MET-001,Advisory,Project metric threshold CC <= 15,device/Can.cpp,1076,圈复杂度 27 超过建议阈值 15,CAN_transmiter::communication_check,open_review,建议人工评审分支完整性;后续允许时再考虑拆分或增加单元测试覆盖。
warning,AUTO-MET-001,Advisory,Project metric threshold CC <= 15,main.cpp,120,圈复杂度 17 超过建议阈值 15,do_task,open_review,建议人工评审分支完整性;后续允许时再考虑拆分或增加单元测试覆盖。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,29,数组下标访问需审查边界保护,extern u16 adc_value[3];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,56,数组下标访问需审查边界保护,float comp = table[idx0] * (1.0f - frac) + table[idx1] * frac;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,66,数组下标访问需审查边界保护,float FOC_Controller::cog_calib_run_data[6][COGGING_TABLE_SIZE] = {};,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,67,数组下标访问需审查边界保护,float FOC_Controller::cog_calib_accum[COGGING_TABLE_SIZE] = {};,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,68,数组下标访问需审查边界保护,u32 FOC_Controller::cog_calib_count[COGGING_TABLE_SIZE] = {};,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,134,数组下标访问需审查边界保护,cog_calib_accum[idx] += iq;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,135,数组下标访问需审查边界保护,cog_calib_count[idx]++;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,152,数组下标访问需审查边界保护,cog_calib_run_data[cog_calib_run][i] =,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,153,数组下标访问需审查边界保护,(cog_calib_count[i] > 0) ? cog_calib_accum[i] / (float)cog_calib_count[i] : 0.0f;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,154,数组下标访问需审查边界保护,dc += cog_calib_run_data[cog_calib_run][i];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,158,数组下标访问需审查边界保护,cog_calib_run_data[cog_calib_run][i] -= dc;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,180,数组下标访问需审查边界保护,cogging_table[i] = (cog_calib_run_data[0][i] +,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,181,数组下标访问需审查边界保护,cog_calib_run_data[1][i] +,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,182,数组下标访问需审查边界保护,cog_calib_run_data[2][i]) / 3.0f;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,186,数组下标访问需审查边界保护,cogging_table_rev[i] = (cog_calib_run_data[3][i] +,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,187,数组下标访问需审查边界保护,cog_calib_run_data[4][i] +,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,188,数组下标访问需审查边界保护,cog_calib_run_data[5][i]) / 3.0f;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,198,数组下标访问需审查边界保护,"printf("""", angle_deg, cogging_table[i]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,206,数组下标访问需审查边界保护,"printf("""", angle_deg, cogging_table_rev[i]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,215,数组下标访问需审查边界保护,"printf("""", cogging_table[i]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,227,数组下标访问需审查边界保护,"printf("""", cogging_table_rev[i]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,326,数组下标访问需审查边界保护,static const float COGGING_TABLE_FWD[COGGING_TABLE_SIZE] = {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,344,数组下标访问需审查边界保护,static const float COGGING_TABLE_REV[COGGING_TABLE_SIZE] = {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,409,数组下标访问需审查边界保护,"static const u8 sector_lut[8] = {0, 2, 6, 1, 4, 3, 5, 0};",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,410,数组下标访问需审查边界保护,u8 sector = sector_lut[sector_code];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,431,数组下标访问需审查边界保护,static const float svpwm_coeff[6][4] = {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,440,数组下标访问需审查边界保护,float T1 = (svpwm_coeff[sector-1][0] * Ualpha + svpwm_coeff[sector-1][1] * Ubeta) * inv_Udc;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,441,数组下标访问需审查边界保护,float T2 = (svpwm_coeff[sector-1][2] * Ualpha + svpwm_coeff[sector-1][3] * Ubeta) * inv_Udc;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.cpp,605,数组下标访问需审查边界保护,float current_vbus = adc_value[2] * (3.3f / 4096.0f) * 11.0f;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.h,156,数组下标访问需审查边界保护,float cogging_table[COGGING_TABLE_SIZE] = {0};,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.h,157,数组下标访问需审查边界保护,float cogging_table_rev[COGGING_TABLE_SIZE] = {0};,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.h,191,数组下标访问需审查边界保护,static float cog_calib_run_data[6][COGGING_TABLE_SIZE];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.h,192,数组下标访问需审查边界保护,static float cog_calib_accum[COGGING_TABLE_SIZE];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/FOC.h,193,数组下标访问需审查边界保护,static u32 cog_calib_count[COGGING_TABLE_SIZE];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/Filter.cpp,65,数组下标访问需审查边界保护,float sorted[size];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,Algorithm/Filter.cpp,71,数组下标访问需审查边界保护,return sorted[size / 2];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,31,数组下标访问需审查边界保护,u16 adc_value[3] = {0};,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,32,数组下标访问需审查边界保护,static volatile u16 adc_current_value[3] = {0};,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,151,数组下标访问需审查边界保护,mcu_temp_samples[i] =,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,152,数组下标访问需审查边界保护,(1.43f - adc_value[0] * ADC_SCALE) * TEMP_FACTOR + 35.0f;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,154,数组下标访问需审查边界保护,currU_samples[i] = current_init;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,155,数组下标访问需审查边界保护,currV_samples[i] = current_init;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,156,数组下标访问需审查边界保护,currW_samples[i] = current_init;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,158,数组下标访问需审查边界保护,vbus_samples[i] = adc_value[2] * ADC_SCALE * VCC_FACTOR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,160,数组下标访问需审查边界保护,float R_now = (float)adc_value[1] / (4096 - (float)adc_value[1]) * 4700;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,161,数组下标访问需审查边界保护,drv_temp_samples[i] =,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,199,数组下标访问需审查边界保护,tempora_sample = currU_samples[idx];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,203,数组下标访问需审查边界保护,tempora_sample = currV_samples[idx];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,207,数组下标访问需审查边界保护,tempora_sample = currW_samples[idx];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,240,数组下标访问需审查边界保护,mcu_temp_samples[mcu_temp_head] =,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,241,数组下标访问需审查边界保护,(1.43f - adc_value[0] * ADC_SCALE) * TEMP_FACTOR + 35.0f;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,259,数组下标访问需审查边界保护,float R_now = (float)adc_value[1] / (4096 - (float)adc_value[1]) * 4700;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,260,数组下标访问需审查边界保护,drv_temp_samples[drv_temp_head] =,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,283,数组下标访问需审查边界保护,currU_samples[idx] = current_adc_to_ma(adc_current_value[0]);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,284,数组下标访问需审查边界保护,currV_samples[idx] = current_adc_to_ma(adc_current_value[1]);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,285,数组下标访问需审查边界保护,currW_samples[idx] = current_adc_to_ma(adc_current_value[2]);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,299,数组下标访问需审查边界保护,vbus_samples[temp_vbus_head] = adc_value[2] * ADC_SCALE * VCC_FACTOR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,306,数组下标访问需审查边界保护,if (vbus_samples[mid] > MAX_VCC || vbus_samples[mid] < MIN_VCC) {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,321,数组下标访问需审查边界保护,"adc_current_value[0] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_1);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,322,数组下标访问需审查边界保护,"adc_current_value[1] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_2);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ADC.cpp,323,数组下标访问需审查边界保护,"adc_current_value[2] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_3);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,49,数组下标访问需审查边界保护,uint8_t can_rx_buffer[64];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,50,数组下标访问需审查边界保护,static uint32_t can_rx_dma_words[16];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,63,数组下标访问需审查边界保护,u8 data[64];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,71,数组下标访问需审查边界保护,static can_rx_queue_item_t rx_queue[CAN_RX_QUEUE_SIZE];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,76,数组下标访问需审查边界保护,static can_tx_queue_item_t tx_queue[CAN_TX_QUEUE_SIZE];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,82,数组下标访问需审查边界保护,"static constexpr u8 CANFD_DLC_LENGTH_TABLE[7] = {12, 16, 20, 24, 32, 48, 64};",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,238,数组下标访问需审查边界保护,message = rx_message_buffer[rx_buffer_tail];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,559,数组下标访问需审查边界保护,transmit_message.tx_data[i] = dis(gen);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,560,数组下标访问需审查边界保护,"CAN_DEBUG_PRINT("""", transmit_message.tx_data[i]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,625,数组下标访问需审查边界保护,transmit_message.tx_data[i] = i;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,650,数组下标访问需审查边界保护,"CAN_DEBUG_PRINT("""", i, transmit_message.tx_data[i],",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,651,数组下标访问需审查边界保护,receive_message.rx_data[i]);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,727,数组下标访问需审查边界保护,: ((dlc <= 15U) ? CANFD_DLC_LENGTH_TABLE[dlc - 9U] : 0U);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,739,数组下标访问需审查边界保护,if (length <= CANFD_DLC_LENGTH_TABLE[i]) {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,740,数组下标访问需审查边界保护,return CANFD_DLC_LENGTH_TABLE[i];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,760,数组下标访问需审查边界保护,rx_queue[rx_queue_tail].id = message.rx_efid;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,761,数组下标访问需审查边界保护,rx_queue[rx_queue_tail].length = message.rx_dlen;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,762,数组下标访问需审查边界保护,if (rx_queue[rx_queue_tail].length > 64) {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,763,数组下标访问需审查边界保护,rx_queue[rx_queue_tail].length = 64;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,765,数组下标访问需审查边界保护,for (int i = 0; i < rx_queue[rx_queue_tail].length; i++) {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,766,数组下标访问需审查边界保护,rx_queue[rx_queue_tail].data[i] = message.rx_data[i];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,889,数组下标访问需审查边界保护,*item = rx_queue[rx_queue_head];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,907,数组下标访问需审查边界保护,tx_queue[tx_queue_tail].message = message;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,908,数组下标访问需审查边界保护,tx_queue[tx_queue_tail].valid = 1U;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,933,数组下标访问需审查边界保护,*message = tx_queue[tx_queue_head].message;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,949,数组下标访问需审查边界保护,*message = tx_queue[tx_queue_head].message;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,950,数组下标访问需审查边界保护,tx_queue[tx_queue_head].valid = 0U;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1041,数组下标访问需审查边界保护,transmit_data[10] =,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1042,数组下标访问需审查边界保护,(transmit_data[10] & ~0x07) |,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1050,数组下标访问需审查边界保护,transmit_data[29] = test_u16 & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1051,数组下标访问需审查边界保护,transmit_data[30] = (test_u16 >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1052,数组下标访问需审查边界保护,transmit_data[31] = cpu_usage;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1059,数组下标访问需审查边界保护,transmit_data[0] = controller_Mode;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1134,数组下标访问需审查边界保护,"current_message.rx_dlen, current_message.rx_data[0],",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1135,数组下标访问需审查边界保护,current_message.rx_data[1]);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1141,数组下标访问需审查边界保护,new_node_id = current_message.rx_data[0];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1151,数组下标访问需审查边界保护,transmit_data[0] = 0x01;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1152,数组下标访问需审查边界保护,transmit_data[1] = (u8)(new_node_id & 0xFF);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1153,数组下标访问需审查边界保护,transmit_data[2] =,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1177,数组下标访问需审查边界保护,transmit_data[0] = 0x00;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1186,数组下标访问需审查边界保护,transmit_data[0] = 0x00;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1187,数组下标访问需审查边界保护,transmit_data[1] = (u8)(new_node_id & 0xFF);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1188,数组下标访问需审查边界保护,transmit_data[2] = (u8)((new_node_id >> 8) & 0xFF);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1204,数组下标访问需审查边界保护,FOC.control_mode = current_message.rx_data[0];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1243,数组下标访问需审查边界保护,u8 first_byte = current_message.rx_data[0];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1244,数组下标访问需审查边界保护,u8 eigth_byte = current_message.rx_data[7];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1283,数组下标访问需审查边界保护,transmit_data[0] = 0x0A;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1284,数组下标访问需审查边界保护,transmit_data[1] = 0xAC;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1420,数组下标访问需审查边界保护,transmit_message.tx_data[i] = *(data + i);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.cpp,1487,数组下标访问需审查边界保护,transmit_message.tx_data[i] = *(data + i);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.h,25,数组下标访问需审查边界保护,u8 b[4];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.h,37,数组下标访问需审查边界保护,buffer[offset] = (u8)(value & 0xFF);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.h,38,数组下标访问需审查边界保护,buffer[offset + 1] = (u8)((value >> 8) & 0xFF);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.h,51,数组下标访问需审查边界保护,buffer[offset] = float_union.b[0];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.h,52,数组下标访问需审查边界保护,buffer[offset + 1] = float_union.b[1];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.h,53,数组下标访问需审查边界保护,buffer[offset + 2] = float_union.b[2];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.h,54,数组下标访问需审查边界保护,buffer[offset + 3] = float_union.b[3];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.h,65,数组下标访问需审查边界保护,short value = (short)(buffer[offset] | (buffer[offset + 1] << 8));,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.h,77,数组下标访问需审查边界保护,u16 value = (u16)(buffer[offset] | (buffer[offset + 1] << 8));,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.h,90,数组下标访问需审查边界保护,float_union.b[0] = buffer[offset];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.h,91,数组下标访问需审查边界保护,float_union.b[1] = buffer[offset + 1];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.h,92,数组下标访问需审查边界保护,float_union.b[2] = buffer[offset + 2];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.h,93,数组下标访问需审查边界保护,float_union.b[3] = buffer[offset + 3];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.h,195,数组下标访问需审查边界保护,u8 transmit_data[64];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.h,198,数组下标访问需审查边界保护,can_receive_message_struct rx_message_buffer[CAN_RX_BUFFER_SIZE];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Can.h,353,数组下标访问需审查边界保护,rx_message_buffer[rx_buffer_head] = message;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Timer.cpp,19,数组下标访问需审查边界保护,extern u16 adc_value[3];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Timer.cpp,27,数组下标访问需审查边界保护,static const u32 task_schedule_100us[10] = {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Timer.cpp,41,数组下标访问需审查边界保护,static const u32 task_schedule_1ms[10] = {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Timer.cpp,48,数组下标访问需审查边界保护,static const u32 task_schedule_10ms[10] = {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Timer.cpp,53,数组下标访问需审查边界保护,static const u32 task_schedule_100ms[10] = {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Timer.cpp,152,数组下标访问需审查边界保护,scheduler.taskFlags |= task_schedule_100us[total_us100_counter];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Timer.cpp,177,数组下标访问需审查边界保护,scheduler.taskFlags |= task_schedule_100ms[ms100_counter];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Timer.cpp,179,数组下标访问需审查边界保护,scheduler.taskFlags |= task_schedule_10ms[ms10_counter];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/Timer.cpp,181,数组下标访问需审查边界保护,scheduler.taskFlags |= task_schedule_1ms[ms1_counter];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/adc.h,21,数组下标访问需审查边界保护,float vbus_samples[ADC_FILTER_SIZE];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/adc.h,22,数组下标访问需审查边界保护,float currU_samples[ADC_FILTER_SIZE];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/adc.h,23,数组下标访问需审查边界保护,float currV_samples[ADC_FILTER_SIZE];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/adc.h,24,数组下标访问需审查边界保护,float currW_samples[ADC_FILTER_SIZE];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/adc.h,25,数组下标访问需审查边界保护,float mcu_temp_samples[ADC_FILTER_SIZE];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/adc.h,26,数组下标访问需审查边界保护,float drv_temp_samples[ADC_FILTER_SIZE];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,device/ang_sensor.h,95,数组下标访问需审查边界保护,float velocity[VEL_FILTER_SIZE] = {0.0f};,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,main.cpp,169,数组下标访问需审查边界保护,(FOC.*control_functions[FOC.control_mode])();,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,93,数组下标访问需审查边界保护,FlashEepromStatus status_read[CONFIG_SAVED_NUM + 1] = {FLASH_EEPROM_OK};,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,94,数组下标访问需审查边界保护,float data[CONFIG_SAVED_NUM] = {0.0f};,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,96,数组下标访问需审查边界保护,"status_read[1] = readFloat(ADDR_CONTROL_MODE, &data[0]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,97,数组下标访问需审查边界保护,"status_read[2] = readFloat(ADDR_VOLTAGE_LIMIT, &data[1]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,98,数组下标访问需审查边界保护,"status_read[3] = readFloat(ADDR_VEL_LIMIT, &data[2]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,99,数组下标访问需审查边界保护,"status_read[4] = readFloat(ADDR_ANGLE, &data[3]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,100,数组下标访问需审查边界保护,"status_read[5] = readFloat(ADDR_TARGET_ANGLE, &data[4]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,101,数组下标访问需审查边界保护,"status_read[6] = readFloat(ADDR_TARGET_VEL, &data[5]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,105,数组下标访问需审查边界保护,if (status_read[i] ==,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,107,数组下标访问需审查边界保护,data[i - 1] = DEFAULT_VALUE;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,108,数组下标访问需审查边界保护,} else if (status_read[i] != FLASH_EEPROM_OK) {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,109,数组下标访问需审查边界保护,data[i - 1] = DEFAULT_VALUE;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,110,数组下标访问需审查边界保护,status_read[0] = status_read[i];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,114,数组下标访问需审查边界保护,if (status_read[0] == FLASH_EEPROM_OK) {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,141,数组下标访问需审查边界保护,data[i] = DEFAULT_VALUE;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,149,数组下标访问需审查边界保护,EEPROMStatus = status_read[0];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,154,数组下标访问需审查边界保护,FOC.control_mode = (u8)data[0];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,155,数组下标访问需审查边界保护,FOC.limit_voltage = data[1];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,156,数组下标访问需审查边界保护,FOC.target_current = data[2];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,157,数组下标访问需审查边界保护,KTH7823.angle_set(data[3]);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,158,数组下标访问需审查边界保护,FOC.target_angle = data[4];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,159,数组下标访问需审查边界保护,FOC.target_velocity = data[5];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,415,数组下标访问需审查边界保护,float data[CONFIG_SAVED_NUM] = {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,429,数组下标访问需审查边界保护,"status = writeFloat(ADDR_CONTROL_MODE, data[0]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,435,数组下标访问需审查边界保护,"status = writeFloat(ADDR_VOLTAGE_LIMIT, data[1]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,441,数组下标访问需审查边界保护,"status = writeFloat(ADDR_VEL_LIMIT, data[2]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,447,数组下标访问需审查边界保护,"status = writeFloat(ADDR_ANGLE, data[3]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,453,数组下标访问需审查边界保护,"status = writeFloat(ADDR_TARGET_ANGLE, data[4]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,459,数组下标访问需审查边界保护,"status = writeFloat(ADDR_TARGET_VEL, data[5]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,466,数组下标访问需审查边界保护,u32 crc_data_words[CONFIG_SAVED_NUM];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,471,数组下标访问需审查边界保护,"memcpy(&crc_data_words[i], &data[i], SIZE_FLOAT);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,473,数组下标访问需审查边界保护,crc_data_words[i] = crc_data_words[i] & DATA_FLOAT_MASK;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,507,数组下标访问需审查边界保护,u32 crc_data[2];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,508,数组下标访问需审查边界保护,crc_data[0] = (u32)node_id;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,509,数组下标访问需审查边界保护,crc_data[1] = counter;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,530,数组下标访问需审查边界保护,u32 magic = flash_ptr[NODE_ID_MAGIC_OFFSET / sizeof(u32)];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,537,数组下标访问需审查边界保护,u16 id_value = (u16)flash_ptr[NODE_ID_VALUE_OFFSET / sizeof(u32)];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,544,数组下标访问需审查边界保护,u32 write_counter = flash_ptr[NODE_ID_COUNTER_OFFSET / sizeof(u32)];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,547,数组下标访问需审查边界保护,u32 stored_crc = flash_ptr[NODE_ID_CRC_OFFSET / sizeof(u32)];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,577,数组下标访问需审查边界保护,u32 write_data[4];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,578,数组下标访问需审查边界保护,write_data[0] = NODE_ID_MAGIC;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,579,数组下标访问需审查边界保护,write_data[1] = (u32)node_id;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,580,数组下标访问需审查边界保护,write_data[2] = counter;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,581,数组下标访问需审查边界保护,write_data[3] = crc;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,589,数组下标访问需审查边界保护,"fmc_status = fmc_word_program(addr + i * sizeof(u32), write_data[i]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,795,数组下标访问需审查边界保护,u32 temp_val[OTA_CONFIG_NUM];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,799,数组下标访问需审查边界保护,temp_val[0] = *flash_ptr;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,800,数组下标访问需审查边界保护,if (temp_val[0] == data) {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,816,数组下标访问需审查边界保护,temp_val[0] = *flash_ptr;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,818,数组下标访问需审查边界保护,temp_val[1] = *flash_ptr;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,820,数组下标访问需审查边界保护,temp_val[2] = *flash_ptr;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,822,数组下标访问需审查边界保护,temp_val[3] = *flash_ptr;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,824,数组下标访问需审查边界保护,temp_val[4] = *flash_ptr;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,826,数组下标访问需审查边界保护,temp_val[5] = *flash_ptr;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,832,数组下标访问需审查边界保护,"temp_val[0], temp_val[1], temp_val[2], temp_val[3],",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,833,数组下标访问需审查边界保护,"temp_val[4], temp_val[5]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,846,数组下标访问需审查边界保护,if (current_addr != addr and temp_val[i] != OTA_NOT_AVAL) {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,847,数组下标访问需审查边界保护,"fmc_status = write_ADDRESS(current_addr, temp_val[i]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,851,数组下标访问需审查边界保护,"temp_val[i], current_addr, fmc_status);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,860,数组下标访问需审查边界保护,temp_val[0] = *flash_ptr;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,862,数组下标访问需审查边界保护,temp_val[1] = *flash_ptr;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,864,数组下标访问需审查边界保护,temp_val[2] = *flash_ptr;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,866,数组下标访问需审查边界保护,temp_val[3] = *flash_ptr;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,868,数组下标访问需审查边界保护,temp_val[4] = *flash_ptr;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,870,数组下标访问需审查边界保护,temp_val[5] = *flash_ptr;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,874,数组下标访问需审查边界保护,"temp_val[0], temp_val[1], temp_val[2], temp_val[3],",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,875,数组下标访问需审查边界保护,"temp_val[4], temp_val[5]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,890,数组下标访问需审查边界保护,NVIC->ICER[i] = 0xFFFFFFFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/flash.cpp,972,数组下标访问需审查边界保护,uint32_t src_data = src_ptr[offset / 4];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/health.cpp,63,数组下标访问需审查边界保护,"u32 currents[3] = {(u32)(sampler.get_current('') * 1000),",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/health.cpp,68,数组下标访问需审查边界保护,"current_max = max(currents[0], currents[1], currents[2]);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,142,数组下标访问需审查边界保护,u8 versionData[24] = {0};,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,146,数组下标访问需审查边界保护,versionData[0] = softwareVersion.major & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,147,数组下标访问需审查边界保护,versionData[1] = (softwareVersion.major >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,148,数组下标访问需审查边界保护,versionData[2] = softwareVersion.minor & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,149,数组下标访问需审查边界保护,versionData[3] = (softwareVersion.minor >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,150,数组下标访问需审查边界保护,versionData[4] = softwareVersion.patch & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,151,数组下标访问需审查边界保护,versionData[5] = (softwareVersion.patch >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,152,数组下标访问需审查边界保护,versionData[6] = softwareVersion.build & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,153,数组下标访问需审查边界保护,versionData[7] = (softwareVersion.build >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,156,数组下标访问需审查边界保护,versionData[8] = hardwareVersion.major & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,157,数组下标访问需审查边界保护,versionData[9] = (hardwareVersion.major >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,158,数组下标访问需审查边界保护,versionData[10] = hardwareVersion.minor & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,159,数组下标访问需审查边界保护,versionData[11] = (hardwareVersion.minor >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,160,数组下标访问需审查边界保护,versionData[12] = hardwareVersion.patch & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,161,数组下标访问需审查边界保护,versionData[13] = (hardwareVersion.patch >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,162,数组下标访问需审查边界保护,versionData[14] = hardwareVersion.build & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,163,数组下标访问需审查边界保护,versionData[15] = (hardwareVersion.build >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,166,数组下标访问需审查边界保护,versionData[16] = bootVersion.major & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,167,数组下标访问需审查边界保护,versionData[17] = (bootVersion.major >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,168,数组下标访问需审查边界保护,versionData[18] = bootVersion.minor & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,169,数组下标访问需审查边界保护,versionData[19] = (bootVersion.minor >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,170,数组下标访问需审查边界保护,versionData[20] = bootVersion.patch & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,171,数组下标访问需审查边界保护,versionData[21] = (bootVersion.patch >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,172,数组下标访问需审查边界保护,versionData[22] = bootVersion.build & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,173,数组下标访问需审查边界保护,versionData[23] = (bootVersion.build >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,186,数组下标访问需审查边界保护,char versionStr[32];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,298,数组下标访问需审查边界保护,u32 temp_val[6];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,301,数组下标访问需审查边界保护,temp_val[0] = *flash_ptr1;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,303,数组下标访问需审查边界保护,temp_val[1] = *flash_ptr1;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,305,数组下标访问需审查边界保护,temp_val[2] = *flash_ptr1;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,307,数组下标访问需审查边界保护,temp_val[3] = *flash_ptr1;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,309,数组下标访问需审查边界保护,temp_val[4] = *flash_ptr1;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,311,数组下标访问需审查边界保护,temp_val[5] = *flash_ptr1;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,316,数组下标访问需审查边界保护,"temp_val[0], temp_val[1], temp_val[2], temp_val[3], temp_val[4],",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,317,数组下标访问需审查边界保护,temp_val[5]);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ARRAY-001,Advisory,MISRA C:2012 Rule 18.x,sys/initial.cpp,332,数组下标访问需审查边界保护,"u8 transmit_data[2] = {0x0A, 0xAC};",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ASM-001,Required,MISRA C:2012 Dir 4.3 / project safety rule,device/Can.cpp,709,关中断/低功耗/内联汇编等平台相关指令需审查,__disable_irq();,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ASM-001,Required,MISRA C:2012 Dir 4.3 / project safety rule,main.cpp,72,关中断/低功耗/内联汇编等平台相关指令需审查,__disable_irq();,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ASM-001,Required,MISRA C:2012 Dir 4.3 / project safety rule,main.cpp,76,关中断/低功耗/内联汇编等平台相关指令需审查,__enable_irq();,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ASM-001,Required,MISRA C:2012 Dir 4.3 / project safety rule,main.cpp,93,关中断/低功耗/内联汇编等平台相关指令需审查,__enable_irq();,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ASM-001,Required,MISRA C:2012 Dir 4.3 / project safety rule,sys/flash.cpp,888,关中断/低功耗/内联汇编等平台相关指令需审查,__disable_irq();,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ASM-001,Required,MISRA C:2012 Dir 4.3 / project safety rule,sys/flash.cpp,936,关中断/低功耗/内联汇编等平台相关指令需审查,__disable_irq();,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ASM-001,Required,MISRA C:2012 Dir 4.3 / project safety rule,sys/flash.cpp,954,关中断/低功耗/内联汇编等平台相关指令需审查,__enable_irq();,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ASM-001,Required,MISRA C:2012 Dir 4.3 / project safety rule,sys/flash.cpp,992,关中断/低功耗/内联汇编等平台相关指令需审查,__enable_irq();,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ASM-001,Required,MISRA C:2012 Dir 4.3 / project safety rule,sys/flash.cpp,1008,关中断/低功耗/内联汇编等平台相关指令需审查,__enable_irq();,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-ASM-001,Required,MISRA C:2012 Dir 4.3 / project safety rule,sys/systick.cpp,256,关中断/低功耗/内联汇编等平台相关指令需审查,__disable_irq();,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,40,C 风格强制类型转换需审查必要性和范围,if (!cogging_comp_enabled) return 0.0f;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,46,C 风格强制类型转换需审查必要性和范围,float index_f = angle / 360.0f * (float)COGGING_TABLE_SIZE;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,47,C 风格强制类型转换需审查必要性和范围,u16 idx0 = (u16)index_f;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,49,C 风格强制类型转换需审查必要性和范围,float frac = index_f - (float)idx0;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,53,C 风格强制类型转换需审查必要性和范围,if (rt_velocity < -0.5f) last_table = cogging_table_rev;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,54,C 风格强制类型转换需审查必要性和范围,else if (rt_velocity > 0.5f) last_table = cogging_table;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,91,C 风格强制类型转换需审查必要性和范围,if (!cogging_calib_request) return;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,122,C 风格强制类型转换需审查必要性和范围,if (sample_div < SAMPLE_DIV) return;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,132,C 风格强制类型转换需审查必要性和范围,u16 idx = (u16)(angle_el / 360.0f * (float)COGGING_TABLE_SIZE);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,133,C 风格强制类型转换需审查必要性和范围,if (idx >= COGGING_TABLE_SIZE) idx = COGGING_TABLE_SIZE - 1;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,153,C 风格强制类型转换需审查必要性和范围,(cog_calib_count[i] > 0) ? cog_calib_accum[i] / (float)cog_calib_count[i] : 0.0f;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,156,C 风格强制类型转换需审查必要性和范围,dc /= (float)COGGING_TABLE_SIZE;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,197,C 风格强制类型转换需审查必要性和范围,float angle_deg = (float)i / (float)COGGING_TABLE_SIZE * 360.0f;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,205,C 风格强制类型转换需审查必要性和范围,float angle_deg = (float)i / (float)COGGING_TABLE_SIZE * 360.0f;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,214,C 风格强制类型转换需审查必要性和范围,"if (i % 8 == 0) printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,216,C 风格强制类型转换需审查必要性和范围,"if (i < COGGING_TABLE_SIZE - 1) printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,217,C 风格强制类型转换需审查必要性和范围,"if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,226,C 风格强制类型转换需审查必要性和范围,"if (i % 8 == 0) printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,228,C 风格强制类型转换需审查必要性和范围,"if (i < COGGING_TABLE_SIZE - 1) printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,229,C 风格强制类型转换需审查必要性和范围,"if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf("""");",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,246,C 风格强制类型转换需审查必要性和范围,((value - min) / (max - min) * (target_max - target_min)),open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,301,C 风格强制类型转换需审查必要性和范围,I_alpha = (2.0f / 3.0f) * current_a - (1.0f / 3.0f) * current_b -,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,302,C 风格强制类型转换需审查必要性和范围,(1.0f / 3.0f) * current_c;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,605,C 风格强制类型转换需审查必要性和范围,float current_vbus = adc_value[2] * (3.3f / 4096.0f) * 11.0f;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,626,C 风格强制类型转换需审查必要性和范围,if ((drop_exceeded || below_absolute) && (!is_shut_down)) {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,695,C 风格强制类型转换需审查必要性和范围,float velocity_error = (target_velocity - rt_velocity) * DIR * REDUCTION_RATIO;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,782,C 风格强制类型转换需审查必要性和范围,float Uq = vel_inVelAngloop(velocity_error)* DIR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.cpp,813,C 风格强制类型转换需审查必要性和范围,float velocity_error = (target_velocity - rt_velocity)* DIR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/FOC.h,260,C 风格强制类型转换需审查必要性和范围,typedef float (FOC_Controller::*FOCFunctionPtr)(void);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/Filter.cpp,150,C 风格强制类型转换需审查必要性和范围,(void)initial_error_covariance;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/Filter.cpp,151,C 风格强制类型转换需审查必要性和范围,(void)process_noise;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/Filter.cpp,152,C 风格强制类型转换需审查必要性和范围,(void)measurement_noise;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/Filter.cpp,190,C 风格强制类型转换需审查必要性和范围,if (error > 180.0f) error -= 360.0f;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/Filter.cpp,191,C 风格强制类型转换需审查必要性和范围,else if (error < -180.0f) error += 360.0f;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/Filter.cpp,196,C 风格强制类型转换需审查必要性和范围,velocity_estimate = velocity_pred + (beta_gain / dt) * error;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/Filter.h,80,C 风格强制类型转换需审查必要性和范围,P = (1 - K) * P;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/Filter.h,96,C 风格强制类型转换需审查必要性和范围,P = (1 - K) * P;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,Algorithm/Filter.h,248,C 风格强制类型转换需审查必要性和范围,(void)initial_error_covariance;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ADC.cpp,41,C 风格强制类型转换需审查必要性和范围,return (raw_adc * ADC_SCALE + CURRENT_OFFSET) * CURRENT_FACTOR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ADC.cpp,60,C 风格强制类型转换需审查必要性和范围,dma_data_parameter.periph_addr = (uint32_t)(&ADC_RDATA(ADC0));,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ADC.cpp,62,C 风格强制类型转换需审查必要性和范围,dma_data_parameter.memory_addr = (uint32_t)(adc_value);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ADC.cpp,152,C 风格强制类型转换需审查必要性和范围,(1.43f - adc_value[0] * ADC_SCALE) * TEMP_FACTOR + 35.0f;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ADC.cpp,160,C 风格强制类型转换需审查必要性和范围,float R_now = (float)adc_value[1] / (4096 - (float)adc_value[1]) * 4700;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ADC.cpp,241,C 风格强制类型转换需审查必要性和范围,(1.43f - adc_value[0] * ADC_SCALE) * TEMP_FACTOR + 35.0f;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ADC.cpp,243,C 风格强制类型转换需审查必要性和范围,if (mcu_temp_head >= ADC_FILTER_SIZE) mcu_temp_head = 0;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ADC.cpp,259,C 风格强制类型转换需审查必要性和范围,float R_now = (float)adc_value[1] / (4096 - (float)adc_value[1]) * 4700;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ADC.cpp,263,C 风格强制类型转换需审查必要性和范围,if (drv_temp_head >= ADC_FILTER_SIZE) drv_temp_head = 0;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ADC.cpp,301,C 风格强制类型转换需审查必要性和范围,if (temp_vbus_head >= ADC_FILTER_SIZE) temp_vbus_head = 0;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ADC.cpp,320,C 风格强制类型转换需审查必要性和范围,"(void)adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_0);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,30,C 风格强制类型转换需审查必要性和范围,"#define CAN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,33,C 风格强制类型转换需审查必要性和范围,"#define CAN_DEBUG_PRINT(fmt, ...) ((void)0)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,103,C 风格强制类型转换需审查必要性和范围,return ((u32)node_id << 16) | (base_id & 0xFFFF);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,116,C 风格强制类型转换需审查必要性和范围,u16 rx_node_id = (u16)((received_id >> 16) & 0xFFFF);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,198,C 风格强制类型转换需审查必要性和范围,return (u8)status;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,317,C 风格强制类型转换需审查必要性和范围,"(uint32_t)(&CAN_RFIFOMDATA0(CAN0, CAN_FIFO0));",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,318,C 风格强制类型转换需审查必要性和范围,dma_rx_parameter.memory_addr = (uint32_t)can_rx_dma_words;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,514,C 风格强制类型转换需审查必要性和范围,can_filter.filter_list_high = (uint16_t)(DEV_CAN_LOOPBACK_ID >> 13U);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,516,C 风格强制类型转换需审查必要性和范围,((uint16_t)(DEV_CAN_LOOPBACK_ID)) << 3U | (1U << 2);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,646,C 风格强制类型转换需审查必要性和范围,(CAN_FF_STANDARD == receive_message.rx_ff) &&,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,804,C 风格强制类型转换需审查必要性和范围,uint32_t canfd_en = CAN_FDCTL(CAN0) & CAN_FDCTL_FDEN;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,807,C 风格强制类型转换需审查必要性和范围,message->rx_ff = (uint8_t)(CAN_RFIFOMI_FF & rfifomi);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,809,C 风格强制类型转换需审查必要性和范围,message->rx_sfid = (uint32_t)(GET_RFIFOMI_SFID(rfifomi));,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,811,C 风格强制类型转换需审查必要性和范围,message->rx_efid = (uint32_t)(GET_RFIFOMI_EFID(rfifomi));,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,813,C 风格强制类型转换需审查必要性和范围,message->rx_ft = (uint8_t)(CAN_RFIFOMI_FT & rfifomi);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,814,C 风格强制类型转换需审查必要性和范围,message->rx_fi = (uint8_t)(GET_RFIFOMP_FI(rfifomp));,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,815,C 风格强制类型转换需审查必要性和范围,message->fd_flag = (uint8_t)((CAN_RFIFOMP_FDF & rfifomp) >> 7);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,816,C 风格强制类型转换需审查必要性和范围,dlc = (uint8_t)(GET_RFIFOMP_DLENC(rfifomp));,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,817,C 风格强制类型转换需审查必要性和范围,if ((canfd_en != 0U) && (message->fd_flag != CAN_FDF_CLASSIC)) {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,819,C 风格强制类型转换需审查必要性和范围,message->fd_brs = (uint8_t)((rfifomp & CAN_RFIFOMP_BRS) >> 5);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,820,C 风格强制类型转换需审查必要性和范围,message->fd_esi = (uint8_t)((rfifomp & CAN_RFIFOMP_ESI) >> 4);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,848,C 风格强制类型转换需审查必要性和范围,"(uint32_t)(&CAN_RFIFOMDATA0(CAN0, CAN_FIFO0)));",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,849,C 风格强制类型转换需审查必要性和范围,"dma_memory_address_config(DMA0, DMA_CH4, (uint32_t)can_rx_dma_words);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,1015,C 风格强制类型转换需审查必要性和范围,u_current_union.f = sampler.get_current('') * 1000;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,1016,C 风格强制类型转换需审查必要性和范围,w_current_union.f = sampler.get_current('') * 1000;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,1017,C 风格强制类型转换需审查必要性和范围,v_current_union.f = sampler.get_current('') * 1000;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,1051,C 风格强制类型转换需审查必要性和范围,transmit_data[30] = (test_u16 >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,1102,C 风格强制类型转换需审查必要性和范围,u16 sender_node_id = (u16)((current_message.rx_efid >> 16) & 0xFFFF);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,1152,C 风格强制类型转换需审查必要性和范围,transmit_data[1] = (u8)(new_node_id & 0xFF);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,1154,C 风格强制类型转换需审查必要性和范围,(u8)((new_node_id >> 8) & 0xFF);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,1187,C 风格强制类型转换需审查必要性和范围,transmit_data[1] = (u8)(new_node_id & 0xFF);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,1188,C 风格强制类型转换需审查必要性和范围,transmit_data[2] = (u8)((new_node_id >> 8) & 0xFF);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,1279,C 风格强制类型转换需审查必要性和范围,volatile u32 *flash_ptr = (volatile u32 *)n_APP_LATEST_EN_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,1281,C 风格强制类型转换需审查必要性和范围,flash_ptr = (volatile u32 *)n_APP_LATEST_CHECK_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,1451,C 风格强制类型转换需审查必要性和范围,if ((CAN_FDCTL(CAN0) & CAN_FDCTL_FDEN) == 0U) {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.cpp,1468,C 风格强制类型转换需审查必要性和范围,if ((length != 0U) && (valid_length == 0U)) {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.h,37,C 风格强制类型转换需审查必要性和范围,buffer[offset] = (u8)(value & 0xFF);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.h,38,C 风格强制类型转换需审查必要性和范围,buffer[offset + 1] = (u8)((value >> 8) & 0xFF);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.h,65,C 风格强制类型转换需审查必要性和范围,short value = (short)(buffer[offset] | (buffer[offset + 1] << 8));,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Can.h,77,C 风格强制类型转换需审查必要性和范围,u16 value = (u16)(buffer[offset] | (buffer[offset + 1] << 8));,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Timer.cpp,316,C 风格强制类型转换需审查必要性和范围,TIMER_CH0CV(TIMER1) = (uint32_t)(duty_cycle0 * TIMER1_PERIOD);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Timer.cpp,317,C 风格强制类型转换需审查必要性和范围,TIMER_CH1CV(TIMER1) = (uint32_t)(duty_cycle1 * TIMER1_PERIOD);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/Timer.cpp,318,C 风格强制类型转换需审查必要性和范围,TIMER_CH2CV(TIMER1) = (uint32_t)(duty_cycle2 * TIMER1_PERIOD);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ang_sensor.cpp,22,C 风格强制类型转换需审查必要性和范围,"#define ANG_SENS_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ang_sensor.cpp,25,C 风格强制类型转换需审查必要性和范围,"#define ANG_SENS_DEBUG_PRINT(fmt, ...) ((void)0)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ang_sensor.cpp,60,C 风格强制类型转换需审查必要性和范围,dma_init_struct.memory_addr = (uint32_t)0;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ang_sensor.cpp,64,C 风格强制类型转换需审查必要性和范围,dma_init_struct.periph_addr = (uint32_t)(&SPI_DATA(SPI0));,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ang_sensor.cpp,74,C 风格强制类型转换需审查必要性和范围,dma_init_struct.memory_addr = (uint32_t)0;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ang_sensor.cpp,78,C 风格强制类型转换需审查必要性和范围,dma_init_struct.periph_addr = (uint32_t)(&SPI_DATA(SPI0));,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ang_sensor.cpp,113,C 风格强制类型转换需审查必要性和范围,"dma_memory_address_config(DMA0, DMA_CH2, (uint32_t)&tx_data);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ang_sensor.cpp,119,C 风格强制类型转换需审查必要性和范围,"dma_memory_address_config(DMA0, DMA_CH1, (uint32_t)rx_data);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ang_sensor.cpp,125,C 风格强制类型转换需审查必要性和范围,while ((!spi_dma_tx_complete || !spi_dma_rx_complete) && --timeout) {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ang_sensor.cpp,245,C 风格强制类型转换需审查必要性和范围,float angle_deg = -(float)raw_data * ANGLESENS_FACTOR + ANGLESENS_OFFSET;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ang_sensor.cpp,256,C 风格强制类型转换需审查必要性和范围,return (float)FAULT_RECEIVE;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ang_sensor.cpp,294,C 风格强制类型转换需审查必要性和范围,float angle_sensor::getAngle(void) const {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ang_sensor.cpp,302,C 风格强制类型转换需审查必要性和范围,float angle_sensor::getRawAngle(void) const { return m_cumulativeAngle; },open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ang_sensor.cpp,308,C 风格强制类型转换需审查必要性和范围,float angle_sensor::getcurrent_sensorangle(void) const{,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ang_sensor.h,64,C 风格强制类型转换需审查必要性和范围,float getAngle(void) const;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ang_sensor.h,69,C 风格强制类型转换需审查必要性和范围,float getRawAngle(void) const;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,device/ang_sensor.h,74,C 风格强制类型转换需审查必要性和范围,float getcurrent_sensorangle(void) const;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,main.cpp,22,C 风格强制类型转换需审查必要性和范围,"#define MAIN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,main.cpp,25,C 风格强制类型转换需审查必要性和范围,"#define MAIN_DEBUG_PRINT(fmt, ...) ((void)0)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,main.cpp,169,C 风格强制类型转换需审查必要性和范围,(FOC.*control_functions[FOC.control_mode])();,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/config.h,381,C 风格强制类型转换需审查必要性和范围,(TIMER2_PERIOD + 1) * (TIMER2_PRESCALER + 1) / 120000000.0f;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/config.h,396,C 风格强制类型转换需审查必要性和范围,(TIMER1_PERIOD + 1) * 0.41 - 1;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/config.h,427,C 风格强制类型转换需审查必要性和范围,while (angle >= 360.0f) angle -= 360.0f;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/config.h,428,C 风格强制类型转换需审查必要性和范围,while (angle < 0.0f) angle += 360.0f;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,22,C 风格强制类型转换需审查必要性和范围,"#define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,25,C 风格强制类型转换需审查必要性和范围,"#define EEP_DEBUG_PRINT(fmt, ...) ((void)0)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,31,C 风格强制类型转换需审查必要性和范围,"#define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,34,C 风格强制类型转换需审查必要性和范围,"#define OTA_DEBUG_PRINT(fmt, ...) ((void)0)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,120,C 风格强制类型转换需审查必要性和范围,volatile u32 *flash_ptr = (volatile u32 *)address;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,136,C 风格强制类型转换需审查必要性和范围,"CRC_NUM = crc_block_data_calculate((uint32_t *)data, CONFIG_SAVED_NUM);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,138,C 风格强制类型转换需审查必要性和范围,*((u32 *)next_address));,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,139,C 风格强制类型转换需审查必要性和范围,if (CRC_NUM != *((u32 *)next_address)) {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,154,C 风格强制类型转换需审查必要性和范围,FOC.control_mode = (u8)data[0];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,169,C 风格强制类型转换需审查必要性和范围,"FlashEepromStatus FlashEEPROM::read(u8 virtualAddr, u16 *data) const {",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,178,C 风格强制类型转换需审查必要性和范围,u32 data_word = *((u32 *)address);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,181,C 风格强制类型转换需审查必要性和范围,u8 addr = (u8)(data_word & DATA_ADDR_MASK);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,185,C 风格强制类型转换需审查必要性和范围,*data = (u16)((data_word & DATA_U16_MASK) >> 16);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,200,C 风格强制类型转换需审查必要性和范围,"FlashEepromStatus FlashEEPROM::readFloat(u8 virtualAddr, float *data) const {",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,210,C 风格强制类型转换需审查必要性和范围,volatile u32 *flash_ptr = (volatile u32 *)address;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,215,C 风格强制类型转换需审查必要性和范围,u8 addr = (u8)(data_word & DATA_ADDR_MASK);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,242,C 风格强制类型转换需审查必要性和范围,u32 data_word_to_write = ((u32)data << 16) | (u32)virtualAddr;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,247,C 风格强制类型转换需审查必要性和范围,volatile u32 *flash_ptr = (volatile u32 *)address;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,250,C 风格强制类型转换需审查必要性和范围,if ((data_read & DATA_ADDR_MASK) == (u32)virtualAddr) {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,255,C 风格强制类型转换需审查必要性和范围,u16 float_data_read = *((u16 *)&data_read);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,270,C 风格强制类型转换需审查必要性和范围,volatile u32 *flash_ptr = (volatile u32 *)address;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,316,C 风格强制类型转换需审查必要性和范围,data_word = (data_word & DATA_FLOAT_MASK) | (u32)virtualAddr;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,322,C 风格强制类型转换需审查必要性和范围,volatile u32 *flash_ptr = (volatile u32 *)address;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,326,C 风格强制类型转换需审查必要性和范围,(u32)virtualAddr) {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,331,C 风格强制类型转换需审查必要性和范围,float float_data_read = *((float *)&data_word_read);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,346,C 风格强制类型转换需审查必要性和范围,volatile u32 *flash_ptr = (volatile u32 *)address;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,361,C 风格强制类型转换需审查必要性和范围,u32 data_word_c = *((u32 *)next_address);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,363,C 风格强制类型转换需审查必要性和范围,float float_data = *((float *)&data_word_c);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,416,C 风格强制类型转换需审查必要性和范围,"(float)FOC.control_mode, FOC.limit_voltage,",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,508,C 风格强制类型转换需审查必要性和范围,crc_data[0] = (u32)node_id;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,527,C 风格强制类型转换需审查必要性和范围,volatile u32 *flash_ptr = (volatile u32 *)addr;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,537,C 风格强制类型转换需审查必要性和范围,u16 id_value = (u16)flash_ptr[NODE_ID_VALUE_OFFSET / sizeof(u32)];,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,579,C 风格强制类型转换需审查必要性和范围,write_data[1] = (u32)node_id;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,627,C 风格强制类型转换需审查必要性和范围,FlashEepromStatus FlashEEPROM::readNodeId(u16 *node_id) const {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,730,C 风格强制类型转换需审查必要性和范围,volatile u32 *flash_ptr = (volatile u32 *)address;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,742,C 风格强制类型转换需审查必要性和范围,if (*((u32 *)next_address) != CRC_NUM) {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,747,C 风格强制类型转换需审查必要性和范围,*((u32 *)next_address));,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,768,C 风格强制类型转换需审查必要性和范围,if (CRC_NUM == *((u32 *)next_address)) {,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,796,C 风格强制类型转换需审查必要性和范围,volatile u32 *flash_ptr = (volatile u32 *)addr;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,815,C 风格强制类型转换需审查必要性和范围,flash_ptr = (volatile u32 *)n_APP_LATEST_AVAL_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,817,C 风格强制类型转换需审查必要性和范围,flash_ptr = (volatile u32 *)n_APP_BACKUP_AVAL_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,819,C 风格强制类型转换需审查必要性和范围,flash_ptr = (volatile u32 *)n_APP_LATEST_EN_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,821,C 风格强制类型转换需审查必要性和范围,flash_ptr = (volatile u32 *)n_APP_BACKUP_EN_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,823,C 风格强制类型转换需审查必要性和范围,flash_ptr = (volatile u32 *)n_APP_LATEST_CHECK_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,825,C 风格强制类型转换需审查必要性和范围,flash_ptr = (volatile u32 *)n_APP_BACKUP_CHECK_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,859,C 风格强制类型转换需审查必要性和范围,flash_ptr = (volatile u32 *)n_APP_LATEST_AVAL_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,861,C 风格强制类型转换需审查必要性和范围,flash_ptr = (volatile u32 *)n_APP_BACKUP_AVAL_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,863,C 风格强制类型转换需审查必要性和范围,flash_ptr = (volatile u32 *)n_APP_LATEST_EN_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,865,C 风格强制类型转换需审查必要性和范围,flash_ptr = (volatile u32 *)n_APP_BACKUP_EN_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,867,C 风格强制类型转换需审查必要性和范围,flash_ptr = (volatile u32 *)n_APP_LATEST_CHECK_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,869,C 风格强制类型转换需审查必要性和范围,flash_ptr = (volatile u32 *)n_APP_BACKUP_CHECK_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,911,C 风格强制类型转换需审查必要性和范围,uint32_t msp_value = *(__IO uint32_t *)BOOTLOADER_START_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,912,C 风格强制类型转换需审查必要性和范围,uint32_t reset_handler = *(__IO uint32_t *)(BOOTLOADER_START_ADDR + 4);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,913,C 风格强制类型转换需审查必要性和范围,typedef void (*AppEntryFunc)(void);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,914,C 风格强制类型转换需审查必要性和范围,AppEntryFunc app_entry = (AppEntryFunc)reset_handler;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,962,C 风格强制类型转换需审查必要性和范围,const uint32_t *src_ptr = (const uint32_t *)APPLATEST_START_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,963,C 风格强制类型转换需审查必要性和范围,uint32_t *dst_ptr = (uint32_t *)APPBACK_START_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,969,C 风格强制类型转换需审查必要性和范围,"(uint32_t *)APPLATEST_START_ADDR, APP_MAX_SIZE / 4);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,1012,C 风格强制类型转换需审查必要性和范围,"uint32_t dst_crc = crc_block_data_calculate((uint32_t *)APPBACK_START_ADDR,",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.cpp,1020,C 风格强制类型转换需审查必要性和范围,return (fmc_state_enum)0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.h,15,C 风格强制类型转换需审查必要性和范围,#define ALIGN_4BYTE(addr) ((addr) & 0xFFFFFFFC),open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.h,78,C 风格强制类型转换需审查必要性和范围,"FlashEepromStatus read(u8 virtualAddr, u16 *data) const;",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.h,94,C 风格强制类型转换需审查必要性和范围,"FlashEepromStatus readFloat(u8 virtualAddr, float *data) const;",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/flash.h,135,C 风格强制类型转换需审查必要性和范围,FlashEepromStatus readNodeId(u16 *node_id) const;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/health.cpp,38,C 风格强制类型转换需审查必要性和范围,int drv_temp = (int)sampler.get_drv_temp();,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/health.cpp,39,C 风格强制类型转换需审查必要性和范围,int mcu_temp = (int)sampler.get_mcu_temp();,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/health.cpp,63,C 风格强制类型转换需审查必要性和范围,"u32 currents[3] = {(u32)(sampler.get_current('') * 1000),",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/health.cpp,64,C 风格强制类型转换需审查必要性和范围,"(u32)(sampler.get_current('') * 1000),",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/health.cpp,65,C 风格强制类型转换需审查必要性和范围,(u32)(sampler.get_current('') * 1000)};,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/health.h,16,C 风格强制类型转换需审查必要性和范围,#define FLOAT_TO_Q16_16(x) ((q16_16_t)((x) * Q16_16_ONE)),open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/health.h,18,C 风格强制类型转换需审查必要性和范围,#define Q16_16_TO_FLOAT(x) ((float)(x) / Q16_16_ONE),open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/health.h,20,C 风格强制类型转换需审查必要性和范围,"#define Q16_16_MUL(a, b) ((q16_16_t)(((int64_t)(a) * (b)) >> 16))",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/health.h,22,C 风格强制类型转换需审查必要性和范围,"#define Q16_16_SQUARE(x) Q16_16_MUL((x), (x))",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,23,C 风格强制类型转换需审查必要性和范围,"#define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,26,C 风格强制类型转换需审查必要性和范围,"#define OTA_DEBUG_PRINT(fmt, ...) ((void)0)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,32,C 风格强制类型转换需审查必要性和范围,"#define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,35,C 风格强制类型转换需审查必要性和范围,"#define EEP_DEBUG_PRINT(fmt, ...) ((void)0)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,147,C 风格强制类型转换需审查必要性和范围,versionData[1] = (softwareVersion.major >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,149,C 风格强制类型转换需审查必要性和范围,versionData[3] = (softwareVersion.minor >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,151,C 风格强制类型转换需审查必要性和范围,versionData[5] = (softwareVersion.patch >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,153,C 风格强制类型转换需审查必要性和范围,versionData[7] = (softwareVersion.build >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,157,C 风格强制类型转换需审查必要性和范围,versionData[9] = (hardwareVersion.major >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,159,C 风格强制类型转换需审查必要性和范围,versionData[11] = (hardwareVersion.minor >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,161,C 风格强制类型转换需审查必要性和范围,versionData[13] = (hardwareVersion.patch >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,163,C 风格强制类型转换需审查必要性和范围,versionData[15] = (hardwareVersion.build >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,167,C 风格强制类型转换需审查必要性和范围,versionData[17] = (bootVersion.major >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,169,C 风格强制类型转换需审查必要性和范围,versionData[19] = (bootVersion.minor >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,171,C 风格强制类型转换需审查必要性和范围,versionData[21] = (bootVersion.patch >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,173,C 风格强制类型转换需审查必要性和范围,versionData[23] = (bootVersion.build >> 8) & 0xFF;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,224,C 风格强制类型转换需审查必要性和范围,"int fputc(int ch, FILE *f) throw() {",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,225,C 风格强制类型转换需审查必要性和范围,"usart_data_transmit(EVAL_COM0, (u8)ch);",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,300,C 风格强制类型转换需审查必要性和范围,volatile u32 *flash_ptr1 = (volatile u32 *)n_APP_LATEST_AVAL_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,302,C 风格强制类型转换需审查必要性和范围,flash_ptr1 = (volatile u32 *)n_APP_BACKUP_AVAL_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,304,C 风格强制类型转换需审查必要性和范围,flash_ptr1 = (volatile u32 *)n_APP_LATEST_EN_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,306,C 风格强制类型转换需审查必要性和范围,flash_ptr1 = (volatile u32 *)n_APP_BACKUP_EN_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,308,C 风格强制类型转换需审查必要性和范围,flash_ptr1 = (volatile u32 *)n_APP_LATEST_CHECK_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,310,C 风格强制类型转换需审查必要性和范围,flash_ptr1 = (volatile u32 *)n_APP_BACKUP_CHECK_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,321,C 风格强制类型转换需审查必要性和范围,volatile u32 *flash_ptr = (volatile u32 *)n_APP_LATEST_CHECK_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,336,C 风格强制类型转换需审查必要性和范围,flash_ptr = (volatile u32 *)n_APP_BACKUP_AVAL_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/initial.cpp,338,C 风格强制类型转换需审查必要性和范围,flash_ptr = (volatile u32 *)n_APP_BACKUP_CHECK_ADDR;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/systick.cpp,47,C 风格强制类型转换需审查必要性和范围,"#define SLEEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/systick.cpp,50,C 风格强制类型转换需审查必要性和范围,"#define SLEEP_DEBUG_PRINT(fmt, ...) ((void)0)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/systick.cpp,138,C 风格强制类型转换需审查必要性和范围,uint64_t busy_64 = (uint64_t)busy_cycles_accum * 100U;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/systick.cpp,139,C 风格强制类型转换需审查必要性和范围,uint32_t busy_percent = (uint32_t)(busy_64 / SystemCoreClock);,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/systick.cpp,143,C 风格强制类型转换需审查必要性和范围,cpu_usage = (uint8_t)busy_percent;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/systick.cpp,260,C 风格强制类型转换需审查必要性和范围,volatile u32 *flash_ptr = (volatile u32 *)address;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-CAST-001,Required,MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x,sys/systick.cpp,284,C 风格强制类型转换需审查必要性和范围,volatile u32 *flash_ptr = (volatile u32 *)address;,open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,Algorithm/FOC.cpp,242,函数式宏需审查括号、副作用和类型安全,"#define _constrain(amt, low, high) \",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,Algorithm/FOC.cpp,245,函数式宏需审查括号、副作用和类型安全,"#define constrain(value, min, max, target_min, target_max) \",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,Algorithm/pid.cpp,8,函数式宏需审查括号、副作用和类型安全,"#define _constrain(amt, low, high) \",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,device/Can.cpp,30,函数式宏需审查括号、副作用和类型安全,"#define CAN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,device/Can.cpp,33,函数式宏需审查括号、副作用和类型安全,"#define CAN_DEBUG_PRINT(fmt, ...) ((void)0)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,device/ang_sensor.cpp,22,函数式宏需审查括号、副作用和类型安全,"#define ANG_SENS_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,device/ang_sensor.cpp,25,函数式宏需审查括号、副作用和类型安全,"#define ANG_SENS_DEBUG_PRINT(fmt, ...) ((void)0)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,device/ang_sensor.cpp,29,函数式宏需审查括号、副作用和类型安全,"#define ANG_SPI_CS_ENABLE() gpio_bit_reset(GPIOA, GPIO_PIN_15)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,device/ang_sensor.cpp,31,函数式宏需审查括号、副作用和类型安全,"#define ANG_SPI_CS_DISABLE() gpio_bit_set(GPIOA, GPIO_PIN_15)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,device/ang_sensor.cpp,33,函数式宏需审查括号、副作用和类型安全,"#define DRV_SPI_CS_ENABLE() gpio_bit_reset(GPIOB, GPIO_PIN_14)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,device/ang_sensor.cpp,35,函数式宏需审查括号、副作用和类型安全,"#define DRV_SPI_CS_DISABLE() gpio_bit_set(GPIOB, GPIO_PIN_14)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,main.cpp,22,函数式宏需审查括号、副作用和类型安全,"#define MAIN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,main.cpp,25,函数式宏需审查括号、副作用和类型安全,"#define MAIN_DEBUG_PRINT(fmt, ...) ((void)0)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,sys/flash.cpp,22,函数式宏需审查括号、副作用和类型安全,"#define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,sys/flash.cpp,25,函数式宏需审查括号、副作用和类型安全,"#define EEP_DEBUG_PRINT(fmt, ...) ((void)0)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,sys/flash.cpp,31,函数式宏需审查括号、副作用和类型安全,"#define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,sys/flash.cpp,34,函数式宏需审查括号、副作用和类型安全,"#define OTA_DEBUG_PRINT(fmt, ...) ((void)0)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,sys/flash.h,15,函数式宏需审查括号、副作用和类型安全,#define ALIGN_4BYTE(addr) ((addr) & 0xFFFFFFFC),open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,sys/health.cpp,22,函数式宏需审查括号、副作用和类型安全,"#define max(a, b, c) \",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,sys/health.h,16,函数式宏需审查括号、副作用和类型安全,#define FLOAT_TO_Q16_16(x) ((q16_16_t)((x) * Q16_16_ONE)),open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,sys/health.h,18,函数式宏需审查括号、副作用和类型安全,#define Q16_16_TO_FLOAT(x) ((float)(x) / Q16_16_ONE),open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,sys/health.h,20,函数式宏需审查括号、副作用和类型安全,"#define Q16_16_MUL(a, b) ((q16_16_t)(((int64_t)(a) * (b)) >> 16))",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,sys/health.h,22,函数式宏需审查括号、副作用和类型安全,"#define Q16_16_SQUARE(x) Q16_16_MUL((x), (x))",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,sys/initial.cpp,23,函数式宏需审查括号、副作用和类型安全,"#define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,sys/initial.cpp,26,函数式宏需审查括号、副作用和类型安全,"#define OTA_DEBUG_PRINT(fmt, ...) ((void)0)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,sys/initial.cpp,32,函数式宏需审查括号、副作用和类型安全,"#define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,sys/initial.cpp,35,函数式宏需审查括号、副作用和类型安全,"#define EEP_DEBUG_PRINT(fmt, ...) ((void)0)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,sys/systick.cpp,47,函数式宏需审查括号、副作用和类型安全,"#define SLEEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
info,AUTO-MACRO-001,Advisory,MISRA C:2012 Rule 20.x,sys/systick.cpp,50,函数式宏需审查括号、副作用和类型安全,"#define SLEEP_DEBUG_PRINT(fmt, ...) ((void)0)",open_review,人工确认是否符合项目编码规范;如合理则记录偏离说明。
1 severity rule_id rule_level standard_ref file line description evidence disposition recommendation
2 warning AUTO-CTRL-002 Advisory MISRA C:2012 Rule 15.5 advisory / structured control flow device/Can.cpp 1124 continue 需避免或说明偏离 continue; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
3 warning AUTO-CTRL-002 Advisory MISRA C:2012 Rule 15.5 advisory / structured control flow device/Can.cpp 1194 continue 需避免或说明偏离 continue; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
4 warning AUTO-CTRL-002 Advisory MISRA C:2012 Rule 15.5 advisory / structured control flow device/Can.cpp 1199 continue 需避免或说明偏离 continue; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
5 warning AUTO-CTRL-002 Advisory MISRA C:2012 Rule 15.5 advisory / structured control flow main.cpp 80 continue 需避免或说明偏离 continue; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
6 warning AUTO-CTRL-002 Advisory MISRA C:2012 Rule 15.5 advisory / structured control flow sys/flash.cpp 693 continue 需避免或说明偏离 continue; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
7 warning AUTO-CTRL-002 Advisory MISRA C:2012 Rule 15.5 advisory / structured control flow sys/systick.cpp 264 continue 需避免或说明偏离 continue; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
8 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule Algorithm/FOC.cpp 100 printf/格式化输出需确认调试隔离和实时性影响 printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
9 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule Algorithm/FOC.cpp 161 printf/格式化输出需确认调试隔离和实时性影响 printf("", open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
10 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule Algorithm/FOC.cpp 195 printf/格式化输出需确认调试隔离和实时性影响 printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
11 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule Algorithm/FOC.cpp 198 printf/格式化输出需确认调试隔离和实时性影响 printf("", angle_deg, cogging_table[i]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
12 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule Algorithm/FOC.cpp 203 printf/格式化输出需确认调试隔离和实时性影响 printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
13 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule Algorithm/FOC.cpp 206 printf/格式化输出需确认调试隔离和实时性影响 printf("", angle_deg, cogging_table_rev[i]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
14 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule Algorithm/FOC.cpp 211 printf/格式化输出需确认调试隔离和实时性影响 printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
15 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule Algorithm/FOC.cpp 212 printf/格式化输出需确认调试隔离和实时性影响 printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
16 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule Algorithm/FOC.cpp 214 printf/格式化输出需确认调试隔离和实时性影响 if (i % 8 == 0) printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
17 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule Algorithm/FOC.cpp 215 printf/格式化输出需确认调试隔离和实时性影响 printf("", cogging_table[i]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
18 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule Algorithm/FOC.cpp 216 printf/格式化输出需确认调试隔离和实时性影响 if (i < COGGING_TABLE_SIZE - 1) printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
19 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule Algorithm/FOC.cpp 217 printf/格式化输出需确认调试隔离和实时性影响 if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
20 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule Algorithm/FOC.cpp 220 printf/格式化输出需确认调试隔离和实时性影响 printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
21 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule Algorithm/FOC.cpp 223 printf/格式化输出需确认调试隔离和实时性影响 printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
22 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule Algorithm/FOC.cpp 224 printf/格式化输出需确认调试隔离和实时性影响 printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
23 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule Algorithm/FOC.cpp 226 printf/格式化输出需确认调试隔离和实时性影响 if (i % 8 == 0) printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
24 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule Algorithm/FOC.cpp 227 printf/格式化输出需确认调试隔离和实时性影响 printf("", cogging_table_rev[i]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
25 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule Algorithm/FOC.cpp 228 printf/格式化输出需确认调试隔离和实时性影响 if (i < COGGING_TABLE_SIZE - 1) printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
26 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule Algorithm/FOC.cpp 229 printf/格式化输出需确认调试隔离和实时性影响 if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
27 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule Algorithm/FOC.cpp 232 printf/格式化输出需确认调试隔离和实时性影响 printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
28 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule Algorithm/FOC.cpp 234 printf/格式化输出需确认调试隔离和实时性影响 printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
29 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule device/Can.cpp 30 printf/格式化输出需确认调试隔离和实时性影响 #define CAN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
30 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule device/ang_sensor.cpp 22 printf/格式化输出需确认调试隔离和实时性影响 #define ANG_SENS_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
31 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule device/motor.cpp 38 printf/格式化输出需确认调试隔离和实时性影响 printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
32 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule main.cpp 22 printf/格式化输出需确认调试隔离和实时性影响 #define MAIN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
33 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule sys/flash.cpp 22 printf/格式化输出需确认调试隔离和实时性影响 #define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
34 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule sys/flash.cpp 31 printf/格式化输出需确认调试隔离和实时性影响 #define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
35 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule sys/initial.cpp 23 printf/格式化输出需确认调试隔离和实时性影响 #define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
36 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule sys/initial.cpp 32 printf/格式化输出需确认调试隔离和实时性影响 #define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
37 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule sys/initial.cpp 129 printf/格式化输出需确认调试隔离和实时性影响 snprintf(buffer, bufSize, "", version.major, version.minor, open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
38 warning AUTO-FUNC-002 Advisory MISRA Dir 4.12 / project safety rule sys/systick.cpp 47 printf/格式化输出需确认调试隔离和实时性影响 #define SLEEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
39 warning AUTO-MET-001 Advisory Project metric threshold CC <= 15 Algorithm/FOC.cpp 75 圈复杂度 33 超过建议阈值 15 FOC_Controller::calibrate_cogging_tick open_review 建议人工评审分支完整性;后续允许时再考虑拆分或增加单元测试覆盖。
40 warning AUTO-MET-001 Advisory Project metric threshold CC <= 15 device/Can.cpp 1076 圈复杂度 27 超过建议阈值 15 CAN_transmiter::communication_check open_review 建议人工评审分支完整性;后续允许时再考虑拆分或增加单元测试覆盖。
41 warning AUTO-MET-001 Advisory Project metric threshold CC <= 15 main.cpp 120 圈复杂度 17 超过建议阈值 15 do_task open_review 建议人工评审分支完整性;后续允许时再考虑拆分或增加单元测试覆盖。
42 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 29 数组下标访问需审查边界保护 extern u16 adc_value[3]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
43 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 56 数组下标访问需审查边界保护 float comp = table[idx0] * (1.0f - frac) + table[idx1] * frac; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
44 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 66 数组下标访问需审查边界保护 float FOC_Controller::cog_calib_run_data[6][COGGING_TABLE_SIZE] = {}; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
45 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 67 数组下标访问需审查边界保护 float FOC_Controller::cog_calib_accum[COGGING_TABLE_SIZE] = {}; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
46 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 68 数组下标访问需审查边界保护 u32 FOC_Controller::cog_calib_count[COGGING_TABLE_SIZE] = {}; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
47 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 134 数组下标访问需审查边界保护 cog_calib_accum[idx] += iq; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
48 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 135 数组下标访问需审查边界保护 cog_calib_count[idx]++; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
49 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 152 数组下标访问需审查边界保护 cog_calib_run_data[cog_calib_run][i] = open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
50 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 153 数组下标访问需审查边界保护 (cog_calib_count[i] > 0) ? cog_calib_accum[i] / (float)cog_calib_count[i] : 0.0f; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
51 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 154 数组下标访问需审查边界保护 dc += cog_calib_run_data[cog_calib_run][i]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
52 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 158 数组下标访问需审查边界保护 cog_calib_run_data[cog_calib_run][i] -= dc; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
53 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 180 数组下标访问需审查边界保护 cogging_table[i] = (cog_calib_run_data[0][i] + open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
54 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 181 数组下标访问需审查边界保护 cog_calib_run_data[1][i] + open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
55 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 182 数组下标访问需审查边界保护 cog_calib_run_data[2][i]) / 3.0f; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
56 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 186 数组下标访问需审查边界保护 cogging_table_rev[i] = (cog_calib_run_data[3][i] + open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
57 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 187 数组下标访问需审查边界保护 cog_calib_run_data[4][i] + open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
58 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 188 数组下标访问需审查边界保护 cog_calib_run_data[5][i]) / 3.0f; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
59 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 198 数组下标访问需审查边界保护 printf("", angle_deg, cogging_table[i]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
60 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 206 数组下标访问需审查边界保护 printf("", angle_deg, cogging_table_rev[i]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
61 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 215 数组下标访问需审查边界保护 printf("", cogging_table[i]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
62 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 227 数组下标访问需审查边界保护 printf("", cogging_table_rev[i]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
63 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 326 数组下标访问需审查边界保护 static const float COGGING_TABLE_FWD[COGGING_TABLE_SIZE] = { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
64 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 344 数组下标访问需审查边界保护 static const float COGGING_TABLE_REV[COGGING_TABLE_SIZE] = { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
65 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 409 数组下标访问需审查边界保护 static const u8 sector_lut[8] = {0, 2, 6, 1, 4, 3, 5, 0}; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
66 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 410 数组下标访问需审查边界保护 u8 sector = sector_lut[sector_code]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
67 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 431 数组下标访问需审查边界保护 static const float svpwm_coeff[6][4] = { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
68 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 440 数组下标访问需审查边界保护 float T1 = (svpwm_coeff[sector-1][0] * Ualpha + svpwm_coeff[sector-1][1] * Ubeta) * inv_Udc; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
69 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 441 数组下标访问需审查边界保护 float T2 = (svpwm_coeff[sector-1][2] * Ualpha + svpwm_coeff[sector-1][3] * Ubeta) * inv_Udc; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
70 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.cpp 605 数组下标访问需审查边界保护 float current_vbus = adc_value[2] * (3.3f / 4096.0f) * 11.0f; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
71 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.h 156 数组下标访问需审查边界保护 float cogging_table[COGGING_TABLE_SIZE] = {0}; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
72 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.h 157 数组下标访问需审查边界保护 float cogging_table_rev[COGGING_TABLE_SIZE] = {0}; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
73 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.h 191 数组下标访问需审查边界保护 static float cog_calib_run_data[6][COGGING_TABLE_SIZE]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
74 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.h 192 数组下标访问需审查边界保护 static float cog_calib_accum[COGGING_TABLE_SIZE]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
75 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/FOC.h 193 数组下标访问需审查边界保护 static u32 cog_calib_count[COGGING_TABLE_SIZE]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
76 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/Filter.cpp 65 数组下标访问需审查边界保护 float sorted[size]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
77 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x Algorithm/Filter.cpp 71 数组下标访问需审查边界保护 return sorted[size / 2]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
78 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 31 数组下标访问需审查边界保护 u16 adc_value[3] = {0}; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
79 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 32 数组下标访问需审查边界保护 static volatile u16 adc_current_value[3] = {0}; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
80 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 151 数组下标访问需审查边界保护 mcu_temp_samples[i] = open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
81 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 152 数组下标访问需审查边界保护 (1.43f - adc_value[0] * ADC_SCALE) * TEMP_FACTOR + 35.0f; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
82 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 154 数组下标访问需审查边界保护 currU_samples[i] = current_init; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
83 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 155 数组下标访问需审查边界保护 currV_samples[i] = current_init; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
84 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 156 数组下标访问需审查边界保护 currW_samples[i] = current_init; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
85 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 158 数组下标访问需审查边界保护 vbus_samples[i] = adc_value[2] * ADC_SCALE * VCC_FACTOR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
86 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 160 数组下标访问需审查边界保护 float R_now = (float)adc_value[1] / (4096 - (float)adc_value[1]) * 4700; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
87 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 161 数组下标访问需审查边界保护 drv_temp_samples[i] = open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
88 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 199 数组下标访问需审查边界保护 tempora_sample = currU_samples[idx]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
89 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 203 数组下标访问需审查边界保护 tempora_sample = currV_samples[idx]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
90 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 207 数组下标访问需审查边界保护 tempora_sample = currW_samples[idx]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
91 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 240 数组下标访问需审查边界保护 mcu_temp_samples[mcu_temp_head] = open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
92 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 241 数组下标访问需审查边界保护 (1.43f - adc_value[0] * ADC_SCALE) * TEMP_FACTOR + 35.0f; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
93 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 259 数组下标访问需审查边界保护 float R_now = (float)adc_value[1] / (4096 - (float)adc_value[1]) * 4700; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
94 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 260 数组下标访问需审查边界保护 drv_temp_samples[drv_temp_head] = open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
95 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 283 数组下标访问需审查边界保护 currU_samples[idx] = current_adc_to_ma(adc_current_value[0]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
96 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 284 数组下标访问需审查边界保护 currV_samples[idx] = current_adc_to_ma(adc_current_value[1]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
97 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 285 数组下标访问需审查边界保护 currW_samples[idx] = current_adc_to_ma(adc_current_value[2]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
98 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 299 数组下标访问需审查边界保护 vbus_samples[temp_vbus_head] = adc_value[2] * ADC_SCALE * VCC_FACTOR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
99 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 306 数组下标访问需审查边界保护 if (vbus_samples[mid] > MAX_VCC || vbus_samples[mid] < MIN_VCC) { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
100 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 321 数组下标访问需审查边界保护 adc_current_value[0] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_1); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
101 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 322 数组下标访问需审查边界保护 adc_current_value[1] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_2); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
102 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ADC.cpp 323 数组下标访问需审查边界保护 adc_current_value[2] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_3); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
103 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 49 数组下标访问需审查边界保护 uint8_t can_rx_buffer[64]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
104 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 50 数组下标访问需审查边界保护 static uint32_t can_rx_dma_words[16]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
105 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 63 数组下标访问需审查边界保护 u8 data[64]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
106 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 71 数组下标访问需审查边界保护 static can_rx_queue_item_t rx_queue[CAN_RX_QUEUE_SIZE]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
107 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 76 数组下标访问需审查边界保护 static can_tx_queue_item_t tx_queue[CAN_TX_QUEUE_SIZE]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
108 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 82 数组下标访问需审查边界保护 static constexpr u8 CANFD_DLC_LENGTH_TABLE[7] = {12, 16, 20, 24, 32, 48, 64}; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
109 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 238 数组下标访问需审查边界保护 message = rx_message_buffer[rx_buffer_tail]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
110 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 559 数组下标访问需审查边界保护 transmit_message.tx_data[i] = dis(gen); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
111 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 560 数组下标访问需审查边界保护 CAN_DEBUG_PRINT("", transmit_message.tx_data[i]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
112 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 625 数组下标访问需审查边界保护 transmit_message.tx_data[i] = i; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
113 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 650 数组下标访问需审查边界保护 CAN_DEBUG_PRINT("", i, transmit_message.tx_data[i], open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
114 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 651 数组下标访问需审查边界保护 receive_message.rx_data[i]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
115 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 727 数组下标访问需审查边界保护 : ((dlc <= 15U) ? CANFD_DLC_LENGTH_TABLE[dlc - 9U] : 0U); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
116 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 739 数组下标访问需审查边界保护 if (length <= CANFD_DLC_LENGTH_TABLE[i]) { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
117 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 740 数组下标访问需审查边界保护 return CANFD_DLC_LENGTH_TABLE[i]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
118 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 760 数组下标访问需审查边界保护 rx_queue[rx_queue_tail].id = message.rx_efid; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
119 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 761 数组下标访问需审查边界保护 rx_queue[rx_queue_tail].length = message.rx_dlen; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
120 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 762 数组下标访问需审查边界保护 if (rx_queue[rx_queue_tail].length > 64) { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
121 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 763 数组下标访问需审查边界保护 rx_queue[rx_queue_tail].length = 64; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
122 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 765 数组下标访问需审查边界保护 for (int i = 0; i < rx_queue[rx_queue_tail].length; i++) { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
123 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 766 数组下标访问需审查边界保护 rx_queue[rx_queue_tail].data[i] = message.rx_data[i]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
124 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 889 数组下标访问需审查边界保护 *item = rx_queue[rx_queue_head]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
125 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 907 数组下标访问需审查边界保护 tx_queue[tx_queue_tail].message = message; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
126 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 908 数组下标访问需审查边界保护 tx_queue[tx_queue_tail].valid = 1U; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
127 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 933 数组下标访问需审查边界保护 *message = tx_queue[tx_queue_head].message; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
128 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 949 数组下标访问需审查边界保护 *message = tx_queue[tx_queue_head].message; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
129 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 950 数组下标访问需审查边界保护 tx_queue[tx_queue_head].valid = 0U; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
130 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1041 数组下标访问需审查边界保护 transmit_data[10] = open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
131 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1042 数组下标访问需审查边界保护 (transmit_data[10] & ~0x07) | open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
132 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1050 数组下标访问需审查边界保护 transmit_data[29] = test_u16 & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
133 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1051 数组下标访问需审查边界保护 transmit_data[30] = (test_u16 >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
134 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1052 数组下标访问需审查边界保护 transmit_data[31] = cpu_usage; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
135 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1059 数组下标访问需审查边界保护 transmit_data[0] = controller_Mode; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
136 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1134 数组下标访问需审查边界保护 current_message.rx_dlen, current_message.rx_data[0], open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
137 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1135 数组下标访问需审查边界保护 current_message.rx_data[1]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
138 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1141 数组下标访问需审查边界保护 new_node_id = current_message.rx_data[0]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
139 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1151 数组下标访问需审查边界保护 transmit_data[0] = 0x01; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
140 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1152 数组下标访问需审查边界保护 transmit_data[1] = (u8)(new_node_id & 0xFF); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
141 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1153 数组下标访问需审查边界保护 transmit_data[2] = open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
142 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1177 数组下标访问需审查边界保护 transmit_data[0] = 0x00; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
143 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1186 数组下标访问需审查边界保护 transmit_data[0] = 0x00; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
144 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1187 数组下标访问需审查边界保护 transmit_data[1] = (u8)(new_node_id & 0xFF); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
145 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1188 数组下标访问需审查边界保护 transmit_data[2] = (u8)((new_node_id >> 8) & 0xFF); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
146 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1204 数组下标访问需审查边界保护 FOC.control_mode = current_message.rx_data[0]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
147 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1243 数组下标访问需审查边界保护 u8 first_byte = current_message.rx_data[0]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
148 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1244 数组下标访问需审查边界保护 u8 eigth_byte = current_message.rx_data[7]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
149 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1283 数组下标访问需审查边界保护 transmit_data[0] = 0x0A; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
150 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1284 数组下标访问需审查边界保护 transmit_data[1] = 0xAC; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
151 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1420 数组下标访问需审查边界保护 transmit_message.tx_data[i] = *(data + i); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
152 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.cpp 1487 数组下标访问需审查边界保护 transmit_message.tx_data[i] = *(data + i); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
153 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.h 25 数组下标访问需审查边界保护 u8 b[4]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
154 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.h 37 数组下标访问需审查边界保护 buffer[offset] = (u8)(value & 0xFF); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
155 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.h 38 数组下标访问需审查边界保护 buffer[offset + 1] = (u8)((value >> 8) & 0xFF); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
156 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.h 51 数组下标访问需审查边界保护 buffer[offset] = float_union.b[0]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
157 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.h 52 数组下标访问需审查边界保护 buffer[offset + 1] = float_union.b[1]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
158 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.h 53 数组下标访问需审查边界保护 buffer[offset + 2] = float_union.b[2]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
159 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.h 54 数组下标访问需审查边界保护 buffer[offset + 3] = float_union.b[3]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
160 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.h 65 数组下标访问需审查边界保护 short value = (short)(buffer[offset] | (buffer[offset + 1] << 8)); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
161 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.h 77 数组下标访问需审查边界保护 u16 value = (u16)(buffer[offset] | (buffer[offset + 1] << 8)); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
162 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.h 90 数组下标访问需审查边界保护 float_union.b[0] = buffer[offset]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
163 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.h 91 数组下标访问需审查边界保护 float_union.b[1] = buffer[offset + 1]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
164 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.h 92 数组下标访问需审查边界保护 float_union.b[2] = buffer[offset + 2]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
165 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.h 93 数组下标访问需审查边界保护 float_union.b[3] = buffer[offset + 3]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
166 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.h 195 数组下标访问需审查边界保护 u8 transmit_data[64]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
167 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.h 198 数组下标访问需审查边界保护 can_receive_message_struct rx_message_buffer[CAN_RX_BUFFER_SIZE]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
168 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Can.h 353 数组下标访问需审查边界保护 rx_message_buffer[rx_buffer_head] = message; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
169 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Timer.cpp 19 数组下标访问需审查边界保护 extern u16 adc_value[3]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
170 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Timer.cpp 27 数组下标访问需审查边界保护 static const u32 task_schedule_100us[10] = { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
171 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Timer.cpp 41 数组下标访问需审查边界保护 static const u32 task_schedule_1ms[10] = { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
172 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Timer.cpp 48 数组下标访问需审查边界保护 static const u32 task_schedule_10ms[10] = { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
173 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Timer.cpp 53 数组下标访问需审查边界保护 static const u32 task_schedule_100ms[10] = { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
174 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Timer.cpp 152 数组下标访问需审查边界保护 scheduler.taskFlags |= task_schedule_100us[total_us100_counter]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
175 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Timer.cpp 177 数组下标访问需审查边界保护 scheduler.taskFlags |= task_schedule_100ms[ms100_counter]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
176 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Timer.cpp 179 数组下标访问需审查边界保护 scheduler.taskFlags |= task_schedule_10ms[ms10_counter]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
177 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/Timer.cpp 181 数组下标访问需审查边界保护 scheduler.taskFlags |= task_schedule_1ms[ms1_counter]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
178 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/adc.h 21 数组下标访问需审查边界保护 float vbus_samples[ADC_FILTER_SIZE]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
179 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/adc.h 22 数组下标访问需审查边界保护 float currU_samples[ADC_FILTER_SIZE]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
180 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/adc.h 23 数组下标访问需审查边界保护 float currV_samples[ADC_FILTER_SIZE]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
181 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/adc.h 24 数组下标访问需审查边界保护 float currW_samples[ADC_FILTER_SIZE]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
182 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/adc.h 25 数组下标访问需审查边界保护 float mcu_temp_samples[ADC_FILTER_SIZE]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
183 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/adc.h 26 数组下标访问需审查边界保护 float drv_temp_samples[ADC_FILTER_SIZE]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
184 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x device/ang_sensor.h 95 数组下标访问需审查边界保护 float velocity[VEL_FILTER_SIZE] = {0.0f}; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
185 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x main.cpp 169 数组下标访问需审查边界保护 (FOC.*control_functions[FOC.control_mode])(); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
186 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 93 数组下标访问需审查边界保护 FlashEepromStatus status_read[CONFIG_SAVED_NUM + 1] = {FLASH_EEPROM_OK}; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
187 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 94 数组下标访问需审查边界保护 float data[CONFIG_SAVED_NUM] = {0.0f}; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
188 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 96 数组下标访问需审查边界保护 status_read[1] = readFloat(ADDR_CONTROL_MODE, &data[0]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
189 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 97 数组下标访问需审查边界保护 status_read[2] = readFloat(ADDR_VOLTAGE_LIMIT, &data[1]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
190 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 98 数组下标访问需审查边界保护 status_read[3] = readFloat(ADDR_VEL_LIMIT, &data[2]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
191 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 99 数组下标访问需审查边界保护 status_read[4] = readFloat(ADDR_ANGLE, &data[3]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
192 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 100 数组下标访问需审查边界保护 status_read[5] = readFloat(ADDR_TARGET_ANGLE, &data[4]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
193 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 101 数组下标访问需审查边界保护 status_read[6] = readFloat(ADDR_TARGET_VEL, &data[5]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
194 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 105 数组下标访问需审查边界保护 if (status_read[i] == open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
195 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 107 数组下标访问需审查边界保护 data[i - 1] = DEFAULT_VALUE; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
196 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 108 数组下标访问需审查边界保护 } else if (status_read[i] != FLASH_EEPROM_OK) { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
197 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 109 数组下标访问需审查边界保护 data[i - 1] = DEFAULT_VALUE; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
198 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 110 数组下标访问需审查边界保护 status_read[0] = status_read[i]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
199 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 114 数组下标访问需审查边界保护 if (status_read[0] == FLASH_EEPROM_OK) { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
200 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 141 数组下标访问需审查边界保护 data[i] = DEFAULT_VALUE; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
201 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 149 数组下标访问需审查边界保护 EEPROMStatus = status_read[0]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
202 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 154 数组下标访问需审查边界保护 FOC.control_mode = (u8)data[0]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
203 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 155 数组下标访问需审查边界保护 FOC.limit_voltage = data[1]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
204 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 156 数组下标访问需审查边界保护 FOC.target_current = data[2]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
205 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 157 数组下标访问需审查边界保护 KTH7823.angle_set(data[3]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
206 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 158 数组下标访问需审查边界保护 FOC.target_angle = data[4]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
207 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 159 数组下标访问需审查边界保护 FOC.target_velocity = data[5]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
208 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 415 数组下标访问需审查边界保护 float data[CONFIG_SAVED_NUM] = { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
209 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 429 数组下标访问需审查边界保护 status = writeFloat(ADDR_CONTROL_MODE, data[0]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
210 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 435 数组下标访问需审查边界保护 status = writeFloat(ADDR_VOLTAGE_LIMIT, data[1]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
211 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 441 数组下标访问需审查边界保护 status = writeFloat(ADDR_VEL_LIMIT, data[2]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
212 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 447 数组下标访问需审查边界保护 status = writeFloat(ADDR_ANGLE, data[3]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
213 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 453 数组下标访问需审查边界保护 status = writeFloat(ADDR_TARGET_ANGLE, data[4]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
214 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 459 数组下标访问需审查边界保护 status = writeFloat(ADDR_TARGET_VEL, data[5]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
215 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 466 数组下标访问需审查边界保护 u32 crc_data_words[CONFIG_SAVED_NUM]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
216 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 471 数组下标访问需审查边界保护 memcpy(&crc_data_words[i], &data[i], SIZE_FLOAT); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
217 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 473 数组下标访问需审查边界保护 crc_data_words[i] = crc_data_words[i] & DATA_FLOAT_MASK; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
218 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 507 数组下标访问需审查边界保护 u32 crc_data[2]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
219 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 508 数组下标访问需审查边界保护 crc_data[0] = (u32)node_id; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
220 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 509 数组下标访问需审查边界保护 crc_data[1] = counter; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
221 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 530 数组下标访问需审查边界保护 u32 magic = flash_ptr[NODE_ID_MAGIC_OFFSET / sizeof(u32)]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
222 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 537 数组下标访问需审查边界保护 u16 id_value = (u16)flash_ptr[NODE_ID_VALUE_OFFSET / sizeof(u32)]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
223 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 544 数组下标访问需审查边界保护 u32 write_counter = flash_ptr[NODE_ID_COUNTER_OFFSET / sizeof(u32)]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
224 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 547 数组下标访问需审查边界保护 u32 stored_crc = flash_ptr[NODE_ID_CRC_OFFSET / sizeof(u32)]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
225 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 577 数组下标访问需审查边界保护 u32 write_data[4]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
226 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 578 数组下标访问需审查边界保护 write_data[0] = NODE_ID_MAGIC; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
227 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 579 数组下标访问需审查边界保护 write_data[1] = (u32)node_id; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
228 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 580 数组下标访问需审查边界保护 write_data[2] = counter; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
229 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 581 数组下标访问需审查边界保护 write_data[3] = crc; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
230 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 589 数组下标访问需审查边界保护 fmc_status = fmc_word_program(addr + i * sizeof(u32), write_data[i]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
231 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 795 数组下标访问需审查边界保护 u32 temp_val[OTA_CONFIG_NUM]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
232 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 799 数组下标访问需审查边界保护 temp_val[0] = *flash_ptr; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
233 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 800 数组下标访问需审查边界保护 if (temp_val[0] == data) { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
234 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 816 数组下标访问需审查边界保护 temp_val[0] = *flash_ptr; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
235 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 818 数组下标访问需审查边界保护 temp_val[1] = *flash_ptr; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
236 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 820 数组下标访问需审查边界保护 temp_val[2] = *flash_ptr; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
237 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 822 数组下标访问需审查边界保护 temp_val[3] = *flash_ptr; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
238 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 824 数组下标访问需审查边界保护 temp_val[4] = *flash_ptr; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
239 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 826 数组下标访问需审查边界保护 temp_val[5] = *flash_ptr; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
240 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 832 数组下标访问需审查边界保护 temp_val[0], temp_val[1], temp_val[2], temp_val[3], open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
241 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 833 数组下标访问需审查边界保护 temp_val[4], temp_val[5]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
242 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 846 数组下标访问需审查边界保护 if (current_addr != addr and temp_val[i] != OTA_NOT_AVAL) { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
243 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 847 数组下标访问需审查边界保护 fmc_status = write_ADDRESS(current_addr, temp_val[i]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
244 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 851 数组下标访问需审查边界保护 temp_val[i], current_addr, fmc_status); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
245 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 860 数组下标访问需审查边界保护 temp_val[0] = *flash_ptr; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
246 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 862 数组下标访问需审查边界保护 temp_val[1] = *flash_ptr; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
247 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 864 数组下标访问需审查边界保护 temp_val[2] = *flash_ptr; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
248 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 866 数组下标访问需审查边界保护 temp_val[3] = *flash_ptr; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
249 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 868 数组下标访问需审查边界保护 temp_val[4] = *flash_ptr; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
250 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 870 数组下标访问需审查边界保护 temp_val[5] = *flash_ptr; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
251 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 874 数组下标访问需审查边界保护 temp_val[0], temp_val[1], temp_val[2], temp_val[3], open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
252 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 875 数组下标访问需审查边界保护 temp_val[4], temp_val[5]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
253 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 890 数组下标访问需审查边界保护 NVIC->ICER[i] = 0xFFFFFFFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
254 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/flash.cpp 972 数组下标访问需审查边界保护 uint32_t src_data = src_ptr[offset / 4]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
255 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/health.cpp 63 数组下标访问需审查边界保护 u32 currents[3] = {(u32)(sampler.get_current('') * 1000), open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
256 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/health.cpp 68 数组下标访问需审查边界保护 current_max = max(currents[0], currents[1], currents[2]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
257 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 142 数组下标访问需审查边界保护 u8 versionData[24] = {0}; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
258 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 146 数组下标访问需审查边界保护 versionData[0] = softwareVersion.major & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
259 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 147 数组下标访问需审查边界保护 versionData[1] = (softwareVersion.major >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
260 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 148 数组下标访问需审查边界保护 versionData[2] = softwareVersion.minor & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
261 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 149 数组下标访问需审查边界保护 versionData[3] = (softwareVersion.minor >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
262 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 150 数组下标访问需审查边界保护 versionData[4] = softwareVersion.patch & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
263 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 151 数组下标访问需审查边界保护 versionData[5] = (softwareVersion.patch >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
264 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 152 数组下标访问需审查边界保护 versionData[6] = softwareVersion.build & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
265 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 153 数组下标访问需审查边界保护 versionData[7] = (softwareVersion.build >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
266 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 156 数组下标访问需审查边界保护 versionData[8] = hardwareVersion.major & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
267 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 157 数组下标访问需审查边界保护 versionData[9] = (hardwareVersion.major >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
268 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 158 数组下标访问需审查边界保护 versionData[10] = hardwareVersion.minor & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
269 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 159 数组下标访问需审查边界保护 versionData[11] = (hardwareVersion.minor >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
270 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 160 数组下标访问需审查边界保护 versionData[12] = hardwareVersion.patch & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
271 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 161 数组下标访问需审查边界保护 versionData[13] = (hardwareVersion.patch >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
272 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 162 数组下标访问需审查边界保护 versionData[14] = hardwareVersion.build & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
273 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 163 数组下标访问需审查边界保护 versionData[15] = (hardwareVersion.build >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
274 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 166 数组下标访问需审查边界保护 versionData[16] = bootVersion.major & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
275 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 167 数组下标访问需审查边界保护 versionData[17] = (bootVersion.major >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
276 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 168 数组下标访问需审查边界保护 versionData[18] = bootVersion.minor & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
277 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 169 数组下标访问需审查边界保护 versionData[19] = (bootVersion.minor >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
278 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 170 数组下标访问需审查边界保护 versionData[20] = bootVersion.patch & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
279 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 171 数组下标访问需审查边界保护 versionData[21] = (bootVersion.patch >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
280 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 172 数组下标访问需审查边界保护 versionData[22] = bootVersion.build & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
281 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 173 数组下标访问需审查边界保护 versionData[23] = (bootVersion.build >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
282 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 186 数组下标访问需审查边界保护 char versionStr[32]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
283 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 298 数组下标访问需审查边界保护 u32 temp_val[6]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
284 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 301 数组下标访问需审查边界保护 temp_val[0] = *flash_ptr1; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
285 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 303 数组下标访问需审查边界保护 temp_val[1] = *flash_ptr1; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
286 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 305 数组下标访问需审查边界保护 temp_val[2] = *flash_ptr1; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
287 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 307 数组下标访问需审查边界保护 temp_val[3] = *flash_ptr1; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
288 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 309 数组下标访问需审查边界保护 temp_val[4] = *flash_ptr1; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
289 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 311 数组下标访问需审查边界保护 temp_val[5] = *flash_ptr1; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
290 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 316 数组下标访问需审查边界保护 temp_val[0], temp_val[1], temp_val[2], temp_val[3], temp_val[4], open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
291 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 317 数组下标访问需审查边界保护 temp_val[5]); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
292 info AUTO-ARRAY-001 Advisory MISRA C:2012 Rule 18.x sys/initial.cpp 332 数组下标访问需审查边界保护 u8 transmit_data[2] = {0x0A, 0xAC}; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
293 info AUTO-ASM-001 Required MISRA C:2012 Dir 4.3 / project safety rule device/Can.cpp 709 关中断/低功耗/内联汇编等平台相关指令需审查 __disable_irq(); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
294 info AUTO-ASM-001 Required MISRA C:2012 Dir 4.3 / project safety rule main.cpp 72 关中断/低功耗/内联汇编等平台相关指令需审查 __disable_irq(); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
295 info AUTO-ASM-001 Required MISRA C:2012 Dir 4.3 / project safety rule main.cpp 76 关中断/低功耗/内联汇编等平台相关指令需审查 __enable_irq(); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
296 info AUTO-ASM-001 Required MISRA C:2012 Dir 4.3 / project safety rule main.cpp 93 关中断/低功耗/内联汇编等平台相关指令需审查 __enable_irq(); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
297 info AUTO-ASM-001 Required MISRA C:2012 Dir 4.3 / project safety rule sys/flash.cpp 888 关中断/低功耗/内联汇编等平台相关指令需审查 __disable_irq(); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
298 info AUTO-ASM-001 Required MISRA C:2012 Dir 4.3 / project safety rule sys/flash.cpp 936 关中断/低功耗/内联汇编等平台相关指令需审查 __disable_irq(); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
299 info AUTO-ASM-001 Required MISRA C:2012 Dir 4.3 / project safety rule sys/flash.cpp 954 关中断/低功耗/内联汇编等平台相关指令需审查 __enable_irq(); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
300 info AUTO-ASM-001 Required MISRA C:2012 Dir 4.3 / project safety rule sys/flash.cpp 992 关中断/低功耗/内联汇编等平台相关指令需审查 __enable_irq(); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
301 info AUTO-ASM-001 Required MISRA C:2012 Dir 4.3 / project safety rule sys/flash.cpp 1008 关中断/低功耗/内联汇编等平台相关指令需审查 __enable_irq(); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
302 info AUTO-ASM-001 Required MISRA C:2012 Dir 4.3 / project safety rule sys/systick.cpp 256 关中断/低功耗/内联汇编等平台相关指令需审查 __disable_irq(); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
303 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 40 C 风格强制类型转换需审查必要性和范围 if (!cogging_comp_enabled) return 0.0f; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
304 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 46 C 风格强制类型转换需审查必要性和范围 float index_f = angle / 360.0f * (float)COGGING_TABLE_SIZE; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
305 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 47 C 风格强制类型转换需审查必要性和范围 u16 idx0 = (u16)index_f; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
306 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 49 C 风格强制类型转换需审查必要性和范围 float frac = index_f - (float)idx0; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
307 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 53 C 风格强制类型转换需审查必要性和范围 if (rt_velocity < -0.5f) last_table = cogging_table_rev; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
308 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 54 C 风格强制类型转换需审查必要性和范围 else if (rt_velocity > 0.5f) last_table = cogging_table; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
309 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 91 C 风格强制类型转换需审查必要性和范围 if (!cogging_calib_request) return; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
310 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 122 C 风格强制类型转换需审查必要性和范围 if (sample_div < SAMPLE_DIV) return; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
311 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 132 C 风格强制类型转换需审查必要性和范围 u16 idx = (u16)(angle_el / 360.0f * (float)COGGING_TABLE_SIZE); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
312 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 133 C 风格强制类型转换需审查必要性和范围 if (idx >= COGGING_TABLE_SIZE) idx = COGGING_TABLE_SIZE - 1; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
313 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 153 C 风格强制类型转换需审查必要性和范围 (cog_calib_count[i] > 0) ? cog_calib_accum[i] / (float)cog_calib_count[i] : 0.0f; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
314 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 156 C 风格强制类型转换需审查必要性和范围 dc /= (float)COGGING_TABLE_SIZE; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
315 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 197 C 风格强制类型转换需审查必要性和范围 float angle_deg = (float)i / (float)COGGING_TABLE_SIZE * 360.0f; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
316 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 205 C 风格强制类型转换需审查必要性和范围 float angle_deg = (float)i / (float)COGGING_TABLE_SIZE * 360.0f; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
317 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 214 C 风格强制类型转换需审查必要性和范围 if (i % 8 == 0) printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
318 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 216 C 风格强制类型转换需审查必要性和范围 if (i < COGGING_TABLE_SIZE - 1) printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
319 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 217 C 风格强制类型转换需审查必要性和范围 if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
320 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 226 C 风格强制类型转换需审查必要性和范围 if (i % 8 == 0) printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
321 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 228 C 风格强制类型转换需审查必要性和范围 if (i < COGGING_TABLE_SIZE - 1) printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
322 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 229 C 风格强制类型转换需审查必要性和范围 if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf(""); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
323 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 246 C 风格强制类型转换需审查必要性和范围 ((value - min) / (max - min) * (target_max - target_min)) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
324 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 301 C 风格强制类型转换需审查必要性和范围 I_alpha = (2.0f / 3.0f) * current_a - (1.0f / 3.0f) * current_b - open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
325 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 302 C 风格强制类型转换需审查必要性和范围 (1.0f / 3.0f) * current_c; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
326 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 605 C 风格强制类型转换需审查必要性和范围 float current_vbus = adc_value[2] * (3.3f / 4096.0f) * 11.0f; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
327 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 626 C 风格强制类型转换需审查必要性和范围 if ((drop_exceeded || below_absolute) && (!is_shut_down)) { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
328 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 695 C 风格强制类型转换需审查必要性和范围 float velocity_error = (target_velocity - rt_velocity) * DIR * REDUCTION_RATIO; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
329 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 782 C 风格强制类型转换需审查必要性和范围 float Uq = vel_inVelAngloop(velocity_error)* DIR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
330 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.cpp 813 C 风格强制类型转换需审查必要性和范围 float velocity_error = (target_velocity - rt_velocity)* DIR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
331 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/FOC.h 260 C 风格强制类型转换需审查必要性和范围 typedef float (FOC_Controller::*FOCFunctionPtr)(void); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
332 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/Filter.cpp 150 C 风格强制类型转换需审查必要性和范围 (void)initial_error_covariance; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
333 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/Filter.cpp 151 C 风格强制类型转换需审查必要性和范围 (void)process_noise; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
334 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/Filter.cpp 152 C 风格强制类型转换需审查必要性和范围 (void)measurement_noise; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
335 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/Filter.cpp 190 C 风格强制类型转换需审查必要性和范围 if (error > 180.0f) error -= 360.0f; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
336 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/Filter.cpp 191 C 风格强制类型转换需审查必要性和范围 else if (error < -180.0f) error += 360.0f; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
337 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/Filter.cpp 196 C 风格强制类型转换需审查必要性和范围 velocity_estimate = velocity_pred + (beta_gain / dt) * error; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
338 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/Filter.h 80 C 风格强制类型转换需审查必要性和范围 P = (1 - K) * P; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
339 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/Filter.h 96 C 风格强制类型转换需审查必要性和范围 P = (1 - K) * P; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
340 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x Algorithm/Filter.h 248 C 风格强制类型转换需审查必要性和范围 (void)initial_error_covariance; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
341 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ADC.cpp 41 C 风格强制类型转换需审查必要性和范围 return (raw_adc * ADC_SCALE + CURRENT_OFFSET) * CURRENT_FACTOR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
342 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ADC.cpp 60 C 风格强制类型转换需审查必要性和范围 dma_data_parameter.periph_addr = (uint32_t)(&ADC_RDATA(ADC0)); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
343 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ADC.cpp 62 C 风格强制类型转换需审查必要性和范围 dma_data_parameter.memory_addr = (uint32_t)(adc_value); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
344 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ADC.cpp 152 C 风格强制类型转换需审查必要性和范围 (1.43f - adc_value[0] * ADC_SCALE) * TEMP_FACTOR + 35.0f; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
345 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ADC.cpp 160 C 风格强制类型转换需审查必要性和范围 float R_now = (float)adc_value[1] / (4096 - (float)adc_value[1]) * 4700; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
346 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ADC.cpp 241 C 风格强制类型转换需审查必要性和范围 (1.43f - adc_value[0] * ADC_SCALE) * TEMP_FACTOR + 35.0f; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
347 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ADC.cpp 243 C 风格强制类型转换需审查必要性和范围 if (mcu_temp_head >= ADC_FILTER_SIZE) mcu_temp_head = 0; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
348 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ADC.cpp 259 C 风格强制类型转换需审查必要性和范围 float R_now = (float)adc_value[1] / (4096 - (float)adc_value[1]) * 4700; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
349 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ADC.cpp 263 C 风格强制类型转换需审查必要性和范围 if (drv_temp_head >= ADC_FILTER_SIZE) drv_temp_head = 0; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
350 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ADC.cpp 301 C 风格强制类型转换需审查必要性和范围 if (temp_vbus_head >= ADC_FILTER_SIZE) temp_vbus_head = 0; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
351 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ADC.cpp 320 C 风格强制类型转换需审查必要性和范围 (void)adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_0); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
352 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 30 C 风格强制类型转换需审查必要性和范围 #define CAN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
353 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 33 C 风格强制类型转换需审查必要性和范围 #define CAN_DEBUG_PRINT(fmt, ...) ((void)0) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
354 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 103 C 风格强制类型转换需审查必要性和范围 return ((u32)node_id << 16) | (base_id & 0xFFFF); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
355 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 116 C 风格强制类型转换需审查必要性和范围 u16 rx_node_id = (u16)((received_id >> 16) & 0xFFFF); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
356 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 198 C 风格强制类型转换需审查必要性和范围 return (u8)status; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
357 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 317 C 风格强制类型转换需审查必要性和范围 (uint32_t)(&CAN_RFIFOMDATA0(CAN0, CAN_FIFO0)); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
358 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 318 C 风格强制类型转换需审查必要性和范围 dma_rx_parameter.memory_addr = (uint32_t)can_rx_dma_words; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
359 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 514 C 风格强制类型转换需审查必要性和范围 can_filter.filter_list_high = (uint16_t)(DEV_CAN_LOOPBACK_ID >> 13U); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
360 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 516 C 风格强制类型转换需审查必要性和范围 ((uint16_t)(DEV_CAN_LOOPBACK_ID)) << 3U | (1U << 2); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
361 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 646 C 风格强制类型转换需审查必要性和范围 (CAN_FF_STANDARD == receive_message.rx_ff) && open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
362 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 804 C 风格强制类型转换需审查必要性和范围 uint32_t canfd_en = CAN_FDCTL(CAN0) & CAN_FDCTL_FDEN; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
363 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 807 C 风格强制类型转换需审查必要性和范围 message->rx_ff = (uint8_t)(CAN_RFIFOMI_FF & rfifomi); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
364 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 809 C 风格强制类型转换需审查必要性和范围 message->rx_sfid = (uint32_t)(GET_RFIFOMI_SFID(rfifomi)); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
365 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 811 C 风格强制类型转换需审查必要性和范围 message->rx_efid = (uint32_t)(GET_RFIFOMI_EFID(rfifomi)); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
366 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 813 C 风格强制类型转换需审查必要性和范围 message->rx_ft = (uint8_t)(CAN_RFIFOMI_FT & rfifomi); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
367 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 814 C 风格强制类型转换需审查必要性和范围 message->rx_fi = (uint8_t)(GET_RFIFOMP_FI(rfifomp)); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
368 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 815 C 风格强制类型转换需审查必要性和范围 message->fd_flag = (uint8_t)((CAN_RFIFOMP_FDF & rfifomp) >> 7); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
369 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 816 C 风格强制类型转换需审查必要性和范围 dlc = (uint8_t)(GET_RFIFOMP_DLENC(rfifomp)); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
370 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 817 C 风格强制类型转换需审查必要性和范围 if ((canfd_en != 0U) && (message->fd_flag != CAN_FDF_CLASSIC)) { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
371 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 819 C 风格强制类型转换需审查必要性和范围 message->fd_brs = (uint8_t)((rfifomp & CAN_RFIFOMP_BRS) >> 5); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
372 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 820 C 风格强制类型转换需审查必要性和范围 message->fd_esi = (uint8_t)((rfifomp & CAN_RFIFOMP_ESI) >> 4); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
373 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 848 C 风格强制类型转换需审查必要性和范围 (uint32_t)(&CAN_RFIFOMDATA0(CAN0, CAN_FIFO0))); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
374 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 849 C 风格强制类型转换需审查必要性和范围 dma_memory_address_config(DMA0, DMA_CH4, (uint32_t)can_rx_dma_words); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
375 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 1015 C 风格强制类型转换需审查必要性和范围 u_current_union.f = sampler.get_current('') * 1000; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
376 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 1016 C 风格强制类型转换需审查必要性和范围 w_current_union.f = sampler.get_current('') * 1000; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
377 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 1017 C 风格强制类型转换需审查必要性和范围 v_current_union.f = sampler.get_current('') * 1000; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
378 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 1051 C 风格强制类型转换需审查必要性和范围 transmit_data[30] = (test_u16 >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
379 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 1102 C 风格强制类型转换需审查必要性和范围 u16 sender_node_id = (u16)((current_message.rx_efid >> 16) & 0xFFFF); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
380 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 1152 C 风格强制类型转换需审查必要性和范围 transmit_data[1] = (u8)(new_node_id & 0xFF); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
381 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 1154 C 风格强制类型转换需审查必要性和范围 (u8)((new_node_id >> 8) & 0xFF); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
382 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 1187 C 风格强制类型转换需审查必要性和范围 transmit_data[1] = (u8)(new_node_id & 0xFF); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
383 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 1188 C 风格强制类型转换需审查必要性和范围 transmit_data[2] = (u8)((new_node_id >> 8) & 0xFF); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
384 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 1279 C 风格强制类型转换需审查必要性和范围 volatile u32 *flash_ptr = (volatile u32 *)n_APP_LATEST_EN_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
385 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 1281 C 风格强制类型转换需审查必要性和范围 flash_ptr = (volatile u32 *)n_APP_LATEST_CHECK_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
386 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 1451 C 风格强制类型转换需审查必要性和范围 if ((CAN_FDCTL(CAN0) & CAN_FDCTL_FDEN) == 0U) { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
387 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.cpp 1468 C 风格强制类型转换需审查必要性和范围 if ((length != 0U) && (valid_length == 0U)) { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
388 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.h 37 C 风格强制类型转换需审查必要性和范围 buffer[offset] = (u8)(value & 0xFF); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
389 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.h 38 C 风格强制类型转换需审查必要性和范围 buffer[offset + 1] = (u8)((value >> 8) & 0xFF); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
390 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.h 65 C 风格强制类型转换需审查必要性和范围 short value = (short)(buffer[offset] | (buffer[offset + 1] << 8)); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
391 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Can.h 77 C 风格强制类型转换需审查必要性和范围 u16 value = (u16)(buffer[offset] | (buffer[offset + 1] << 8)); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
392 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Timer.cpp 316 C 风格强制类型转换需审查必要性和范围 TIMER_CH0CV(TIMER1) = (uint32_t)(duty_cycle0 * TIMER1_PERIOD); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
393 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Timer.cpp 317 C 风格强制类型转换需审查必要性和范围 TIMER_CH1CV(TIMER1) = (uint32_t)(duty_cycle1 * TIMER1_PERIOD); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
394 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/Timer.cpp 318 C 风格强制类型转换需审查必要性和范围 TIMER_CH2CV(TIMER1) = (uint32_t)(duty_cycle2 * TIMER1_PERIOD); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
395 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ang_sensor.cpp 22 C 风格强制类型转换需审查必要性和范围 #define ANG_SENS_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
396 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ang_sensor.cpp 25 C 风格强制类型转换需审查必要性和范围 #define ANG_SENS_DEBUG_PRINT(fmt, ...) ((void)0) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
397 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ang_sensor.cpp 60 C 风格强制类型转换需审查必要性和范围 dma_init_struct.memory_addr = (uint32_t)0; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
398 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ang_sensor.cpp 64 C 风格强制类型转换需审查必要性和范围 dma_init_struct.periph_addr = (uint32_t)(&SPI_DATA(SPI0)); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
399 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ang_sensor.cpp 74 C 风格强制类型转换需审查必要性和范围 dma_init_struct.memory_addr = (uint32_t)0; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
400 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ang_sensor.cpp 78 C 风格强制类型转换需审查必要性和范围 dma_init_struct.periph_addr = (uint32_t)(&SPI_DATA(SPI0)); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
401 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ang_sensor.cpp 113 C 风格强制类型转换需审查必要性和范围 dma_memory_address_config(DMA0, DMA_CH2, (uint32_t)&tx_data); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
402 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ang_sensor.cpp 119 C 风格强制类型转换需审查必要性和范围 dma_memory_address_config(DMA0, DMA_CH1, (uint32_t)rx_data); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
403 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ang_sensor.cpp 125 C 风格强制类型转换需审查必要性和范围 while ((!spi_dma_tx_complete || !spi_dma_rx_complete) && --timeout) { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
404 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ang_sensor.cpp 245 C 风格强制类型转换需审查必要性和范围 float angle_deg = -(float)raw_data * ANGLESENS_FACTOR + ANGLESENS_OFFSET; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
405 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ang_sensor.cpp 256 C 风格强制类型转换需审查必要性和范围 return (float)FAULT_RECEIVE; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
406 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ang_sensor.cpp 294 C 风格强制类型转换需审查必要性和范围 float angle_sensor::getAngle(void) const { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
407 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ang_sensor.cpp 302 C 风格强制类型转换需审查必要性和范围 float angle_sensor::getRawAngle(void) const { return m_cumulativeAngle; } open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
408 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ang_sensor.cpp 308 C 风格强制类型转换需审查必要性和范围 float angle_sensor::getcurrent_sensorangle(void) const{ open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
409 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ang_sensor.h 64 C 风格强制类型转换需审查必要性和范围 float getAngle(void) const; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
410 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ang_sensor.h 69 C 风格强制类型转换需审查必要性和范围 float getRawAngle(void) const; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
411 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x device/ang_sensor.h 74 C 风格强制类型转换需审查必要性和范围 float getcurrent_sensorangle(void) const; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
412 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x main.cpp 22 C 风格强制类型转换需审查必要性和范围 #define MAIN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
413 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x main.cpp 25 C 风格强制类型转换需审查必要性和范围 #define MAIN_DEBUG_PRINT(fmt, ...) ((void)0) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
414 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x main.cpp 169 C 风格强制类型转换需审查必要性和范围 (FOC.*control_functions[FOC.control_mode])(); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
415 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/config.h 381 C 风格强制类型转换需审查必要性和范围 (TIMER2_PERIOD + 1) * (TIMER2_PRESCALER + 1) / 120000000.0f; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
416 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/config.h 396 C 风格强制类型转换需审查必要性和范围 (TIMER1_PERIOD + 1) * 0.41 - 1; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
417 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/config.h 427 C 风格强制类型转换需审查必要性和范围 while (angle >= 360.0f) angle -= 360.0f; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
418 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/config.h 428 C 风格强制类型转换需审查必要性和范围 while (angle < 0.0f) angle += 360.0f; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
419 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 22 C 风格强制类型转换需审查必要性和范围 #define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
420 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 25 C 风格强制类型转换需审查必要性和范围 #define EEP_DEBUG_PRINT(fmt, ...) ((void)0) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
421 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 31 C 风格强制类型转换需审查必要性和范围 #define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
422 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 34 C 风格强制类型转换需审查必要性和范围 #define OTA_DEBUG_PRINT(fmt, ...) ((void)0) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
423 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 120 C 风格强制类型转换需审查必要性和范围 volatile u32 *flash_ptr = (volatile u32 *)address; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
424 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 136 C 风格强制类型转换需审查必要性和范围 CRC_NUM = crc_block_data_calculate((uint32_t *)data, CONFIG_SAVED_NUM); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
425 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 138 C 风格强制类型转换需审查必要性和范围 *((u32 *)next_address)); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
426 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 139 C 风格强制类型转换需审查必要性和范围 if (CRC_NUM != *((u32 *)next_address)) { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
427 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 154 C 风格强制类型转换需审查必要性和范围 FOC.control_mode = (u8)data[0]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
428 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 169 C 风格强制类型转换需审查必要性和范围 FlashEepromStatus FlashEEPROM::read(u8 virtualAddr, u16 *data) const { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
429 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 178 C 风格强制类型转换需审查必要性和范围 u32 data_word = *((u32 *)address); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
430 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 181 C 风格强制类型转换需审查必要性和范围 u8 addr = (u8)(data_word & DATA_ADDR_MASK); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
431 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 185 C 风格强制类型转换需审查必要性和范围 *data = (u16)((data_word & DATA_U16_MASK) >> 16); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
432 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 200 C 风格强制类型转换需审查必要性和范围 FlashEepromStatus FlashEEPROM::readFloat(u8 virtualAddr, float *data) const { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
433 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 210 C 风格强制类型转换需审查必要性和范围 volatile u32 *flash_ptr = (volatile u32 *)address; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
434 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 215 C 风格强制类型转换需审查必要性和范围 u8 addr = (u8)(data_word & DATA_ADDR_MASK); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
435 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 242 C 风格强制类型转换需审查必要性和范围 u32 data_word_to_write = ((u32)data << 16) | (u32)virtualAddr; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
436 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 247 C 风格强制类型转换需审查必要性和范围 volatile u32 *flash_ptr = (volatile u32 *)address; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
437 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 250 C 风格强制类型转换需审查必要性和范围 if ((data_read & DATA_ADDR_MASK) == (u32)virtualAddr) { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
438 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 255 C 风格强制类型转换需审查必要性和范围 u16 float_data_read = *((u16 *)&data_read); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
439 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 270 C 风格强制类型转换需审查必要性和范围 volatile u32 *flash_ptr = (volatile u32 *)address; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
440 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 316 C 风格强制类型转换需审查必要性和范围 data_word = (data_word & DATA_FLOAT_MASK) | (u32)virtualAddr; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
441 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 322 C 风格强制类型转换需审查必要性和范围 volatile u32 *flash_ptr = (volatile u32 *)address; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
442 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 326 C 风格强制类型转换需审查必要性和范围 (u32)virtualAddr) { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
443 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 331 C 风格强制类型转换需审查必要性和范围 float float_data_read = *((float *)&data_word_read); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
444 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 346 C 风格强制类型转换需审查必要性和范围 volatile u32 *flash_ptr = (volatile u32 *)address; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
445 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 361 C 风格强制类型转换需审查必要性和范围 u32 data_word_c = *((u32 *)next_address); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
446 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 363 C 风格强制类型转换需审查必要性和范围 float float_data = *((float *)&data_word_c); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
447 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 416 C 风格强制类型转换需审查必要性和范围 (float)FOC.control_mode, FOC.limit_voltage, open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
448 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 508 C 风格强制类型转换需审查必要性和范围 crc_data[0] = (u32)node_id; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
449 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 527 C 风格强制类型转换需审查必要性和范围 volatile u32 *flash_ptr = (volatile u32 *)addr; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
450 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 537 C 风格强制类型转换需审查必要性和范围 u16 id_value = (u16)flash_ptr[NODE_ID_VALUE_OFFSET / sizeof(u32)]; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
451 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 579 C 风格强制类型转换需审查必要性和范围 write_data[1] = (u32)node_id; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
452 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 627 C 风格强制类型转换需审查必要性和范围 FlashEepromStatus FlashEEPROM::readNodeId(u16 *node_id) const { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
453 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 730 C 风格强制类型转换需审查必要性和范围 volatile u32 *flash_ptr = (volatile u32 *)address; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
454 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 742 C 风格强制类型转换需审查必要性和范围 if (*((u32 *)next_address) != CRC_NUM) { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
455 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 747 C 风格强制类型转换需审查必要性和范围 *((u32 *)next_address)); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
456 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 768 C 风格强制类型转换需审查必要性和范围 if (CRC_NUM == *((u32 *)next_address)) { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
457 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 796 C 风格强制类型转换需审查必要性和范围 volatile u32 *flash_ptr = (volatile u32 *)addr; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
458 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 815 C 风格强制类型转换需审查必要性和范围 flash_ptr = (volatile u32 *)n_APP_LATEST_AVAL_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
459 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 817 C 风格强制类型转换需审查必要性和范围 flash_ptr = (volatile u32 *)n_APP_BACKUP_AVAL_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
460 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 819 C 风格强制类型转换需审查必要性和范围 flash_ptr = (volatile u32 *)n_APP_LATEST_EN_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
461 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 821 C 风格强制类型转换需审查必要性和范围 flash_ptr = (volatile u32 *)n_APP_BACKUP_EN_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
462 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 823 C 风格强制类型转换需审查必要性和范围 flash_ptr = (volatile u32 *)n_APP_LATEST_CHECK_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
463 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 825 C 风格强制类型转换需审查必要性和范围 flash_ptr = (volatile u32 *)n_APP_BACKUP_CHECK_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
464 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 859 C 风格强制类型转换需审查必要性和范围 flash_ptr = (volatile u32 *)n_APP_LATEST_AVAL_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
465 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 861 C 风格强制类型转换需审查必要性和范围 flash_ptr = (volatile u32 *)n_APP_BACKUP_AVAL_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
466 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 863 C 风格强制类型转换需审查必要性和范围 flash_ptr = (volatile u32 *)n_APP_LATEST_EN_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
467 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 865 C 风格强制类型转换需审查必要性和范围 flash_ptr = (volatile u32 *)n_APP_BACKUP_EN_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
468 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 867 C 风格强制类型转换需审查必要性和范围 flash_ptr = (volatile u32 *)n_APP_LATEST_CHECK_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
469 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 869 C 风格强制类型转换需审查必要性和范围 flash_ptr = (volatile u32 *)n_APP_BACKUP_CHECK_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
470 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 911 C 风格强制类型转换需审查必要性和范围 uint32_t msp_value = *(__IO uint32_t *)BOOTLOADER_START_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
471 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 912 C 风格强制类型转换需审查必要性和范围 uint32_t reset_handler = *(__IO uint32_t *)(BOOTLOADER_START_ADDR + 4); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
472 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 913 C 风格强制类型转换需审查必要性和范围 typedef void (*AppEntryFunc)(void); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
473 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 914 C 风格强制类型转换需审查必要性和范围 AppEntryFunc app_entry = (AppEntryFunc)reset_handler; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
474 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 962 C 风格强制类型转换需审查必要性和范围 const uint32_t *src_ptr = (const uint32_t *)APPLATEST_START_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
475 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 963 C 风格强制类型转换需审查必要性和范围 uint32_t *dst_ptr = (uint32_t *)APPBACK_START_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
476 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 969 C 风格强制类型转换需审查必要性和范围 (uint32_t *)APPLATEST_START_ADDR, APP_MAX_SIZE / 4); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
477 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 1012 C 风格强制类型转换需审查必要性和范围 uint32_t dst_crc = crc_block_data_calculate((uint32_t *)APPBACK_START_ADDR, open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
478 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.cpp 1020 C 风格强制类型转换需审查必要性和范围 return (fmc_state_enum)0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
479 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.h 15 C 风格强制类型转换需审查必要性和范围 #define ALIGN_4BYTE(addr) ((addr) & 0xFFFFFFFC) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
480 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.h 78 C 风格强制类型转换需审查必要性和范围 FlashEepromStatus read(u8 virtualAddr, u16 *data) const; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
481 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.h 94 C 风格强制类型转换需审查必要性和范围 FlashEepromStatus readFloat(u8 virtualAddr, float *data) const; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
482 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/flash.h 135 C 风格强制类型转换需审查必要性和范围 FlashEepromStatus readNodeId(u16 *node_id) const; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
483 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/health.cpp 38 C 风格强制类型转换需审查必要性和范围 int drv_temp = (int)sampler.get_drv_temp(); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
484 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/health.cpp 39 C 风格强制类型转换需审查必要性和范围 int mcu_temp = (int)sampler.get_mcu_temp(); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
485 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/health.cpp 63 C 风格强制类型转换需审查必要性和范围 u32 currents[3] = {(u32)(sampler.get_current('') * 1000), open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
486 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/health.cpp 64 C 风格强制类型转换需审查必要性和范围 (u32)(sampler.get_current('') * 1000), open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
487 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/health.cpp 65 C 风格强制类型转换需审查必要性和范围 (u32)(sampler.get_current('') * 1000)}; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
488 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/health.h 16 C 风格强制类型转换需审查必要性和范围 #define FLOAT_TO_Q16_16(x) ((q16_16_t)((x) * Q16_16_ONE)) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
489 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/health.h 18 C 风格强制类型转换需审查必要性和范围 #define Q16_16_TO_FLOAT(x) ((float)(x) / Q16_16_ONE) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
490 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/health.h 20 C 风格强制类型转换需审查必要性和范围 #define Q16_16_MUL(a, b) ((q16_16_t)(((int64_t)(a) * (b)) >> 16)) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
491 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/health.h 22 C 风格强制类型转换需审查必要性和范围 #define Q16_16_SQUARE(x) Q16_16_MUL((x), (x)) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
492 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 23 C 风格强制类型转换需审查必要性和范围 #define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
493 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 26 C 风格强制类型转换需审查必要性和范围 #define OTA_DEBUG_PRINT(fmt, ...) ((void)0) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
494 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 32 C 风格强制类型转换需审查必要性和范围 #define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
495 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 35 C 风格强制类型转换需审查必要性和范围 #define EEP_DEBUG_PRINT(fmt, ...) ((void)0) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
496 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 147 C 风格强制类型转换需审查必要性和范围 versionData[1] = (softwareVersion.major >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
497 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 149 C 风格强制类型转换需审查必要性和范围 versionData[3] = (softwareVersion.minor >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
498 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 151 C 风格强制类型转换需审查必要性和范围 versionData[5] = (softwareVersion.patch >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
499 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 153 C 风格强制类型转换需审查必要性和范围 versionData[7] = (softwareVersion.build >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
500 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 157 C 风格强制类型转换需审查必要性和范围 versionData[9] = (hardwareVersion.major >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
501 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 159 C 风格强制类型转换需审查必要性和范围 versionData[11] = (hardwareVersion.minor >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
502 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 161 C 风格强制类型转换需审查必要性和范围 versionData[13] = (hardwareVersion.patch >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
503 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 163 C 风格强制类型转换需审查必要性和范围 versionData[15] = (hardwareVersion.build >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
504 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 167 C 风格强制类型转换需审查必要性和范围 versionData[17] = (bootVersion.major >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
505 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 169 C 风格强制类型转换需审查必要性和范围 versionData[19] = (bootVersion.minor >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
506 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 171 C 风格强制类型转换需审查必要性和范围 versionData[21] = (bootVersion.patch >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
507 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 173 C 风格强制类型转换需审查必要性和范围 versionData[23] = (bootVersion.build >> 8) & 0xFF; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
508 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 224 C 风格强制类型转换需审查必要性和范围 int fputc(int ch, FILE *f) throw() { open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
509 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 225 C 风格强制类型转换需审查必要性和范围 usart_data_transmit(EVAL_COM0, (u8)ch); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
510 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 300 C 风格强制类型转换需审查必要性和范围 volatile u32 *flash_ptr1 = (volatile u32 *)n_APP_LATEST_AVAL_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
511 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 302 C 风格强制类型转换需审查必要性和范围 flash_ptr1 = (volatile u32 *)n_APP_BACKUP_AVAL_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
512 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 304 C 风格强制类型转换需审查必要性和范围 flash_ptr1 = (volatile u32 *)n_APP_LATEST_EN_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
513 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 306 C 风格强制类型转换需审查必要性和范围 flash_ptr1 = (volatile u32 *)n_APP_BACKUP_EN_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
514 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 308 C 风格强制类型转换需审查必要性和范围 flash_ptr1 = (volatile u32 *)n_APP_LATEST_CHECK_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
515 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 310 C 风格强制类型转换需审查必要性和范围 flash_ptr1 = (volatile u32 *)n_APP_BACKUP_CHECK_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
516 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 321 C 风格强制类型转换需审查必要性和范围 volatile u32 *flash_ptr = (volatile u32 *)n_APP_LATEST_CHECK_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
517 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 336 C 风格强制类型转换需审查必要性和范围 flash_ptr = (volatile u32 *)n_APP_BACKUP_AVAL_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
518 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/initial.cpp 338 C 风格强制类型转换需审查必要性和范围 flash_ptr = (volatile u32 *)n_APP_BACKUP_CHECK_ADDR; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
519 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/systick.cpp 47 C 风格强制类型转换需审查必要性和范围 #define SLEEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
520 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/systick.cpp 50 C 风格强制类型转换需审查必要性和范围 #define SLEEP_DEBUG_PRINT(fmt, ...) ((void)0) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
521 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/systick.cpp 138 C 风格强制类型转换需审查必要性和范围 uint64_t busy_64 = (uint64_t)busy_cycles_accum * 100U; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
522 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/systick.cpp 139 C 风格强制类型转换需审查必要性和范围 uint32_t busy_percent = (uint32_t)(busy_64 / SystemCoreClock); open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
523 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/systick.cpp 143 C 风格强制类型转换需审查必要性和范围 cpu_usage = (uint8_t)busy_percent; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
524 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/systick.cpp 260 C 风格强制类型转换需审查必要性和范围 volatile u32 *flash_ptr = (volatile u32 *)address; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
525 info AUTO-CAST-001 Required MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x sys/systick.cpp 284 C 风格强制类型转换需审查必要性和范围 volatile u32 *flash_ptr = (volatile u32 *)address; open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
526 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x Algorithm/FOC.cpp 242 函数式宏需审查括号、副作用和类型安全 #define _constrain(amt, low, high) \ open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
527 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x Algorithm/FOC.cpp 245 函数式宏需审查括号、副作用和类型安全 #define constrain(value, min, max, target_min, target_max) \ open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
528 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x Algorithm/pid.cpp 8 函数式宏需审查括号、副作用和类型安全 #define _constrain(amt, low, high) \ open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
529 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x device/Can.cpp 30 函数式宏需审查括号、副作用和类型安全 #define CAN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
530 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x device/Can.cpp 33 函数式宏需审查括号、副作用和类型安全 #define CAN_DEBUG_PRINT(fmt, ...) ((void)0) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
531 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x device/ang_sensor.cpp 22 函数式宏需审查括号、副作用和类型安全 #define ANG_SENS_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
532 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x device/ang_sensor.cpp 25 函数式宏需审查括号、副作用和类型安全 #define ANG_SENS_DEBUG_PRINT(fmt, ...) ((void)0) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
533 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x device/ang_sensor.cpp 29 函数式宏需审查括号、副作用和类型安全 #define ANG_SPI_CS_ENABLE() gpio_bit_reset(GPIOA, GPIO_PIN_15) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
534 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x device/ang_sensor.cpp 31 函数式宏需审查括号、副作用和类型安全 #define ANG_SPI_CS_DISABLE() gpio_bit_set(GPIOA, GPIO_PIN_15) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
535 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x device/ang_sensor.cpp 33 函数式宏需审查括号、副作用和类型安全 #define DRV_SPI_CS_ENABLE() gpio_bit_reset(GPIOB, GPIO_PIN_14) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
536 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x device/ang_sensor.cpp 35 函数式宏需审查括号、副作用和类型安全 #define DRV_SPI_CS_DISABLE() gpio_bit_set(GPIOB, GPIO_PIN_14) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
537 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x main.cpp 22 函数式宏需审查括号、副作用和类型安全 #define MAIN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
538 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x main.cpp 25 函数式宏需审查括号、副作用和类型安全 #define MAIN_DEBUG_PRINT(fmt, ...) ((void)0) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
539 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x sys/flash.cpp 22 函数式宏需审查括号、副作用和类型安全 #define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
540 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x sys/flash.cpp 25 函数式宏需审查括号、副作用和类型安全 #define EEP_DEBUG_PRINT(fmt, ...) ((void)0) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
541 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x sys/flash.cpp 31 函数式宏需审查括号、副作用和类型安全 #define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
542 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x sys/flash.cpp 34 函数式宏需审查括号、副作用和类型安全 #define OTA_DEBUG_PRINT(fmt, ...) ((void)0) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
543 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x sys/flash.h 15 函数式宏需审查括号、副作用和类型安全 #define ALIGN_4BYTE(addr) ((addr) & 0xFFFFFFFC) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
544 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x sys/health.cpp 22 函数式宏需审查括号、副作用和类型安全 #define max(a, b, c) \ open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
545 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x sys/health.h 16 函数式宏需审查括号、副作用和类型安全 #define FLOAT_TO_Q16_16(x) ((q16_16_t)((x) * Q16_16_ONE)) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
546 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x sys/health.h 18 函数式宏需审查括号、副作用和类型安全 #define Q16_16_TO_FLOAT(x) ((float)(x) / Q16_16_ONE) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
547 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x sys/health.h 20 函数式宏需审查括号、副作用和类型安全 #define Q16_16_MUL(a, b) ((q16_16_t)(((int64_t)(a) * (b)) >> 16)) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
548 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x sys/health.h 22 函数式宏需审查括号、副作用和类型安全 #define Q16_16_SQUARE(x) Q16_16_MUL((x), (x)) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
549 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x sys/initial.cpp 23 函数式宏需审查括号、副作用和类型安全 #define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
550 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x sys/initial.cpp 26 函数式宏需审查括号、副作用和类型安全 #define OTA_DEBUG_PRINT(fmt, ...) ((void)0) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
551 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x sys/initial.cpp 32 函数式宏需审查括号、副作用和类型安全 #define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
552 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x sys/initial.cpp 35 函数式宏需审查括号、副作用和类型安全 #define EEP_DEBUG_PRINT(fmt, ...) ((void)0) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
553 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x sys/systick.cpp 47 函数式宏需审查括号、副作用和类型安全 #define SLEEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
554 info AUTO-MACRO-001 Advisory MISRA C:2012 Rule 20.x sys/systick.cpp 50 函数式宏需审查括号、副作用和类型安全 #define SLEEP_DEBUG_PRINT(fmt, ...) ((void)0) open_review 人工确认是否符合项目编码规范;如合理则记录偏离说明。
@@ -1,200 +0,0 @@
file,function,start_line,end_line,cyclomatic_complexity,risk
Algorithm/FOC.cpp,FOC_Controller::calibrate_cogging_tick,75,238,33,high
device/Can.cpp,CAN_transmiter::communication_check,1076,1300,27,high
main.cpp,do_task,120,205,17,high
Algorithm/FOC.cpp,FOC_Controller::setSVPWM_PhaseVoltage,392,490,15,medium
sys/flash.cpp,FlashEEPROM::writeFloat,308,383,12,medium
sys/health.cpp,ThermalController::update,35,94,12,medium
device/Can.cpp,can_loopback_test,597,665,11,medium
device/Can.cpp,CAN_transmiter::CANFD_AsyncSend,1448,1504,10,low
sys/flash.cpp,FlashEEPROM::read_saved_system_config,90,161,10,low
sys/flash.cpp,FlashEEPROM::write,237,300,10,low
sys/flash.cpp,FlashEEPROM::writeNodeId,657,717,10,low
sys/flash.cpp,move_app_data,928,1030,10,low
device/Can.cpp,canfd_loopback_test,534,589,9,low
sys/flash.cpp,FlashEEPROM::save_system_config,413,482,9,low
sys/flash.cpp,OTA_SET,792,879,9,low
sys/health.cpp,power_manage,113,149,9,low
device/ADC.cpp,sampler::get_current,194,219,8,low
sys/flash.cpp,FlashEEPROM::writeCRC,724,776,8,low
sys/systick.cpp,app_prepare_deep_sleep,244,298,8,low
device/Timer.cpp,TIMER2_IRQHandler,134,184,7,low
sys/initial.cpp,get_reset_cause,256,290,7,low
Algorithm/FOC.cpp,FOC_Controller::fast_voltage_check,603,642,6,low
device/Can.cpp,CAN_transmiter::CAN_AsyncSend,1399,1440,6,low
sys/flash.cpp,read_node_id_struct,521,558,6,low
sys/initial.cpp,OTA_initial,296,351,6,low
Algorithm/Filter.cpp,EncoderAngleKalman::update,162,200,5,low
device/Can.cpp,CAN_RX_ReadMetadata,800,824,5,low
device/Can.cpp,DMA0_Channel4_IRQHandler,1355,1383,5,low
sys/flash.cpp,FlashEEPROM::read,169,192,5,low
sys/flash.cpp,FlashEEPROM::readFloat,200,229,5,low
Algorithm/FOC.cpp,FOC_Controller::get_cogging_compensation,39,59,4,low
Algorithm/FOC.cpp,FOC_Controller::angle_control_with_velocity_limit,753,796,4,low
device/ADC.cpp,sampler::update_mcu_temp,238,252,4,low
device/ADC.cpp,sampler::update_drv_temp,257,272,4,low
device/ADC.cpp,sampler::update_vbus_voltage,297,311,4,low
device/Can.cpp,CANFD_NormalizeLength,735,744,4,low
device/Can.cpp,CAN_RX_QueuePushFromIsr,758,773,4,low
device/Can.cpp,CAN_RX_PumpFifo0,858,875,4,low
device/Can.cpp,CAN_TX_ServiceQueue,975,990,4,low
device/Can.cpp,CAN0_RX0_IRQHandler,1330,1349,4,low
device/ang_sensor.cpp,angle_sensor::update,263,288,4,low
main.cpp,main,60,86,4,low
sys/flash.cpp,write_node_id_struct,567,599,4,low
Algorithm/FOC.cpp,FOC_Controller::resume_from_thermal,517,523,3,low
Algorithm/FOC.cpp,FOC_Controller::drv_hold,532,541,3,low
Algorithm/FOC.cpp,FOC_Controller::current_control,725,744,3,low
device/ADC.cpp,sampler::update_current,277,292,3,low
device/Can.cpp,CAN_transmiter::load_node_id_from_flash,151,175,3,low
device/Can.cpp,CAN_transmiter::save_node_id_to_flash,185,200,3,low
device/Can.cpp,CAN_transmiter::check_silent_mode,270,278,3,low
device/Can.cpp,can_config,341,395,3,low
device/Can.cpp,can_loopback_init,480,526,3,low
device/Can.cpp,CANFD_DlcToLength,725,728,3,low
device/Can.cpp,CAN_TX_HasEmptyMailbox,789,793,3,low
device/Can.cpp,CAN_RX_StartPayloadDma,831,852,3,low
device/Can.cpp,CAN_TX_QueuePush,903,922,3,low
device/ang_sensor.cpp,angle_sensor::read_sensorAngle,236,257,3,low
sys/config.h,normalizeAngle360,426,430,3,low
sys/flash.cpp,FlashEEPROM::format,390,407,3,low
sys/flash.cpp,FlashEEPROM::readNodeId,627,646,3,low
sys/systick.cpp,systick_config,108,120,3,low
Algorithm/FOC.cpp,FOC_Controller::update_power,568,577,2,low
Algorithm/FOC.cpp,FOC_Controller::velocity_control,693,719,2,low
Algorithm/FOC.cpp,FOC_Controller::MIT_Mode,805,842,2,low
Algorithm/Filter.h,update,90,105,2,low
Algorithm/pid.cpp,PIDController::operator,23,53,2,low
device/ADC.cpp,sampler::init,140,166,2,low
device/Can.cpp,CAN_transmiter::is_message_for_me,115,118,2,low
device/Can.cpp,CAN_transmiter::set_node_id,135,140,2,low
device/Can.cpp,CAN_transmiter::dequeue_rx_message,236,243,2,low
device/Can.cpp,CAN_RX_QueuePop,882,896,2,low
device/Can.cpp,CAN_TX_QueuePeek,929,938,2,low
device/Can.cpp,CAN_TX_QueuePop,945,957,2,low
device/Can.cpp,CAN_TX_DisableTmeIfQueueEmpty,963,969,2,low
device/Can.cpp,CAN_transmiter::CANFD_all_Send,1025,1069,2,low
device/Can.cpp,CAN0_TX_IRQHandler,1509,1513,2,low
device/Can.h,enqueue_rx_message_from_isr,351,357,2,low
device/Timer.cpp,TIMER1_IRQHandler,281,285,2,low
device/Timer.cpp,Set_Pwm,296,303,2,low
sys/flash.cpp,FlashEEPROM::init,68,82,2,low
sys/flash.cpp,FlashEEPROM::read_angle,488,494,2,low
sys/flash.cpp,FlashEEPROM::eraseNodeId,605,620,2,low
sys/flash.cpp,jumpToBOOT,886,921,2,low
sys/initial.cpp,fputc,224,229,2,low
sys/systick.cpp,delay_1s,156,161,2,low
sys/systick.cpp,delay_1ms,169,174,2,low
sys/systick.cpp,delay_decrement,182,186,2,low
sys/systick.cpp,busy_task_enter,198,202,2,low
sys/systick.cpp,busy_task_exit,207,211,2,low
sys/systick.cpp,system_soft_reset,225,236,2,low
Algorithm/FOC.cpp,calibrate_zero_position,253,274,1,low
Algorithm/FOC.cpp,FOC_Controller::init,322,375,1,low
Algorithm/FOC.cpp,FOC_Controller::shut_down,496,500,1,low
Algorithm/FOC.cpp,FOC_Controller::shut_down_thermal,506,511,1,low
Algorithm/FOC.cpp,FOC_Controller::drv_stop,528,528,1,low
Algorithm/FOC.cpp,FOC_Controller::PWM_out,547,551,1,low
Algorithm/FOC.cpp,FOC_Controller::resume,558,563,1,low
Algorithm/FOC.cpp,FOC_Controller::velocity_open_loop,650,664,1,low
Algorithm/FOC.cpp,FOC_Controller::angle_control,672,685,1,low
Algorithm/FOC.h,update_pid_limits,226,231,1,low
Algorithm/Filter.cpp,medium_filter,63,72,1,low
Algorithm/Filter.cpp,kalman,93,93,1,low
Algorithm/Filter.cpp,EncoderVelocityKalman::update,101,108,1,low
Algorithm/Filter.cpp,EncoderVelocityKalman::getVelocity,114,114,1,low
Algorithm/Filter.cpp,EncoderVelocityKalman::setProcessNoise,121,123,1,low
Algorithm/Filter.cpp,EncoderVelocityKalman::setMeasurementNoise,130,132,1,low
Algorithm/Filter.cpp,last_update_count,149,153,1,low
Algorithm/Filter.cpp,EncoderAngleKalman::getAngle,206,206,1,low
Algorithm/Filter.cpp,EncoderAngleKalman::getVelocity,211,211,1,low
Algorithm/Filter.cpp,EncoderAngleKalman::setProcessNoise,218,220,1,low
Algorithm/Filter.cpp,EncoderAngleKalman::setMeasurementNoise,227,229,1,low
Algorithm/Filter.cpp,CurrentKalman::update,259,261,1,low
Algorithm/Filter.cpp,CurrentKalman::getCurrent,267,267,1,low
Algorithm/Filter.cpp,CurrentKalman::setProcessNoise,274,274,1,low
Algorithm/Filter.cpp,CurrentKalman::setMeasurementNoise,281,283,1,low
Algorithm/Filter.h,R,56,56,1,low
Algorithm/Filter.h,predict,63,66,1,low
Algorithm/Filter.h,update,74,83,1,low
Algorithm/Filter.h,getState,111,111,1,low
Algorithm/Filter.h,setProcessNoise,118,118,1,low
Algorithm/Filter.h,setMeasurementNoise,125,125,1,low
Algorithm/Filter.h,resetCovariance,132,132,1,low
Algorithm/Filter.h,getCovariance,138,138,1,low
Algorithm/Filter.h,getProcessNoise,144,144,1,low
Algorithm/Filter.h,init,187,191,1,low
Algorithm/Filter.h,getstate,239,239,1,low
Algorithm/Filter.h,init,247,254,1,low
Algorithm/Filter.h,init,296,300,1,low
Algorithm/pid.cpp,error_prev,20,20,1,low
Algorithm/pid.cpp,PIDController::set_PID,63,67,1,low
Algorithm/pid.cpp,PIDController::set_P,75,77,1,low
Algorithm/pid.cpp,PIDController::set_limit,85,85,1,low
Algorithm/pid.cpp,PIDController::reset,92,96,1,low
Algorithm/pid.cpp,PIDController::reset_integral,103,103,1,low
device/ADC.cpp,current_adc_to_ma,40,42,1,low
device/ADC.cpp,dma_config,50,75,1,low
device/ADC.cpp,adc_config,83,136,1,low
device/ADC.cpp,sampler::get_mcu_temp,172,174,1,low
device/ADC.cpp,sampler::get_drv_temp,183,185,1,low
device/ADC.cpp,sampler::get_vbus_voltage,228,230,1,low
device/Can.cpp,CAN_transmiter::build_can_id,102,104,1,low
device/Can.cpp,CAN_transmiter::get_node_id,126,126,1,low
device/Can.cpp,CAN_transmiter::is_rx_buffer_full,212,214,1,low
device/Can.cpp,CAN_transmiter::is_rx_buffer_empty,223,225,1,low
device/Can.cpp,CAN_transmiter::enter_silent_mode,256,260,1,low
device/Can.cpp,CAN_transmiter::is_in_silent_mode,265,265,1,low
device/Can.cpp,can_gpio_init,286,302,1,low
device/Can.cpp,can_dma_init,310,333,1,low
device/Can.cpp,canfd_config,403,472,1,low
device/Can.cpp,CAN_transmiter::init,671,701,1,low
device/Can.cpp,CAN_EnterCritical,707,711,1,low
device/Can.cpp,CAN_ExitCritical,718,718,1,low
device/Can.cpp,CANFD_WordCount,751,751,1,low
device/Can.cpp,CAN_RX_ReleaseFifo0,775,775,1,low
device/Can.cpp,CAN_RX_Fifo0PendingCount,781,783,1,low
device/Can.cpp,CAN_transmiter::update,995,1018,1,low
device/Can.cpp,CAN_transmiter::CAN_Sleep,1307,1311,1,low
device/Can.cpp,CAN_transmiter::CAN_Wakeup,1318,1324,1,low
device/Can.cpp,DMA0_Channel5_IRQHandler,1389,1391,1,low
device/Can.h,pack_u16_to_bytes,36,39,1,low
device/Can.h,unpack_bytes_to_short,64,67,1,low
device/Can.h,unpack_bytes_to_u16,76,79,1,low
device/Can.h,unpack_bytes_to_float,88,95,1,low
device/Timer.cpp,nvic_config,63,70,1,low
device/Timer.cpp,TIMER2_config,78,111,1,low
device/Timer.cpp,User_timer_init,117,122,1,low
device/Timer.cpp,timer1_gpio_config,189,208,1,low
device/Timer.cpp,timer1_pwm_config,213,274,1,low
device/Timer.cpp,Set_3Pwm,314,319,1,low
device/ang_sensor.cpp,spi_dma_init,50,95,1,low
device/ang_sensor.cpp,KTH7823_gpio_init,166,184,1,low
device/ang_sensor.cpp,KTH7823_spi_init,191,208,1,low
device/ang_sensor.cpp,angle_sensor::init,214,219,1,low
device/ang_sensor.cpp,angle_sensor::angle_set,226,230,1,low
device/ang_sensor.cpp,angle_sensor::getAngle,294,296,1,low
device/ang_sensor.cpp,angle_sensor::getRawAngle,302,302,1,low
device/ang_sensor.cpp,angle_sensor::getcurrent_sensorangle,308,310,1,low
device/motor.cpp,motor_init,16,31,1,low
device/motor.cpp,motor_reset,36,40,1,low
device/motor.cpp,motor_sleep,45,49,1,low
device/motor.cpp,motor_resume,54,58,1,low
main.cpp,hardware_init,92,113,1,low
sys/flash.cpp,write_ADDRESS,48,57,1,low
sys/flash.cpp,calculate_node_id_crc,506,512,1,low
sys/health.cpp,angsens_MG_check,99,103,1,low
sys/health.h,recoveryRate,53,53,1,low
sys/health.h,reset,63,66,1,low
sys/initial.cpp,VersionManager::getSoftwareVersion,55,57,1,low
sys/initial.cpp,VersionManager::getHardwareVersion,63,65,1,low
sys/initial.cpp,VersionManager::getBootVersion,71,73,1,low
sys/initial.cpp,VersionManager::sendVersionInfoViaCan,139,179,1,low
sys/initial.cpp,VersionManager::printVersions,185,197,1,low
sys/initial.cpp,USART0_init,204,207,1,low
sys/initial.cpp,watchdog_init,215,222,1,low
sys/initial.cpp,unused_pin_init,235,248,1,low
sys/systick.cpp,dwt_init,82,90,1,low
sys/systick.cpp,get_systick_ms,98,100,1,low
sys/systick.cpp,idle_task_count,191,193,1,low
sys/systick.cpp,get_cpu_usage,217,217,1,low
1 file function start_line end_line cyclomatic_complexity risk
2 Algorithm/FOC.cpp FOC_Controller::calibrate_cogging_tick 75 238 33 high
3 device/Can.cpp CAN_transmiter::communication_check 1076 1300 27 high
4 main.cpp do_task 120 205 17 high
5 Algorithm/FOC.cpp FOC_Controller::setSVPWM_PhaseVoltage 392 490 15 medium
6 sys/flash.cpp FlashEEPROM::writeFloat 308 383 12 medium
7 sys/health.cpp ThermalController::update 35 94 12 medium
8 device/Can.cpp can_loopback_test 597 665 11 medium
9 device/Can.cpp CAN_transmiter::CANFD_AsyncSend 1448 1504 10 low
10 sys/flash.cpp FlashEEPROM::read_saved_system_config 90 161 10 low
11 sys/flash.cpp FlashEEPROM::write 237 300 10 low
12 sys/flash.cpp FlashEEPROM::writeNodeId 657 717 10 low
13 sys/flash.cpp move_app_data 928 1030 10 low
14 device/Can.cpp canfd_loopback_test 534 589 9 low
15 sys/flash.cpp FlashEEPROM::save_system_config 413 482 9 low
16 sys/flash.cpp OTA_SET 792 879 9 low
17 sys/health.cpp power_manage 113 149 9 low
18 device/ADC.cpp sampler::get_current 194 219 8 low
19 sys/flash.cpp FlashEEPROM::writeCRC 724 776 8 low
20 sys/systick.cpp app_prepare_deep_sleep 244 298 8 low
21 device/Timer.cpp TIMER2_IRQHandler 134 184 7 low
22 sys/initial.cpp get_reset_cause 256 290 7 low
23 Algorithm/FOC.cpp FOC_Controller::fast_voltage_check 603 642 6 low
24 device/Can.cpp CAN_transmiter::CAN_AsyncSend 1399 1440 6 low
25 sys/flash.cpp read_node_id_struct 521 558 6 low
26 sys/initial.cpp OTA_initial 296 351 6 low
27 Algorithm/Filter.cpp EncoderAngleKalman::update 162 200 5 low
28 device/Can.cpp CAN_RX_ReadMetadata 800 824 5 low
29 device/Can.cpp DMA0_Channel4_IRQHandler 1355 1383 5 low
30 sys/flash.cpp FlashEEPROM::read 169 192 5 low
31 sys/flash.cpp FlashEEPROM::readFloat 200 229 5 low
32 Algorithm/FOC.cpp FOC_Controller::get_cogging_compensation 39 59 4 low
33 Algorithm/FOC.cpp FOC_Controller::angle_control_with_velocity_limit 753 796 4 low
34 device/ADC.cpp sampler::update_mcu_temp 238 252 4 low
35 device/ADC.cpp sampler::update_drv_temp 257 272 4 low
36 device/ADC.cpp sampler::update_vbus_voltage 297 311 4 low
37 device/Can.cpp CANFD_NormalizeLength 735 744 4 low
38 device/Can.cpp CAN_RX_QueuePushFromIsr 758 773 4 low
39 device/Can.cpp CAN_RX_PumpFifo0 858 875 4 low
40 device/Can.cpp CAN_TX_ServiceQueue 975 990 4 low
41 device/Can.cpp CAN0_RX0_IRQHandler 1330 1349 4 low
42 device/ang_sensor.cpp angle_sensor::update 263 288 4 low
43 main.cpp main 60 86 4 low
44 sys/flash.cpp write_node_id_struct 567 599 4 low
45 Algorithm/FOC.cpp FOC_Controller::resume_from_thermal 517 523 3 low
46 Algorithm/FOC.cpp FOC_Controller::drv_hold 532 541 3 low
47 Algorithm/FOC.cpp FOC_Controller::current_control 725 744 3 low
48 device/ADC.cpp sampler::update_current 277 292 3 low
49 device/Can.cpp CAN_transmiter::load_node_id_from_flash 151 175 3 low
50 device/Can.cpp CAN_transmiter::save_node_id_to_flash 185 200 3 low
51 device/Can.cpp CAN_transmiter::check_silent_mode 270 278 3 low
52 device/Can.cpp can_config 341 395 3 low
53 device/Can.cpp can_loopback_init 480 526 3 low
54 device/Can.cpp CANFD_DlcToLength 725 728 3 low
55 device/Can.cpp CAN_TX_HasEmptyMailbox 789 793 3 low
56 device/Can.cpp CAN_RX_StartPayloadDma 831 852 3 low
57 device/Can.cpp CAN_TX_QueuePush 903 922 3 low
58 device/ang_sensor.cpp angle_sensor::read_sensorAngle 236 257 3 low
59 sys/config.h normalizeAngle360 426 430 3 low
60 sys/flash.cpp FlashEEPROM::format 390 407 3 low
61 sys/flash.cpp FlashEEPROM::readNodeId 627 646 3 low
62 sys/systick.cpp systick_config 108 120 3 low
63 Algorithm/FOC.cpp FOC_Controller::update_power 568 577 2 low
64 Algorithm/FOC.cpp FOC_Controller::velocity_control 693 719 2 low
65 Algorithm/FOC.cpp FOC_Controller::MIT_Mode 805 842 2 low
66 Algorithm/Filter.h update 90 105 2 low
67 Algorithm/pid.cpp PIDController::operator 23 53 2 low
68 device/ADC.cpp sampler::init 140 166 2 low
69 device/Can.cpp CAN_transmiter::is_message_for_me 115 118 2 low
70 device/Can.cpp CAN_transmiter::set_node_id 135 140 2 low
71 device/Can.cpp CAN_transmiter::dequeue_rx_message 236 243 2 low
72 device/Can.cpp CAN_RX_QueuePop 882 896 2 low
73 device/Can.cpp CAN_TX_QueuePeek 929 938 2 low
74 device/Can.cpp CAN_TX_QueuePop 945 957 2 low
75 device/Can.cpp CAN_TX_DisableTmeIfQueueEmpty 963 969 2 low
76 device/Can.cpp CAN_transmiter::CANFD_all_Send 1025 1069 2 low
77 device/Can.cpp CAN0_TX_IRQHandler 1509 1513 2 low
78 device/Can.h enqueue_rx_message_from_isr 351 357 2 low
79 device/Timer.cpp TIMER1_IRQHandler 281 285 2 low
80 device/Timer.cpp Set_Pwm 296 303 2 low
81 sys/flash.cpp FlashEEPROM::init 68 82 2 low
82 sys/flash.cpp FlashEEPROM::read_angle 488 494 2 low
83 sys/flash.cpp FlashEEPROM::eraseNodeId 605 620 2 low
84 sys/flash.cpp jumpToBOOT 886 921 2 low
85 sys/initial.cpp fputc 224 229 2 low
86 sys/systick.cpp delay_1s 156 161 2 low
87 sys/systick.cpp delay_1ms 169 174 2 low
88 sys/systick.cpp delay_decrement 182 186 2 low
89 sys/systick.cpp busy_task_enter 198 202 2 low
90 sys/systick.cpp busy_task_exit 207 211 2 low
91 sys/systick.cpp system_soft_reset 225 236 2 low
92 Algorithm/FOC.cpp calibrate_zero_position 253 274 1 low
93 Algorithm/FOC.cpp FOC_Controller::init 322 375 1 low
94 Algorithm/FOC.cpp FOC_Controller::shut_down 496 500 1 low
95 Algorithm/FOC.cpp FOC_Controller::shut_down_thermal 506 511 1 low
96 Algorithm/FOC.cpp FOC_Controller::drv_stop 528 528 1 low
97 Algorithm/FOC.cpp FOC_Controller::PWM_out 547 551 1 low
98 Algorithm/FOC.cpp FOC_Controller::resume 558 563 1 low
99 Algorithm/FOC.cpp FOC_Controller::velocity_open_loop 650 664 1 low
100 Algorithm/FOC.cpp FOC_Controller::angle_control 672 685 1 low
101 Algorithm/FOC.h update_pid_limits 226 231 1 low
102 Algorithm/Filter.cpp medium_filter 63 72 1 low
103 Algorithm/Filter.cpp kalman 93 93 1 low
104 Algorithm/Filter.cpp EncoderVelocityKalman::update 101 108 1 low
105 Algorithm/Filter.cpp EncoderVelocityKalman::getVelocity 114 114 1 low
106 Algorithm/Filter.cpp EncoderVelocityKalman::setProcessNoise 121 123 1 low
107 Algorithm/Filter.cpp EncoderVelocityKalman::setMeasurementNoise 130 132 1 low
108 Algorithm/Filter.cpp last_update_count 149 153 1 low
109 Algorithm/Filter.cpp EncoderAngleKalman::getAngle 206 206 1 low
110 Algorithm/Filter.cpp EncoderAngleKalman::getVelocity 211 211 1 low
111 Algorithm/Filter.cpp EncoderAngleKalman::setProcessNoise 218 220 1 low
112 Algorithm/Filter.cpp EncoderAngleKalman::setMeasurementNoise 227 229 1 low
113 Algorithm/Filter.cpp CurrentKalman::update 259 261 1 low
114 Algorithm/Filter.cpp CurrentKalman::getCurrent 267 267 1 low
115 Algorithm/Filter.cpp CurrentKalman::setProcessNoise 274 274 1 low
116 Algorithm/Filter.cpp CurrentKalman::setMeasurementNoise 281 283 1 low
117 Algorithm/Filter.h R 56 56 1 low
118 Algorithm/Filter.h predict 63 66 1 low
119 Algorithm/Filter.h update 74 83 1 low
120 Algorithm/Filter.h getState 111 111 1 low
121 Algorithm/Filter.h setProcessNoise 118 118 1 low
122 Algorithm/Filter.h setMeasurementNoise 125 125 1 low
123 Algorithm/Filter.h resetCovariance 132 132 1 low
124 Algorithm/Filter.h getCovariance 138 138 1 low
125 Algorithm/Filter.h getProcessNoise 144 144 1 low
126 Algorithm/Filter.h init 187 191 1 low
127 Algorithm/Filter.h getstate 239 239 1 low
128 Algorithm/Filter.h init 247 254 1 low
129 Algorithm/Filter.h init 296 300 1 low
130 Algorithm/pid.cpp error_prev 20 20 1 low
131 Algorithm/pid.cpp PIDController::set_PID 63 67 1 low
132 Algorithm/pid.cpp PIDController::set_P 75 77 1 low
133 Algorithm/pid.cpp PIDController::set_limit 85 85 1 low
134 Algorithm/pid.cpp PIDController::reset 92 96 1 low
135 Algorithm/pid.cpp PIDController::reset_integral 103 103 1 low
136 device/ADC.cpp current_adc_to_ma 40 42 1 low
137 device/ADC.cpp dma_config 50 75 1 low
138 device/ADC.cpp adc_config 83 136 1 low
139 device/ADC.cpp sampler::get_mcu_temp 172 174 1 low
140 device/ADC.cpp sampler::get_drv_temp 183 185 1 low
141 device/ADC.cpp sampler::get_vbus_voltage 228 230 1 low
142 device/Can.cpp CAN_transmiter::build_can_id 102 104 1 low
143 device/Can.cpp CAN_transmiter::get_node_id 126 126 1 low
144 device/Can.cpp CAN_transmiter::is_rx_buffer_full 212 214 1 low
145 device/Can.cpp CAN_transmiter::is_rx_buffer_empty 223 225 1 low
146 device/Can.cpp CAN_transmiter::enter_silent_mode 256 260 1 low
147 device/Can.cpp CAN_transmiter::is_in_silent_mode 265 265 1 low
148 device/Can.cpp can_gpio_init 286 302 1 low
149 device/Can.cpp can_dma_init 310 333 1 low
150 device/Can.cpp canfd_config 403 472 1 low
151 device/Can.cpp CAN_transmiter::init 671 701 1 low
152 device/Can.cpp CAN_EnterCritical 707 711 1 low
153 device/Can.cpp CAN_ExitCritical 718 718 1 low
154 device/Can.cpp CANFD_WordCount 751 751 1 low
155 device/Can.cpp CAN_RX_ReleaseFifo0 775 775 1 low
156 device/Can.cpp CAN_RX_Fifo0PendingCount 781 783 1 low
157 device/Can.cpp CAN_transmiter::update 995 1018 1 low
158 device/Can.cpp CAN_transmiter::CAN_Sleep 1307 1311 1 low
159 device/Can.cpp CAN_transmiter::CAN_Wakeup 1318 1324 1 low
160 device/Can.cpp DMA0_Channel5_IRQHandler 1389 1391 1 low
161 device/Can.h pack_u16_to_bytes 36 39 1 low
162 device/Can.h unpack_bytes_to_short 64 67 1 low
163 device/Can.h unpack_bytes_to_u16 76 79 1 low
164 device/Can.h unpack_bytes_to_float 88 95 1 low
165 device/Timer.cpp nvic_config 63 70 1 low
166 device/Timer.cpp TIMER2_config 78 111 1 low
167 device/Timer.cpp User_timer_init 117 122 1 low
168 device/Timer.cpp timer1_gpio_config 189 208 1 low
169 device/Timer.cpp timer1_pwm_config 213 274 1 low
170 device/Timer.cpp Set_3Pwm 314 319 1 low
171 device/ang_sensor.cpp spi_dma_init 50 95 1 low
172 device/ang_sensor.cpp KTH7823_gpio_init 166 184 1 low
173 device/ang_sensor.cpp KTH7823_spi_init 191 208 1 low
174 device/ang_sensor.cpp angle_sensor::init 214 219 1 low
175 device/ang_sensor.cpp angle_sensor::angle_set 226 230 1 low
176 device/ang_sensor.cpp angle_sensor::getAngle 294 296 1 low
177 device/ang_sensor.cpp angle_sensor::getRawAngle 302 302 1 low
178 device/ang_sensor.cpp angle_sensor::getcurrent_sensorangle 308 310 1 low
179 device/motor.cpp motor_init 16 31 1 low
180 device/motor.cpp motor_reset 36 40 1 low
181 device/motor.cpp motor_sleep 45 49 1 low
182 device/motor.cpp motor_resume 54 58 1 low
183 main.cpp hardware_init 92 113 1 low
184 sys/flash.cpp write_ADDRESS 48 57 1 low
185 sys/flash.cpp calculate_node_id_crc 506 512 1 low
186 sys/health.cpp angsens_MG_check 99 103 1 low
187 sys/health.h recoveryRate 53 53 1 low
188 sys/health.h reset 63 66 1 low
189 sys/initial.cpp VersionManager::getSoftwareVersion 55 57 1 low
190 sys/initial.cpp VersionManager::getHardwareVersion 63 65 1 low
191 sys/initial.cpp VersionManager::getBootVersion 71 73 1 low
192 sys/initial.cpp VersionManager::sendVersionInfoViaCan 139 179 1 low
193 sys/initial.cpp VersionManager::printVersions 185 197 1 low
194 sys/initial.cpp USART0_init 204 207 1 low
195 sys/initial.cpp watchdog_init 215 222 1 low
196 sys/initial.cpp unused_pin_init 235 248 1 low
197 sys/systick.cpp dwt_init 82 90 1 low
198 sys/systick.cpp get_systick_ms 98 100 1 low
199 sys/systick.cpp idle_task_count 191 193 1 low
200 sys/systick.cpp get_cpu_usage 217 217 1 low
@@ -1,46 +0,0 @@
# ROBOT_V2 APP 静态测试优先级清单
基于业务代码静态测试包生成;当前不要求改代码,因此以下是评审/偏离说明优先级。
- **P1 复杂度超阈值** `Algorithm/FOC.cpp:75` `FOC_Controller::calibrate_cogging_tick`
- CC=33,需人工评审分支/异常路径;后续可加单元测试或拆分。
- **P1 复杂度超阈值** `device/Can.cpp:1076` `CAN_transmiter::communication_check`
- CC=27,需人工评审分支/异常路径;后续可加单元测试或拆分。
- **P1 复杂度超阈值** `main.cpp:120` `do_task`
- CC=17,需人工评审分支/异常路径;后续可加单元测试或拆分。
- **P2 continue 偏离候选** `device/Can.cpp:1124`
- 确认是否可重构;若暂不改逻辑,形成偏离说明。
- **P2 continue 偏离候选** `device/Can.cpp:1194`
- 确认是否可重构;若暂不改逻辑,形成偏离说明。
- **P2 continue 偏离候选** `device/Can.cpp:1199`
- 确认是否可重构;若暂不改逻辑,形成偏离说明。
- **P2 continue 偏离候选** `main.cpp:80`
- 确认是否可重构;若暂不改逻辑,形成偏离说明。
- **P2 continue 偏离候选** `sys/flash.cpp:693`
- 确认是否可重构;若暂不改逻辑,形成偏离说明。
- **P2 continue 偏离候选** `sys/systick.cpp:264`
- 确认是否可重构;若暂不改逻辑,形成偏离说明。
- **P2 调试输出隔离** `Algorithm/FOC.cpp`
- 21 处 printf/snprint 类调用;确认宏隔离、量产关闭、实时性影响。
- **P2 调试输出隔离** `device/Can.cpp`
- 1 处 printf/snprint 类调用;确认宏隔离、量产关闭、实时性影响。
- **P2 调试输出隔离** `device/ang_sensor.cpp`
- 1 处 printf/snprint 类调用;确认宏隔离、量产关闭、实时性影响。
- **P2 调试输出隔离** `device/motor.cpp`
- 1 处 printf/snprint 类调用;确认宏隔离、量产关闭、实时性影响。
- **P2 调试输出隔离** `main.cpp`
- 1 处 printf/snprint 类调用;确认宏隔离、量产关闭、实时性影响。
- **P2 调试输出隔离** `sys/flash.cpp`
- 2 处 printf/snprint 类调用;确认宏隔离、量产关闭、实时性影响。
- **P2 调试输出隔离** `sys/initial.cpp`
- 3 处 printf/snprint 类调用;确认宏隔离、量产关闭、实时性影响。
- **P2 调试输出隔离** `sys/systick.cpp`
- 1 处 printf/snprint 类调用;确认宏隔离、量产关闭、实时性影响。
- **P3 平台/中断指令偏离候选** `device/Can.cpp`
- 1 处关中断/开中断/WFI/汇编;确认临界区长度和安全机制。
- **P3 平台/中断指令偏离候选** `main.cpp`
- 3 处关中断/开中断/WFI/汇编;确认临界区长度和安全机制。
- **P3 平台/中断指令偏离候选** `sys/flash.cpp`
- 5 处关中断/开中断/WFI/汇编;确认临界区长度和安全机制。
- **P3 平台/中断指令偏离候选** `sys/systick.cpp`
- 1 处关中断/开中断/WFI/汇编;确认临界区长度和安全机制。
File diff suppressed because one or more lines are too long
@@ -1,143 +0,0 @@
# ROBOT_V2 APP 业务代码汽车电子静态测试包
## 范围
- 根目录: `/workzone/ROBOT_V2/APP/Robot_V2`
- 包含: `Algorithm/`, `device/`, `sys/`, `main.cpp`, `main.h`
- 排除: `RTE/` 第三方 GD32 库、工程生成文件、临时目录
- 方式: 只读扫描,不修改代码
## 工具环境限制
- 当前环境未安装 QAC / Polyspace / Coverity / PC-lint / cppcheck / 交叉编译器。
- 本报告为汽车电子规则初筛和评审入口,不等同正式 MISRA/AUTOSAR 合规报告。
## 总览
- 扫描文件数: 29
- 总行数: 8159
- 非空代码行估算: 4272
- error: 0
- warning: 40
- info: 513
## 规则命中统计
- AUTO-ARRAY-001: 251
- AUTO-ASM-001: 10
- AUTO-CAST-001: 223
- AUTO-CTRL-002: 6
- AUTO-FUNC-002: 31
- AUTO-MACRO-001: 29
- AUTO-MET-001: 3
## 高优先级结论
- 未发现动态内存、goto、高风险 C 字符串/输入函数等硬性高风险项。
- 复杂度超过 15 的函数需要人工评审或后续单元测试加强。
- `continue`、调试输出、关中断/开中断属于偏离说明候选。
## Top 圈复杂度
- 33 `Algorithm/FOC.cpp:75-238` `FOC_Controller::calibrate_cogging_tick` risk=high
- 27 `device/Can.cpp:1076-1300` `CAN_transmiter::communication_check` risk=high
- 17 `main.cpp:120-205` `do_task` risk=high
- 15 `Algorithm/FOC.cpp:392-490` `FOC_Controller::setSVPWM_PhaseVoltage` risk=medium
- 12 `sys/flash.cpp:308-383` `FlashEEPROM::writeFloat` risk=medium
- 12 `sys/health.cpp:35-94` `ThermalController::update` risk=medium
- 11 `device/Can.cpp:597-665` `can_loopback_test` risk=medium
- 10 `device/Can.cpp:1448-1504` `CAN_transmiter::CANFD_AsyncSend` risk=low
- 10 `sys/flash.cpp:90-161` `FlashEEPROM::read_saved_system_config` risk=low
- 10 `sys/flash.cpp:237-300` `FlashEEPROM::write` risk=low
- 10 `sys/flash.cpp:657-717` `FlashEEPROM::writeNodeId` risk=low
- 10 `sys/flash.cpp:928-1030` `move_app_data` risk=low
- 9 `device/Can.cpp:534-589` `canfd_loopback_test` risk=low
- 9 `sys/flash.cpp:413-482` `FlashEEPROM::save_system_config` risk=low
- 9 `sys/flash.cpp:792-879` `OTA_SET` risk=low
- 9 `sys/health.cpp:113-149` `power_manage` risk=low
- 8 `device/ADC.cpp:194-219` `sampler::get_current` risk=low
- 8 `sys/flash.cpp:724-776` `FlashEEPROM::writeCRC` risk=low
- 8 `sys/systick.cpp:244-298` `app_prepare_deep_sleep` risk=low
- 7 `device/Timer.cpp:134-184` `TIMER2_IRQHandler` risk=low
## Warning 明细
- [AUTO-CTRL-002] `device/Can.cpp:1124` continue 需避免或说明偏离
- `continue;`
- [AUTO-CTRL-002] `device/Can.cpp:1194` continue 需避免或说明偏离
- `continue;`
- [AUTO-CTRL-002] `device/Can.cpp:1199` continue 需避免或说明偏离
- `continue;`
- [AUTO-CTRL-002] `main.cpp:80` continue 需避免或说明偏离
- `continue;`
- [AUTO-CTRL-002] `sys/flash.cpp:693` continue 需避免或说明偏离
- `continue;`
- [AUTO-CTRL-002] `sys/systick.cpp:264` continue 需避免或说明偏离
- `continue;`
- [AUTO-FUNC-002] `Algorithm/FOC.cpp:100` printf/格式化输出需确认调试隔离和实时性影响
- `printf("");`
- [AUTO-FUNC-002] `Algorithm/FOC.cpp:161` printf/格式化输出需确认调试隔离和实时性影响
- `printf("",`
- [AUTO-FUNC-002] `Algorithm/FOC.cpp:195` printf/格式化输出需确认调试隔离和实时性影响
- `printf("");`
- [AUTO-FUNC-002] `Algorithm/FOC.cpp:198` printf/格式化输出需确认调试隔离和实时性影响
- `printf("", angle_deg, cogging_table[i]);`
- [AUTO-FUNC-002] `Algorithm/FOC.cpp:203` printf/格式化输出需确认调试隔离和实时性影响
- `printf("");`
- [AUTO-FUNC-002] `Algorithm/FOC.cpp:206` printf/格式化输出需确认调试隔离和实时性影响
- `printf("", angle_deg, cogging_table_rev[i]);`
- [AUTO-FUNC-002] `Algorithm/FOC.cpp:211` printf/格式化输出需确认调试隔离和实时性影响
- `printf("");`
- [AUTO-FUNC-002] `Algorithm/FOC.cpp:212` printf/格式化输出需确认调试隔离和实时性影响
- `printf("");`
- [AUTO-FUNC-002] `Algorithm/FOC.cpp:214` printf/格式化输出需确认调试隔离和实时性影响
- `if (i % 8 == 0) printf("");`
- [AUTO-FUNC-002] `Algorithm/FOC.cpp:215` printf/格式化输出需确认调试隔离和实时性影响
- `printf("", cogging_table[i]);`
- [AUTO-FUNC-002] `Algorithm/FOC.cpp:216` printf/格式化输出需确认调试隔离和实时性影响
- `if (i < COGGING_TABLE_SIZE - 1) printf("");`
- [AUTO-FUNC-002] `Algorithm/FOC.cpp:217` printf/格式化输出需确认调试隔离和实时性影响
- `if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf("");`
- [AUTO-FUNC-002] `Algorithm/FOC.cpp:220` printf/格式化输出需确认调试隔离和实时性影响
- `printf("");`
- [AUTO-FUNC-002] `Algorithm/FOC.cpp:223` printf/格式化输出需确认调试隔离和实时性影响
- `printf("");`
- [AUTO-FUNC-002] `Algorithm/FOC.cpp:224` printf/格式化输出需确认调试隔离和实时性影响
- `printf("");`
- [AUTO-FUNC-002] `Algorithm/FOC.cpp:226` printf/格式化输出需确认调试隔离和实时性影响
- `if (i % 8 == 0) printf("");`
- [AUTO-FUNC-002] `Algorithm/FOC.cpp:227` printf/格式化输出需确认调试隔离和实时性影响
- `printf("", cogging_table_rev[i]);`
- [AUTO-FUNC-002] `Algorithm/FOC.cpp:228` printf/格式化输出需确认调试隔离和实时性影响
- `if (i < COGGING_TABLE_SIZE - 1) printf("");`
- [AUTO-FUNC-002] `Algorithm/FOC.cpp:229` printf/格式化输出需确认调试隔离和实时性影响
- `if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf("");`
- [AUTO-FUNC-002] `Algorithm/FOC.cpp:232` printf/格式化输出需确认调试隔离和实时性影响
- `printf("");`
- [AUTO-FUNC-002] `Algorithm/FOC.cpp:234` printf/格式化输出需确认调试隔离和实时性影响
- `printf("");`
- [AUTO-FUNC-002] `device/Can.cpp:30` printf/格式化输出需确认调试隔离和实时性影响
- `#define CAN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)`
- [AUTO-FUNC-002] `device/ang_sensor.cpp:22` printf/格式化输出需确认调试隔离和实时性影响
- `#define ANG_SENS_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)`
- [AUTO-FUNC-002] `device/motor.cpp:38` printf/格式化输出需确认调试隔离和实时性影响
- `printf("");`
- [AUTO-FUNC-002] `main.cpp:22` printf/格式化输出需确认调试隔离和实时性影响
- `#define MAIN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)`
- [AUTO-FUNC-002] `sys/flash.cpp:22` printf/格式化输出需确认调试隔离和实时性影响
- `#define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)`
- [AUTO-FUNC-002] `sys/flash.cpp:31` printf/格式化输出需确认调试隔离和实时性影响
- `#define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)`
- [AUTO-FUNC-002] `sys/initial.cpp:23` printf/格式化输出需确认调试隔离和实时性影响
- `#define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)`
- [AUTO-FUNC-002] `sys/initial.cpp:32` printf/格式化输出需确认调试隔离和实时性影响
- `#define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)`
- [AUTO-FUNC-002] `sys/initial.cpp:129` printf/格式化输出需确认调试隔离和实时性影响
- `snprintf(buffer, bufSize, "", version.major, version.minor,`
- [AUTO-FUNC-002] `sys/systick.cpp:47` printf/格式化输出需确认调试隔离和实时性影响
- `#define SLEEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)`
- [AUTO-MET-001] `Algorithm/FOC.cpp:75` 圈复杂度 33 超过建议阈值 15
- `FOC_Controller::calibrate_cogging_tick`
- [AUTO-MET-001] `device/Can.cpp:1076` 圈复杂度 27 超过建议阈值 15
- `CAN_transmiter::communication_check`
- [AUTO-MET-001] `main.cpp:120` 圈复杂度 17 超过建议阈值 15
- `do_task`
## 输出文件
- `report.md`: 本摘要
- `findings.csv`: 规则命中明细
- `metrics.csv`: 函数复杂度
- `files.csv`: 文件范围与行数/hash
File diff suppressed because one or more lines are too long
@@ -1,262 +0,0 @@
{
"version": 1,
"storageKey": "robot_v2_app_static_report_checklist_v1",
"report": "ROBOT_V2_APP_static_test_automotive_business_20260523",
"updatedAt": "2026-05-23T16:25:00.825Z",
"checked": {
"main-3117cb79205a": true,
"main-527272d22f5f": true,
"main-5ceb0ceaf414": true,
"main-0d853312a4fb": true,
"main-d5c0067cb8c9": true,
"main-b3497022fd57": true,
"main-fb0f6eef33ee": true,
"main-e8d34916ef43": true,
"main-a0e7f44822d5": true,
"main-e8581b775b86": true,
"main-a61db2bcd87e": true,
"main-1bfba6db3552": true,
"main-29a13abcf59d": true,
"main-cc75af885325": true,
"main-2665cbd3f00e": true,
"main-843a028f8696": true,
"main-4117283cf3e7": true,
"main-344a33bfcf2b": true,
"main-efc8f847b950": true,
"main-92473d3ec470": true,
"main-dca22002f30a": true,
"main-668e5afb0750": true,
"main-778a368d79d3": true,
"main-c8ae670ed482": true,
"main-44e5b708ced1": true,
"main-eecf1f323336": true,
"main-cd72d3b37996": true,
"supp-091ea0cb4563": true,
"supp-b251edcd19a4": true,
"supp-72780618de89": true,
"supp-428c4d2d4361": true,
"supp-5bc6c7028f31": true,
"supp-5f30c71b560c": true,
"supp-ec236e967cf5": true,
"supp-6c83765299a8": true,
"supp-a3f3ec52d5c9": true,
"supp-dba1f5ee2bac": true,
"supp-a00f50fd7e91": true,
"supp-cdd0a4a9b8e7": true,
"supp-fc1eb40a78e5": true,
"supp-7b0c20306d7f": true,
"supp-955e70ca702a": true,
"supp-26a75340d328": true,
"supp-b684bf6daa82": true,
"supp-cfb32941b86c": true,
"supp-4db7e8721b38": true,
"supp-18273d7ff405": true,
"supp-a0b262ee0d7f": true,
"supp-c8fcf2049028": true,
"supp-e82e3e95d9c3": true,
"supp-9631705a92be": true,
"supp-0ba6f0a3cbb6": true,
"supp-bfd02b0e6428": true,
"supp-d6a6beb85f8e": true,
"supp-54f7152d525f": true,
"supp-57ed4b5aeb01": true,
"supp-97688039a586": true,
"supp-5f838841063f": true,
"supp-a2c7b377ff4e": true,
"supp-296377880c63": true,
"supp-b038358270db": true,
"supp-6c02c2686174": true,
"supp-038975fb0589": true,
"supp-ddcf3c5981d6": true,
"supp-1f9a0ad0330e": true,
"supp-eb8c172d8fa7": true,
"supp-415c4b510e1b": true,
"supp-5f5afb443061": true,
"supp-52e7dfa0bd8a": true,
"supp-7eca8869fe8d": true,
"supp-cd1b03277370": true,
"supp-9e0e93117b39": true,
"supp-476cb8529804": true,
"supp-9d2d2a633571": true,
"supp-c843a8b60fa0": true,
"supp-a372ad7cc25f": true,
"supp-d47f02ccdc6f": true,
"supp-02752fc39463": true,
"supp-fba82de9f335": true,
"supp-b464d624b89c": true,
"supp-177d79286976": true,
"supp-4b1489b395b5": true,
"supp-fd0c805a01cb": true,
"supp-4f9e1ff5f977": true,
"supp-5bf3d6123aea": true,
"supp-378c2eadddd6": true,
"supp-20a5d232f926": true,
"supp-f3b55e35f9d0": true,
"supp-1acaf41cfdae": true,
"supp-fbc927cfd61d": true,
"supp-b187de9b2c71": true,
"supp-d7851021e615": true,
"supp-7265bf9ffeb6": true,
"supp-262745c8fde4": true,
"supp-fb700e5b9217": true,
"supp-09cf228fa618": true,
"supp-8f1a0be480db": true,
"supp-2ec9227ef7dd": true,
"supp-674252936cac": true,
"supp-7c9b992c78be": true,
"supp-f938632efd00": true,
"supp-ec2f21ab7179": true,
"supp-b59a8a08dd46": true,
"supp-a954c6db3be8": true,
"supp-191496d69aae": true,
"supp-334250f82da0": true,
"supp-cb34e84dcbdf": true,
"supp-624129e18b9e": true,
"supp-58df8dc7015c": true,
"supp-442b031030c0": true,
"supp-4182de41f8da": true,
"supp-4becb5ead2c4": true,
"supp-2eaa8c7f0941": true,
"supp-ff8f09c6bfa5": true,
"supp-63c6dddf8bf5": true,
"supp-9d4b1e19e4f1": true,
"supp-b163701fc702": true,
"supp-6495be6cf728": true,
"supp-007928464d9b": true,
"supp-df5a0f8d5a72": true,
"supp-3dbd2f0de758": true,
"supp-9946aa57c8a9": true,
"supp-07a2866f170a": true,
"supp-2c87813f8aa3": true,
"supp-aa5f59116193": true,
"supp-1fbd51d49dad": true,
"supp-e0380903f6c3": true,
"supp-479efab46368": true,
"supp-09cce3719ad2": true,
"supp-d88f31fa5c0e": true,
"supp-4cf2fa02952e": true,
"supp-a3df150b3937": true,
"supp-fd66a295e97d": true,
"supp-473f9bd57824": true,
"supp-4a07cfb831d2": true,
"supp-85f55cfb9bd2": true,
"supp-816cb5806281": true,
"supp-e6f6ac38039c": true,
"supp-41033b3cde59": true,
"supp-a6c89579f6e4": true,
"supp-9dd3d0dbc734": true,
"supp-1f027dfb746a": true,
"supp-da022ec3d833": true,
"supp-6f6ffee00f58": true,
"supp-89f2f99e8e8d": true,
"supp-b07105c03caa": true,
"supp-a374b2a62cc3": true,
"supp-2687440608b0": true,
"supp-19455bafa3ac": true,
"supp-6e12b0ca84d2": true,
"supp-05a59d0def43": true,
"supp-e7dccd9a4003": true,
"supp-5df96dbf6738": true,
"supp-8148e3027849": true,
"supp-c5e6fb0e92b3": true,
"supp-f21a6ce0ca0e": true,
"supp-d3c74b81ee6f": true,
"supp-206d431ac433": true,
"supp-8f19a6ce3b2b": true,
"supp-dc7c842eaf8a": true,
"supp-b646b277d882": true,
"supp-8035701aea54": true,
"supp-8c8575a287e0": true,
"supp-9345c6e7b49b": true,
"supp-2871d296449d": true,
"supp-d86607ccbc20": true,
"supp-eb4e342e74d7": true,
"supp-23f2e81c8f43": true,
"supp-1a4ed985430d": true,
"supp-cef1f0c10332": true,
"supp-cfa7b96290df": true,
"supp-8066dac3a4e4": true,
"supp-045b8947a919": true,
"supp-39a61666efaf": true,
"supp-da4349769920": true,
"supp-df53690c09aa": true,
"supp-a977c6fa3fc0": true,
"supp-90bbab9c52ba": true,
"supp-7e9875638f06": true,
"supp-2cb25842f03e": true,
"supp-5f1962ce4046": true,
"main-3d52cdf723db": true,
"main-a22197731662": true,
"main-0c3a88910d56": true,
"main-687056efb188": true,
"main-2787e912f9ed": true,
"main-f53db085a93d": true,
"main-552e5d7b3055": true,
"main-4e82e66f670a": true,
"main-ce883b19cd52": true,
"main-5240bf640bb6": true,
"main-61c463500c61": true,
"main-977f3df23a03": true,
"main-a82cf38aaae0": true,
"metric-48d7e9621754": true,
"metric-65df715e5faa": true,
"metric-e7f74eabf84b": true,
"metric-f6c2bfb36b40": true,
"metric-0dfc09c00e94": true,
"metric-98b568f0e6b4": true,
"metric-ac925d0fa661": true,
"supp-be0750f37b75": true,
"supp-babc355f3ba4": true,
"supp-07a2fcbd63fb": true,
"supp-c48ffa36def4": true,
"supp-7464d86d386a": true,
"supp-c2c374b8a410": true,
"supp-f303809c0871": true,
"supp-897f14107d25": true,
"supp-bc539f456a7e": true,
"supp-6466d05c08ad": true,
"supp-e14bc6bcacd6": true,
"supp-73804b17c385": true,
"supp-52ca6be1c9f5": true,
"supp-b0ab1b3cde0e": true,
"supp-e73532e2d89c": true,
"supp-220ae6c1673f": true,
"supp-c0e88a884841": true,
"supp-191ba764ae89": true,
"supp-74fddf697b8f": true,
"supp-c3fac9483ce8": true,
"supp-e92b16152a23": true,
"supp-c08e7fa1d6c4": true,
"supp-5c8269165c25": true,
"supp-212345faf28b": true,
"supp-9838229d4cbb": true,
"supp-3038da272c7c": true,
"supp-0d2a8817da44": true,
"supp-89c98258c38a": true,
"supp-528a6cec1e84": true,
"supp-e242b707d647": true,
"supp-9c6e067632b0": true,
"supp-570cf82a0ea5": true,
"supp-b848b2393298": true,
"supp-2dd905d3d33a": true,
"supp-151515384d9d": true,
"supp-834473d55cbd": true,
"supp-0ed73a1e9822": true,
"supp-1f41a4e9399a": true,
"supp-0d1b7279df03": true,
"supp-3b9068c82c27": true,
"supp-7a89b7e99a15": true,
"supp-0512b0719836": true,
"supp-2bdf5602b64c": true,
"supp-014e603e9a05": true,
"supp-192ee126bacd": true,
"supp-5e8bbfb22dca": true,
"supp-cfd2894ba6c6": true,
"supp-80fbfa1e7f2a": true,
"supp-0a7fb6af2bfa": true,
"supp-79489853ba70": true,
"supp-8f5907226506": true,
"supp-da2839ee2717": true,
"supp-c7cb3cd0801f": true
}
}
@@ -1,728 +0,0 @@
severity,rule_id,file,line,description,evidence,recommendation
warning,SUP-CMP-001,Algorithm/FOC.cpp,53,浮点变量比较需确认容差或离散状态含义,if (rt_velocity < -0.5f) last_table = cogging_table_rev;,建议确认是否应使用阈值/容差比较。
warning,SUP-CMP-001,Algorithm/FOC.cpp,54,浮点变量比较需确认容差或离散状态含义,else if (rt_velocity > 0.5f) last_table = cogging_table;,建议确认是否应使用阈值/容差比较。
warning,SUP-CMP-001,Algorithm/FOC.cpp,404,浮点变量比较需确认容差或离散状态含义,u8 sector_code = (X > 0.0f ? 1u : 0u),建议确认是否应使用阈值/容差比较。
warning,SUP-CMP-001,Algorithm/FOC.cpp,405,浮点变量比较需确认容差或离散状态含义,+ (Y > 0.0f ? 2u : 0u),建议确认是否应使用阈值/容差比较。
warning,SUP-CMP-001,Algorithm/FOC.cpp,406,浮点变量比较需确认容差或离散状态含义,+ (Z > 0.0f ? 4u : 0u);,建议确认是否应使用阈值/容差比较。
warning,SUP-CMP-001,Algorithm/FOC.cpp,534,浮点变量比较需确认容差或离散状态含义,if (HOLD_PWM_DUTY > 0.95f) {,建议确认是否应使用阈值/容差比较。
warning,SUP-CMP-001,Algorithm/FOC.cpp,536,浮点变量比较需确认容差或离散状态含义,} else if (HOLD_PWM_DUTY < 0.0f) {,建议确认是否应使用阈值/容差比较。
warning,SUP-CMP-001,Algorithm/FOC.cpp,569,浮点变量比较需确认容差或离散状态含义,if (voltage < 36.0f and voltage > 8.0f) {,建议确认是否应使用阈值/容差比较。
warning,SUP-CMP-001,Algorithm/FOC.cpp,763,浮点变量比较需确认容差或离散状态含义,if (target_velocity < -120.0f) {,建议确认是否应使用阈值/容差比较。
warning,SUP-CMP-001,Algorithm/FOC.cpp,765,浮点变量比较需确认容差或离散状态含义,} else if (target_velocity < -30.0f) {,建议确认是否应使用阈值/容差比较。
warning,SUP-CMP-001,Algorithm/Filter.cpp,190,浮点变量比较需确认容差或离散状态含义,if (error > 180.0f) error -= 360.0f;,建议确认是否应使用阈值/容差比较。
warning,SUP-CMP-001,Algorithm/Filter.cpp,191,浮点变量比较需确认容差或离散状态含义,else if (error < -180.0f) error += 360.0f;,建议确认是否应使用阈值/容差比较。
warning,SUP-CMP-001,sys/config.h,427,浮点变量比较需确认容差或离散状态含义,while (angle >= 360.0f) angle -= 360.0f;,建议确认是否应使用阈值/容差比较。
warning,SUP-CMP-001,sys/config.h,428,浮点变量比较需确认容差或离散状态含义,while (angle < 0.0f) angle += 360.0f;,建议确认是否应使用阈值/容差比较。
warning,SUP-GLB-001,Algorithm/FOC.cpp,23,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,FOC_Controller FOC;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,device/ADC.cpp,20,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float ADC_SCALE = 3.3f / 4096.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,device/ADC.cpp,22,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float TEMP_FACTOR = 1000.0f / 4.3f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,device/ADC.cpp,24,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float VCC_FACTOR = 11.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,device/ADC.cpp,26,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float CURRENT_FACTOR =,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,device/ADC.cpp,30,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,sampler sampler;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,device/ADC.cpp,33,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,static volatile u8 adc_current_frame_ready = 0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,device/Can.cpp,37,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 CANX = CAN0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,device/Can.cpp,48,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,dma_parameter_struct dma_rx_parameter;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,device/Can.cpp,51,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,static volatile bool can_rx_dma_busy = false;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,device/Can.cpp,52,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,static can_receive_message_struct can_rx_dma_message;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,device/Can.cpp,72,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,static volatile u8 rx_queue_head = 0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,device/Can.cpp,73,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,static volatile u8 rx_queue_tail = 0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,device/Can.cpp,74,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,static volatile u8 rx_queue_count = 0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,device/Can.cpp,77,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,static volatile u8 tx_queue_head = 0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,device/Can.cpp,78,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,static volatile u8 tx_queue_tail = 0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,device/Can.cpp,79,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,static volatile u8 tx_queue_count = 0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,device/Can.cpp,84,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,CAN_transmiter CAN0_transmiter;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,device/Timer.cpp,18,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,volatile u32 total_us100_counter = 0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,device/ang_sensor.cpp,38,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,volatile bool spi_dma_tx_complete = false;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,device/ang_sensor.cpp,39,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,volatile bool spi_dma_rx_complete = false;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,device/ang_sensor.cpp,41,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,angle_sensor KTH7823;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,main.cpp,39,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,TaskScheduler scheduler = {0};,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,main.cpp,40,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,u32 motor_runtime_50us = 0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,main.cpp,41,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,u32 cnt_test = 0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,32,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 SOFTWARE_VERSION_MAJOR = 26;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,34,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 SOFTWARE_VERSION_MINOR = 5;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,36,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 SOFTWARE_VERSION_PATCH = 19;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,38,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 SOFTWARE_VERSION_BUILD = 2;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,41,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 HARDWARE_VERSION_MAJOR = 25;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,43,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 HARDWARE_VERSION_MINOR = 12;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,45,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 HARDWARE_VERSION_PATCH = 01;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,47,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 HARDWARE_VERSION_BUILD = 0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,50,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 BOOT_VERSION_MAJOR = 26;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,52,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 BOOT_VERSION_MINOR = 1;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,54,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 BOOT_VERSION_PATCH = 12;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,56,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 BOOT_VERSION_BUILD = 0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,60,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 BOOTLOADER_SIZE = 0x6000;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,62,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 BOOTLOADER_START_ADDR = 0x08000000;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,64,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 APPLATEST_START_ADDR = 0x08012000;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,66,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 APPBACK_START_ADDR = 0x08006000;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,68,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 APP_MAX_SIZE = 0xC000;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,70,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 FMC_PAGE_SIZE = 0x400;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,72,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 SLEEP_CONFIG_START = 0x0801E400;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,74,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 SLEEP_CONFIG_END = 0x0801E800;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,76,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 FLASH_EMPTY = 0xFFFFFFFF;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,78,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 SLEEP_ENABLE = 0x11111111;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,80,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 SLEEP_DISABLE = 0x00000000;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,92,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 NODE_ID_PAGE_ADDR = 0x0801E800;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,94,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 NODE_ID_PRIMARY_ADDR = 0x0801E800;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,96,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 NODE_ID_BACKUP_ADDR = 0x0801E840;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,98,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 NODE_ID_MAGIC = 0x4E4F4445;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,100,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 DEFAULT_NODE_ID = 1;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,102,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 BROADCAST_NODE_ID = 0x1FFF;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,104,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 MAX_NODE_ID = 0x1FFE;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,113,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u8 NODE_ID_STRUCT_SIZE = 0x10;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,115,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u8 NODE_ID_MAGIC_OFFSET = 0x00;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,117,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u8 NODE_ID_VALUE_OFFSET = 0x04;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,119,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u8 NODE_ID_COUNTER_OFFSET = 0x08;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,121,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u8 NODE_ID_CRC_OFFSET = 0x0C;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,125,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 OTA_CONFIG_NUM = 6;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,127,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 n_APP_LATEST_AVAL_ADDR = 0x0801E000;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,129,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 n_APP_BACKUP_AVAL_ADDR = 0x0801E004;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,131,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 n_APP_LATEST_EN_ADDR = 0x0801E008;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,133,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 n_APP_BACKUP_EN_ADDR = 0x0801E00C;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,135,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 n_APP_LATEST_CHECK_ADDR = 0x0801E010;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,137,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 n_APP_BACKUP_CHECK_ADDR = 0x0801E014;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,139,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 OTA_NOT_AVAL = 0xFFFFFFFF;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,141,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 OTA_AVAL = 0x00000000;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,145,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u8 PP = 11;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,147,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float DIR = 1.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,149,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 REDUCTION_RATIO = 25;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,151,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float CURRENT_OFFSET = -3.31f / 2.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,153,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float HOLD_PWM_DUTY = 0.1f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,155,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 ANGLESENS_OFFSET = 0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,157,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float ANGLESENS_CALIBRATION_ANGLE = 83.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,159,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float KE_FACTOR = 0.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,163,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float ANGLE_KALMAN_INITIAL_STATE = 0.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,165,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float ANGLE_KALMAN_INITIAL_COVARIANCE = 0.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,167,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float ANGLE_KALMAN_PROCESS_NOISE_Q = 0.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,169,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float ANGLE_KALMAN_MEASUREMENT_NOISE_R = 0.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,171,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float ANGLE_OBSERVER_ALPHA = 0.75f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,173,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float ANGLE_OBSERVER_BETA = 0.002f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,177,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float VELOCITY_KALMAN_INITIAL_STATE = 0.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,179,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float VELOCITY_KALMAN_INITIAL_COVARIANCE = 1e-3f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,181,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float VELOCITY_KALMAN_PROCESS_NOISE_Q =,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,184,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float VELOCITY_KALMAN_MEASUREMENT_NOISE_R =,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,189,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float CURRENT_KALMAN_INITIAL_STATE = 0.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,191,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float CURRENT_KALMAN_INITIAL_COVARIANCE = 100.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,193,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float CURRENT_KALMAN_PROCESS_NOISE_Q = 10.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,195,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float CURRENT_KALMAN_MEASUREMENT_NOISE_R = 5e-5f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,199,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float DEFAULT_current_loop_p = 0.1f / 100 * 12;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,201,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float current_loop_Ki = 0.55f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,203,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float current_loop_Kd = 3e-4f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,206,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float DEFAULT_vel_loop_p = 0.018f / 100 * 12;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,208,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float vel_loop_Ku = 3.600000e-03 * 0.7 * 100 / 12;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,210,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float vel_loop_Tu = 17.0f * 1e-3f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,212,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float vel_loop_Ki = 1.2 * vel_loop_Ku / vel_loop_Tu;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,214,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float vel_loop_Kd = 0.075 * vel_loop_Ku * vel_loop_Tu * 2;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,217,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float DEFAULT_vel_angloop_p = 0.4f / 100;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,219,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float vel_angloop_Ki = 5.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,221,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float vel_angloop_Kd = 5e-05f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,224,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float DEFAULT_angle_angloop_p =,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,227,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float ang_angloop_Ki = 0.00f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,229,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float ang_angloop_Kd = 8e-04f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,232,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float DEFAULT_angle_loop_p = 60.0f / 100 * 12;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,235,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float DEFAULT_angle_MIT_p = 100.0f / 100 * 12;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,237,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float angle_MIT_Ki = 0.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,239,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float angle_MIT_Kd = 8e-04f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,242,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float DEFAULT_vel_MIT_p = 5.0f / 100;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,244,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float vel_MIT_Ki = 15.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,246,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float vel_MIT_Kd = 1e-04f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,249,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float DEFAULT_current_MIT_p = 0.2f / 100 * 12;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,251,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float current_MIT_Ki = 0.1f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,253,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float current_MIT_Kd = 3e-4f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,260,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float ADC_MAX = 65536.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,262,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float PI = 3.14159265358979323846f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,264,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float INV_PI_3 = 3.0f / PI;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,266,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float PI_3 = PI / 3.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,268,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float _1_SQRT3 = 0.57735026919f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,270,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float _3PI_2 = 4.71238898038f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,272,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float SQRT3 = 1.7320508075688772f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,274,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float SQRT3DV2 = 0.8660254037844386f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,276,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float COS_PI_3 = 0.5f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,278,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float ANGLE_FACTOR = 25.0f / 180.0f * PI;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,280,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float DEG2RAD = 1.0f / 180.0f * PI;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,282,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float RAD2DEG = 180.0f / PI;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,284,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u8 DEFAULT_VALUE = 0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,286,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u8 CONFIG_SAVED_NUM = 6;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,290,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 LUT_SIZE = 1024;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,301,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 DEV_CAN0_ID = 0x0000;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,303,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 DEV_CAN0_MASK = 0x0000;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,305,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 DEV_CAN_LOOPBACK_ID = 0x0000;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,308,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 CANFD_STATUS_ID = 0x0100;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,310,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 CANFD_CONFIG_ID = 0x0101;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,312,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 CANFD_VERSION_ID = 0x00FF;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,315,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 CANFD_CMD_ID = 0x0200;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,317,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 CANFD_RESET_ID = 0x0301;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,320,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 CANFD_SET_NODE_ID = 0x0400;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,322,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 CANFD_GET_NODE_ID = 0x0401;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,326,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 CANFD_BOOT_ID = 0x0000;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,328,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 CANFD_OTA_REQ_ID = 0x0100;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,330,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 CANFD_OTA_DATA_ID = 0x0101;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,332,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 CANFD_OTA_ACK_ID = 0x0102;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,334,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 CANFD_OTA_WAIT_ID = 0x0103;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,338,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u8 ADC_FILTER_SIZE = 6;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,340,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u8 BLOCK_SIZE = ADC_FILTER_SIZE * SIZE_FLOAT;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,342,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float ERROR_ADC_VAL = 255.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,344,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float MAX_TEMP = 150.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,346,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float MIN_TEMP = -40.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,348,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float MAX_CURRENT = 40.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,350,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float MIN_CURRENT = -40.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,352,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float MAX_VCC = 65.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,354,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float MIN_VCC = -0.1f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,358,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 VEL_FILTER_SIZE = 4;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,360,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 DEFAULT_COMMAND = 0x0000;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,362,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 FAULT_RECEIVE = 0xFFFF;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,364,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float ANGLE_WRAP_THRESHOLD = 300.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,366,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float ANGLE_WRAP_VALUE = 360.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,368,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float RAD_FACTOR = 1.0f / ADC_MAX * 2.0f * PI;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,370,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float ANGLESENS_FACTOR = 1.0f / ADC_MAX * 360.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,374,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr int TIMER2_PRESCALER = 119;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,376,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr int TIMER2_PERIOD = 49;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,378,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr int MOTOR_PERIOD = 1;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,380,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float TIME_SLICE =,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,383,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float TIMER2_FREQUENCY = 1 / TIME_SLICE;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,385,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float MOTOR_FREQUENCY = 1 / TIME_SLICE / MOTOR_PERIOD;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,389,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr int TIMER1_PRESCALER = 0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,391,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr int TIMER1_PERIOD = 2999;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,393,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr int TIMER1_DEFAULT_PULSE = 0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,395,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr int TIMER1_CH3_COMPARE_VALUE =,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,400,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 COGGING_TABLE_SIZE = 128;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,402,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float COGGING_COMP_SCALE = 0.005f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,413,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float VBUS_DROP_THRESHOLD = 5.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,415,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float VBUS_ABSOLUTE_MIN = 12.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,417,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u32 VBUS_DEBOUNCE_COUNT = 5;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/config.h,419,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr float VBUS_RECOVERY_RATIO = 0.9f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/health.cpp,19,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,ThermalController thermalController;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/health.cpp,25,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,constexpr u16 PROTECT_TIME = 6000;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/health.cpp,28,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,static VoltageState voltage_state = VoltageState::NORMAL;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/health.cpp,29,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,static float last_vbus_slow = 0.0f;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/initial.cpp,39,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,VersionManager Version;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/systick.cpp,53,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,volatile static uint32_t delay;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/systick.cpp,54,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,volatile static uint32_t systick_ms = 0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/systick.cpp,70,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,volatile static uint32_t task_enter_cyccnt = 0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/systick.cpp,71,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,volatile static uint32_t busy_cycles_accum = 0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/systick.cpp,72,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,volatile static uint16_t sample_seconds = 0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/systick.cpp,73,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,volatile static uint8_t cpu_usage = 0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-GLB-001,sys/systick.cpp,74,文件作用域可变全局对象,需确认封装、并发访问和初始化顺序,volatile static uint8_t dwt_initialized = 0;,建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning,SUP-IRQ-001,device/Can.cpp,709,关中断后未在短窗口内看到开中断,需人工确认成对性,__disable_irq();,确认所有路径均恢复中断;避免临界区过长。
warning,SUP-IRQ-001,sys/flash.cpp,888,关中断后未在短窗口内看到开中断,需人工确认成对性,__disable_irq();,确认所有路径均恢复中断;避免临界区过长。
warning,SUP-IRQ-001,sys/systick.cpp,256,关中断后未在短窗口内看到开中断,需人工确认成对性,__disable_irq();,确认所有路径均恢复中断;避免临界区过长。
warning,SUP-SW-001,Algorithm/FOC.cpp,89,switch 语句疑似缺少 default 分支,switch (cog_calib_state) {,MISRA 通常要求 default;如枚举已全覆盖也建议显式说明。
info,SUP-DOC-001,Algorithm/FOC.h,260,接口/函数缺少紧邻 Doxygen 注释,typedef float (FOC_Controller::*FOCFunctionPtr)(void);,建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
info,SUP-DOC-001,Algorithm/Filter.h,187,接口/函数缺少紧邻 Doxygen 注释,"u8 init(float init_velocity, float initial_error_covariance = 1.0f) {",建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
info,SUP-DOC-001,Algorithm/Filter.h,247,接口/函数缺少紧邻 Doxygen 注释,"u8 init(float init_angle, float initial_error_covariance = 1.0f) {",建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
info,SUP-DOC-001,Algorithm/Filter.h,296,接口/函数缺少紧邻 Doxygen 注释,"u8 init(float init_current, float initial_error_covariance = 1.0f) {",建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
info,SUP-DOC-001,Algorithm/pid.cpp,23,接口/函数缺少紧邻 Doxygen 注释,float PIDController::operator()(float error) {,建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
info,SUP-DOC-001,Algorithm/pid.h,18,接口/函数缺少紧邻 Doxygen 注释,float operator()(float error);,建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
info,SUP-DOC-001,device/Can.cpp,775,接口/函数缺少紧邻 Doxygen 注释,static void CAN_RX_ReleaseFifo0(void) { CAN_RFIFO0(CAN0) |= CAN_RFIFO0_RFD0; },建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
info,SUP-DOC-001,device/Can.cpp,1130,接口/函数缺少紧邻 Doxygen 注释,else if (base_id == CANFD_SET_NODE_ID) {,建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
info,SUP-DOC-001,device/Can.cpp,1292,接口/函数缺少紧邻 Doxygen 注释,else if (base_id == CANFD_GET_NODE_ID) {,建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
info,SUP-DOC-001,sys/flash.cpp,913,接口/函数缺少紧邻 Doxygen 注释,typedef void (*AppEntryFunc)(void);,建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
info,SUP-DOC-001,sys/flash.h,165,接口/函数缺少紧邻 Doxygen 注释,"u8 OTA_SET(u32 addr, u32 data);",建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
info,SUP-DOC-001,sys/initial.cpp,224,接口/函数缺少紧邻 Doxygen 注释,"int fputc(int ch, FILE *f) throw() {",建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
info,SUP-GLB-002,Algorithm/FOC.cpp,24,extern 全局对象引用,需确认单一定义和共享访问保护,extern sampler sampler;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,Algorithm/FOC.cpp,25,extern 全局对象引用,需确认单一定义和共享访问保护,extern angle_sensor KTH7823;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,Algorithm/FOC.cpp,26,extern 全局对象引用,需确认单一定义和共享访问保护,extern CAN_transmiter CAN0_transmiter;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,Algorithm/FOC.cpp,27,extern 全局对象引用,需确认单一定义和共享访问保护,extern EncoderVelocityKalman Vel_kalman;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,Algorithm/FOC.cpp,28,extern 全局对象引用,需确认单一定义和共享访问保护,extern CurrentKalman Current_kalman;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,Algorithm/Filter.cpp,14,extern 全局对象引用,需确认单一定义和共享访问保护,extern angle_sensor KTH7823;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,Algorithm/Filter.cpp,15,extern 全局对象引用,需确认单一定义和共享访问保护,extern CAN_transmiter CAN0_transmiter;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,Algorithm/Filter.cpp,16,extern 全局对象引用,需确认单一定义和共享访问保护,extern u32 motor_runtime_50us;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,Algorithm/Filter.h,24,extern 全局对象引用,需确认单一定义和共享访问保护,extern CAN_transmiter CAN0_transmiter;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,Algorithm/pid.cpp,14,extern 全局对象引用,需确认单一定义和共享访问保护,extern CAN_transmiter CAN0_transmiter;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,device/ADC.cpp,28,extern 全局对象引用,需确认单一定义和共享访问保护,extern CAN_transmiter CAN0_transmiter;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,device/ADC.cpp,29,extern 全局对象引用,需确认单一定义和共享访问保护,extern FOC_Controller FOC;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,device/Can.cpp,38,extern 全局对象引用,需确认单一定义和共享访问保护,extern FOC_Controller FOC;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,device/Can.cpp,39,extern 全局对象引用,需确认单一定义和共享访问保护,extern sampler sampler;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,device/Can.cpp,40,extern 全局对象引用,需确认单一定义和共享访问保护,extern angle_sensor KTH7823;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,device/Can.cpp,41,extern 全局对象引用,需确认单一定义和共享访问保护,extern EncoderAngleKalman Angle_kalman;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,device/Can.cpp,42,extern 全局对象引用,需确认单一定义和共享访问保护,extern EncoderVelocityKalman Vel_kalman;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,device/Can.cpp,43,extern 全局对象引用,需确认单一定义和共享访问保护,extern FlashEEPROM flashEEP;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,device/Can.cpp,44,extern 全局对象引用,需确认单一定义和共享访问保护,extern VersionManager Version;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,device/Can.cpp,45,extern 全局对象引用,需确认单一定义和共享访问保护,extern u32 motor_runtime_50us;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,device/Timer.cpp,20,extern 全局对象引用,需确认单一定义和共享访问保护,extern FOC_Controller FOC;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,device/Timer.cpp,21,extern 全局对象引用,需确认单一定义和共享访问保护,extern TaskScheduler scheduler;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,device/Timer.cpp,22,extern 全局对象引用,需确认单一定义和共享访问保护,extern CAN_transmiter CAN0_transmiter;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,device/Timer.cpp,24,extern 全局对象引用,需确认单一定义和共享访问保护,extern u32 cnt_test;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,device/ang_sensor.cpp,42,extern 全局对象引用,需确认单一定义和共享访问保护,extern FlashEEPROM flashEEP;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,device/ang_sensor.cpp,43,extern 全局对象引用,需确认单一定义和共享访问保护,extern EncoderAngleKalman Angle_kalman;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,device/ang_sensor.cpp,44,extern 全局对象引用,需确认单一定义和共享访问保护,extern EncoderVelocityKalman Vel_kalman;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,device/ang_sensor.cpp,45,extern 全局对象引用,需确认单一定义和共享访问保护,extern CAN_transmiter CAN0_transmiter;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,main.cpp,28,extern 全局对象引用,需确认单一定义和共享访问保护,extern CAN_transmiter CAN0_transmiter;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,main.cpp,29,extern 全局对象引用,需确认单一定义和共享访问保护,extern sampler sampler;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,main.cpp,30,extern 全局对象引用,需确认单一定义和共享访问保护,extern angle_sensor KTH7823;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,main.cpp,31,extern 全局对象引用,需确认单一定义和共享访问保护,extern EncoderVelocityKalman Vel_kalman;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,main.cpp,32,extern 全局对象引用,需确认单一定义和共享访问保护,extern EncoderAngleKalman Angle_kalman;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,main.cpp,33,extern 全局对象引用,需确认单一定义和共享访问保护,extern ThermalController thermalController;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,main.cpp,34,extern 全局对象引用,需确认单一定义和共享访问保护,extern FOC_Controller FOC;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,main.cpp,35,extern 全局对象引用,需确认单一定义和共享访问保护,extern FlashEEPROM flashEEP;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,main.cpp,36,extern 全局对象引用,需确认单一定义和共享访问保护,extern VersionManager Version;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,sys/flash.cpp,38,extern 全局对象引用,需确认单一定义和共享访问保护,extern angle_sensor KTH7823;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,sys/flash.cpp,39,extern 全局对象引用,需确认单一定义和共享访问保护,extern CAN_transmiter CAN0_transmiter;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,sys/flash.cpp,40,extern 全局对象引用,需确认单一定义和共享访问保护,extern FOC_Controller FOC;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,sys/health.cpp,15,extern 全局对象引用,需确认单一定义和共享访问保护,extern sampler sampler;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,sys/health.cpp,16,extern 全局对象引用,需确认单一定义和共享访问保护,extern CAN_transmiter CAN0_transmiter;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,sys/health.cpp,17,extern 全局对象引用,需确认单一定义和共享访问保护,extern FOC_Controller FOC;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,sys/health.cpp,18,extern 全局对象引用,需确认单一定义和共享访问保护,extern FlashEEPROM flashEEP;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,sys/initial.cpp,38,extern 全局对象引用,需确认单一定义和共享访问保护,extern CAN_transmiter CAN0_transmiter;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,sys/systick.cpp,75,extern 全局对象引用,需确认单一定义和共享访问保护,extern CAN_transmiter CAN0_transmiter;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-GLB-002,sys/systick.cpp,76,extern 全局对象引用,需确认单一定义和共享访问保护,extern FlashEEPROM flashEEP;,确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
info,SUP-ISR-001,device/ADC.cpp,317,中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用,"extern """" void ADC0_1_IRQHandler(void) {",人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
info,SUP-ISR-001,device/Can.cpp,1330,中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用,void CAN0_RX0_IRQHandler(void) {,人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
info,SUP-ISR-001,device/Can.cpp,1355,中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用,void DMA0_Channel4_IRQHandler(void) {,人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
info,SUP-ISR-001,device/Can.cpp,1389,中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用,void DMA0_Channel5_IRQHandler(void) {,人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
info,SUP-ISR-001,device/Can.cpp,1509,中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用,void CAN0_TX_IRQHandler(void) {,人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
info,SUP-ISR-001,device/Can.h,121,中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用,void CAN0_TX_IRQHandler(void);,人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
info,SUP-ISR-001,device/Can.h,126,中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用,void CAN0_RX0_IRQHandler(void);,人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
info,SUP-ISR-001,device/Can.h,131,中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用,void DMA0_Channel4_IRQHandler(void);,人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
info,SUP-ISR-001,device/Can.h,136,中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用,void DMA0_Channel5_IRQHandler(void);,人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
info,SUP-ISR-001,device/Timer.cpp,134,中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用,void TIMER2_IRQHandler(void) {,人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
info,SUP-ISR-001,device/Timer.cpp,281,中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用,void TIMER1_IRQHandler(void) {,人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
info,SUP-ISR-001,device/Timer.h,40,中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用,void TIMER2_IRQHandler(void);,人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
info,SUP-ISR-001,device/Timer.h,56,中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用,void TIMER1_IRQHandler(void);,人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
info,SUP-ISR-001,device/adc.h,91,中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用,void ADC0_1_IRQHandler(void);,人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
info,SUP-ISR-001,device/ang_sensor.cpp,145,中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用,"extern """" void DMA0_Channel2_IRQHandler(void) {",人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
info,SUP-ISR-001,device/ang_sensor.cpp,156,中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用,"extern """" void DMA0_Channel1_IRQHandler(void) {",人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
info,SUP-ISR-001,sys/systick.cpp,128,中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用,"extern """" void SysTick_Handler(void) {",人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
info,SUP-ISR-001,sys/systick.h,117,中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用,void EXTI5_9_IRQHandler(void);,人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
info,SUP-LOOP-001,device/Can.cpp,366,无限循环需确认退出策略、看门狗喂狗和低功耗策略,while (1),确认循环内任务调度、异常退出/复位策略和看门狗策略。
info,SUP-LOOP-001,main.cpp,71,无限循环需确认退出策略、看门狗喂狗和低功耗策略,while (1) {,确认循环内任务调度、异常退出/复位策略和看门狗策略。
info,SUP-LOOP-001,sys/systick.cpp,115,无限循环需确认退出策略、看门狗喂狗和低功耗策略,while (1) {,确认循环内任务调度、异常退出/复位策略和看门狗策略。
info,SUP-LOOP-001,sys/systick.cpp,233,无限循环需确认退出策略、看门狗喂狗和低功耗策略,while (1) {,确认循环内任务调度、异常退出/复位策略和看门狗策略。
info,SUP-MAG-001,Algorithm/FOC.cpp,29,业务代码中存在裸数字常量,需确认是否应命名化,extern u16 adc_value[3];,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,46,业务代码中存在裸数字常量,需确认是否应命名化,float index_f = angle / 360.0f * (float)COGGING_TABLE_SIZE;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,53,业务代码中存在裸数字常量,需确认是否应命名化,if (rt_velocity < -0.5f) last_table = cogging_table_rev;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,54,业务代码中存在裸数字常量,需确认是否应命名化,else if (rt_velocity > 0.5f) last_table = cogging_table;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,66,业务代码中存在裸数字常量,需确认是否应命名化,float FOC_Controller::cog_calib_run_data[6][COGGING_TABLE_SIZE] = {};,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,77,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u32 SETTLE_TICKS = 16000;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,79,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u32 STOP_TICKS = 10000;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,81,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u32 TARGET_SAMPLES = 3 * COGGING_TABLE_SIZE * 8;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,85,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u32 SAMPLE_DIV = 20;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,87,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u8 TOTAL_RUNS = 6;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,102,业务代码中存在裸数字常量,需确认是否应命名化,control_mode = 6;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,131,业务代码中存在裸数字常量,需确认是否应命名化,if (fabsf(iq) < 5000.0f) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,132,业务代码中存在裸数字常量,需确认是否应命名化,u16 idx = (u16)(angle_el / 360.0f * (float)COGGING_TABLE_SIZE);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,167,业务代码中存在裸数字常量,需确认是否应命名化,control_mode = 6;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,168,业务代码中存在裸数字常量,需确认是否应命名化,target_velocity = (cog_calib_run < 3) ? SLOW_VEL : -SLOW_VEL;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,182,业务代码中存在裸数字常量,需确认是否应命名化,cog_calib_run_data[2][i]) / 3.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,186,业务代码中存在裸数字常量,需确认是否应命名化,cogging_table_rev[i] = (cog_calib_run_data[3][i] +,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,187,业务代码中存在裸数字常量,需确认是否应命名化,cog_calib_run_data[4][i] +,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,188,业务代码中存在裸数字常量,需确认是否应命名化,cog_calib_run_data[5][i]) / 3.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,197,业务代码中存在裸数字常量,需确认是否应命名化,float angle_deg = (float)i / (float)COGGING_TABLE_SIZE * 360.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,205,业务代码中存在裸数字常量,需确认是否应命名化,float angle_deg = (float)i / (float)COGGING_TABLE_SIZE * 360.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,214,业务代码中存在裸数字常量,需确认是否应命名化,"if (i % 8 == 0) printf("""");",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,217,业务代码中存在裸数字常量,需确认是否应命名化,"if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf("""");",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,226,业务代码中存在裸数字常量,需确认是否应命名化,"if (i % 8 == 0) printf("""");",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,229,业务代码中存在裸数字常量,需确认是否应命名化,"if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf("""");",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,293,业务代码中存在裸数字常量,需确认是否应命名化,const float current_avg = (current_a + current_b + current_c) / 3.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,301,业务代码中存在裸数字常量,需确认是否应命名化,I_alpha = (2.0f / 3.0f) * current_a - (1.0f / 3.0f) * current_b -,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,302,业务代码中存在裸数字常量,需确认是否应命名化,(1.0f / 3.0f) * current_c;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,313,业务代码中存在裸数字常量,需确认是否应命名化,return Current_kalman.update(I_q * 1000 - KE_FACTOR * rt_velocity);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,327,业务代码中存在裸数字常量,需确认是否应命名化,"29.28f, 28.84f, 28.26f, 28.83f, 29.79f, 30.26f, 29.52f, 28.77f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,328,业务代码中存在裸数字常量,需确认是否应命名化,"28.23f, 27.68f, 26.65f, 25.19f, 23.92f, 22.59f, 19.61f, 16.77f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,329,业务代码中存在裸数字常量,需确认是否应命名化,"13.32f, 10.40f, 7.64f, 3.51f, -0.83f, -4.96f, -8.19f, -11.11f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,330,业务代码中存在裸数字常量,需确认是否应命名化,"-13.40f, -14.39f, -15.69f, -15.99f, -16.39f, -15.50f, -14.76f, -14.21f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,331,业务代码中存在裸数字常量,需确认是否应命名化,"-13.76f, -13.88f, -13.22f, -11.18f, -10.65f, -10.54f, -10.62f, -10.23f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,332,业务代码中存在裸数字常量,需确认是否应命名化,"-9.52f, -8.19f, -6.31f, -4.14f, -1.94f, -0.25f, 2.06f, 4.08f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,333,业务代码中存在裸数字常量,需确认是否应命名化,"6.05f, 8.30f, 9.74f, 11.38f, 13.32f, 15.65f, 17.55f, 20.22f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,334,业务代码中存在裸数字常量,需确认是否应命名化,"21.72f, 22.28f, 23.30f, 24.78f, 23.53f, 23.35f, 23.00f, 21.42f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,335,业务代码中存在裸数字常量,需确认是否应命名化,"20.35f, 20.57f, 20.07f, 18.18f, 17.04f, 16.03f, 14.81f, 13.71f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,336,业务代码中存在裸数字常量,需确认是否应命名化,"12.47f, 10.93f, 9.38f, 6.53f, 4.63f, 3.37f, 1.29f, -1.28f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,337,业务代码中存在裸数字常量,需确认是否应命名化,"-5.08f, -11.11f, -16.35f, -21.00f, -24.61f, -28.30f, -31.11f, -33.48f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,338,业务代码中存在裸数字常量,需确认是否应命名化,"-35.25f, -36.54f, -38.01f, -38.69f, -39.27f, -39.52f, -38.18f, -36.55f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,339,业务代码中存在裸数字常量,需确认是否应命名化,"-34.96f, -33.14f, -31.92f, -31.45f, -31.32f, -30.25f, -29.60f, -28.72f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,340,业务代码中存在裸数字常量,需确认是否应命名化,"-27.51f, -25.30f, -22.66f, -20.87f, -18.19f, -16.10f, -13.25f, -10.81f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,341,业务代码中存在裸数字常量,需确认是否应命名化,"-8.00f, -4.67f, -2.28f, 0.87f, 3.83f, 7.25f, 10.56f, 13.70f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,342,业务代码中存在裸数字常量,需确认是否应命名化,"17.70f, 19.90f, 22.14f, 23.62f, 24.53f, 26.03f, 26.96f, 27.95f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,345,业务代码中存在裸数字常量,需确认是否应命名化,"22.45f, 24.95f, 26.05f, 26.01f, 26.11f, 25.87f, 26.20f, 26.23f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,346,业务代码中存在裸数字常量,需确认是否应命名化,"26.19f, 25.87f, 25.97f, 26.09f, 24.77f, 24.22f, 23.71f, 22.10f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,347,业务代码中存在裸数字常量,需确认是否应命名化,"19.84f, 17.60f, 15.36f, 12.99f, 9.54f, 5.35f, 1.71f, -1.94f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,348,业务代码中存在裸数字常量,需确认是否应命名化,"-4.15f, -6.16f, -7.93f, -9.10f, -10.01f, -10.25f, -10.85f, -11.74f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,349,业务代码中存在裸数字常量,需确认是否应命名化,"-11.98f, -10.78f, -9.65f, -8.89f, -8.14f, -6.85f, -5.94f, -5.37f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,350,业务代码中存在裸数字常量,需确认是否应命名化,"-4.28f, -3.38f, -3.36f, -3.40f, -2.81f, -2.36f, -1.04f, -0.18f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,351,业务代码中存在裸数字常量,需确认是否应命名化,"1.08f, 2.15f, 4.19f, 5.51f, 7.33f, 8.64f, 10.46f, 11.89f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,352,业务代码中存在裸数字常量,需确认是否应命名化,"13.42f, 14.83f, 17.11f, 19.12f, 20.76f, 21.88f, 22.35f, 22.86f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,353,业务代码中存在裸数字常量,需确认是否应命名化,"22.73f, 22.13f, 21.10f, 20.53f, 18.65f, 17.09f, 15.47f, 14.76f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,354,业务代码中存在裸数字常量,需确认是否应命名化,"14.02f, 12.94f, 11.98f, 10.29f, 8.11f, 5.83f, 4.23f, 2.42f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,355,业务代码中存在裸数字常量,需确认是否应命名化,"1.03f, -1.80f, -4.01f, -7.93f, -11.79f, -15.90f, -20.22f, -23.04f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,356,业务代码中存在裸数字常量,需确认是否应命名化,"-25.66f, -28.80f, -30.45f, -32.11f, -33.17f, -33.97f, -34.68f, -34.26f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,357,业务代码中存在裸数字常量,需确认是否应命名化,"-34.18f, -33.78f, -32.47f, -31.11f, -29.40f, -27.89f, -27.05f, -26.72f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,358,业务代码中存在裸数字常量,需确认是否应命名化,"-25.59f, -24.86f, -23.61f, -22.97f, -22.89f, -21.81f, -20.78f, -19.23f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,359,业务代码中存在裸数字常量,需确认是否应命名化,"-17.74f, -15.09f, -13.18f, -10.51f, -8.18f, -5.89f, -3.35f, -0.02f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,360,业务代码中存在裸数字常量,需确认是否应命名化,"2.02f, 3.87f, 6.37f, 9.11f, 12.33f, 14.63f, 17.12f, 19.12f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,366,业务代码中存在裸数字常量,需确认是否应命名化,FOC.cur_loop_p = DEFAULT_current_loop_p * 100 / limit_voltage;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,367,业务代码中存在裸数字常量,需确认是否应命名化,FOC.cur_MIT_p = DEFAULT_current_MIT_p * 100 / limit_voltage;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,368,业务代码中存在裸数字常量,需确认是否应命名化,FOC.vel_loop_p = DEFAULT_vel_loop_p * 100 / limit_voltage;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,369,业务代码中存在裸数字常量,需确认是否应命名化,FOC.vel_angloop_p = DEFAULT_vel_angloop_p * 100;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,370,业务代码中存在裸数字常量,需确认是否应命名化,FOC.vel_MIT_p = DEFAULT_vel_MIT_p * 100;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,371,业务代码中存在裸数字常量,需确认是否应命名化,FOC.ang_loop_p = DEFAULT_angle_loop_p * 100 / limit_voltage;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,372,业务代码中存在裸数字常量,需确认是否应命名化,FOC.ang_angloop_p = DEFAULT_angle_angloop_p * 100 / limit_voltage;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,373,业务代码中存在裸数字常量,需确认是否应命名化,FOC.ang_MIT_p = DEFAULT_angle_MIT_p * 100 / limit_voltage;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,401,业务代码中存在裸数字常量,需确认是否应命名化,float Y = SQRT3DV2 * Ualpha - 0.5f * Ubeta;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,402,业务代码中存在裸数字常量,需确认是否应命名化,float Z = -SQRT3DV2 * Ualpha - 0.5f * Ubeta;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,409,业务代码中存在裸数字常量,需确认是否应命名化,"static const u8 sector_lut[8] = {0, 2, 6, 1, 4, 3, 5, 0};",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,413,业务代码中存在裸数字常量,需确认是否应命名化,"Set_3Pwm(0.5f, 0.5f, 0.5f);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,431,业务代码中存在裸数字常量,需确认是否应命名化,static const float svpwm_coeff[6][4] = {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,432,业务代码中存在裸数字常量,需确认是否应命名化,"{ SQRT3DV2, -0.5f, 0.0f, 1.0f},",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,433,业务代码中存在裸数字常量,需确认是否应命名化,"{ SQRT3DV2, 0.5f, -SQRT3DV2, 0.5f},",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,434,业务代码中存在裸数字常量,需确认是否应命名化,"{ 0.0f, 1.0f, -SQRT3DV2, -0.5f},",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,435,业务代码中存在裸数字常量,需确认是否应命名化,"{ -SQRT3DV2, 0.5f, 0.0f, -1.0f},",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,436,业务代码中存在裸数字常量,需确认是否应命名化,"{ -SQRT3DV2, -0.5f, SQRT3DV2, -0.5f},",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,437,业务代码中存在裸数字常量,需确认是否应命名化,"{ 0.0f, -1.0f, SQRT3DV2, 0.5f},",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,441,业务代码中存在裸数字常量,需确认是否应命名化,float T2 = (svpwm_coeff[sector-1][2] * Ualpha + svpwm_coeff[sector-1][3] * Ubeta) * inv_Udc;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,454,业务代码中存在裸数字常量,需确认是否应命名化,duty_a = 0.5f * T0 + T1 + T2;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,455,业务代码中存在裸数字常量,需确认是否应命名化,duty_b = 0.5f * T0 + T2;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,456,业务代码中存在裸数字常量,需确认是否应命名化,duty_c = 0.5f * T0;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,458,业务代码中存在裸数字常量,需确认是否应命名化,case 2:,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,459,业务代码中存在裸数字常量,需确认是否应命名化,duty_a = 0.5f * T0 + T1;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,460,业务代码中存在裸数字常量,需确认是否应命名化,duty_b = 0.5f * T0 + T1 + T2;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,461,业务代码中存在裸数字常量,需确认是否应命名化,duty_c = 0.5f * T0;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,463,业务代码中存在裸数字常量,需确认是否应命名化,case 3:,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,464,业务代码中存在裸数字常量,需确认是否应命名化,duty_a = 0.5f * T0;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,465,业务代码中存在裸数字常量,需确认是否应命名化,duty_b = 0.5f * T0 + T1 + T2;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,466,业务代码中存在裸数字常量,需确认是否应命名化,duty_c = 0.5f * T0 + T2;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,468,业务代码中存在裸数字常量,需确认是否应命名化,case 4:,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,469,业务代码中存在裸数字常量,需确认是否应命名化,duty_a = 0.5f * T0;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,470,业务代码中存在裸数字常量,需确认是否应命名化,duty_b = 0.5f * T0 + T1;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,471,业务代码中存在裸数字常量,需确认是否应命名化,duty_c = 0.5f * T0 + T1 + T2;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,473,业务代码中存在裸数字常量,需确认是否应命名化,case 5:,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,474,业务代码中存在裸数字常量,需确认是否应命名化,duty_a = 0.5f * T0 + T2;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,475,业务代码中存在裸数字常量,需确认是否应命名化,duty_b = 0.5f * T0;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,476,业务代码中存在裸数字常量,需确认是否应命名化,duty_c = 0.5f * T0 + T1 + T2;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,478,业务代码中存在裸数字常量,需确认是否应命名化,case 6:,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,479,业务代码中存在裸数字常量,需确认是否应命名化,duty_a = 0.5f * T0 + T1 + T2;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,480,业务代码中存在裸数字常量,需确认是否应命名化,duty_b = 0.5f * T0;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,481,业务代码中存在裸数字常量,需确认是否应命名化,duty_c = 0.5f * T0 + T1;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,484,业务代码中存在裸数字常量,需确认是否应命名化,duty_a = 0.5f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,485,业务代码中存在裸数字常量,需确认是否应命名化,duty_b = 0.5f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,486,业务代码中存在裸数字常量,需确认是否应命名化,duty_c = 0.5f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,534,业务代码中存在裸数字常量,需确认是否应命名化,if (HOLD_PWM_DUTY > 0.95f) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,535,业务代码中存在裸数字常量,需确认是否应命名化,hold_pwm_duty = 0.95f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,548,业务代码中存在裸数字常量,需确认是否应命名化,float hold_pwm_duty = target_velocity/100;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,569,业务代码中存在裸数字常量,需确认是否应命名化,if (voltage < 36.0f and voltage > 8.0f) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,572,业务代码中存在裸数字常量,需确认是否应命名化,v_half = voltage * 0.5f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,605,业务代码中存在裸数字常量,需确认是否应命名化,float current_vbus = adc_value[2] * (3.3f / 4096.0f) * 11.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,661,业务代码中存在裸数字常量,需确认是否应命名化,"2.0f, voltage_power_supply * 0.5f);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,700,业务代码中存在裸数字常量,需确认是否应命名化,if (fabsf(target_delta) > 5.0f) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,763,业务代码中存在裸数字常量,需确认是否应命名化,if (target_velocity < -120.0f) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,764,业务代码中存在裸数字常量,需确认是否应命名化,vel_inVelAngloop.set_P(vel_angloop_p * 2.0f);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,765,业务代码中存在裸数字常量,需确认是否应命名化,} else if (target_velocity < -30.0f) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,766,业务代码中存在裸数字常量,需确认是否应命名化,vel_inVelAngloop.set_P(vel_angloop_p * 1.5f);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,774,业务代码中存在裸数字常量,需确认是否应命名化,if (fabsf(target_velocity - last_vang_target_vel) > 5.0f) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.cpp,817,业务代码中存在裸数字常量,需确认是否应命名化,if (fabsf(target_velocity - last_mit_target_vel) > 5.0f) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.h,48,业务代码中存在裸数字常量,需确认是否应命名化,float voltage_power_supply = 24.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.h,191,业务代码中存在裸数字常量,需确认是否应命名化,static float cog_calib_run_data[6][COGGING_TABLE_SIZE];,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.h,198,业务代码中存在裸数字常量,需确认是否应命名化,"PIDController{DEFAULT_vel_loop_p * 100 / limit_voltage, vel_loop_Ki,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.h,199,业务代码中存在裸数字常量,需确认是否应命名化,"vel_loop_Kd, 10000, voltage_power_supply};",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.h,201,业务代码中存在裸数字常量,需确认是否应命名化,"PIDController{DEFAULT_angle_loop_p * 100 / limit_voltage, 100.0f, 0.2f,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.h,202,业务代码中存在裸数字常量,需确认是否应命名化,"10000000, voltage_power_supply};",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.h,204,业务代码中存在裸数字常量,需确认是否应命名化,"DEFAULT_current_loop_p * 100 / limit_voltage, current_loop_Ki,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.h,205,业务代码中存在裸数字常量,需确认是否应命名化,"current_loop_Kd, 1500, voltage_power_supply};",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.h,207,业务代码中存在裸数字常量,需确认是否应命名化,"PIDController{DEFAULT_vel_angloop_p * 100, vel_angloop_Ki,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.h,210,业务代码中存在裸数字常量,需确认是否应命名化,"PIDController{DEFAULT_angle_angloop_p * 100 / voltage_power_supply,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.h,211,业务代码中存在裸数字常量,需确认是否应命名化,"ang_angloop_Ki, ang_angloop_Kd, 1e4, 100};",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.h,214,业务代码中存在裸数字常量,需确认是否应命名化,"PIDController{DEFAULT_angle_MIT_p * 100 / limit_voltage, angle_MIT_Ki,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.h,215,业务代码中存在裸数字常量,需确认是否应命名化,"angle_MIT_Kd, 1e5, 100};",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.h,217,业务代码中存在裸数字常量,需确认是否应命名化,"DEFAULT_vel_MIT_p * 100, vel_MIT_Ki, vel_MIT_Kd, 1e9, 1000};",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.h,219,业务代码中存在裸数字常量,需确认是否应命名化,"DEFAULT_current_loop_p * 100 / limit_voltage, current_loop_Ki,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.h,220,业务代码中存在裸数字常量,需确认是否应命名化,"current_loop_Kd, 1500, voltage_power_supply};",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/FOC.h,237,业务代码中存在裸数字常量,需确认是否应命名化,float v_half = voltage_power_supply * 0.5f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/Filter.cpp,69,业务代码中存在裸数字常量,需确认是否应命名化,"std::nth_element(sorted, sorted + size / 2, sorted + size);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/Filter.cpp,71,业务代码中存在裸数字常量,需确认是否应命名化,return sorted[size / 2];,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/Filter.cpp,190,业务代码中存在裸数字常量,需确认是否应命名化,if (error > 180.0f) error -= 360.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/Filter.cpp,191,业务代码中存在裸数字常量,需确认是否应命名化,else if (error < -180.0f) error += 360.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/Filter.h,99,业务代码中存在裸数字常量,需确认是否应命名化,const T MIN_COVARIANCE = static_cast<T>(1e-6);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,Algorithm/pid.cpp,30,业务代码中存在裸数字常量,需确认是否应命名化,integral_prev + I * TIME_SLICE * 0.5f * (error + error_prev);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,20,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float ADC_SCALE = 3.3f / 4096.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,22,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float TEMP_FACTOR = 1000.0f / 4.3f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,24,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float VCC_FACTOR = 11.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,27,业务代码中存在裸数字常量,需确认是否应命名化,1.0f / 50.0f * 100.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,31,业务代码中存在裸数字常量,需确认是否应命名化,u16 adc_value[3] = {0};,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,32,业务代码中存在裸数字常量,需确认是否应命名化,static volatile u16 adc_current_value[3] = {0};,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,67,业务代码中存在裸数字常量,需确认是否应命名化,dma_data_parameter.number = 3;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,104,业务代码中存在裸数字常量,需确认是否应命名化,"adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 3);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,109,业务代码中存在裸数字常量,需确认是否应命名化,"adc_regular_channel_config(ADC0, 2, ADC_CHANNEL_6, ADC_SAMPLETIME_28POINT5);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,117,业务代码中存在裸数字常量,需确认是否应命名化,"adc_channel_length_config(ADC0, ADC_INSERTED_CHANNEL, 4);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,120,业务代码中存在裸数字常量,需确认是否应命名化,"adc_inserted_channel_config(ADC0, 2, ADC_CHANNEL_4, ADC_SAMPLETIME_55POINT5);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,121,业务代码中存在裸数字常量,需确认是否应命名化,"adc_inserted_channel_config(ADC0, 3, ADC_CHANNEL_5, ADC_SAMPLETIME_55POINT5);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,148,业务代码中存在裸数字常量,需确认是否应命名化,static_cast<u16>((-CURRENT_OFFSET / ADC_SCALE) + 0.5f));,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,152,业务代码中存在裸数字常量,需确认是否应命名化,(1.43f - adc_value[0] * ADC_SCALE) * TEMP_FACTOR + 35.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,158,业务代码中存在裸数字常量,需确认是否应命名化,vbus_samples[i] = adc_value[2] * ADC_SCALE * VCC_FACTOR;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,160,业务代码中存在裸数字常量,需确认是否应命名化,float R_now = (float)adc_value[1] / (4096 - (float)adc_value[1]) * 4700;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,162,业务代码中存在裸数字常量,需确认是否应命名化,1.0f / (0.00335f + 0.00025f * log(R_now / 10000.0f)) - 273.15f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,241,业务代码中存在裸数字常量,需确认是否应命名化,(1.43f - adc_value[0] * ADC_SCALE) * TEMP_FACTOR + 35.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,259,业务代码中存在裸数字常量,需确认是否应命名化,float R_now = (float)adc_value[1] / (4096 - (float)adc_value[1]) * 4700;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,261,业务代码中存在裸数字常量,需确认是否应命名化,1.0f / (0.00335f + 0.00025f * log(R_now / 10000.0f)) - 273.15f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,285,业务代码中存在裸数字常量,需确认是否应命名化,currW_samples[idx] = current_adc_to_ma(adc_current_value[2]);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,299,业务代码中存在裸数字常量,需确认是否应命名化,vbus_samples[temp_vbus_head] = adc_value[2] * ADC_SCALE * VCC_FACTOR;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,305,业务代码中存在裸数字常量,需确认是否应命名化,const u8 mid = ADC_FILTER_SIZE / 2;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ADC.cpp,323,业务代码中存在裸数字常量,需确认是否应命名化,"adc_current_value[2] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_3);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,49,业务代码中存在裸数字常量,需确认是否应命名化,uint8_t can_rx_buffer[64];,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,50,业务代码中存在裸数字常量,需确认是否应命名化,static uint32_t can_rx_dma_words[16];,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,63,业务代码中存在裸数字常量,需确认是否应命名化,u8 data[64];,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,82,业务代码中存在裸数字常量,需确认是否应命名化,"static constexpr u8 CANFD_DLC_LENGTH_TABLE[7] = {12, 16, 20, 24, 32, 48, 64};",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,103,业务代码中存在裸数字常量,需确认是否应命名化,return ((u32)node_id << 16) | (base_id & 0xFFFF);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,116,业务代码中存在裸数字常量,需确认是否应命名化,u16 rx_node_id = (u16)((received_id >> 16) & 0xFFFF);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,323,业务代码中存在裸数字常量,需确认是否应命名化,dma_rx_parameter.number = 16;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,363,业务代码中存在裸数字常量,需确认是否应命名化,can_parameter.prescaler = 6;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,426,业务代码中存在裸数字常量,需确认是否应命名化,can_parameter.prescaler = 6;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,445,业务代码中存在裸数字常量,需确认是否应命名化,can_fd_parameter.data_prescaler = 6;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,499,业务代码中存在裸数字常量,需确认是否应命名化,can_parameter.prescaler = 6;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,501,业务代码中存在裸数字常量,需确认是否应命名化,u16 i = 200;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,503,业务代码中存在裸数字常量,需确认是否应命名化,delay_1ms(10);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,516,业务代码中存在裸数字常量,需确认是否应命名化,((uint16_t)(DEV_CAN_LOOPBACK_ID)) << 3U | (1U << 2);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,545,业务代码中存在裸数字常量,需确认是否应命名化,"std::uniform_int_distribution<int> dis(0, 255);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,552,业务代码中存在裸数字常量,需确认是否应命名化,transmit_message.tx_dlen = 7;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,621,业务代码中存在裸数字常量,需确认是否应命名化,transmit_message.tx_dlen = 7;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,762,业务代码中存在裸数字常量,需确认是否应命名化,if (rx_queue[rx_queue_tail].length > 64) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,763,业务代码中存在裸数字常量,需确认是否应命名化,rx_queue[rx_queue_tail].length = 64;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,815,业务代码中存在裸数字常量,需确认是否应命名化,message->fd_flag = (uint8_t)((CAN_RFIFOMP_FDF & rfifomp) >> 7);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,819,业务代码中存在裸数字常量,需确认是否应命名化,message->fd_brs = (uint8_t)((rfifomp & CAN_RFIFOMP_BRS) >> 5);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,820,业务代码中存在裸数字常量,需确认是否应命名化,message->fd_esi = (uint8_t)((rfifomp & CAN_RFIFOMP_ESI) >> 4);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,833,业务代码中存在裸数字常量,需确认是否应命名化,if (can_rx_dma_message.rx_dlen > 64) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,834,业务代码中存在裸数字常量,需确认是否应命名化,can_rx_dma_message.rx_dlen = 64;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1004,业务代码中存在裸数字常量,需确认是否应命名化,limit_voltage = FOC.limit_voltage * 1000;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1005,业务代码中存在裸数字常量,需确认是否应命名化,mcu_temp = sampler.get_mcu_temp() * 100;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1006,业务代码中存在裸数字常量,需确认是否应命名化,motor_temp = sampler.get_drv_temp() * 100;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1007,业务代码中存在裸数字常量,需确认是否应命名化,Power_Voltage = sampler.get_vbus_voltage() * 1000;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1015,业务代码中存在裸数字常量,需确认是否应命名化,u_current_union.f = sampler.get_current('') * 1000;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1016,业务代码中存在裸数字常量,需确认是否应命名化,w_current_union.f = sampler.get_current('') * 1000;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1017,业务代码中存在裸数字常量,需确认是否应命名化,v_current_union.f = sampler.get_current('') * 1000;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1035,业务代码中存在裸数字常量,需确认是否应命名化,"memset(transmit_data, 0, 32);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1037,业务代码中存在裸数字常量,需确认是否应命名化,"pack_u16_to_bytes(transmit_data, 2, motor_temp);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1038,业务代码中存在裸数字常量,需确认是否应命名化,"pack_u16_to_bytes(transmit_data, 4, u16(u_current_union.f));",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1039,业务代码中存在裸数字常量,需确认是否应命名化,"pack_u16_to_bytes(transmit_data, 6, u16(v_current_union.f));",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1040,业务代码中存在裸数字常量,需确认是否应命名化,"pack_u16_to_bytes(transmit_data, 8, u16(w_current_union.f));",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1041,业务代码中存在裸数字常量,需确认是否应命名化,transmit_data[10] =,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1042,业务代码中存在裸数字常量,需确认是否应命名化,(transmit_data[10] & ~0x07) |,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1044,业务代码中存在裸数字常量,需确认是否应命名化,((ThermalStatus & 0x01) << 2) | ((EEPROMStatus & 0x07) << 3));,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1045,业务代码中存在裸数字常量,需确认是否应命名化,"pack_u16_to_bytes(transmit_data, 11, Power_Voltage);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1046,业务代码中存在裸数字常量,需确认是否应命名化,"pack_float_to_bytes(transmit_data, 13, rt_angle_union);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1047,业务代码中存在裸数字常量,需确认是否应命名化,"pack_float_to_bytes(transmit_data, 17, rt_velocity_union);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1048,业务代码中存在裸数字常量,需确认是否应命名化,"pack_float_to_bytes(transmit_data, 21, rt_current_union);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1049,业务代码中存在裸数字常量,需确认是否应命名化,"pack_float_to_bytes(transmit_data, 25, testfloat_union);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1050,业务代码中存在裸数字常量,需确认是否应命名化,transmit_data[29] = test_u16 & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1051,业务代码中存在裸数字常量,需确认是否应命名化,transmit_data[30] = (test_u16 >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1052,业务代码中存在裸数字常量,需确认是否应命名化,transmit_data[31] = cpu_usage;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1055,业务代码中存在裸数字常量,需确认是否应命名化,"CANFD_AsyncSend(build_can_id(CANFD_STATUS_ID), 32, transmit_data);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1058,业务代码中存在裸数字常量,需确认是否应命名化,"memset(transmit_data, 0, 24);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1061,业务代码中存在裸数字常量,需确认是否应命名化,"pack_float_to_bytes(transmit_data, 3, target_current_union);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1062,业务代码中存在裸数字常量,需确认是否应命名化,"pack_float_to_bytes(transmit_data, 7, target_velocity_union);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1063,业务代码中存在裸数字常量,需确认是否应命名化,"pack_float_to_bytes(transmit_data, 11, target_angle_union);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1066,业务代码中存在裸数字常量,需确认是否应命名化,"CANFD_AsyncSend(build_can_id(CANFD_CONFIG_ID), 24, transmit_data);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1102,业务代码中存在裸数字常量,需确认是否应命名化,u16 sender_node_id = (u16)((current_message.rx_efid >> 16) & 0xFFFF);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1138,业务代码中存在裸数字常量,需确认是否应命名化,if (current_message.rx_dlen >= 2) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1153,业务代码中存在裸数字常量,需确认是否应命名化,transmit_data[2] =,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1154,业务代码中存在裸数字常量,需确认是否应命名化,(u8)((new_node_id >> 8) & 0xFF);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1158,业务代码中存在裸数字常量,需确认是否应命名化,"u8 send_result = CANFD_AsyncSend(build_can_id(CANFD_SET_NODE_ID), 3,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1179,业务代码中存在裸数字常量,需确认是否应命名化,"CANFD_AsyncSend(build_can_id(CANFD_SET_NODE_ID), 3,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1188,业务代码中存在裸数字常量,需确认是否应命名化,transmit_data[2] = (u8)((new_node_id >> 8) & 0xFF);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1190,业务代码中存在裸数字常量,需确认是否应命名化,"CANFD_AsyncSend(build_can_id(CANFD_SET_NODE_ID), 3,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1207,业务代码中存在裸数字常量,需确认是否应命名化,"float(unpack_bytes_to_u16(current_message.rx_data, 1)) / 1000;",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1210,业务代码中存在裸数字常量,需确认是否应命名化,"unpack_bytes_to_float(current_message.rx_data, 3).f;",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1215,业务代码中存在裸数字常量,需确认是否应命名化,"unpack_bytes_to_float(current_message.rx_data, 7).f;",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1220,业务代码中存在裸数字常量,需确认是否应命名化,"unpack_bytes_to_float(current_message.rx_data, 11).f;",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1229,业务代码中存在裸数字常量,需确认是否应命名化,"u16 P_config = unpack_bytes_to_u16(current_message.rx_data, 15);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1233,业务代码中存在裸数字常量,需确认是否应命名化,"P_config = unpack_bytes_to_u16(current_message.rx_data, 17);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1238,业务代码中存在裸数字常量,需确认是否应命名化,"P_config = unpack_bytes_to_u16(current_message.rx_data, 19);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1244,业务代码中存在裸数字常量,需确认是否应命名化,u8 eigth_byte = current_message.rx_data[7];,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1255,业务代码中存在裸数字常量,需确认是否应命名化,if (first_byte >> 2 & 0x01) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1259,业务代码中存在裸数字常量,需确认是否应命名化,if (first_byte >> 3 & 0x01) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1266,业务代码中存在裸数字常量,需确认是否应命名化,if (first_byte >> 4 & 0x01) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1271,业务代码中存在裸数字常量,需确认是否应命名化,if (eigth_byte & 0x80 >> 7) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1287,业务代码中存在裸数字常量,需确认是否应命名化,"CANFD_AsyncSend(build_can_id(CANFD_OTA_ACK_ID), 2,",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1294,业务代码中存在裸数字常量,需确认是否应命名化,"CANFD_AsyncSend(build_can_id(CANFD_GET_NODE_ID), 2, transmit_data);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1401,业务代码中存在裸数字常量,需确认是否应命名化,if (length > 8) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.cpp,1419,业务代码中存在裸数字常量,需确认是否应命名化,for (int i = 0; i < length && i < 8; i++) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.h,25,业务代码中存在裸数字常量,需确认是否应命名化,u8 b[4];,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.h,38,业务代码中存在裸数字常量,需确认是否应命名化,buffer[offset + 1] = (u8)((value >> 8) & 0xFF);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.h,53,业务代码中存在裸数字常量,需确认是否应命名化,buffer[offset + 2] = float_union.b[2];,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.h,54,业务代码中存在裸数字常量,需确认是否应命名化,buffer[offset + 3] = float_union.b[3];,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.h,65,业务代码中存在裸数字常量,需确认是否应命名化,short value = (short)(buffer[offset] | (buffer[offset + 1] << 8));,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.h,77,业务代码中存在裸数字常量,需确认是否应命名化,u16 value = (u16)(buffer[offset] | (buffer[offset + 1] << 8));,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.h,92,业务代码中存在裸数字常量,需确认是否应命名化,float_union.b[2] = buffer[offset + 2];,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.h,93,业务代码中存在裸数字常量,需确认是否应命名化,float_union.b[3] = buffer[offset + 3];,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.h,161,业务代码中存在裸数字常量,需确认是否应命名化,static const uint8_t CAN_RX_BUFFER_SIZE = 8;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.h,162,业务代码中存在裸数字常量,需确认是否应命名化,static const u32 CAN_SILENT_DURATION_MS = 10000;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Can.h,195,业务代码中存在裸数字常量,需确认是否应命名化,u8 transmit_data[64];,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Timer.cpp,19,业务代码中存在裸数字常量,需确认是否应命名化,extern u16 adc_value[3];,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Timer.cpp,27,业务代码中存在裸数字常量,需确认是否应命名化,static const u32 task_schedule_100us[10] = {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Timer.cpp,41,业务代码中存在裸数字常量,需确认是否应命名化,static const u32 task_schedule_1ms[10] = {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Timer.cpp,48,业务代码中存在裸数字常量,需确认是否应命名化,static const u32 task_schedule_10ms[10] = {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Timer.cpp,53,业务代码中存在裸数字常量,需确认是否应命名化,static const u32 task_schedule_100ms[10] = {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Timer.cpp,69,业务代码中存在裸数字常量,需确认是否应命名化,"nvic_irq_enable(TIMER1_IRQn, 0, 2);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/Timer.cpp,299,业务代码中存在裸数字常量,需确认是否应命名化,if (channel <= 3) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ang_sensor.cpp,124,业务代码中存在裸数字常量,需确认是否应命名化,uint32_t timeout = 100;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,device/ang_sensor.cpp,203,业务代码中存在裸数字常量,需确认是否应命名化,spi_init_str.prescale = 24;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,main.cpp,69,业务代码中存在裸数字常量,需确认是否应命名化,watchdog_init(50);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,main.cpp,150,业务代码中存在裸数字常量,需确认是否应命名化,FOC.control_mode < 8) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,32,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 SOFTWARE_VERSION_MAJOR = 26;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,34,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 SOFTWARE_VERSION_MINOR = 5;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,36,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 SOFTWARE_VERSION_PATCH = 19;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,38,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 SOFTWARE_VERSION_BUILD = 2;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,41,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 HARDWARE_VERSION_MAJOR = 25;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,43,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 HARDWARE_VERSION_MINOR = 12;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,50,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 BOOT_VERSION_MAJOR = 26;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,54,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 BOOT_VERSION_PATCH = 12;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,125,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u32 OTA_CONFIG_NUM = 6;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,145,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u8 PP = 11;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,149,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 REDUCTION_RATIO = 25;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,151,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float CURRENT_OFFSET = -3.31f / 2.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,157,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float ANGLESENS_CALIBRATION_ANGLE = 83.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,171,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float ANGLE_OBSERVER_ALPHA = 0.75f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,179,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float VELOCITY_KALMAN_INITIAL_COVARIANCE = 1e-3f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,182,业务代码中存在裸数字常量,需确认是否应命名化,5e-4f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,191,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float CURRENT_KALMAN_INITIAL_COVARIANCE = 100.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,193,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float CURRENT_KALMAN_PROCESS_NOISE_Q = 10.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,195,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float CURRENT_KALMAN_MEASUREMENT_NOISE_R = 5e-5f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,199,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float DEFAULT_current_loop_p = 0.1f / 100 * 12;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,201,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float current_loop_Ki = 0.55f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,203,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float current_loop_Kd = 3e-4f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,206,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float DEFAULT_vel_loop_p = 0.018f / 100 * 12;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,208,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float vel_loop_Ku = 3.600000e-03 * 0.7 * 100 / 12;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,210,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float vel_loop_Tu = 17.0f * 1e-3f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,212,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float vel_loop_Ki = 1.2 * vel_loop_Ku / vel_loop_Tu;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,214,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float vel_loop_Kd = 0.075 * vel_loop_Ku * vel_loop_Tu * 2;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,217,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float DEFAULT_vel_angloop_p = 0.4f / 100;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,219,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float vel_angloop_Ki = 5.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,225,业务代码中存在裸数字常量,需确认是否应命名化,150.0f / 100 * 12;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,232,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float DEFAULT_angle_loop_p = 60.0f / 100 * 12;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,235,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float DEFAULT_angle_MIT_p = 100.0f / 100 * 12;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,242,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float DEFAULT_vel_MIT_p = 5.0f / 100;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,244,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float vel_MIT_Ki = 15.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,249,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float DEFAULT_current_MIT_p = 0.2f / 100 * 12;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,253,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float current_MIT_Kd = 3e-4f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,260,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float ADC_MAX = 65536.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,262,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float PI = 3.14159265358979323846f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,264,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float INV_PI_3 = 3.0f / PI;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,266,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float PI_3 = PI / 3.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,268,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float _1_SQRT3 = 0.57735026919f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,270,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float _3PI_2 = 4.71238898038f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,272,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float SQRT3 = 1.7320508075688772f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,274,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float SQRT3DV2 = 0.8660254037844386f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,276,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float COS_PI_3 = 0.5f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,278,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float ANGLE_FACTOR = 25.0f / 180.0f * PI;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,280,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float DEG2RAD = 1.0f / 180.0f * PI;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,282,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float RAD2DEG = 180.0f / PI;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,286,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u8 CONFIG_SAVED_NUM = 6;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,290,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 LUT_SIZE = 1024;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,294,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 LUT_SCALE = (LUT_SIZE / (2.0f * PI));,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,338,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u8 ADC_FILTER_SIZE = 6;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,342,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float ERROR_ADC_VAL = 255.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,344,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float MAX_TEMP = 150.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,346,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float MIN_TEMP = -40.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,348,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float MAX_CURRENT = 40.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,350,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float MIN_CURRENT = -40.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,352,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float MAX_VCC = 65.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,358,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 VEL_FILTER_SIZE = 4;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,364,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float ANGLE_WRAP_THRESHOLD = 300.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,366,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float ANGLE_WRAP_VALUE = 360.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,368,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float RAD_FACTOR = 1.0f / ADC_MAX * 2.0f * PI;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,370,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float ANGLESENS_FACTOR = 1.0f / ADC_MAX * 360.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,374,业务代码中存在裸数字常量,需确认是否应命名化,constexpr int TIMER2_PRESCALER = 119;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,376,业务代码中存在裸数字常量,需确认是否应命名化,constexpr int TIMER2_PERIOD = 49;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,381,业务代码中存在裸数字常量,需确认是否应命名化,(TIMER2_PERIOD + 1) * (TIMER2_PRESCALER + 1) / 120000000.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,391,业务代码中存在裸数字常量,需确认是否应命名化,constexpr int TIMER1_PERIOD = 2999;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,396,业务代码中存在裸数字常量,需确认是否应命名化,(TIMER1_PERIOD + 1) * 0.41 - 1;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,400,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 COGGING_TABLE_SIZE = 128;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,413,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float VBUS_DROP_THRESHOLD = 5.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,415,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float VBUS_ABSOLUTE_MIN = 12.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,417,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u32 VBUS_DEBOUNCE_COUNT = 5;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,419,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float VBUS_RECOVERY_RATIO = 0.9f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,427,业务代码中存在裸数字常量,需确认是否应命名化,while (angle >= 360.0f) angle -= 360.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/config.h,428,业务代码中存在裸数字常量,需确认是否应命名化,while (angle < 0.0f) angle += 360.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,97,业务代码中存在裸数字常量,需确认是否应命名化,"status_read[2] = readFloat(ADDR_VOLTAGE_LIMIT, &data[1]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,98,业务代码中存在裸数字常量,需确认是否应命名化,"status_read[3] = readFloat(ADDR_VEL_LIMIT, &data[2]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,99,业务代码中存在裸数字常量,需确认是否应命名化,"status_read[4] = readFloat(ADDR_ANGLE, &data[3]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,100,业务代码中存在裸数字常量,需确认是否应命名化,"status_read[5] = readFloat(ADDR_TARGET_ANGLE, &data[4]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,101,业务代码中存在裸数字常量,需确认是否应命名化,"status_read[6] = readFloat(ADDR_TARGET_VEL, &data[5]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,156,业务代码中存在裸数字常量,需确认是否应命名化,FOC.target_current = data[2];,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,157,业务代码中存在裸数字常量,需确认是否应命名化,KTH7823.angle_set(data[3]);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,158,业务代码中存在裸数字常量,需确认是否应命名化,FOC.target_angle = data[4];,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,159,业务代码中存在裸数字常量,需确认是否应命名化,FOC.target_velocity = data[5];,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,185,业务代码中存在裸数字常量,需确认是否应命名化,*data = (u16)((data_word & DATA_U16_MASK) >> 16);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,242,业务代码中存在裸数字常量,需确认是否应命名化,u32 data_word_to_write = ((u32)data << 16) | (u32)virtualAddr;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,441,业务代码中存在裸数字常量,需确认是否应命名化,"status = writeFloat(ADDR_VEL_LIMIT, data[2]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,447,业务代码中存在裸数字常量,需确认是否应命名化,"status = writeFloat(ADDR_ANGLE, data[3]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,453,业务代码中存在裸数字常量,需确认是否应命名化,"status = writeFloat(ADDR_TARGET_ANGLE, data[4]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,459,业务代码中存在裸数字常量,需确认是否应命名化,"status = writeFloat(ADDR_TARGET_VEL, data[5]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,507,业务代码中存在裸数字常量,需确认是否应命名化,u32 crc_data[2];,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,511,业务代码中存在裸数字常量,需确认是否应命名化,"return crc_block_data_calculate(crc_data, 2);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,577,业务代码中存在裸数字常量,需确认是否应命名化,u32 write_data[4];,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,580,业务代码中存在裸数字常量,需确认是否应命名化,write_data[2] = counter;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,581,业务代码中存在裸数字常量,需确认是否应命名化,write_data[3] = crc;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,588,业务代码中存在裸数字常量,需确认是否应命名化,for (u8 i = 0; i < 4; i++) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,820,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[2] = *flash_ptr;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,822,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[3] = *flash_ptr;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,824,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[4] = *flash_ptr;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,826,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[5] = *flash_ptr;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,832,业务代码中存在裸数字常量,需确认是否应命名化,"temp_val[0], temp_val[1], temp_val[2], temp_val[3],",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,833,业务代码中存在裸数字常量,需确认是否应命名化,"temp_val[4], temp_val[5]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,845,业务代码中存在裸数字常量,需确认是否应命名化,u32 current_addr = n_APP_LATEST_AVAL_ADDR + 4 * i;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,864,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[2] = *flash_ptr;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,866,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[3] = *flash_ptr;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,868,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[4] = *flash_ptr;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,870,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[5] = *flash_ptr;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,874,业务代码中存在裸数字常量,需确认是否应命名化,"temp_val[0], temp_val[1], temp_val[2], temp_val[3],",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,875,业务代码中存在裸数字常量,需确认是否应命名化,"temp_val[4], temp_val[5]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,889,业务代码中存在裸数字常量,需确认是否应命名化,for (int i = 0; i < 8; i++) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,912,业务代码中存在裸数字常量,需确认是否应命名化,uint32_t reset_handler = *(__IO uint32_t *)(BOOTLOADER_START_ADDR + 4);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,952,业务代码中存在裸数字常量,需确认是否应命名化,delay_1ms(1000);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,969,业务代码中存在裸数字常量,需确认是否应命名化,"(uint32_t *)APPLATEST_START_ADDR, APP_MAX_SIZE / 4);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,972,业务代码中存在裸数字常量,需确认是否应命名化,uint32_t src_data = src_ptr[offset / 4];,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,989,业务代码中存在裸数字常量,需确认是否应命名化,delay_1ms(1000);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,997,业务代码中存在裸数字常量,需确认是否应命名化,offset += 4;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,1000,业务代码中存在裸数字常量,需确认是否应命名化,if ((offset % 4096) == 0) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/flash.cpp,1013,业务代码中存在裸数字常量,需确认是否应命名化,APP_MAX_SIZE / 4);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/health.cpp,25,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 PROTECT_TIME = 6000;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/health.cpp,40,业务代码中存在裸数字常量,需确认是否应命名化,if (drv_temp == 255),安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/health.cpp,42,业务代码中存在裸数字常量,需确认是否应命名化,if (mcu_temp == 255),安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/health.cpp,63,业务代码中存在裸数字常量,需确认是否应命名化,"u32 currents[3] = {(u32)(sampler.get_current('') * 1000),",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/health.cpp,64,业务代码中存在裸数字常量,需确认是否应命名化,"(u32)(sampler.get_current('') * 1000),",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/health.cpp,65,业务代码中存在裸数字常量,需确认是否应命名化,(u32)(sampler.get_current('') * 1000)};,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/health.cpp,68,业务代码中存在裸数字常量,需确认是否应命名化,"current_max = max(currents[0], currents[1], currents[2]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/health.cpp,69,业务代码中存在裸数字常量,需确认是否应命名化,if (current_max < 2000) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/health.cpp,72,业务代码中存在裸数字常量,需确认是否应命名化,} else if (current_max > 3800) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/health.cpp,75,业务代码中存在裸数字常量,需确认是否应命名化,} else if (current_max > 3400) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/health.cpp,78,业务代码中存在裸数字常量,需确认是否应命名化,} else if (current_max > 3000) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/health.cpp,81,业务代码中存在裸数字常量,需确认是否应命名化,} else if (current_max > 2000) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/health.h,46,业务代码中存在裸数字常量,需确认是否应命名化,u32 thermal_capacity = 3600000;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/health.h,48,业务代码中存在裸数字常量,需确认是否应命名化,u16 gapTimeMs = 10;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/health.h,52,业务代码中存在裸数字常量,需确认是否应命名化,": thermalRate(FLOAT_TO_Q16_16(0.995f)),",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/health.h,53,业务代码中存在裸数字常量,需确认是否应命名化,recoveryRate(FLOAT_TO_Q16_16(0.33f)) {},安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,142,业务代码中存在裸数字常量,需确认是否应命名化,u8 versionData[24] = {0};,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,147,业务代码中存在裸数字常量,需确认是否应命名化,versionData[1] = (softwareVersion.major >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,148,业务代码中存在裸数字常量,需确认是否应命名化,versionData[2] = softwareVersion.minor & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,149,业务代码中存在裸数字常量,需确认是否应命名化,versionData[3] = (softwareVersion.minor >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,150,业务代码中存在裸数字常量,需确认是否应命名化,versionData[4] = softwareVersion.patch & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,151,业务代码中存在裸数字常量,需确认是否应命名化,versionData[5] = (softwareVersion.patch >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,152,业务代码中存在裸数字常量,需确认是否应命名化,versionData[6] = softwareVersion.build & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,153,业务代码中存在裸数字常量,需确认是否应命名化,versionData[7] = (softwareVersion.build >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,156,业务代码中存在裸数字常量,需确认是否应命名化,versionData[8] = hardwareVersion.major & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,157,业务代码中存在裸数字常量,需确认是否应命名化,versionData[9] = (hardwareVersion.major >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,158,业务代码中存在裸数字常量,需确认是否应命名化,versionData[10] = hardwareVersion.minor & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,159,业务代码中存在裸数字常量,需确认是否应命名化,versionData[11] = (hardwareVersion.minor >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,160,业务代码中存在裸数字常量,需确认是否应命名化,versionData[12] = hardwareVersion.patch & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,161,业务代码中存在裸数字常量,需确认是否应命名化,versionData[13] = (hardwareVersion.patch >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,162,业务代码中存在裸数字常量,需确认是否应命名化,versionData[14] = hardwareVersion.build & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,163,业务代码中存在裸数字常量,需确认是否应命名化,versionData[15] = (hardwareVersion.build >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,166,业务代码中存在裸数字常量,需确认是否应命名化,versionData[16] = bootVersion.major & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,167,业务代码中存在裸数字常量,需确认是否应命名化,versionData[17] = (bootVersion.major >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,168,业务代码中存在裸数字常量,需确认是否应命名化,versionData[18] = bootVersion.minor & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,169,业务代码中存在裸数字常量,需确认是否应命名化,versionData[19] = (bootVersion.minor >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,170,业务代码中存在裸数字常量,需确认是否应命名化,versionData[20] = bootVersion.patch & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,171,业务代码中存在裸数字常量,需确认是否应命名化,versionData[21] = (bootVersion.patch >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,172,业务代码中存在裸数字常量,需确认是否应命名化,versionData[22] = bootVersion.build & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,173,业务代码中存在裸数字常量,需确认是否应命名化,versionData[23] = (bootVersion.build >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,178,业务代码中存在裸数字常量,需确认是否应命名化,"CAN0_transmiter.build_can_id(CANFD_VERSION_ID), 24, versionData);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,186,业务代码中存在裸数字常量,需确认是否应命名化,char versionStr[32];,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,219,业务代码中存在裸数字常量,需确认是否应命名化,"status = fwdgt_config(time * 0.625, FWDGT_PSC_DIV64);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,298,业务代码中存在裸数字常量,需确认是否应命名化,u32 temp_val[6];,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,305,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[2] = *flash_ptr1;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,307,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[3] = *flash_ptr1;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,309,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[4] = *flash_ptr1;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,311,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[5] = *flash_ptr1;,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,316,业务代码中存在裸数字常量,需确认是否应命名化,"temp_val[0], temp_val[1], temp_val[2], temp_val[3], temp_val[4],",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,317,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[5]);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,332,业务代码中存在裸数字常量,需确认是否应命名化,"u8 transmit_data[2] = {0x0A, 0xAC};",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/initial.cpp,334,业务代码中存在裸数字常量,需确认是否应命名化,"CAN0_transmiter.CANFD_AsyncSend(CANFD_OTA_ACK_ID, 2, transmit_data);",安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/systick.cpp,159,业务代码中存在裸数字常量,需确认是否应命名化,delay_1ms(1000);,安全相关阈值/时间/比例建议用具名常量或配置宏。
info,SUP-MAG-001,sys/systick.cpp,227,业务代码中存在裸数字常量,需确认是否应命名化,SCB->AIRCR = (0x05FA0000U | (SCB->AIRCR & (0x700U)) | (1U << 2));,安全相关阈值/时间/比例建议用具名常量或配置宏。
1 severity rule_id file line description evidence recommendation
2 warning SUP-CMP-001 Algorithm/FOC.cpp 53 浮点变量比较需确认容差或离散状态含义 if (rt_velocity < -0.5f) last_table = cogging_table_rev; 建议确认是否应使用阈值/容差比较。
3 warning SUP-CMP-001 Algorithm/FOC.cpp 54 浮点变量比较需确认容差或离散状态含义 else if (rt_velocity > 0.5f) last_table = cogging_table; 建议确认是否应使用阈值/容差比较。
4 warning SUP-CMP-001 Algorithm/FOC.cpp 404 浮点变量比较需确认容差或离散状态含义 u8 sector_code = (X > 0.0f ? 1u : 0u) 建议确认是否应使用阈值/容差比较。
5 warning SUP-CMP-001 Algorithm/FOC.cpp 405 浮点变量比较需确认容差或离散状态含义 + (Y > 0.0f ? 2u : 0u) 建议确认是否应使用阈值/容差比较。
6 warning SUP-CMP-001 Algorithm/FOC.cpp 406 浮点变量比较需确认容差或离散状态含义 + (Z > 0.0f ? 4u : 0u); 建议确认是否应使用阈值/容差比较。
7 warning SUP-CMP-001 Algorithm/FOC.cpp 534 浮点变量比较需确认容差或离散状态含义 if (HOLD_PWM_DUTY > 0.95f) { 建议确认是否应使用阈值/容差比较。
8 warning SUP-CMP-001 Algorithm/FOC.cpp 536 浮点变量比较需确认容差或离散状态含义 } else if (HOLD_PWM_DUTY < 0.0f) { 建议确认是否应使用阈值/容差比较。
9 warning SUP-CMP-001 Algorithm/FOC.cpp 569 浮点变量比较需确认容差或离散状态含义 if (voltage < 36.0f and voltage > 8.0f) { 建议确认是否应使用阈值/容差比较。
10 warning SUP-CMP-001 Algorithm/FOC.cpp 763 浮点变量比较需确认容差或离散状态含义 if (target_velocity < -120.0f) { 建议确认是否应使用阈值/容差比较。
11 warning SUP-CMP-001 Algorithm/FOC.cpp 765 浮点变量比较需确认容差或离散状态含义 } else if (target_velocity < -30.0f) { 建议确认是否应使用阈值/容差比较。
12 warning SUP-CMP-001 Algorithm/Filter.cpp 190 浮点变量比较需确认容差或离散状态含义 if (error > 180.0f) error -= 360.0f; 建议确认是否应使用阈值/容差比较。
13 warning SUP-CMP-001 Algorithm/Filter.cpp 191 浮点变量比较需确认容差或离散状态含义 else if (error < -180.0f) error += 360.0f; 建议确认是否应使用阈值/容差比较。
14 warning SUP-CMP-001 sys/config.h 427 浮点变量比较需确认容差或离散状态含义 while (angle >= 360.0f) angle -= 360.0f; 建议确认是否应使用阈值/容差比较。
15 warning SUP-CMP-001 sys/config.h 428 浮点变量比较需确认容差或离散状态含义 while (angle < 0.0f) angle += 360.0f; 建议确认是否应使用阈值/容差比较。
16 warning SUP-GLB-001 Algorithm/FOC.cpp 23 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 FOC_Controller FOC; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
17 warning SUP-GLB-001 device/ADC.cpp 20 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float ADC_SCALE = 3.3f / 4096.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
18 warning SUP-GLB-001 device/ADC.cpp 22 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float TEMP_FACTOR = 1000.0f / 4.3f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
19 warning SUP-GLB-001 device/ADC.cpp 24 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float VCC_FACTOR = 11.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
20 warning SUP-GLB-001 device/ADC.cpp 26 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float CURRENT_FACTOR = 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
21 warning SUP-GLB-001 device/ADC.cpp 30 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 sampler sampler; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
22 warning SUP-GLB-001 device/ADC.cpp 33 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 static volatile u8 adc_current_frame_ready = 0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
23 warning SUP-GLB-001 device/Can.cpp 37 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 CANX = CAN0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
24 warning SUP-GLB-001 device/Can.cpp 48 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 dma_parameter_struct dma_rx_parameter; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
25 warning SUP-GLB-001 device/Can.cpp 51 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 static volatile bool can_rx_dma_busy = false; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
26 warning SUP-GLB-001 device/Can.cpp 52 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 static can_receive_message_struct can_rx_dma_message; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
27 warning SUP-GLB-001 device/Can.cpp 72 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 static volatile u8 rx_queue_head = 0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
28 warning SUP-GLB-001 device/Can.cpp 73 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 static volatile u8 rx_queue_tail = 0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
29 warning SUP-GLB-001 device/Can.cpp 74 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 static volatile u8 rx_queue_count = 0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
30 warning SUP-GLB-001 device/Can.cpp 77 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 static volatile u8 tx_queue_head = 0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
31 warning SUP-GLB-001 device/Can.cpp 78 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 static volatile u8 tx_queue_tail = 0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
32 warning SUP-GLB-001 device/Can.cpp 79 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 static volatile u8 tx_queue_count = 0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
33 warning SUP-GLB-001 device/Can.cpp 84 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 CAN_transmiter CAN0_transmiter; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
34 warning SUP-GLB-001 device/Timer.cpp 18 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 volatile u32 total_us100_counter = 0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
35 warning SUP-GLB-001 device/ang_sensor.cpp 38 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 volatile bool spi_dma_tx_complete = false; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
36 warning SUP-GLB-001 device/ang_sensor.cpp 39 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 volatile bool spi_dma_rx_complete = false; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
37 warning SUP-GLB-001 device/ang_sensor.cpp 41 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 angle_sensor KTH7823; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
38 warning SUP-GLB-001 main.cpp 39 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 TaskScheduler scheduler = {0}; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
39 warning SUP-GLB-001 main.cpp 40 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 u32 motor_runtime_50us = 0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
40 warning SUP-GLB-001 main.cpp 41 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 u32 cnt_test = 0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
41 warning SUP-GLB-001 sys/config.h 32 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 SOFTWARE_VERSION_MAJOR = 26; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
42 warning SUP-GLB-001 sys/config.h 34 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 SOFTWARE_VERSION_MINOR = 5; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
43 warning SUP-GLB-001 sys/config.h 36 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 SOFTWARE_VERSION_PATCH = 19; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
44 warning SUP-GLB-001 sys/config.h 38 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 SOFTWARE_VERSION_BUILD = 2; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
45 warning SUP-GLB-001 sys/config.h 41 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 HARDWARE_VERSION_MAJOR = 25; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
46 warning SUP-GLB-001 sys/config.h 43 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 HARDWARE_VERSION_MINOR = 12; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
47 warning SUP-GLB-001 sys/config.h 45 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 HARDWARE_VERSION_PATCH = 01; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
48 warning SUP-GLB-001 sys/config.h 47 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 HARDWARE_VERSION_BUILD = 0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
49 warning SUP-GLB-001 sys/config.h 50 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 BOOT_VERSION_MAJOR = 26; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
50 warning SUP-GLB-001 sys/config.h 52 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 BOOT_VERSION_MINOR = 1; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
51 warning SUP-GLB-001 sys/config.h 54 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 BOOT_VERSION_PATCH = 12; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
52 warning SUP-GLB-001 sys/config.h 56 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 BOOT_VERSION_BUILD = 0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
53 warning SUP-GLB-001 sys/config.h 60 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 BOOTLOADER_SIZE = 0x6000; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
54 warning SUP-GLB-001 sys/config.h 62 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 BOOTLOADER_START_ADDR = 0x08000000; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
55 warning SUP-GLB-001 sys/config.h 64 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 APPLATEST_START_ADDR = 0x08012000; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
56 warning SUP-GLB-001 sys/config.h 66 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 APPBACK_START_ADDR = 0x08006000; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
57 warning SUP-GLB-001 sys/config.h 68 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 APP_MAX_SIZE = 0xC000; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
58 warning SUP-GLB-001 sys/config.h 70 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 FMC_PAGE_SIZE = 0x400; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
59 warning SUP-GLB-001 sys/config.h 72 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 SLEEP_CONFIG_START = 0x0801E400; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
60 warning SUP-GLB-001 sys/config.h 74 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 SLEEP_CONFIG_END = 0x0801E800; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
61 warning SUP-GLB-001 sys/config.h 76 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 FLASH_EMPTY = 0xFFFFFFFF; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
62 warning SUP-GLB-001 sys/config.h 78 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 SLEEP_ENABLE = 0x11111111; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
63 warning SUP-GLB-001 sys/config.h 80 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 SLEEP_DISABLE = 0x00000000; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
64 warning SUP-GLB-001 sys/config.h 92 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 NODE_ID_PAGE_ADDR = 0x0801E800; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
65 warning SUP-GLB-001 sys/config.h 94 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 NODE_ID_PRIMARY_ADDR = 0x0801E800; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
66 warning SUP-GLB-001 sys/config.h 96 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 NODE_ID_BACKUP_ADDR = 0x0801E840; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
67 warning SUP-GLB-001 sys/config.h 98 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 NODE_ID_MAGIC = 0x4E4F4445; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
68 warning SUP-GLB-001 sys/config.h 100 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 DEFAULT_NODE_ID = 1; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
69 warning SUP-GLB-001 sys/config.h 102 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 BROADCAST_NODE_ID = 0x1FFF; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
70 warning SUP-GLB-001 sys/config.h 104 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 MAX_NODE_ID = 0x1FFE; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
71 warning SUP-GLB-001 sys/config.h 113 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u8 NODE_ID_STRUCT_SIZE = 0x10; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
72 warning SUP-GLB-001 sys/config.h 115 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u8 NODE_ID_MAGIC_OFFSET = 0x00; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
73 warning SUP-GLB-001 sys/config.h 117 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u8 NODE_ID_VALUE_OFFSET = 0x04; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
74 warning SUP-GLB-001 sys/config.h 119 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u8 NODE_ID_COUNTER_OFFSET = 0x08; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
75 warning SUP-GLB-001 sys/config.h 121 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u8 NODE_ID_CRC_OFFSET = 0x0C; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
76 warning SUP-GLB-001 sys/config.h 125 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 OTA_CONFIG_NUM = 6; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
77 warning SUP-GLB-001 sys/config.h 127 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 n_APP_LATEST_AVAL_ADDR = 0x0801E000; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
78 warning SUP-GLB-001 sys/config.h 129 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 n_APP_BACKUP_AVAL_ADDR = 0x0801E004; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
79 warning SUP-GLB-001 sys/config.h 131 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 n_APP_LATEST_EN_ADDR = 0x0801E008; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
80 warning SUP-GLB-001 sys/config.h 133 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 n_APP_BACKUP_EN_ADDR = 0x0801E00C; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
81 warning SUP-GLB-001 sys/config.h 135 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 n_APP_LATEST_CHECK_ADDR = 0x0801E010; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
82 warning SUP-GLB-001 sys/config.h 137 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 n_APP_BACKUP_CHECK_ADDR = 0x0801E014; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
83 warning SUP-GLB-001 sys/config.h 139 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 OTA_NOT_AVAL = 0xFFFFFFFF; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
84 warning SUP-GLB-001 sys/config.h 141 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 OTA_AVAL = 0x00000000; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
85 warning SUP-GLB-001 sys/config.h 145 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u8 PP = 11; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
86 warning SUP-GLB-001 sys/config.h 147 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float DIR = 1.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
87 warning SUP-GLB-001 sys/config.h 149 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 REDUCTION_RATIO = 25; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
88 warning SUP-GLB-001 sys/config.h 151 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float CURRENT_OFFSET = -3.31f / 2.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
89 warning SUP-GLB-001 sys/config.h 153 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float HOLD_PWM_DUTY = 0.1f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
90 warning SUP-GLB-001 sys/config.h 155 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 ANGLESENS_OFFSET = 0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
91 warning SUP-GLB-001 sys/config.h 157 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float ANGLESENS_CALIBRATION_ANGLE = 83.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
92 warning SUP-GLB-001 sys/config.h 159 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float KE_FACTOR = 0.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
93 warning SUP-GLB-001 sys/config.h 163 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float ANGLE_KALMAN_INITIAL_STATE = 0.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
94 warning SUP-GLB-001 sys/config.h 165 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float ANGLE_KALMAN_INITIAL_COVARIANCE = 0.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
95 warning SUP-GLB-001 sys/config.h 167 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float ANGLE_KALMAN_PROCESS_NOISE_Q = 0.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
96 warning SUP-GLB-001 sys/config.h 169 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float ANGLE_KALMAN_MEASUREMENT_NOISE_R = 0.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
97 warning SUP-GLB-001 sys/config.h 171 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float ANGLE_OBSERVER_ALPHA = 0.75f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
98 warning SUP-GLB-001 sys/config.h 173 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float ANGLE_OBSERVER_BETA = 0.002f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
99 warning SUP-GLB-001 sys/config.h 177 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float VELOCITY_KALMAN_INITIAL_STATE = 0.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
100 warning SUP-GLB-001 sys/config.h 179 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float VELOCITY_KALMAN_INITIAL_COVARIANCE = 1e-3f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
101 warning SUP-GLB-001 sys/config.h 181 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float VELOCITY_KALMAN_PROCESS_NOISE_Q = 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
102 warning SUP-GLB-001 sys/config.h 184 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float VELOCITY_KALMAN_MEASUREMENT_NOISE_R = 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
103 warning SUP-GLB-001 sys/config.h 189 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float CURRENT_KALMAN_INITIAL_STATE = 0.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
104 warning SUP-GLB-001 sys/config.h 191 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float CURRENT_KALMAN_INITIAL_COVARIANCE = 100.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
105 warning SUP-GLB-001 sys/config.h 193 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float CURRENT_KALMAN_PROCESS_NOISE_Q = 10.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
106 warning SUP-GLB-001 sys/config.h 195 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float CURRENT_KALMAN_MEASUREMENT_NOISE_R = 5e-5f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
107 warning SUP-GLB-001 sys/config.h 199 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float DEFAULT_current_loop_p = 0.1f / 100 * 12; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
108 warning SUP-GLB-001 sys/config.h 201 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float current_loop_Ki = 0.55f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
109 warning SUP-GLB-001 sys/config.h 203 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float current_loop_Kd = 3e-4f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
110 warning SUP-GLB-001 sys/config.h 206 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float DEFAULT_vel_loop_p = 0.018f / 100 * 12; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
111 warning SUP-GLB-001 sys/config.h 208 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float vel_loop_Ku = 3.600000e-03 * 0.7 * 100 / 12; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
112 warning SUP-GLB-001 sys/config.h 210 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float vel_loop_Tu = 17.0f * 1e-3f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
113 warning SUP-GLB-001 sys/config.h 212 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float vel_loop_Ki = 1.2 * vel_loop_Ku / vel_loop_Tu; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
114 warning SUP-GLB-001 sys/config.h 214 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float vel_loop_Kd = 0.075 * vel_loop_Ku * vel_loop_Tu * 2; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
115 warning SUP-GLB-001 sys/config.h 217 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float DEFAULT_vel_angloop_p = 0.4f / 100; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
116 warning SUP-GLB-001 sys/config.h 219 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float vel_angloop_Ki = 5.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
117 warning SUP-GLB-001 sys/config.h 221 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float vel_angloop_Kd = 5e-05f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
118 warning SUP-GLB-001 sys/config.h 224 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float DEFAULT_angle_angloop_p = 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
119 warning SUP-GLB-001 sys/config.h 227 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float ang_angloop_Ki = 0.00f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
120 warning SUP-GLB-001 sys/config.h 229 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float ang_angloop_Kd = 8e-04f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
121 warning SUP-GLB-001 sys/config.h 232 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float DEFAULT_angle_loop_p = 60.0f / 100 * 12; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
122 warning SUP-GLB-001 sys/config.h 235 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float DEFAULT_angle_MIT_p = 100.0f / 100 * 12; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
123 warning SUP-GLB-001 sys/config.h 237 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float angle_MIT_Ki = 0.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
124 warning SUP-GLB-001 sys/config.h 239 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float angle_MIT_Kd = 8e-04f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
125 warning SUP-GLB-001 sys/config.h 242 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float DEFAULT_vel_MIT_p = 5.0f / 100; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
126 warning SUP-GLB-001 sys/config.h 244 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float vel_MIT_Ki = 15.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
127 warning SUP-GLB-001 sys/config.h 246 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float vel_MIT_Kd = 1e-04f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
128 warning SUP-GLB-001 sys/config.h 249 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float DEFAULT_current_MIT_p = 0.2f / 100 * 12; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
129 warning SUP-GLB-001 sys/config.h 251 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float current_MIT_Ki = 0.1f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
130 warning SUP-GLB-001 sys/config.h 253 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float current_MIT_Kd = 3e-4f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
131 warning SUP-GLB-001 sys/config.h 260 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float ADC_MAX = 65536.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
132 warning SUP-GLB-001 sys/config.h 262 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float PI = 3.14159265358979323846f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
133 warning SUP-GLB-001 sys/config.h 264 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float INV_PI_3 = 3.0f / PI; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
134 warning SUP-GLB-001 sys/config.h 266 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float PI_3 = PI / 3.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
135 warning SUP-GLB-001 sys/config.h 268 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float _1_SQRT3 = 0.57735026919f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
136 warning SUP-GLB-001 sys/config.h 270 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float _3PI_2 = 4.71238898038f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
137 warning SUP-GLB-001 sys/config.h 272 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float SQRT3 = 1.7320508075688772f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
138 warning SUP-GLB-001 sys/config.h 274 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float SQRT3DV2 = 0.8660254037844386f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
139 warning SUP-GLB-001 sys/config.h 276 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float COS_PI_3 = 0.5f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
140 warning SUP-GLB-001 sys/config.h 278 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float ANGLE_FACTOR = 25.0f / 180.0f * PI; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
141 warning SUP-GLB-001 sys/config.h 280 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float DEG2RAD = 1.0f / 180.0f * PI; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
142 warning SUP-GLB-001 sys/config.h 282 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float RAD2DEG = 180.0f / PI; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
143 warning SUP-GLB-001 sys/config.h 284 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u8 DEFAULT_VALUE = 0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
144 warning SUP-GLB-001 sys/config.h 286 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u8 CONFIG_SAVED_NUM = 6; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
145 warning SUP-GLB-001 sys/config.h 290 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 LUT_SIZE = 1024; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
146 warning SUP-GLB-001 sys/config.h 301 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 DEV_CAN0_ID = 0x0000; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
147 warning SUP-GLB-001 sys/config.h 303 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 DEV_CAN0_MASK = 0x0000; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
148 warning SUP-GLB-001 sys/config.h 305 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 DEV_CAN_LOOPBACK_ID = 0x0000; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
149 warning SUP-GLB-001 sys/config.h 308 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 CANFD_STATUS_ID = 0x0100; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
150 warning SUP-GLB-001 sys/config.h 310 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 CANFD_CONFIG_ID = 0x0101; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
151 warning SUP-GLB-001 sys/config.h 312 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 CANFD_VERSION_ID = 0x00FF; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
152 warning SUP-GLB-001 sys/config.h 315 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 CANFD_CMD_ID = 0x0200; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
153 warning SUP-GLB-001 sys/config.h 317 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 CANFD_RESET_ID = 0x0301; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
154 warning SUP-GLB-001 sys/config.h 320 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 CANFD_SET_NODE_ID = 0x0400; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
155 warning SUP-GLB-001 sys/config.h 322 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 CANFD_GET_NODE_ID = 0x0401; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
156 warning SUP-GLB-001 sys/config.h 326 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 CANFD_BOOT_ID = 0x0000; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
157 warning SUP-GLB-001 sys/config.h 328 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 CANFD_OTA_REQ_ID = 0x0100; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
158 warning SUP-GLB-001 sys/config.h 330 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 CANFD_OTA_DATA_ID = 0x0101; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
159 warning SUP-GLB-001 sys/config.h 332 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 CANFD_OTA_ACK_ID = 0x0102; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
160 warning SUP-GLB-001 sys/config.h 334 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 CANFD_OTA_WAIT_ID = 0x0103; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
161 warning SUP-GLB-001 sys/config.h 338 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u8 ADC_FILTER_SIZE = 6; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
162 warning SUP-GLB-001 sys/config.h 340 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u8 BLOCK_SIZE = ADC_FILTER_SIZE * SIZE_FLOAT; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
163 warning SUP-GLB-001 sys/config.h 342 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float ERROR_ADC_VAL = 255.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
164 warning SUP-GLB-001 sys/config.h 344 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float MAX_TEMP = 150.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
165 warning SUP-GLB-001 sys/config.h 346 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float MIN_TEMP = -40.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
166 warning SUP-GLB-001 sys/config.h 348 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float MAX_CURRENT = 40.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
167 warning SUP-GLB-001 sys/config.h 350 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float MIN_CURRENT = -40.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
168 warning SUP-GLB-001 sys/config.h 352 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float MAX_VCC = 65.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
169 warning SUP-GLB-001 sys/config.h 354 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float MIN_VCC = -0.1f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
170 warning SUP-GLB-001 sys/config.h 358 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 VEL_FILTER_SIZE = 4; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
171 warning SUP-GLB-001 sys/config.h 360 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 DEFAULT_COMMAND = 0x0000; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
172 warning SUP-GLB-001 sys/config.h 362 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 FAULT_RECEIVE = 0xFFFF; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
173 warning SUP-GLB-001 sys/config.h 364 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float ANGLE_WRAP_THRESHOLD = 300.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
174 warning SUP-GLB-001 sys/config.h 366 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float ANGLE_WRAP_VALUE = 360.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
175 warning SUP-GLB-001 sys/config.h 368 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float RAD_FACTOR = 1.0f / ADC_MAX * 2.0f * PI; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
176 warning SUP-GLB-001 sys/config.h 370 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float ANGLESENS_FACTOR = 1.0f / ADC_MAX * 360.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
177 warning SUP-GLB-001 sys/config.h 374 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr int TIMER2_PRESCALER = 119; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
178 warning SUP-GLB-001 sys/config.h 376 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr int TIMER2_PERIOD = 49; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
179 warning SUP-GLB-001 sys/config.h 378 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr int MOTOR_PERIOD = 1; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
180 warning SUP-GLB-001 sys/config.h 380 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float TIME_SLICE = 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
181 warning SUP-GLB-001 sys/config.h 383 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float TIMER2_FREQUENCY = 1 / TIME_SLICE; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
182 warning SUP-GLB-001 sys/config.h 385 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float MOTOR_FREQUENCY = 1 / TIME_SLICE / MOTOR_PERIOD; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
183 warning SUP-GLB-001 sys/config.h 389 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr int TIMER1_PRESCALER = 0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
184 warning SUP-GLB-001 sys/config.h 391 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr int TIMER1_PERIOD = 2999; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
185 warning SUP-GLB-001 sys/config.h 393 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr int TIMER1_DEFAULT_PULSE = 0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
186 warning SUP-GLB-001 sys/config.h 395 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr int TIMER1_CH3_COMPARE_VALUE = 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
187 warning SUP-GLB-001 sys/config.h 400 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 COGGING_TABLE_SIZE = 128; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
188 warning SUP-GLB-001 sys/config.h 402 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float COGGING_COMP_SCALE = 0.005f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
189 warning SUP-GLB-001 sys/config.h 413 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float VBUS_DROP_THRESHOLD = 5.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
190 warning SUP-GLB-001 sys/config.h 415 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float VBUS_ABSOLUTE_MIN = 12.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
191 warning SUP-GLB-001 sys/config.h 417 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u32 VBUS_DEBOUNCE_COUNT = 5; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
192 warning SUP-GLB-001 sys/config.h 419 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr float VBUS_RECOVERY_RATIO = 0.9f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
193 warning SUP-GLB-001 sys/health.cpp 19 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 ThermalController thermalController; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
194 warning SUP-GLB-001 sys/health.cpp 25 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 constexpr u16 PROTECT_TIME = 6000; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
195 warning SUP-GLB-001 sys/health.cpp 28 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 static VoltageState voltage_state = VoltageState::NORMAL; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
196 warning SUP-GLB-001 sys/health.cpp 29 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 static float last_vbus_slow = 0.0f; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
197 warning SUP-GLB-001 sys/initial.cpp 39 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 VersionManager Version; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
198 warning SUP-GLB-001 sys/systick.cpp 53 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 volatile static uint32_t delay; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
199 warning SUP-GLB-001 sys/systick.cpp 54 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 volatile static uint32_t systick_ms = 0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
200 warning SUP-GLB-001 sys/systick.cpp 70 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 volatile static uint32_t task_enter_cyccnt = 0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
201 warning SUP-GLB-001 sys/systick.cpp 71 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 volatile static uint32_t busy_cycles_accum = 0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
202 warning SUP-GLB-001 sys/systick.cpp 72 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 volatile static uint16_t sample_seconds = 0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
203 warning SUP-GLB-001 sys/systick.cpp 73 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 volatile static uint8_t cpu_usage = 0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
204 warning SUP-GLB-001 sys/systick.cpp 74 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序 volatile static uint8_t dwt_initialized = 0; 建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
205 warning SUP-IRQ-001 device/Can.cpp 709 关中断后未在短窗口内看到开中断,需人工确认成对性 __disable_irq(); 确认所有路径均恢复中断;避免临界区过长。
206 warning SUP-IRQ-001 sys/flash.cpp 888 关中断后未在短窗口内看到开中断,需人工确认成对性 __disable_irq(); 确认所有路径均恢复中断;避免临界区过长。
207 warning SUP-IRQ-001 sys/systick.cpp 256 关中断后未在短窗口内看到开中断,需人工确认成对性 __disable_irq(); 确认所有路径均恢复中断;避免临界区过长。
208 warning SUP-SW-001 Algorithm/FOC.cpp 89 switch 语句疑似缺少 default 分支 switch (cog_calib_state) { MISRA 通常要求 default;如枚举已全覆盖也建议显式说明。
209 info SUP-DOC-001 Algorithm/FOC.h 260 接口/函数缺少紧邻 Doxygen 注释 typedef float (FOC_Controller::*FOCFunctionPtr)(void); 建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
210 info SUP-DOC-001 Algorithm/Filter.h 187 接口/函数缺少紧邻 Doxygen 注释 u8 init(float init_velocity, float initial_error_covariance = 1.0f) { 建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
211 info SUP-DOC-001 Algorithm/Filter.h 247 接口/函数缺少紧邻 Doxygen 注释 u8 init(float init_angle, float initial_error_covariance = 1.0f) { 建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
212 info SUP-DOC-001 Algorithm/Filter.h 296 接口/函数缺少紧邻 Doxygen 注释 u8 init(float init_current, float initial_error_covariance = 1.0f) { 建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
213 info SUP-DOC-001 Algorithm/pid.cpp 23 接口/函数缺少紧邻 Doxygen 注释 float PIDController::operator()(float error) { 建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
214 info SUP-DOC-001 Algorithm/pid.h 18 接口/函数缺少紧邻 Doxygen 注释 float operator()(float error); 建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
215 info SUP-DOC-001 device/Can.cpp 775 接口/函数缺少紧邻 Doxygen 注释 static void CAN_RX_ReleaseFifo0(void) { CAN_RFIFO0(CAN0) |= CAN_RFIFO0_RFD0; } 建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
216 info SUP-DOC-001 device/Can.cpp 1130 接口/函数缺少紧邻 Doxygen 注释 else if (base_id == CANFD_SET_NODE_ID) { 建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
217 info SUP-DOC-001 device/Can.cpp 1292 接口/函数缺少紧邻 Doxygen 注释 else if (base_id == CANFD_GET_NODE_ID) { 建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
218 info SUP-DOC-001 sys/flash.cpp 913 接口/函数缺少紧邻 Doxygen 注释 typedef void (*AppEntryFunc)(void); 建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
219 info SUP-DOC-001 sys/flash.h 165 接口/函数缺少紧邻 Doxygen 注释 u8 OTA_SET(u32 addr, u32 data); 建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
220 info SUP-DOC-001 sys/initial.cpp 224 接口/函数缺少紧邻 Doxygen 注释 int fputc(int ch, FILE *f) throw() { 建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
221 info SUP-GLB-002 Algorithm/FOC.cpp 24 extern 全局对象引用,需确认单一定义和共享访问保护 extern sampler sampler; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
222 info SUP-GLB-002 Algorithm/FOC.cpp 25 extern 全局对象引用,需确认单一定义和共享访问保护 extern angle_sensor KTH7823; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
223 info SUP-GLB-002 Algorithm/FOC.cpp 26 extern 全局对象引用,需确认单一定义和共享访问保护 extern CAN_transmiter CAN0_transmiter; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
224 info SUP-GLB-002 Algorithm/FOC.cpp 27 extern 全局对象引用,需确认单一定义和共享访问保护 extern EncoderVelocityKalman Vel_kalman; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
225 info SUP-GLB-002 Algorithm/FOC.cpp 28 extern 全局对象引用,需确认单一定义和共享访问保护 extern CurrentKalman Current_kalman; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
226 info SUP-GLB-002 Algorithm/Filter.cpp 14 extern 全局对象引用,需确认单一定义和共享访问保护 extern angle_sensor KTH7823; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
227 info SUP-GLB-002 Algorithm/Filter.cpp 15 extern 全局对象引用,需确认单一定义和共享访问保护 extern CAN_transmiter CAN0_transmiter; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
228 info SUP-GLB-002 Algorithm/Filter.cpp 16 extern 全局对象引用,需确认单一定义和共享访问保护 extern u32 motor_runtime_50us; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
229 info SUP-GLB-002 Algorithm/Filter.h 24 extern 全局对象引用,需确认单一定义和共享访问保护 extern CAN_transmiter CAN0_transmiter; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
230 info SUP-GLB-002 Algorithm/pid.cpp 14 extern 全局对象引用,需确认单一定义和共享访问保护 extern CAN_transmiter CAN0_transmiter; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
231 info SUP-GLB-002 device/ADC.cpp 28 extern 全局对象引用,需确认单一定义和共享访问保护 extern CAN_transmiter CAN0_transmiter; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
232 info SUP-GLB-002 device/ADC.cpp 29 extern 全局对象引用,需确认单一定义和共享访问保护 extern FOC_Controller FOC; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
233 info SUP-GLB-002 device/Can.cpp 38 extern 全局对象引用,需确认单一定义和共享访问保护 extern FOC_Controller FOC; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
234 info SUP-GLB-002 device/Can.cpp 39 extern 全局对象引用,需确认单一定义和共享访问保护 extern sampler sampler; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
235 info SUP-GLB-002 device/Can.cpp 40 extern 全局对象引用,需确认单一定义和共享访问保护 extern angle_sensor KTH7823; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
236 info SUP-GLB-002 device/Can.cpp 41 extern 全局对象引用,需确认单一定义和共享访问保护 extern EncoderAngleKalman Angle_kalman; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
237 info SUP-GLB-002 device/Can.cpp 42 extern 全局对象引用,需确认单一定义和共享访问保护 extern EncoderVelocityKalman Vel_kalman; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
238 info SUP-GLB-002 device/Can.cpp 43 extern 全局对象引用,需确认单一定义和共享访问保护 extern FlashEEPROM flashEEP; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
239 info SUP-GLB-002 device/Can.cpp 44 extern 全局对象引用,需确认单一定义和共享访问保护 extern VersionManager Version; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
240 info SUP-GLB-002 device/Can.cpp 45 extern 全局对象引用,需确认单一定义和共享访问保护 extern u32 motor_runtime_50us; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
241 info SUP-GLB-002 device/Timer.cpp 20 extern 全局对象引用,需确认单一定义和共享访问保护 extern FOC_Controller FOC; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
242 info SUP-GLB-002 device/Timer.cpp 21 extern 全局对象引用,需确认单一定义和共享访问保护 extern TaskScheduler scheduler; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
243 info SUP-GLB-002 device/Timer.cpp 22 extern 全局对象引用,需确认单一定义和共享访问保护 extern CAN_transmiter CAN0_transmiter; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
244 info SUP-GLB-002 device/Timer.cpp 24 extern 全局对象引用,需确认单一定义和共享访问保护 extern u32 cnt_test; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
245 info SUP-GLB-002 device/ang_sensor.cpp 42 extern 全局对象引用,需确认单一定义和共享访问保护 extern FlashEEPROM flashEEP; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
246 info SUP-GLB-002 device/ang_sensor.cpp 43 extern 全局对象引用,需确认单一定义和共享访问保护 extern EncoderAngleKalman Angle_kalman; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
247 info SUP-GLB-002 device/ang_sensor.cpp 44 extern 全局对象引用,需确认单一定义和共享访问保护 extern EncoderVelocityKalman Vel_kalman; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
248 info SUP-GLB-002 device/ang_sensor.cpp 45 extern 全局对象引用,需确认单一定义和共享访问保护 extern CAN_transmiter CAN0_transmiter; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
249 info SUP-GLB-002 main.cpp 28 extern 全局对象引用,需确认单一定义和共享访问保护 extern CAN_transmiter CAN0_transmiter; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
250 info SUP-GLB-002 main.cpp 29 extern 全局对象引用,需确认单一定义和共享访问保护 extern sampler sampler; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
251 info SUP-GLB-002 main.cpp 30 extern 全局对象引用,需确认单一定义和共享访问保护 extern angle_sensor KTH7823; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
252 info SUP-GLB-002 main.cpp 31 extern 全局对象引用,需确认单一定义和共享访问保护 extern EncoderVelocityKalman Vel_kalman; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
253 info SUP-GLB-002 main.cpp 32 extern 全局对象引用,需确认单一定义和共享访问保护 extern EncoderAngleKalman Angle_kalman; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
254 info SUP-GLB-002 main.cpp 33 extern 全局对象引用,需确认单一定义和共享访问保护 extern ThermalController thermalController; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
255 info SUP-GLB-002 main.cpp 34 extern 全局对象引用,需确认单一定义和共享访问保护 extern FOC_Controller FOC; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
256 info SUP-GLB-002 main.cpp 35 extern 全局对象引用,需确认单一定义和共享访问保护 extern FlashEEPROM flashEEP; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
257 info SUP-GLB-002 main.cpp 36 extern 全局对象引用,需确认单一定义和共享访问保护 extern VersionManager Version; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
258 info SUP-GLB-002 sys/flash.cpp 38 extern 全局对象引用,需确认单一定义和共享访问保护 extern angle_sensor KTH7823; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
259 info SUP-GLB-002 sys/flash.cpp 39 extern 全局对象引用,需确认单一定义和共享访问保护 extern CAN_transmiter CAN0_transmiter; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
260 info SUP-GLB-002 sys/flash.cpp 40 extern 全局对象引用,需确认单一定义和共享访问保护 extern FOC_Controller FOC; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
261 info SUP-GLB-002 sys/health.cpp 15 extern 全局对象引用,需确认单一定义和共享访问保护 extern sampler sampler; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
262 info SUP-GLB-002 sys/health.cpp 16 extern 全局对象引用,需确认单一定义和共享访问保护 extern CAN_transmiter CAN0_transmiter; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
263 info SUP-GLB-002 sys/health.cpp 17 extern 全局对象引用,需确认单一定义和共享访问保护 extern FOC_Controller FOC; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
264 info SUP-GLB-002 sys/health.cpp 18 extern 全局对象引用,需确认单一定义和共享访问保护 extern FlashEEPROM flashEEP; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
265 info SUP-GLB-002 sys/initial.cpp 38 extern 全局对象引用,需确认单一定义和共享访问保护 extern CAN_transmiter CAN0_transmiter; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
266 info SUP-GLB-002 sys/systick.cpp 75 extern 全局对象引用,需确认单一定义和共享访问保护 extern CAN_transmiter CAN0_transmiter; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
267 info SUP-GLB-002 sys/systick.cpp 76 extern 全局对象引用,需确认单一定义和共享访问保护 extern FlashEEPROM flashEEP; 确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
268 info SUP-ISR-001 device/ADC.cpp 317 中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用 extern "" void ADC0_1_IRQHandler(void) { 人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
269 info SUP-ISR-001 device/Can.cpp 1330 中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用 void CAN0_RX0_IRQHandler(void) { 人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
270 info SUP-ISR-001 device/Can.cpp 1355 中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用 void DMA0_Channel4_IRQHandler(void) { 人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
271 info SUP-ISR-001 device/Can.cpp 1389 中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用 void DMA0_Channel5_IRQHandler(void) { 人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
272 info SUP-ISR-001 device/Can.cpp 1509 中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用 void CAN0_TX_IRQHandler(void) { 人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
273 info SUP-ISR-001 device/Can.h 121 中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用 void CAN0_TX_IRQHandler(void); 人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
274 info SUP-ISR-001 device/Can.h 126 中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用 void CAN0_RX0_IRQHandler(void); 人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
275 info SUP-ISR-001 device/Can.h 131 中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用 void DMA0_Channel4_IRQHandler(void); 人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
276 info SUP-ISR-001 device/Can.h 136 中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用 void DMA0_Channel5_IRQHandler(void); 人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
277 info SUP-ISR-001 device/Timer.cpp 134 中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用 void TIMER2_IRQHandler(void) { 人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
278 info SUP-ISR-001 device/Timer.cpp 281 中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用 void TIMER1_IRQHandler(void) { 人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
279 info SUP-ISR-001 device/Timer.h 40 中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用 void TIMER2_IRQHandler(void); 人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
280 info SUP-ISR-001 device/Timer.h 56 中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用 void TIMER1_IRQHandler(void); 人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
281 info SUP-ISR-001 device/adc.h 91 中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用 void ADC0_1_IRQHandler(void); 人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
282 info SUP-ISR-001 device/ang_sensor.cpp 145 中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用 extern "" void DMA0_Channel2_IRQHandler(void) { 人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
283 info SUP-ISR-001 device/ang_sensor.cpp 156 中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用 extern "" void DMA0_Channel1_IRQHandler(void) { 人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
284 info SUP-ISR-001 sys/systick.cpp 128 中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用 extern "" void SysTick_Handler(void) { 人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
285 info SUP-ISR-001 sys/systick.h 117 中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用 void EXTI5_9_IRQHandler(void); 人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
286 info SUP-LOOP-001 device/Can.cpp 366 无限循环需确认退出策略、看门狗喂狗和低功耗策略 while (1) 确认循环内任务调度、异常退出/复位策略和看门狗策略。
287 info SUP-LOOP-001 main.cpp 71 无限循环需确认退出策略、看门狗喂狗和低功耗策略 while (1) { 确认循环内任务调度、异常退出/复位策略和看门狗策略。
288 info SUP-LOOP-001 sys/systick.cpp 115 无限循环需确认退出策略、看门狗喂狗和低功耗策略 while (1) { 确认循环内任务调度、异常退出/复位策略和看门狗策略。
289 info SUP-LOOP-001 sys/systick.cpp 233 无限循环需确认退出策略、看门狗喂狗和低功耗策略 while (1) { 确认循环内任务调度、异常退出/复位策略和看门狗策略。
290 info SUP-MAG-001 Algorithm/FOC.cpp 29 业务代码中存在裸数字常量,需确认是否应命名化 extern u16 adc_value[3]; 安全相关阈值/时间/比例建议用具名常量或配置宏。
291 info SUP-MAG-001 Algorithm/FOC.cpp 46 业务代码中存在裸数字常量,需确认是否应命名化 float index_f = angle / 360.0f * (float)COGGING_TABLE_SIZE; 安全相关阈值/时间/比例建议用具名常量或配置宏。
292 info SUP-MAG-001 Algorithm/FOC.cpp 53 业务代码中存在裸数字常量,需确认是否应命名化 if (rt_velocity < -0.5f) last_table = cogging_table_rev; 安全相关阈值/时间/比例建议用具名常量或配置宏。
293 info SUP-MAG-001 Algorithm/FOC.cpp 54 业务代码中存在裸数字常量,需确认是否应命名化 else if (rt_velocity > 0.5f) last_table = cogging_table; 安全相关阈值/时间/比例建议用具名常量或配置宏。
294 info SUP-MAG-001 Algorithm/FOC.cpp 66 业务代码中存在裸数字常量,需确认是否应命名化 float FOC_Controller::cog_calib_run_data[6][COGGING_TABLE_SIZE] = {}; 安全相关阈值/时间/比例建议用具名常量或配置宏。
295 info SUP-MAG-001 Algorithm/FOC.cpp 77 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u32 SETTLE_TICKS = 16000; 安全相关阈值/时间/比例建议用具名常量或配置宏。
296 info SUP-MAG-001 Algorithm/FOC.cpp 79 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u32 STOP_TICKS = 10000; 安全相关阈值/时间/比例建议用具名常量或配置宏。
297 info SUP-MAG-001 Algorithm/FOC.cpp 81 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u32 TARGET_SAMPLES = 3 * COGGING_TABLE_SIZE * 8; 安全相关阈值/时间/比例建议用具名常量或配置宏。
298 info SUP-MAG-001 Algorithm/FOC.cpp 85 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u32 SAMPLE_DIV = 20; 安全相关阈值/时间/比例建议用具名常量或配置宏。
299 info SUP-MAG-001 Algorithm/FOC.cpp 87 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u8 TOTAL_RUNS = 6; 安全相关阈值/时间/比例建议用具名常量或配置宏。
300 info SUP-MAG-001 Algorithm/FOC.cpp 102 业务代码中存在裸数字常量,需确认是否应命名化 control_mode = 6; 安全相关阈值/时间/比例建议用具名常量或配置宏。
301 info SUP-MAG-001 Algorithm/FOC.cpp 131 业务代码中存在裸数字常量,需确认是否应命名化 if (fabsf(iq) < 5000.0f) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
302 info SUP-MAG-001 Algorithm/FOC.cpp 132 业务代码中存在裸数字常量,需确认是否应命名化 u16 idx = (u16)(angle_el / 360.0f * (float)COGGING_TABLE_SIZE); 安全相关阈值/时间/比例建议用具名常量或配置宏。
303 info SUP-MAG-001 Algorithm/FOC.cpp 167 业务代码中存在裸数字常量,需确认是否应命名化 control_mode = 6; 安全相关阈值/时间/比例建议用具名常量或配置宏。
304 info SUP-MAG-001 Algorithm/FOC.cpp 168 业务代码中存在裸数字常量,需确认是否应命名化 target_velocity = (cog_calib_run < 3) ? SLOW_VEL : -SLOW_VEL; 安全相关阈值/时间/比例建议用具名常量或配置宏。
305 info SUP-MAG-001 Algorithm/FOC.cpp 182 业务代码中存在裸数字常量,需确认是否应命名化 cog_calib_run_data[2][i]) / 3.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
306 info SUP-MAG-001 Algorithm/FOC.cpp 186 业务代码中存在裸数字常量,需确认是否应命名化 cogging_table_rev[i] = (cog_calib_run_data[3][i] + 安全相关阈值/时间/比例建议用具名常量或配置宏。
307 info SUP-MAG-001 Algorithm/FOC.cpp 187 业务代码中存在裸数字常量,需确认是否应命名化 cog_calib_run_data[4][i] + 安全相关阈值/时间/比例建议用具名常量或配置宏。
308 info SUP-MAG-001 Algorithm/FOC.cpp 188 业务代码中存在裸数字常量,需确认是否应命名化 cog_calib_run_data[5][i]) / 3.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
309 info SUP-MAG-001 Algorithm/FOC.cpp 197 业务代码中存在裸数字常量,需确认是否应命名化 float angle_deg = (float)i / (float)COGGING_TABLE_SIZE * 360.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
310 info SUP-MAG-001 Algorithm/FOC.cpp 205 业务代码中存在裸数字常量,需确认是否应命名化 float angle_deg = (float)i / (float)COGGING_TABLE_SIZE * 360.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
311 info SUP-MAG-001 Algorithm/FOC.cpp 214 业务代码中存在裸数字常量,需确认是否应命名化 if (i % 8 == 0) printf(""); 安全相关阈值/时间/比例建议用具名常量或配置宏。
312 info SUP-MAG-001 Algorithm/FOC.cpp 217 业务代码中存在裸数字常量,需确认是否应命名化 if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf(""); 安全相关阈值/时间/比例建议用具名常量或配置宏。
313 info SUP-MAG-001 Algorithm/FOC.cpp 226 业务代码中存在裸数字常量,需确认是否应命名化 if (i % 8 == 0) printf(""); 安全相关阈值/时间/比例建议用具名常量或配置宏。
314 info SUP-MAG-001 Algorithm/FOC.cpp 229 业务代码中存在裸数字常量,需确认是否应命名化 if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf(""); 安全相关阈值/时间/比例建议用具名常量或配置宏。
315 info SUP-MAG-001 Algorithm/FOC.cpp 293 业务代码中存在裸数字常量,需确认是否应命名化 const float current_avg = (current_a + current_b + current_c) / 3.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
316 info SUP-MAG-001 Algorithm/FOC.cpp 301 业务代码中存在裸数字常量,需确认是否应命名化 I_alpha = (2.0f / 3.0f) * current_a - (1.0f / 3.0f) * current_b - 安全相关阈值/时间/比例建议用具名常量或配置宏。
317 info SUP-MAG-001 Algorithm/FOC.cpp 302 业务代码中存在裸数字常量,需确认是否应命名化 (1.0f / 3.0f) * current_c; 安全相关阈值/时间/比例建议用具名常量或配置宏。
318 info SUP-MAG-001 Algorithm/FOC.cpp 313 业务代码中存在裸数字常量,需确认是否应命名化 return Current_kalman.update(I_q * 1000 - KE_FACTOR * rt_velocity); 安全相关阈值/时间/比例建议用具名常量或配置宏。
319 info SUP-MAG-001 Algorithm/FOC.cpp 327 业务代码中存在裸数字常量,需确认是否应命名化 29.28f, 28.84f, 28.26f, 28.83f, 29.79f, 30.26f, 29.52f, 28.77f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
320 info SUP-MAG-001 Algorithm/FOC.cpp 328 业务代码中存在裸数字常量,需确认是否应命名化 28.23f, 27.68f, 26.65f, 25.19f, 23.92f, 22.59f, 19.61f, 16.77f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
321 info SUP-MAG-001 Algorithm/FOC.cpp 329 业务代码中存在裸数字常量,需确认是否应命名化 13.32f, 10.40f, 7.64f, 3.51f, -0.83f, -4.96f, -8.19f, -11.11f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
322 info SUP-MAG-001 Algorithm/FOC.cpp 330 业务代码中存在裸数字常量,需确认是否应命名化 -13.40f, -14.39f, -15.69f, -15.99f, -16.39f, -15.50f, -14.76f, -14.21f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
323 info SUP-MAG-001 Algorithm/FOC.cpp 331 业务代码中存在裸数字常量,需确认是否应命名化 -13.76f, -13.88f, -13.22f, -11.18f, -10.65f, -10.54f, -10.62f, -10.23f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
324 info SUP-MAG-001 Algorithm/FOC.cpp 332 业务代码中存在裸数字常量,需确认是否应命名化 -9.52f, -8.19f, -6.31f, -4.14f, -1.94f, -0.25f, 2.06f, 4.08f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
325 info SUP-MAG-001 Algorithm/FOC.cpp 333 业务代码中存在裸数字常量,需确认是否应命名化 6.05f, 8.30f, 9.74f, 11.38f, 13.32f, 15.65f, 17.55f, 20.22f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
326 info SUP-MAG-001 Algorithm/FOC.cpp 334 业务代码中存在裸数字常量,需确认是否应命名化 21.72f, 22.28f, 23.30f, 24.78f, 23.53f, 23.35f, 23.00f, 21.42f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
327 info SUP-MAG-001 Algorithm/FOC.cpp 335 业务代码中存在裸数字常量,需确认是否应命名化 20.35f, 20.57f, 20.07f, 18.18f, 17.04f, 16.03f, 14.81f, 13.71f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
328 info SUP-MAG-001 Algorithm/FOC.cpp 336 业务代码中存在裸数字常量,需确认是否应命名化 12.47f, 10.93f, 9.38f, 6.53f, 4.63f, 3.37f, 1.29f, -1.28f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
329 info SUP-MAG-001 Algorithm/FOC.cpp 337 业务代码中存在裸数字常量,需确认是否应命名化 -5.08f, -11.11f, -16.35f, -21.00f, -24.61f, -28.30f, -31.11f, -33.48f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
330 info SUP-MAG-001 Algorithm/FOC.cpp 338 业务代码中存在裸数字常量,需确认是否应命名化 -35.25f, -36.54f, -38.01f, -38.69f, -39.27f, -39.52f, -38.18f, -36.55f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
331 info SUP-MAG-001 Algorithm/FOC.cpp 339 业务代码中存在裸数字常量,需确认是否应命名化 -34.96f, -33.14f, -31.92f, -31.45f, -31.32f, -30.25f, -29.60f, -28.72f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
332 info SUP-MAG-001 Algorithm/FOC.cpp 340 业务代码中存在裸数字常量,需确认是否应命名化 -27.51f, -25.30f, -22.66f, -20.87f, -18.19f, -16.10f, -13.25f, -10.81f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
333 info SUP-MAG-001 Algorithm/FOC.cpp 341 业务代码中存在裸数字常量,需确认是否应命名化 -8.00f, -4.67f, -2.28f, 0.87f, 3.83f, 7.25f, 10.56f, 13.70f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
334 info SUP-MAG-001 Algorithm/FOC.cpp 342 业务代码中存在裸数字常量,需确认是否应命名化 17.70f, 19.90f, 22.14f, 23.62f, 24.53f, 26.03f, 26.96f, 27.95f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
335 info SUP-MAG-001 Algorithm/FOC.cpp 345 业务代码中存在裸数字常量,需确认是否应命名化 22.45f, 24.95f, 26.05f, 26.01f, 26.11f, 25.87f, 26.20f, 26.23f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
336 info SUP-MAG-001 Algorithm/FOC.cpp 346 业务代码中存在裸数字常量,需确认是否应命名化 26.19f, 25.87f, 25.97f, 26.09f, 24.77f, 24.22f, 23.71f, 22.10f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
337 info SUP-MAG-001 Algorithm/FOC.cpp 347 业务代码中存在裸数字常量,需确认是否应命名化 19.84f, 17.60f, 15.36f, 12.99f, 9.54f, 5.35f, 1.71f, -1.94f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
338 info SUP-MAG-001 Algorithm/FOC.cpp 348 业务代码中存在裸数字常量,需确认是否应命名化 -4.15f, -6.16f, -7.93f, -9.10f, -10.01f, -10.25f, -10.85f, -11.74f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
339 info SUP-MAG-001 Algorithm/FOC.cpp 349 业务代码中存在裸数字常量,需确认是否应命名化 -11.98f, -10.78f, -9.65f, -8.89f, -8.14f, -6.85f, -5.94f, -5.37f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
340 info SUP-MAG-001 Algorithm/FOC.cpp 350 业务代码中存在裸数字常量,需确认是否应命名化 -4.28f, -3.38f, -3.36f, -3.40f, -2.81f, -2.36f, -1.04f, -0.18f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
341 info SUP-MAG-001 Algorithm/FOC.cpp 351 业务代码中存在裸数字常量,需确认是否应命名化 1.08f, 2.15f, 4.19f, 5.51f, 7.33f, 8.64f, 10.46f, 11.89f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
342 info SUP-MAG-001 Algorithm/FOC.cpp 352 业务代码中存在裸数字常量,需确认是否应命名化 13.42f, 14.83f, 17.11f, 19.12f, 20.76f, 21.88f, 22.35f, 22.86f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
343 info SUP-MAG-001 Algorithm/FOC.cpp 353 业务代码中存在裸数字常量,需确认是否应命名化 22.73f, 22.13f, 21.10f, 20.53f, 18.65f, 17.09f, 15.47f, 14.76f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
344 info SUP-MAG-001 Algorithm/FOC.cpp 354 业务代码中存在裸数字常量,需确认是否应命名化 14.02f, 12.94f, 11.98f, 10.29f, 8.11f, 5.83f, 4.23f, 2.42f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
345 info SUP-MAG-001 Algorithm/FOC.cpp 355 业务代码中存在裸数字常量,需确认是否应命名化 1.03f, -1.80f, -4.01f, -7.93f, -11.79f, -15.90f, -20.22f, -23.04f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
346 info SUP-MAG-001 Algorithm/FOC.cpp 356 业务代码中存在裸数字常量,需确认是否应命名化 -25.66f, -28.80f, -30.45f, -32.11f, -33.17f, -33.97f, -34.68f, -34.26f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
347 info SUP-MAG-001 Algorithm/FOC.cpp 357 业务代码中存在裸数字常量,需确认是否应命名化 -34.18f, -33.78f, -32.47f, -31.11f, -29.40f, -27.89f, -27.05f, -26.72f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
348 info SUP-MAG-001 Algorithm/FOC.cpp 358 业务代码中存在裸数字常量,需确认是否应命名化 -25.59f, -24.86f, -23.61f, -22.97f, -22.89f, -21.81f, -20.78f, -19.23f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
349 info SUP-MAG-001 Algorithm/FOC.cpp 359 业务代码中存在裸数字常量,需确认是否应命名化 -17.74f, -15.09f, -13.18f, -10.51f, -8.18f, -5.89f, -3.35f, -0.02f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
350 info SUP-MAG-001 Algorithm/FOC.cpp 360 业务代码中存在裸数字常量,需确认是否应命名化 2.02f, 3.87f, 6.37f, 9.11f, 12.33f, 14.63f, 17.12f, 19.12f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
351 info SUP-MAG-001 Algorithm/FOC.cpp 366 业务代码中存在裸数字常量,需确认是否应命名化 FOC.cur_loop_p = DEFAULT_current_loop_p * 100 / limit_voltage; 安全相关阈值/时间/比例建议用具名常量或配置宏。
352 info SUP-MAG-001 Algorithm/FOC.cpp 367 业务代码中存在裸数字常量,需确认是否应命名化 FOC.cur_MIT_p = DEFAULT_current_MIT_p * 100 / limit_voltage; 安全相关阈值/时间/比例建议用具名常量或配置宏。
353 info SUP-MAG-001 Algorithm/FOC.cpp 368 业务代码中存在裸数字常量,需确认是否应命名化 FOC.vel_loop_p = DEFAULT_vel_loop_p * 100 / limit_voltage; 安全相关阈值/时间/比例建议用具名常量或配置宏。
354 info SUP-MAG-001 Algorithm/FOC.cpp 369 业务代码中存在裸数字常量,需确认是否应命名化 FOC.vel_angloop_p = DEFAULT_vel_angloop_p * 100; 安全相关阈值/时间/比例建议用具名常量或配置宏。
355 info SUP-MAG-001 Algorithm/FOC.cpp 370 业务代码中存在裸数字常量,需确认是否应命名化 FOC.vel_MIT_p = DEFAULT_vel_MIT_p * 100; 安全相关阈值/时间/比例建议用具名常量或配置宏。
356 info SUP-MAG-001 Algorithm/FOC.cpp 371 业务代码中存在裸数字常量,需确认是否应命名化 FOC.ang_loop_p = DEFAULT_angle_loop_p * 100 / limit_voltage; 安全相关阈值/时间/比例建议用具名常量或配置宏。
357 info SUP-MAG-001 Algorithm/FOC.cpp 372 业务代码中存在裸数字常量,需确认是否应命名化 FOC.ang_angloop_p = DEFAULT_angle_angloop_p * 100 / limit_voltage; 安全相关阈值/时间/比例建议用具名常量或配置宏。
358 info SUP-MAG-001 Algorithm/FOC.cpp 373 业务代码中存在裸数字常量,需确认是否应命名化 FOC.ang_MIT_p = DEFAULT_angle_MIT_p * 100 / limit_voltage; 安全相关阈值/时间/比例建议用具名常量或配置宏。
359 info SUP-MAG-001 Algorithm/FOC.cpp 401 业务代码中存在裸数字常量,需确认是否应命名化 float Y = SQRT3DV2 * Ualpha - 0.5f * Ubeta; 安全相关阈值/时间/比例建议用具名常量或配置宏。
360 info SUP-MAG-001 Algorithm/FOC.cpp 402 业务代码中存在裸数字常量,需确认是否应命名化 float Z = -SQRT3DV2 * Ualpha - 0.5f * Ubeta; 安全相关阈值/时间/比例建议用具名常量或配置宏。
361 info SUP-MAG-001 Algorithm/FOC.cpp 409 业务代码中存在裸数字常量,需确认是否应命名化 static const u8 sector_lut[8] = {0, 2, 6, 1, 4, 3, 5, 0}; 安全相关阈值/时间/比例建议用具名常量或配置宏。
362 info SUP-MAG-001 Algorithm/FOC.cpp 413 业务代码中存在裸数字常量,需确认是否应命名化 Set_3Pwm(0.5f, 0.5f, 0.5f); 安全相关阈值/时间/比例建议用具名常量或配置宏。
363 info SUP-MAG-001 Algorithm/FOC.cpp 431 业务代码中存在裸数字常量,需确认是否应命名化 static const float svpwm_coeff[6][4] = { 安全相关阈值/时间/比例建议用具名常量或配置宏。
364 info SUP-MAG-001 Algorithm/FOC.cpp 432 业务代码中存在裸数字常量,需确认是否应命名化 { SQRT3DV2, -0.5f, 0.0f, 1.0f}, 安全相关阈值/时间/比例建议用具名常量或配置宏。
365 info SUP-MAG-001 Algorithm/FOC.cpp 433 业务代码中存在裸数字常量,需确认是否应命名化 { SQRT3DV2, 0.5f, -SQRT3DV2, 0.5f}, 安全相关阈值/时间/比例建议用具名常量或配置宏。
366 info SUP-MAG-001 Algorithm/FOC.cpp 434 业务代码中存在裸数字常量,需确认是否应命名化 { 0.0f, 1.0f, -SQRT3DV2, -0.5f}, 安全相关阈值/时间/比例建议用具名常量或配置宏。
367 info SUP-MAG-001 Algorithm/FOC.cpp 435 业务代码中存在裸数字常量,需确认是否应命名化 { -SQRT3DV2, 0.5f, 0.0f, -1.0f}, 安全相关阈值/时间/比例建议用具名常量或配置宏。
368 info SUP-MAG-001 Algorithm/FOC.cpp 436 业务代码中存在裸数字常量,需确认是否应命名化 { -SQRT3DV2, -0.5f, SQRT3DV2, -0.5f}, 安全相关阈值/时间/比例建议用具名常量或配置宏。
369 info SUP-MAG-001 Algorithm/FOC.cpp 437 业务代码中存在裸数字常量,需确认是否应命名化 { 0.0f, -1.0f, SQRT3DV2, 0.5f}, 安全相关阈值/时间/比例建议用具名常量或配置宏。
370 info SUP-MAG-001 Algorithm/FOC.cpp 441 业务代码中存在裸数字常量,需确认是否应命名化 float T2 = (svpwm_coeff[sector-1][2] * Ualpha + svpwm_coeff[sector-1][3] * Ubeta) * inv_Udc; 安全相关阈值/时间/比例建议用具名常量或配置宏。
371 info SUP-MAG-001 Algorithm/FOC.cpp 454 业务代码中存在裸数字常量,需确认是否应命名化 duty_a = 0.5f * T0 + T1 + T2; 安全相关阈值/时间/比例建议用具名常量或配置宏。
372 info SUP-MAG-001 Algorithm/FOC.cpp 455 业务代码中存在裸数字常量,需确认是否应命名化 duty_b = 0.5f * T0 + T2; 安全相关阈值/时间/比例建议用具名常量或配置宏。
373 info SUP-MAG-001 Algorithm/FOC.cpp 456 业务代码中存在裸数字常量,需确认是否应命名化 duty_c = 0.5f * T0; 安全相关阈值/时间/比例建议用具名常量或配置宏。
374 info SUP-MAG-001 Algorithm/FOC.cpp 458 业务代码中存在裸数字常量,需确认是否应命名化 case 2: 安全相关阈值/时间/比例建议用具名常量或配置宏。
375 info SUP-MAG-001 Algorithm/FOC.cpp 459 业务代码中存在裸数字常量,需确认是否应命名化 duty_a = 0.5f * T0 + T1; 安全相关阈值/时间/比例建议用具名常量或配置宏。
376 info SUP-MAG-001 Algorithm/FOC.cpp 460 业务代码中存在裸数字常量,需确认是否应命名化 duty_b = 0.5f * T0 + T1 + T2; 安全相关阈值/时间/比例建议用具名常量或配置宏。
377 info SUP-MAG-001 Algorithm/FOC.cpp 461 业务代码中存在裸数字常量,需确认是否应命名化 duty_c = 0.5f * T0; 安全相关阈值/时间/比例建议用具名常量或配置宏。
378 info SUP-MAG-001 Algorithm/FOC.cpp 463 业务代码中存在裸数字常量,需确认是否应命名化 case 3: 安全相关阈值/时间/比例建议用具名常量或配置宏。
379 info SUP-MAG-001 Algorithm/FOC.cpp 464 业务代码中存在裸数字常量,需确认是否应命名化 duty_a = 0.5f * T0; 安全相关阈值/时间/比例建议用具名常量或配置宏。
380 info SUP-MAG-001 Algorithm/FOC.cpp 465 业务代码中存在裸数字常量,需确认是否应命名化 duty_b = 0.5f * T0 + T1 + T2; 安全相关阈值/时间/比例建议用具名常量或配置宏。
381 info SUP-MAG-001 Algorithm/FOC.cpp 466 业务代码中存在裸数字常量,需确认是否应命名化 duty_c = 0.5f * T0 + T2; 安全相关阈值/时间/比例建议用具名常量或配置宏。
382 info SUP-MAG-001 Algorithm/FOC.cpp 468 业务代码中存在裸数字常量,需确认是否应命名化 case 4: 安全相关阈值/时间/比例建议用具名常量或配置宏。
383 info SUP-MAG-001 Algorithm/FOC.cpp 469 业务代码中存在裸数字常量,需确认是否应命名化 duty_a = 0.5f * T0; 安全相关阈值/时间/比例建议用具名常量或配置宏。
384 info SUP-MAG-001 Algorithm/FOC.cpp 470 业务代码中存在裸数字常量,需确认是否应命名化 duty_b = 0.5f * T0 + T1; 安全相关阈值/时间/比例建议用具名常量或配置宏。
385 info SUP-MAG-001 Algorithm/FOC.cpp 471 业务代码中存在裸数字常量,需确认是否应命名化 duty_c = 0.5f * T0 + T1 + T2; 安全相关阈值/时间/比例建议用具名常量或配置宏。
386 info SUP-MAG-001 Algorithm/FOC.cpp 473 业务代码中存在裸数字常量,需确认是否应命名化 case 5: 安全相关阈值/时间/比例建议用具名常量或配置宏。
387 info SUP-MAG-001 Algorithm/FOC.cpp 474 业务代码中存在裸数字常量,需确认是否应命名化 duty_a = 0.5f * T0 + T2; 安全相关阈值/时间/比例建议用具名常量或配置宏。
388 info SUP-MAG-001 Algorithm/FOC.cpp 475 业务代码中存在裸数字常量,需确认是否应命名化 duty_b = 0.5f * T0; 安全相关阈值/时间/比例建议用具名常量或配置宏。
389 info SUP-MAG-001 Algorithm/FOC.cpp 476 业务代码中存在裸数字常量,需确认是否应命名化 duty_c = 0.5f * T0 + T1 + T2; 安全相关阈值/时间/比例建议用具名常量或配置宏。
390 info SUP-MAG-001 Algorithm/FOC.cpp 478 业务代码中存在裸数字常量,需确认是否应命名化 case 6: 安全相关阈值/时间/比例建议用具名常量或配置宏。
391 info SUP-MAG-001 Algorithm/FOC.cpp 479 业务代码中存在裸数字常量,需确认是否应命名化 duty_a = 0.5f * T0 + T1 + T2; 安全相关阈值/时间/比例建议用具名常量或配置宏。
392 info SUP-MAG-001 Algorithm/FOC.cpp 480 业务代码中存在裸数字常量,需确认是否应命名化 duty_b = 0.5f * T0; 安全相关阈值/时间/比例建议用具名常量或配置宏。
393 info SUP-MAG-001 Algorithm/FOC.cpp 481 业务代码中存在裸数字常量,需确认是否应命名化 duty_c = 0.5f * T0 + T1; 安全相关阈值/时间/比例建议用具名常量或配置宏。
394 info SUP-MAG-001 Algorithm/FOC.cpp 484 业务代码中存在裸数字常量,需确认是否应命名化 duty_a = 0.5f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
395 info SUP-MAG-001 Algorithm/FOC.cpp 485 业务代码中存在裸数字常量,需确认是否应命名化 duty_b = 0.5f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
396 info SUP-MAG-001 Algorithm/FOC.cpp 486 业务代码中存在裸数字常量,需确认是否应命名化 duty_c = 0.5f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
397 info SUP-MAG-001 Algorithm/FOC.cpp 534 业务代码中存在裸数字常量,需确认是否应命名化 if (HOLD_PWM_DUTY > 0.95f) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
398 info SUP-MAG-001 Algorithm/FOC.cpp 535 业务代码中存在裸数字常量,需确认是否应命名化 hold_pwm_duty = 0.95f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
399 info SUP-MAG-001 Algorithm/FOC.cpp 548 业务代码中存在裸数字常量,需确认是否应命名化 float hold_pwm_duty = target_velocity/100; 安全相关阈值/时间/比例建议用具名常量或配置宏。
400 info SUP-MAG-001 Algorithm/FOC.cpp 569 业务代码中存在裸数字常量,需确认是否应命名化 if (voltage < 36.0f and voltage > 8.0f) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
401 info SUP-MAG-001 Algorithm/FOC.cpp 572 业务代码中存在裸数字常量,需确认是否应命名化 v_half = voltage * 0.5f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
402 info SUP-MAG-001 Algorithm/FOC.cpp 605 业务代码中存在裸数字常量,需确认是否应命名化 float current_vbus = adc_value[2] * (3.3f / 4096.0f) * 11.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
403 info SUP-MAG-001 Algorithm/FOC.cpp 661 业务代码中存在裸数字常量,需确认是否应命名化 2.0f, voltage_power_supply * 0.5f); 安全相关阈值/时间/比例建议用具名常量或配置宏。
404 info SUP-MAG-001 Algorithm/FOC.cpp 700 业务代码中存在裸数字常量,需确认是否应命名化 if (fabsf(target_delta) > 5.0f) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
405 info SUP-MAG-001 Algorithm/FOC.cpp 763 业务代码中存在裸数字常量,需确认是否应命名化 if (target_velocity < -120.0f) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
406 info SUP-MAG-001 Algorithm/FOC.cpp 764 业务代码中存在裸数字常量,需确认是否应命名化 vel_inVelAngloop.set_P(vel_angloop_p * 2.0f); 安全相关阈值/时间/比例建议用具名常量或配置宏。
407 info SUP-MAG-001 Algorithm/FOC.cpp 765 业务代码中存在裸数字常量,需确认是否应命名化 } else if (target_velocity < -30.0f) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
408 info SUP-MAG-001 Algorithm/FOC.cpp 766 业务代码中存在裸数字常量,需确认是否应命名化 vel_inVelAngloop.set_P(vel_angloop_p * 1.5f); 安全相关阈值/时间/比例建议用具名常量或配置宏。
409 info SUP-MAG-001 Algorithm/FOC.cpp 774 业务代码中存在裸数字常量,需确认是否应命名化 if (fabsf(target_velocity - last_vang_target_vel) > 5.0f) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
410 info SUP-MAG-001 Algorithm/FOC.cpp 817 业务代码中存在裸数字常量,需确认是否应命名化 if (fabsf(target_velocity - last_mit_target_vel) > 5.0f) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
411 info SUP-MAG-001 Algorithm/FOC.h 48 业务代码中存在裸数字常量,需确认是否应命名化 float voltage_power_supply = 24.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
412 info SUP-MAG-001 Algorithm/FOC.h 191 业务代码中存在裸数字常量,需确认是否应命名化 static float cog_calib_run_data[6][COGGING_TABLE_SIZE]; 安全相关阈值/时间/比例建议用具名常量或配置宏。
413 info SUP-MAG-001 Algorithm/FOC.h 198 业务代码中存在裸数字常量,需确认是否应命名化 PIDController{DEFAULT_vel_loop_p * 100 / limit_voltage, vel_loop_Ki, 安全相关阈值/时间/比例建议用具名常量或配置宏。
414 info SUP-MAG-001 Algorithm/FOC.h 199 业务代码中存在裸数字常量,需确认是否应命名化 vel_loop_Kd, 10000, voltage_power_supply}; 安全相关阈值/时间/比例建议用具名常量或配置宏。
415 info SUP-MAG-001 Algorithm/FOC.h 201 业务代码中存在裸数字常量,需确认是否应命名化 PIDController{DEFAULT_angle_loop_p * 100 / limit_voltage, 100.0f, 0.2f, 安全相关阈值/时间/比例建议用具名常量或配置宏。
416 info SUP-MAG-001 Algorithm/FOC.h 202 业务代码中存在裸数字常量,需确认是否应命名化 10000000, voltage_power_supply}; 安全相关阈值/时间/比例建议用具名常量或配置宏。
417 info SUP-MAG-001 Algorithm/FOC.h 204 业务代码中存在裸数字常量,需确认是否应命名化 DEFAULT_current_loop_p * 100 / limit_voltage, current_loop_Ki, 安全相关阈值/时间/比例建议用具名常量或配置宏。
418 info SUP-MAG-001 Algorithm/FOC.h 205 业务代码中存在裸数字常量,需确认是否应命名化 current_loop_Kd, 1500, voltage_power_supply}; 安全相关阈值/时间/比例建议用具名常量或配置宏。
419 info SUP-MAG-001 Algorithm/FOC.h 207 业务代码中存在裸数字常量,需确认是否应命名化 PIDController{DEFAULT_vel_angloop_p * 100, vel_angloop_Ki, 安全相关阈值/时间/比例建议用具名常量或配置宏。
420 info SUP-MAG-001 Algorithm/FOC.h 210 业务代码中存在裸数字常量,需确认是否应命名化 PIDController{DEFAULT_angle_angloop_p * 100 / voltage_power_supply, 安全相关阈值/时间/比例建议用具名常量或配置宏。
421 info SUP-MAG-001 Algorithm/FOC.h 211 业务代码中存在裸数字常量,需确认是否应命名化 ang_angloop_Ki, ang_angloop_Kd, 1e4, 100}; 安全相关阈值/时间/比例建议用具名常量或配置宏。
422 info SUP-MAG-001 Algorithm/FOC.h 214 业务代码中存在裸数字常量,需确认是否应命名化 PIDController{DEFAULT_angle_MIT_p * 100 / limit_voltage, angle_MIT_Ki, 安全相关阈值/时间/比例建议用具名常量或配置宏。
423 info SUP-MAG-001 Algorithm/FOC.h 215 业务代码中存在裸数字常量,需确认是否应命名化 angle_MIT_Kd, 1e5, 100}; 安全相关阈值/时间/比例建议用具名常量或配置宏。
424 info SUP-MAG-001 Algorithm/FOC.h 217 业务代码中存在裸数字常量,需确认是否应命名化 DEFAULT_vel_MIT_p * 100, vel_MIT_Ki, vel_MIT_Kd, 1e9, 1000}; 安全相关阈值/时间/比例建议用具名常量或配置宏。
425 info SUP-MAG-001 Algorithm/FOC.h 219 业务代码中存在裸数字常量,需确认是否应命名化 DEFAULT_current_loop_p * 100 / limit_voltage, current_loop_Ki, 安全相关阈值/时间/比例建议用具名常量或配置宏。
426 info SUP-MAG-001 Algorithm/FOC.h 220 业务代码中存在裸数字常量,需确认是否应命名化 current_loop_Kd, 1500, voltage_power_supply}; 安全相关阈值/时间/比例建议用具名常量或配置宏。
427 info SUP-MAG-001 Algorithm/FOC.h 237 业务代码中存在裸数字常量,需确认是否应命名化 float v_half = voltage_power_supply * 0.5f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
428 info SUP-MAG-001 Algorithm/Filter.cpp 69 业务代码中存在裸数字常量,需确认是否应命名化 std::nth_element(sorted, sorted + size / 2, sorted + size); 安全相关阈值/时间/比例建议用具名常量或配置宏。
429 info SUP-MAG-001 Algorithm/Filter.cpp 71 业务代码中存在裸数字常量,需确认是否应命名化 return sorted[size / 2]; 安全相关阈值/时间/比例建议用具名常量或配置宏。
430 info SUP-MAG-001 Algorithm/Filter.cpp 190 业务代码中存在裸数字常量,需确认是否应命名化 if (error > 180.0f) error -= 360.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
431 info SUP-MAG-001 Algorithm/Filter.cpp 191 业务代码中存在裸数字常量,需确认是否应命名化 else if (error < -180.0f) error += 360.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
432 info SUP-MAG-001 Algorithm/Filter.h 99 业务代码中存在裸数字常量,需确认是否应命名化 const T MIN_COVARIANCE = static_cast<T>(1e-6); 安全相关阈值/时间/比例建议用具名常量或配置宏。
433 info SUP-MAG-001 Algorithm/pid.cpp 30 业务代码中存在裸数字常量,需确认是否应命名化 integral_prev + I * TIME_SLICE * 0.5f * (error + error_prev); 安全相关阈值/时间/比例建议用具名常量或配置宏。
434 info SUP-MAG-001 device/ADC.cpp 20 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float ADC_SCALE = 3.3f / 4096.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
435 info SUP-MAG-001 device/ADC.cpp 22 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float TEMP_FACTOR = 1000.0f / 4.3f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
436 info SUP-MAG-001 device/ADC.cpp 24 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float VCC_FACTOR = 11.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
437 info SUP-MAG-001 device/ADC.cpp 27 业务代码中存在裸数字常量,需确认是否应命名化 1.0f / 50.0f * 100.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
438 info SUP-MAG-001 device/ADC.cpp 31 业务代码中存在裸数字常量,需确认是否应命名化 u16 adc_value[3] = {0}; 安全相关阈值/时间/比例建议用具名常量或配置宏。
439 info SUP-MAG-001 device/ADC.cpp 32 业务代码中存在裸数字常量,需确认是否应命名化 static volatile u16 adc_current_value[3] = {0}; 安全相关阈值/时间/比例建议用具名常量或配置宏。
440 info SUP-MAG-001 device/ADC.cpp 67 业务代码中存在裸数字常量,需确认是否应命名化 dma_data_parameter.number = 3; 安全相关阈值/时间/比例建议用具名常量或配置宏。
441 info SUP-MAG-001 device/ADC.cpp 104 业务代码中存在裸数字常量,需确认是否应命名化 adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 3); 安全相关阈值/时间/比例建议用具名常量或配置宏。
442 info SUP-MAG-001 device/ADC.cpp 109 业务代码中存在裸数字常量,需确认是否应命名化 adc_regular_channel_config(ADC0, 2, ADC_CHANNEL_6, ADC_SAMPLETIME_28POINT5); 安全相关阈值/时间/比例建议用具名常量或配置宏。
443 info SUP-MAG-001 device/ADC.cpp 117 业务代码中存在裸数字常量,需确认是否应命名化 adc_channel_length_config(ADC0, ADC_INSERTED_CHANNEL, 4); 安全相关阈值/时间/比例建议用具名常量或配置宏。
444 info SUP-MAG-001 device/ADC.cpp 120 业务代码中存在裸数字常量,需确认是否应命名化 adc_inserted_channel_config(ADC0, 2, ADC_CHANNEL_4, ADC_SAMPLETIME_55POINT5); 安全相关阈值/时间/比例建议用具名常量或配置宏。
445 info SUP-MAG-001 device/ADC.cpp 121 业务代码中存在裸数字常量,需确认是否应命名化 adc_inserted_channel_config(ADC0, 3, ADC_CHANNEL_5, ADC_SAMPLETIME_55POINT5); 安全相关阈值/时间/比例建议用具名常量或配置宏。
446 info SUP-MAG-001 device/ADC.cpp 148 业务代码中存在裸数字常量,需确认是否应命名化 static_cast<u16>((-CURRENT_OFFSET / ADC_SCALE) + 0.5f)); 安全相关阈值/时间/比例建议用具名常量或配置宏。
447 info SUP-MAG-001 device/ADC.cpp 152 业务代码中存在裸数字常量,需确认是否应命名化 (1.43f - adc_value[0] * ADC_SCALE) * TEMP_FACTOR + 35.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
448 info SUP-MAG-001 device/ADC.cpp 158 业务代码中存在裸数字常量,需确认是否应命名化 vbus_samples[i] = adc_value[2] * ADC_SCALE * VCC_FACTOR; 安全相关阈值/时间/比例建议用具名常量或配置宏。
449 info SUP-MAG-001 device/ADC.cpp 160 业务代码中存在裸数字常量,需确认是否应命名化 float R_now = (float)adc_value[1] / (4096 - (float)adc_value[1]) * 4700; 安全相关阈值/时间/比例建议用具名常量或配置宏。
450 info SUP-MAG-001 device/ADC.cpp 162 业务代码中存在裸数字常量,需确认是否应命名化 1.0f / (0.00335f + 0.00025f * log(R_now / 10000.0f)) - 273.15f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
451 info SUP-MAG-001 device/ADC.cpp 241 业务代码中存在裸数字常量,需确认是否应命名化 (1.43f - adc_value[0] * ADC_SCALE) * TEMP_FACTOR + 35.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
452 info SUP-MAG-001 device/ADC.cpp 259 业务代码中存在裸数字常量,需确认是否应命名化 float R_now = (float)adc_value[1] / (4096 - (float)adc_value[1]) * 4700; 安全相关阈值/时间/比例建议用具名常量或配置宏。
453 info SUP-MAG-001 device/ADC.cpp 261 业务代码中存在裸数字常量,需确认是否应命名化 1.0f / (0.00335f + 0.00025f * log(R_now / 10000.0f)) - 273.15f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
454 info SUP-MAG-001 device/ADC.cpp 285 业务代码中存在裸数字常量,需确认是否应命名化 currW_samples[idx] = current_adc_to_ma(adc_current_value[2]); 安全相关阈值/时间/比例建议用具名常量或配置宏。
455 info SUP-MAG-001 device/ADC.cpp 299 业务代码中存在裸数字常量,需确认是否应命名化 vbus_samples[temp_vbus_head] = adc_value[2] * ADC_SCALE * VCC_FACTOR; 安全相关阈值/时间/比例建议用具名常量或配置宏。
456 info SUP-MAG-001 device/ADC.cpp 305 业务代码中存在裸数字常量,需确认是否应命名化 const u8 mid = ADC_FILTER_SIZE / 2; 安全相关阈值/时间/比例建议用具名常量或配置宏。
457 info SUP-MAG-001 device/ADC.cpp 323 业务代码中存在裸数字常量,需确认是否应命名化 adc_current_value[2] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_3); 安全相关阈值/时间/比例建议用具名常量或配置宏。
458 info SUP-MAG-001 device/Can.cpp 49 业务代码中存在裸数字常量,需确认是否应命名化 uint8_t can_rx_buffer[64]; 安全相关阈值/时间/比例建议用具名常量或配置宏。
459 info SUP-MAG-001 device/Can.cpp 50 业务代码中存在裸数字常量,需确认是否应命名化 static uint32_t can_rx_dma_words[16]; 安全相关阈值/时间/比例建议用具名常量或配置宏。
460 info SUP-MAG-001 device/Can.cpp 63 业务代码中存在裸数字常量,需确认是否应命名化 u8 data[64]; 安全相关阈值/时间/比例建议用具名常量或配置宏。
461 info SUP-MAG-001 device/Can.cpp 82 业务代码中存在裸数字常量,需确认是否应命名化 static constexpr u8 CANFD_DLC_LENGTH_TABLE[7] = {12, 16, 20, 24, 32, 48, 64}; 安全相关阈值/时间/比例建议用具名常量或配置宏。
462 info SUP-MAG-001 device/Can.cpp 103 业务代码中存在裸数字常量,需确认是否应命名化 return ((u32)node_id << 16) | (base_id & 0xFFFF); 安全相关阈值/时间/比例建议用具名常量或配置宏。
463 info SUP-MAG-001 device/Can.cpp 116 业务代码中存在裸数字常量,需确认是否应命名化 u16 rx_node_id = (u16)((received_id >> 16) & 0xFFFF); 安全相关阈值/时间/比例建议用具名常量或配置宏。
464 info SUP-MAG-001 device/Can.cpp 323 业务代码中存在裸数字常量,需确认是否应命名化 dma_rx_parameter.number = 16; 安全相关阈值/时间/比例建议用具名常量或配置宏。
465 info SUP-MAG-001 device/Can.cpp 363 业务代码中存在裸数字常量,需确认是否应命名化 can_parameter.prescaler = 6; 安全相关阈值/时间/比例建议用具名常量或配置宏。
466 info SUP-MAG-001 device/Can.cpp 426 业务代码中存在裸数字常量,需确认是否应命名化 can_parameter.prescaler = 6; 安全相关阈值/时间/比例建议用具名常量或配置宏。
467 info SUP-MAG-001 device/Can.cpp 445 业务代码中存在裸数字常量,需确认是否应命名化 can_fd_parameter.data_prescaler = 6; 安全相关阈值/时间/比例建议用具名常量或配置宏。
468 info SUP-MAG-001 device/Can.cpp 499 业务代码中存在裸数字常量,需确认是否应命名化 can_parameter.prescaler = 6; 安全相关阈值/时间/比例建议用具名常量或配置宏。
469 info SUP-MAG-001 device/Can.cpp 501 业务代码中存在裸数字常量,需确认是否应命名化 u16 i = 200; 安全相关阈值/时间/比例建议用具名常量或配置宏。
470 info SUP-MAG-001 device/Can.cpp 503 业务代码中存在裸数字常量,需确认是否应命名化 delay_1ms(10); 安全相关阈值/时间/比例建议用具名常量或配置宏。
471 info SUP-MAG-001 device/Can.cpp 516 业务代码中存在裸数字常量,需确认是否应命名化 ((uint16_t)(DEV_CAN_LOOPBACK_ID)) << 3U | (1U << 2); 安全相关阈值/时间/比例建议用具名常量或配置宏。
472 info SUP-MAG-001 device/Can.cpp 545 业务代码中存在裸数字常量,需确认是否应命名化 std::uniform_int_distribution<int> dis(0, 255); 安全相关阈值/时间/比例建议用具名常量或配置宏。
473 info SUP-MAG-001 device/Can.cpp 552 业务代码中存在裸数字常量,需确认是否应命名化 transmit_message.tx_dlen = 7; 安全相关阈值/时间/比例建议用具名常量或配置宏。
474 info SUP-MAG-001 device/Can.cpp 621 业务代码中存在裸数字常量,需确认是否应命名化 transmit_message.tx_dlen = 7; 安全相关阈值/时间/比例建议用具名常量或配置宏。
475 info SUP-MAG-001 device/Can.cpp 762 业务代码中存在裸数字常量,需确认是否应命名化 if (rx_queue[rx_queue_tail].length > 64) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
476 info SUP-MAG-001 device/Can.cpp 763 业务代码中存在裸数字常量,需确认是否应命名化 rx_queue[rx_queue_tail].length = 64; 安全相关阈值/时间/比例建议用具名常量或配置宏。
477 info SUP-MAG-001 device/Can.cpp 815 业务代码中存在裸数字常量,需确认是否应命名化 message->fd_flag = (uint8_t)((CAN_RFIFOMP_FDF & rfifomp) >> 7); 安全相关阈值/时间/比例建议用具名常量或配置宏。
478 info SUP-MAG-001 device/Can.cpp 819 业务代码中存在裸数字常量,需确认是否应命名化 message->fd_brs = (uint8_t)((rfifomp & CAN_RFIFOMP_BRS) >> 5); 安全相关阈值/时间/比例建议用具名常量或配置宏。
479 info SUP-MAG-001 device/Can.cpp 820 业务代码中存在裸数字常量,需确认是否应命名化 message->fd_esi = (uint8_t)((rfifomp & CAN_RFIFOMP_ESI) >> 4); 安全相关阈值/时间/比例建议用具名常量或配置宏。
480 info SUP-MAG-001 device/Can.cpp 833 业务代码中存在裸数字常量,需确认是否应命名化 if (can_rx_dma_message.rx_dlen > 64) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
481 info SUP-MAG-001 device/Can.cpp 834 业务代码中存在裸数字常量,需确认是否应命名化 can_rx_dma_message.rx_dlen = 64; 安全相关阈值/时间/比例建议用具名常量或配置宏。
482 info SUP-MAG-001 device/Can.cpp 1004 业务代码中存在裸数字常量,需确认是否应命名化 limit_voltage = FOC.limit_voltage * 1000; 安全相关阈值/时间/比例建议用具名常量或配置宏。
483 info SUP-MAG-001 device/Can.cpp 1005 业务代码中存在裸数字常量,需确认是否应命名化 mcu_temp = sampler.get_mcu_temp() * 100; 安全相关阈值/时间/比例建议用具名常量或配置宏。
484 info SUP-MAG-001 device/Can.cpp 1006 业务代码中存在裸数字常量,需确认是否应命名化 motor_temp = sampler.get_drv_temp() * 100; 安全相关阈值/时间/比例建议用具名常量或配置宏。
485 info SUP-MAG-001 device/Can.cpp 1007 业务代码中存在裸数字常量,需确认是否应命名化 Power_Voltage = sampler.get_vbus_voltage() * 1000; 安全相关阈值/时间/比例建议用具名常量或配置宏。
486 info SUP-MAG-001 device/Can.cpp 1015 业务代码中存在裸数字常量,需确认是否应命名化 u_current_union.f = sampler.get_current('') * 1000; 安全相关阈值/时间/比例建议用具名常量或配置宏。
487 info SUP-MAG-001 device/Can.cpp 1016 业务代码中存在裸数字常量,需确认是否应命名化 w_current_union.f = sampler.get_current('') * 1000; 安全相关阈值/时间/比例建议用具名常量或配置宏。
488 info SUP-MAG-001 device/Can.cpp 1017 业务代码中存在裸数字常量,需确认是否应命名化 v_current_union.f = sampler.get_current('') * 1000; 安全相关阈值/时间/比例建议用具名常量或配置宏。
489 info SUP-MAG-001 device/Can.cpp 1035 业务代码中存在裸数字常量,需确认是否应命名化 memset(transmit_data, 0, 32); 安全相关阈值/时间/比例建议用具名常量或配置宏。
490 info SUP-MAG-001 device/Can.cpp 1037 业务代码中存在裸数字常量,需确认是否应命名化 pack_u16_to_bytes(transmit_data, 2, motor_temp); 安全相关阈值/时间/比例建议用具名常量或配置宏。
491 info SUP-MAG-001 device/Can.cpp 1038 业务代码中存在裸数字常量,需确认是否应命名化 pack_u16_to_bytes(transmit_data, 4, u16(u_current_union.f)); 安全相关阈值/时间/比例建议用具名常量或配置宏。
492 info SUP-MAG-001 device/Can.cpp 1039 业务代码中存在裸数字常量,需确认是否应命名化 pack_u16_to_bytes(transmit_data, 6, u16(v_current_union.f)); 安全相关阈值/时间/比例建议用具名常量或配置宏。
493 info SUP-MAG-001 device/Can.cpp 1040 业务代码中存在裸数字常量,需确认是否应命名化 pack_u16_to_bytes(transmit_data, 8, u16(w_current_union.f)); 安全相关阈值/时间/比例建议用具名常量或配置宏。
494 info SUP-MAG-001 device/Can.cpp 1041 业务代码中存在裸数字常量,需确认是否应命名化 transmit_data[10] = 安全相关阈值/时间/比例建议用具名常量或配置宏。
495 info SUP-MAG-001 device/Can.cpp 1042 业务代码中存在裸数字常量,需确认是否应命名化 (transmit_data[10] & ~0x07) | 安全相关阈值/时间/比例建议用具名常量或配置宏。
496 info SUP-MAG-001 device/Can.cpp 1044 业务代码中存在裸数字常量,需确认是否应命名化 ((ThermalStatus & 0x01) << 2) | ((EEPROMStatus & 0x07) << 3)); 安全相关阈值/时间/比例建议用具名常量或配置宏。
497 info SUP-MAG-001 device/Can.cpp 1045 业务代码中存在裸数字常量,需确认是否应命名化 pack_u16_to_bytes(transmit_data, 11, Power_Voltage); 安全相关阈值/时间/比例建议用具名常量或配置宏。
498 info SUP-MAG-001 device/Can.cpp 1046 业务代码中存在裸数字常量,需确认是否应命名化 pack_float_to_bytes(transmit_data, 13, rt_angle_union); 安全相关阈值/时间/比例建议用具名常量或配置宏。
499 info SUP-MAG-001 device/Can.cpp 1047 业务代码中存在裸数字常量,需确认是否应命名化 pack_float_to_bytes(transmit_data, 17, rt_velocity_union); 安全相关阈值/时间/比例建议用具名常量或配置宏。
500 info SUP-MAG-001 device/Can.cpp 1048 业务代码中存在裸数字常量,需确认是否应命名化 pack_float_to_bytes(transmit_data, 21, rt_current_union); 安全相关阈值/时间/比例建议用具名常量或配置宏。
501 info SUP-MAG-001 device/Can.cpp 1049 业务代码中存在裸数字常量,需确认是否应命名化 pack_float_to_bytes(transmit_data, 25, testfloat_union); 安全相关阈值/时间/比例建议用具名常量或配置宏。
502 info SUP-MAG-001 device/Can.cpp 1050 业务代码中存在裸数字常量,需确认是否应命名化 transmit_data[29] = test_u16 & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
503 info SUP-MAG-001 device/Can.cpp 1051 业务代码中存在裸数字常量,需确认是否应命名化 transmit_data[30] = (test_u16 >> 8) & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
504 info SUP-MAG-001 device/Can.cpp 1052 业务代码中存在裸数字常量,需确认是否应命名化 transmit_data[31] = cpu_usage; 安全相关阈值/时间/比例建议用具名常量或配置宏。
505 info SUP-MAG-001 device/Can.cpp 1055 业务代码中存在裸数字常量,需确认是否应命名化 CANFD_AsyncSend(build_can_id(CANFD_STATUS_ID), 32, transmit_data); 安全相关阈值/时间/比例建议用具名常量或配置宏。
506 info SUP-MAG-001 device/Can.cpp 1058 业务代码中存在裸数字常量,需确认是否应命名化 memset(transmit_data, 0, 24); 安全相关阈值/时间/比例建议用具名常量或配置宏。
507 info SUP-MAG-001 device/Can.cpp 1061 业务代码中存在裸数字常量,需确认是否应命名化 pack_float_to_bytes(transmit_data, 3, target_current_union); 安全相关阈值/时间/比例建议用具名常量或配置宏。
508 info SUP-MAG-001 device/Can.cpp 1062 业务代码中存在裸数字常量,需确认是否应命名化 pack_float_to_bytes(transmit_data, 7, target_velocity_union); 安全相关阈值/时间/比例建议用具名常量或配置宏。
509 info SUP-MAG-001 device/Can.cpp 1063 业务代码中存在裸数字常量,需确认是否应命名化 pack_float_to_bytes(transmit_data, 11, target_angle_union); 安全相关阈值/时间/比例建议用具名常量或配置宏。
510 info SUP-MAG-001 device/Can.cpp 1066 业务代码中存在裸数字常量,需确认是否应命名化 CANFD_AsyncSend(build_can_id(CANFD_CONFIG_ID), 24, transmit_data); 安全相关阈值/时间/比例建议用具名常量或配置宏。
511 info SUP-MAG-001 device/Can.cpp 1102 业务代码中存在裸数字常量,需确认是否应命名化 u16 sender_node_id = (u16)((current_message.rx_efid >> 16) & 0xFFFF); 安全相关阈值/时间/比例建议用具名常量或配置宏。
512 info SUP-MAG-001 device/Can.cpp 1138 业务代码中存在裸数字常量,需确认是否应命名化 if (current_message.rx_dlen >= 2) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
513 info SUP-MAG-001 device/Can.cpp 1153 业务代码中存在裸数字常量,需确认是否应命名化 transmit_data[2] = 安全相关阈值/时间/比例建议用具名常量或配置宏。
514 info SUP-MAG-001 device/Can.cpp 1154 业务代码中存在裸数字常量,需确认是否应命名化 (u8)((new_node_id >> 8) & 0xFF); 安全相关阈值/时间/比例建议用具名常量或配置宏。
515 info SUP-MAG-001 device/Can.cpp 1158 业务代码中存在裸数字常量,需确认是否应命名化 u8 send_result = CANFD_AsyncSend(build_can_id(CANFD_SET_NODE_ID), 3, 安全相关阈值/时间/比例建议用具名常量或配置宏。
516 info SUP-MAG-001 device/Can.cpp 1179 业务代码中存在裸数字常量,需确认是否应命名化 CANFD_AsyncSend(build_can_id(CANFD_SET_NODE_ID), 3, 安全相关阈值/时间/比例建议用具名常量或配置宏。
517 info SUP-MAG-001 device/Can.cpp 1188 业务代码中存在裸数字常量,需确认是否应命名化 transmit_data[2] = (u8)((new_node_id >> 8) & 0xFF); 安全相关阈值/时间/比例建议用具名常量或配置宏。
518 info SUP-MAG-001 device/Can.cpp 1190 业务代码中存在裸数字常量,需确认是否应命名化 CANFD_AsyncSend(build_can_id(CANFD_SET_NODE_ID), 3, 安全相关阈值/时间/比例建议用具名常量或配置宏。
519 info SUP-MAG-001 device/Can.cpp 1207 业务代码中存在裸数字常量,需确认是否应命名化 float(unpack_bytes_to_u16(current_message.rx_data, 1)) / 1000; 安全相关阈值/时间/比例建议用具名常量或配置宏。
520 info SUP-MAG-001 device/Can.cpp 1210 业务代码中存在裸数字常量,需确认是否应命名化 unpack_bytes_to_float(current_message.rx_data, 3).f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
521 info SUP-MAG-001 device/Can.cpp 1215 业务代码中存在裸数字常量,需确认是否应命名化 unpack_bytes_to_float(current_message.rx_data, 7).f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
522 info SUP-MAG-001 device/Can.cpp 1220 业务代码中存在裸数字常量,需确认是否应命名化 unpack_bytes_to_float(current_message.rx_data, 11).f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
523 info SUP-MAG-001 device/Can.cpp 1229 业务代码中存在裸数字常量,需确认是否应命名化 u16 P_config = unpack_bytes_to_u16(current_message.rx_data, 15); 安全相关阈值/时间/比例建议用具名常量或配置宏。
524 info SUP-MAG-001 device/Can.cpp 1233 业务代码中存在裸数字常量,需确认是否应命名化 P_config = unpack_bytes_to_u16(current_message.rx_data, 17); 安全相关阈值/时间/比例建议用具名常量或配置宏。
525 info SUP-MAG-001 device/Can.cpp 1238 业务代码中存在裸数字常量,需确认是否应命名化 P_config = unpack_bytes_to_u16(current_message.rx_data, 19); 安全相关阈值/时间/比例建议用具名常量或配置宏。
526 info SUP-MAG-001 device/Can.cpp 1244 业务代码中存在裸数字常量,需确认是否应命名化 u8 eigth_byte = current_message.rx_data[7]; 安全相关阈值/时间/比例建议用具名常量或配置宏。
527 info SUP-MAG-001 device/Can.cpp 1255 业务代码中存在裸数字常量,需确认是否应命名化 if (first_byte >> 2 & 0x01) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
528 info SUP-MAG-001 device/Can.cpp 1259 业务代码中存在裸数字常量,需确认是否应命名化 if (first_byte >> 3 & 0x01) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
529 info SUP-MAG-001 device/Can.cpp 1266 业务代码中存在裸数字常量,需确认是否应命名化 if (first_byte >> 4 & 0x01) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
530 info SUP-MAG-001 device/Can.cpp 1271 业务代码中存在裸数字常量,需确认是否应命名化 if (eigth_byte & 0x80 >> 7) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
531 info SUP-MAG-001 device/Can.cpp 1287 业务代码中存在裸数字常量,需确认是否应命名化 CANFD_AsyncSend(build_can_id(CANFD_OTA_ACK_ID), 2, 安全相关阈值/时间/比例建议用具名常量或配置宏。
532 info SUP-MAG-001 device/Can.cpp 1294 业务代码中存在裸数字常量,需确认是否应命名化 CANFD_AsyncSend(build_can_id(CANFD_GET_NODE_ID), 2, transmit_data); 安全相关阈值/时间/比例建议用具名常量或配置宏。
533 info SUP-MAG-001 device/Can.cpp 1401 业务代码中存在裸数字常量,需确认是否应命名化 if (length > 8) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
534 info SUP-MAG-001 device/Can.cpp 1419 业务代码中存在裸数字常量,需确认是否应命名化 for (int i = 0; i < length && i < 8; i++) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
535 info SUP-MAG-001 device/Can.h 25 业务代码中存在裸数字常量,需确认是否应命名化 u8 b[4]; 安全相关阈值/时间/比例建议用具名常量或配置宏。
536 info SUP-MAG-001 device/Can.h 38 业务代码中存在裸数字常量,需确认是否应命名化 buffer[offset + 1] = (u8)((value >> 8) & 0xFF); 安全相关阈值/时间/比例建议用具名常量或配置宏。
537 info SUP-MAG-001 device/Can.h 53 业务代码中存在裸数字常量,需确认是否应命名化 buffer[offset + 2] = float_union.b[2]; 安全相关阈值/时间/比例建议用具名常量或配置宏。
538 info SUP-MAG-001 device/Can.h 54 业务代码中存在裸数字常量,需确认是否应命名化 buffer[offset + 3] = float_union.b[3]; 安全相关阈值/时间/比例建议用具名常量或配置宏。
539 info SUP-MAG-001 device/Can.h 65 业务代码中存在裸数字常量,需确认是否应命名化 short value = (short)(buffer[offset] | (buffer[offset + 1] << 8)); 安全相关阈值/时间/比例建议用具名常量或配置宏。
540 info SUP-MAG-001 device/Can.h 77 业务代码中存在裸数字常量,需确认是否应命名化 u16 value = (u16)(buffer[offset] | (buffer[offset + 1] << 8)); 安全相关阈值/时间/比例建议用具名常量或配置宏。
541 info SUP-MAG-001 device/Can.h 92 业务代码中存在裸数字常量,需确认是否应命名化 float_union.b[2] = buffer[offset + 2]; 安全相关阈值/时间/比例建议用具名常量或配置宏。
542 info SUP-MAG-001 device/Can.h 93 业务代码中存在裸数字常量,需确认是否应命名化 float_union.b[3] = buffer[offset + 3]; 安全相关阈值/时间/比例建议用具名常量或配置宏。
543 info SUP-MAG-001 device/Can.h 161 业务代码中存在裸数字常量,需确认是否应命名化 static const uint8_t CAN_RX_BUFFER_SIZE = 8; 安全相关阈值/时间/比例建议用具名常量或配置宏。
544 info SUP-MAG-001 device/Can.h 162 业务代码中存在裸数字常量,需确认是否应命名化 static const u32 CAN_SILENT_DURATION_MS = 10000; 安全相关阈值/时间/比例建议用具名常量或配置宏。
545 info SUP-MAG-001 device/Can.h 195 业务代码中存在裸数字常量,需确认是否应命名化 u8 transmit_data[64]; 安全相关阈值/时间/比例建议用具名常量或配置宏。
546 info SUP-MAG-001 device/Timer.cpp 19 业务代码中存在裸数字常量,需确认是否应命名化 extern u16 adc_value[3]; 安全相关阈值/时间/比例建议用具名常量或配置宏。
547 info SUP-MAG-001 device/Timer.cpp 27 业务代码中存在裸数字常量,需确认是否应命名化 static const u32 task_schedule_100us[10] = { 安全相关阈值/时间/比例建议用具名常量或配置宏。
548 info SUP-MAG-001 device/Timer.cpp 41 业务代码中存在裸数字常量,需确认是否应命名化 static const u32 task_schedule_1ms[10] = { 安全相关阈值/时间/比例建议用具名常量或配置宏。
549 info SUP-MAG-001 device/Timer.cpp 48 业务代码中存在裸数字常量,需确认是否应命名化 static const u32 task_schedule_10ms[10] = { 安全相关阈值/时间/比例建议用具名常量或配置宏。
550 info SUP-MAG-001 device/Timer.cpp 53 业务代码中存在裸数字常量,需确认是否应命名化 static const u32 task_schedule_100ms[10] = { 安全相关阈值/时间/比例建议用具名常量或配置宏。
551 info SUP-MAG-001 device/Timer.cpp 69 业务代码中存在裸数字常量,需确认是否应命名化 nvic_irq_enable(TIMER1_IRQn, 0, 2); 安全相关阈值/时间/比例建议用具名常量或配置宏。
552 info SUP-MAG-001 device/Timer.cpp 299 业务代码中存在裸数字常量,需确认是否应命名化 if (channel <= 3) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
553 info SUP-MAG-001 device/ang_sensor.cpp 124 业务代码中存在裸数字常量,需确认是否应命名化 uint32_t timeout = 100; 安全相关阈值/时间/比例建议用具名常量或配置宏。
554 info SUP-MAG-001 device/ang_sensor.cpp 203 业务代码中存在裸数字常量,需确认是否应命名化 spi_init_str.prescale = 24; 安全相关阈值/时间/比例建议用具名常量或配置宏。
555 info SUP-MAG-001 main.cpp 69 业务代码中存在裸数字常量,需确认是否应命名化 watchdog_init(50); 安全相关阈值/时间/比例建议用具名常量或配置宏。
556 info SUP-MAG-001 main.cpp 150 业务代码中存在裸数字常量,需确认是否应命名化 FOC.control_mode < 8) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
557 info SUP-MAG-001 sys/config.h 32 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u16 SOFTWARE_VERSION_MAJOR = 26; 安全相关阈值/时间/比例建议用具名常量或配置宏。
558 info SUP-MAG-001 sys/config.h 34 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u16 SOFTWARE_VERSION_MINOR = 5; 安全相关阈值/时间/比例建议用具名常量或配置宏。
559 info SUP-MAG-001 sys/config.h 36 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u16 SOFTWARE_VERSION_PATCH = 19; 安全相关阈值/时间/比例建议用具名常量或配置宏。
560 info SUP-MAG-001 sys/config.h 38 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u16 SOFTWARE_VERSION_BUILD = 2; 安全相关阈值/时间/比例建议用具名常量或配置宏。
561 info SUP-MAG-001 sys/config.h 41 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u16 HARDWARE_VERSION_MAJOR = 25; 安全相关阈值/时间/比例建议用具名常量或配置宏。
562 info SUP-MAG-001 sys/config.h 43 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u16 HARDWARE_VERSION_MINOR = 12; 安全相关阈值/时间/比例建议用具名常量或配置宏。
563 info SUP-MAG-001 sys/config.h 50 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u16 BOOT_VERSION_MAJOR = 26; 安全相关阈值/时间/比例建议用具名常量或配置宏。
564 info SUP-MAG-001 sys/config.h 54 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u16 BOOT_VERSION_PATCH = 12; 安全相关阈值/时间/比例建议用具名常量或配置宏。
565 info SUP-MAG-001 sys/config.h 125 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u32 OTA_CONFIG_NUM = 6; 安全相关阈值/时间/比例建议用具名常量或配置宏。
566 info SUP-MAG-001 sys/config.h 145 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u8 PP = 11; 安全相关阈值/时间/比例建议用具名常量或配置宏。
567 info SUP-MAG-001 sys/config.h 149 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u16 REDUCTION_RATIO = 25; 安全相关阈值/时间/比例建议用具名常量或配置宏。
568 info SUP-MAG-001 sys/config.h 151 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float CURRENT_OFFSET = -3.31f / 2.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
569 info SUP-MAG-001 sys/config.h 157 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float ANGLESENS_CALIBRATION_ANGLE = 83.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
570 info SUP-MAG-001 sys/config.h 171 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float ANGLE_OBSERVER_ALPHA = 0.75f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
571 info SUP-MAG-001 sys/config.h 179 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float VELOCITY_KALMAN_INITIAL_COVARIANCE = 1e-3f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
572 info SUP-MAG-001 sys/config.h 182 业务代码中存在裸数字常量,需确认是否应命名化 5e-4f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
573 info SUP-MAG-001 sys/config.h 191 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float CURRENT_KALMAN_INITIAL_COVARIANCE = 100.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
574 info SUP-MAG-001 sys/config.h 193 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float CURRENT_KALMAN_PROCESS_NOISE_Q = 10.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
575 info SUP-MAG-001 sys/config.h 195 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float CURRENT_KALMAN_MEASUREMENT_NOISE_R = 5e-5f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
576 info SUP-MAG-001 sys/config.h 199 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float DEFAULT_current_loop_p = 0.1f / 100 * 12; 安全相关阈值/时间/比例建议用具名常量或配置宏。
577 info SUP-MAG-001 sys/config.h 201 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float current_loop_Ki = 0.55f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
578 info SUP-MAG-001 sys/config.h 203 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float current_loop_Kd = 3e-4f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
579 info SUP-MAG-001 sys/config.h 206 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float DEFAULT_vel_loop_p = 0.018f / 100 * 12; 安全相关阈值/时间/比例建议用具名常量或配置宏。
580 info SUP-MAG-001 sys/config.h 208 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float vel_loop_Ku = 3.600000e-03 * 0.7 * 100 / 12; 安全相关阈值/时间/比例建议用具名常量或配置宏。
581 info SUP-MAG-001 sys/config.h 210 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float vel_loop_Tu = 17.0f * 1e-3f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
582 info SUP-MAG-001 sys/config.h 212 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float vel_loop_Ki = 1.2 * vel_loop_Ku / vel_loop_Tu; 安全相关阈值/时间/比例建议用具名常量或配置宏。
583 info SUP-MAG-001 sys/config.h 214 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float vel_loop_Kd = 0.075 * vel_loop_Ku * vel_loop_Tu * 2; 安全相关阈值/时间/比例建议用具名常量或配置宏。
584 info SUP-MAG-001 sys/config.h 217 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float DEFAULT_vel_angloop_p = 0.4f / 100; 安全相关阈值/时间/比例建议用具名常量或配置宏。
585 info SUP-MAG-001 sys/config.h 219 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float vel_angloop_Ki = 5.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
586 info SUP-MAG-001 sys/config.h 225 业务代码中存在裸数字常量,需确认是否应命名化 150.0f / 100 * 12; 安全相关阈值/时间/比例建议用具名常量或配置宏。
587 info SUP-MAG-001 sys/config.h 232 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float DEFAULT_angle_loop_p = 60.0f / 100 * 12; 安全相关阈值/时间/比例建议用具名常量或配置宏。
588 info SUP-MAG-001 sys/config.h 235 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float DEFAULT_angle_MIT_p = 100.0f / 100 * 12; 安全相关阈值/时间/比例建议用具名常量或配置宏。
589 info SUP-MAG-001 sys/config.h 242 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float DEFAULT_vel_MIT_p = 5.0f / 100; 安全相关阈值/时间/比例建议用具名常量或配置宏。
590 info SUP-MAG-001 sys/config.h 244 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float vel_MIT_Ki = 15.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
591 info SUP-MAG-001 sys/config.h 249 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float DEFAULT_current_MIT_p = 0.2f / 100 * 12; 安全相关阈值/时间/比例建议用具名常量或配置宏。
592 info SUP-MAG-001 sys/config.h 253 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float current_MIT_Kd = 3e-4f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
593 info SUP-MAG-001 sys/config.h 260 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float ADC_MAX = 65536.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
594 info SUP-MAG-001 sys/config.h 262 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float PI = 3.14159265358979323846f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
595 info SUP-MAG-001 sys/config.h 264 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float INV_PI_3 = 3.0f / PI; 安全相关阈值/时间/比例建议用具名常量或配置宏。
596 info SUP-MAG-001 sys/config.h 266 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float PI_3 = PI / 3.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
597 info SUP-MAG-001 sys/config.h 268 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float _1_SQRT3 = 0.57735026919f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
598 info SUP-MAG-001 sys/config.h 270 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float _3PI_2 = 4.71238898038f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
599 info SUP-MAG-001 sys/config.h 272 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float SQRT3 = 1.7320508075688772f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
600 info SUP-MAG-001 sys/config.h 274 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float SQRT3DV2 = 0.8660254037844386f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
601 info SUP-MAG-001 sys/config.h 276 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float COS_PI_3 = 0.5f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
602 info SUP-MAG-001 sys/config.h 278 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float ANGLE_FACTOR = 25.0f / 180.0f * PI; 安全相关阈值/时间/比例建议用具名常量或配置宏。
603 info SUP-MAG-001 sys/config.h 280 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float DEG2RAD = 1.0f / 180.0f * PI; 安全相关阈值/时间/比例建议用具名常量或配置宏。
604 info SUP-MAG-001 sys/config.h 282 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float RAD2DEG = 180.0f / PI; 安全相关阈值/时间/比例建议用具名常量或配置宏。
605 info SUP-MAG-001 sys/config.h 286 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u8 CONFIG_SAVED_NUM = 6; 安全相关阈值/时间/比例建议用具名常量或配置宏。
606 info SUP-MAG-001 sys/config.h 290 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u16 LUT_SIZE = 1024; 安全相关阈值/时间/比例建议用具名常量或配置宏。
607 info SUP-MAG-001 sys/config.h 294 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u16 LUT_SCALE = (LUT_SIZE / (2.0f * PI)); 安全相关阈值/时间/比例建议用具名常量或配置宏。
608 info SUP-MAG-001 sys/config.h 338 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u8 ADC_FILTER_SIZE = 6; 安全相关阈值/时间/比例建议用具名常量或配置宏。
609 info SUP-MAG-001 sys/config.h 342 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float ERROR_ADC_VAL = 255.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
610 info SUP-MAG-001 sys/config.h 344 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float MAX_TEMP = 150.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
611 info SUP-MAG-001 sys/config.h 346 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float MIN_TEMP = -40.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
612 info SUP-MAG-001 sys/config.h 348 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float MAX_CURRENT = 40.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
613 info SUP-MAG-001 sys/config.h 350 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float MIN_CURRENT = -40.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
614 info SUP-MAG-001 sys/config.h 352 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float MAX_VCC = 65.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
615 info SUP-MAG-001 sys/config.h 358 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u16 VEL_FILTER_SIZE = 4; 安全相关阈值/时间/比例建议用具名常量或配置宏。
616 info SUP-MAG-001 sys/config.h 364 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float ANGLE_WRAP_THRESHOLD = 300.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
617 info SUP-MAG-001 sys/config.h 366 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float ANGLE_WRAP_VALUE = 360.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
618 info SUP-MAG-001 sys/config.h 368 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float RAD_FACTOR = 1.0f / ADC_MAX * 2.0f * PI; 安全相关阈值/时间/比例建议用具名常量或配置宏。
619 info SUP-MAG-001 sys/config.h 370 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float ANGLESENS_FACTOR = 1.0f / ADC_MAX * 360.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
620 info SUP-MAG-001 sys/config.h 374 业务代码中存在裸数字常量,需确认是否应命名化 constexpr int TIMER2_PRESCALER = 119; 安全相关阈值/时间/比例建议用具名常量或配置宏。
621 info SUP-MAG-001 sys/config.h 376 业务代码中存在裸数字常量,需确认是否应命名化 constexpr int TIMER2_PERIOD = 49; 安全相关阈值/时间/比例建议用具名常量或配置宏。
622 info SUP-MAG-001 sys/config.h 381 业务代码中存在裸数字常量,需确认是否应命名化 (TIMER2_PERIOD + 1) * (TIMER2_PRESCALER + 1) / 120000000.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
623 info SUP-MAG-001 sys/config.h 391 业务代码中存在裸数字常量,需确认是否应命名化 constexpr int TIMER1_PERIOD = 2999; 安全相关阈值/时间/比例建议用具名常量或配置宏。
624 info SUP-MAG-001 sys/config.h 396 业务代码中存在裸数字常量,需确认是否应命名化 (TIMER1_PERIOD + 1) * 0.41 - 1; 安全相关阈值/时间/比例建议用具名常量或配置宏。
625 info SUP-MAG-001 sys/config.h 400 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u16 COGGING_TABLE_SIZE = 128; 安全相关阈值/时间/比例建议用具名常量或配置宏。
626 info SUP-MAG-001 sys/config.h 413 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float VBUS_DROP_THRESHOLD = 5.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
627 info SUP-MAG-001 sys/config.h 415 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float VBUS_ABSOLUTE_MIN = 12.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
628 info SUP-MAG-001 sys/config.h 417 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u32 VBUS_DEBOUNCE_COUNT = 5; 安全相关阈值/时间/比例建议用具名常量或配置宏。
629 info SUP-MAG-001 sys/config.h 419 业务代码中存在裸数字常量,需确认是否应命名化 constexpr float VBUS_RECOVERY_RATIO = 0.9f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
630 info SUP-MAG-001 sys/config.h 427 业务代码中存在裸数字常量,需确认是否应命名化 while (angle >= 360.0f) angle -= 360.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
631 info SUP-MAG-001 sys/config.h 428 业务代码中存在裸数字常量,需确认是否应命名化 while (angle < 0.0f) angle += 360.0f; 安全相关阈值/时间/比例建议用具名常量或配置宏。
632 info SUP-MAG-001 sys/flash.cpp 97 业务代码中存在裸数字常量,需确认是否应命名化 status_read[2] = readFloat(ADDR_VOLTAGE_LIMIT, &data[1]); 安全相关阈值/时间/比例建议用具名常量或配置宏。
633 info SUP-MAG-001 sys/flash.cpp 98 业务代码中存在裸数字常量,需确认是否应命名化 status_read[3] = readFloat(ADDR_VEL_LIMIT, &data[2]); 安全相关阈值/时间/比例建议用具名常量或配置宏。
634 info SUP-MAG-001 sys/flash.cpp 99 业务代码中存在裸数字常量,需确认是否应命名化 status_read[4] = readFloat(ADDR_ANGLE, &data[3]); 安全相关阈值/时间/比例建议用具名常量或配置宏。
635 info SUP-MAG-001 sys/flash.cpp 100 业务代码中存在裸数字常量,需确认是否应命名化 status_read[5] = readFloat(ADDR_TARGET_ANGLE, &data[4]); 安全相关阈值/时间/比例建议用具名常量或配置宏。
636 info SUP-MAG-001 sys/flash.cpp 101 业务代码中存在裸数字常量,需确认是否应命名化 status_read[6] = readFloat(ADDR_TARGET_VEL, &data[5]); 安全相关阈值/时间/比例建议用具名常量或配置宏。
637 info SUP-MAG-001 sys/flash.cpp 156 业务代码中存在裸数字常量,需确认是否应命名化 FOC.target_current = data[2]; 安全相关阈值/时间/比例建议用具名常量或配置宏。
638 info SUP-MAG-001 sys/flash.cpp 157 业务代码中存在裸数字常量,需确认是否应命名化 KTH7823.angle_set(data[3]); 安全相关阈值/时间/比例建议用具名常量或配置宏。
639 info SUP-MAG-001 sys/flash.cpp 158 业务代码中存在裸数字常量,需确认是否应命名化 FOC.target_angle = data[4]; 安全相关阈值/时间/比例建议用具名常量或配置宏。
640 info SUP-MAG-001 sys/flash.cpp 159 业务代码中存在裸数字常量,需确认是否应命名化 FOC.target_velocity = data[5]; 安全相关阈值/时间/比例建议用具名常量或配置宏。
641 info SUP-MAG-001 sys/flash.cpp 185 业务代码中存在裸数字常量,需确认是否应命名化 *data = (u16)((data_word & DATA_U16_MASK) >> 16); 安全相关阈值/时间/比例建议用具名常量或配置宏。
642 info SUP-MAG-001 sys/flash.cpp 242 业务代码中存在裸数字常量,需确认是否应命名化 u32 data_word_to_write = ((u32)data << 16) | (u32)virtualAddr; 安全相关阈值/时间/比例建议用具名常量或配置宏。
643 info SUP-MAG-001 sys/flash.cpp 441 业务代码中存在裸数字常量,需确认是否应命名化 status = writeFloat(ADDR_VEL_LIMIT, data[2]); 安全相关阈值/时间/比例建议用具名常量或配置宏。
644 info SUP-MAG-001 sys/flash.cpp 447 业务代码中存在裸数字常量,需确认是否应命名化 status = writeFloat(ADDR_ANGLE, data[3]); 安全相关阈值/时间/比例建议用具名常量或配置宏。
645 info SUP-MAG-001 sys/flash.cpp 453 业务代码中存在裸数字常量,需确认是否应命名化 status = writeFloat(ADDR_TARGET_ANGLE, data[4]); 安全相关阈值/时间/比例建议用具名常量或配置宏。
646 info SUP-MAG-001 sys/flash.cpp 459 业务代码中存在裸数字常量,需确认是否应命名化 status = writeFloat(ADDR_TARGET_VEL, data[5]); 安全相关阈值/时间/比例建议用具名常量或配置宏。
647 info SUP-MAG-001 sys/flash.cpp 507 业务代码中存在裸数字常量,需确认是否应命名化 u32 crc_data[2]; 安全相关阈值/时间/比例建议用具名常量或配置宏。
648 info SUP-MAG-001 sys/flash.cpp 511 业务代码中存在裸数字常量,需确认是否应命名化 return crc_block_data_calculate(crc_data, 2); 安全相关阈值/时间/比例建议用具名常量或配置宏。
649 info SUP-MAG-001 sys/flash.cpp 577 业务代码中存在裸数字常量,需确认是否应命名化 u32 write_data[4]; 安全相关阈值/时间/比例建议用具名常量或配置宏。
650 info SUP-MAG-001 sys/flash.cpp 580 业务代码中存在裸数字常量,需确认是否应命名化 write_data[2] = counter; 安全相关阈值/时间/比例建议用具名常量或配置宏。
651 info SUP-MAG-001 sys/flash.cpp 581 业务代码中存在裸数字常量,需确认是否应命名化 write_data[3] = crc; 安全相关阈值/时间/比例建议用具名常量或配置宏。
652 info SUP-MAG-001 sys/flash.cpp 588 业务代码中存在裸数字常量,需确认是否应命名化 for (u8 i = 0; i < 4; i++) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
653 info SUP-MAG-001 sys/flash.cpp 820 业务代码中存在裸数字常量,需确认是否应命名化 temp_val[2] = *flash_ptr; 安全相关阈值/时间/比例建议用具名常量或配置宏。
654 info SUP-MAG-001 sys/flash.cpp 822 业务代码中存在裸数字常量,需确认是否应命名化 temp_val[3] = *flash_ptr; 安全相关阈值/时间/比例建议用具名常量或配置宏。
655 info SUP-MAG-001 sys/flash.cpp 824 业务代码中存在裸数字常量,需确认是否应命名化 temp_val[4] = *flash_ptr; 安全相关阈值/时间/比例建议用具名常量或配置宏。
656 info SUP-MAG-001 sys/flash.cpp 826 业务代码中存在裸数字常量,需确认是否应命名化 temp_val[5] = *flash_ptr; 安全相关阈值/时间/比例建议用具名常量或配置宏。
657 info SUP-MAG-001 sys/flash.cpp 832 业务代码中存在裸数字常量,需确认是否应命名化 temp_val[0], temp_val[1], temp_val[2], temp_val[3], 安全相关阈值/时间/比例建议用具名常量或配置宏。
658 info SUP-MAG-001 sys/flash.cpp 833 业务代码中存在裸数字常量,需确认是否应命名化 temp_val[4], temp_val[5]); 安全相关阈值/时间/比例建议用具名常量或配置宏。
659 info SUP-MAG-001 sys/flash.cpp 845 业务代码中存在裸数字常量,需确认是否应命名化 u32 current_addr = n_APP_LATEST_AVAL_ADDR + 4 * i; 安全相关阈值/时间/比例建议用具名常量或配置宏。
660 info SUP-MAG-001 sys/flash.cpp 864 业务代码中存在裸数字常量,需确认是否应命名化 temp_val[2] = *flash_ptr; 安全相关阈值/时间/比例建议用具名常量或配置宏。
661 info SUP-MAG-001 sys/flash.cpp 866 业务代码中存在裸数字常量,需确认是否应命名化 temp_val[3] = *flash_ptr; 安全相关阈值/时间/比例建议用具名常量或配置宏。
662 info SUP-MAG-001 sys/flash.cpp 868 业务代码中存在裸数字常量,需确认是否应命名化 temp_val[4] = *flash_ptr; 安全相关阈值/时间/比例建议用具名常量或配置宏。
663 info SUP-MAG-001 sys/flash.cpp 870 业务代码中存在裸数字常量,需确认是否应命名化 temp_val[5] = *flash_ptr; 安全相关阈值/时间/比例建议用具名常量或配置宏。
664 info SUP-MAG-001 sys/flash.cpp 874 业务代码中存在裸数字常量,需确认是否应命名化 temp_val[0], temp_val[1], temp_val[2], temp_val[3], 安全相关阈值/时间/比例建议用具名常量或配置宏。
665 info SUP-MAG-001 sys/flash.cpp 875 业务代码中存在裸数字常量,需确认是否应命名化 temp_val[4], temp_val[5]); 安全相关阈值/时间/比例建议用具名常量或配置宏。
666 info SUP-MAG-001 sys/flash.cpp 889 业务代码中存在裸数字常量,需确认是否应命名化 for (int i = 0; i < 8; i++) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
667 info SUP-MAG-001 sys/flash.cpp 912 业务代码中存在裸数字常量,需确认是否应命名化 uint32_t reset_handler = *(__IO uint32_t *)(BOOTLOADER_START_ADDR + 4); 安全相关阈值/时间/比例建议用具名常量或配置宏。
668 info SUP-MAG-001 sys/flash.cpp 952 业务代码中存在裸数字常量,需确认是否应命名化 delay_1ms(1000); 安全相关阈值/时间/比例建议用具名常量或配置宏。
669 info SUP-MAG-001 sys/flash.cpp 969 业务代码中存在裸数字常量,需确认是否应命名化 (uint32_t *)APPLATEST_START_ADDR, APP_MAX_SIZE / 4); 安全相关阈值/时间/比例建议用具名常量或配置宏。
670 info SUP-MAG-001 sys/flash.cpp 972 业务代码中存在裸数字常量,需确认是否应命名化 uint32_t src_data = src_ptr[offset / 4]; 安全相关阈值/时间/比例建议用具名常量或配置宏。
671 info SUP-MAG-001 sys/flash.cpp 989 业务代码中存在裸数字常量,需确认是否应命名化 delay_1ms(1000); 安全相关阈值/时间/比例建议用具名常量或配置宏。
672 info SUP-MAG-001 sys/flash.cpp 997 业务代码中存在裸数字常量,需确认是否应命名化 offset += 4; 安全相关阈值/时间/比例建议用具名常量或配置宏。
673 info SUP-MAG-001 sys/flash.cpp 1000 业务代码中存在裸数字常量,需确认是否应命名化 if ((offset % 4096) == 0) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
674 info SUP-MAG-001 sys/flash.cpp 1013 业务代码中存在裸数字常量,需确认是否应命名化 APP_MAX_SIZE / 4); 安全相关阈值/时间/比例建议用具名常量或配置宏。
675 info SUP-MAG-001 sys/health.cpp 25 业务代码中存在裸数字常量,需确认是否应命名化 constexpr u16 PROTECT_TIME = 6000; 安全相关阈值/时间/比例建议用具名常量或配置宏。
676 info SUP-MAG-001 sys/health.cpp 40 业务代码中存在裸数字常量,需确认是否应命名化 if (drv_temp == 255) 安全相关阈值/时间/比例建议用具名常量或配置宏。
677 info SUP-MAG-001 sys/health.cpp 42 业务代码中存在裸数字常量,需确认是否应命名化 if (mcu_temp == 255) 安全相关阈值/时间/比例建议用具名常量或配置宏。
678 info SUP-MAG-001 sys/health.cpp 63 业务代码中存在裸数字常量,需确认是否应命名化 u32 currents[3] = {(u32)(sampler.get_current('') * 1000), 安全相关阈值/时间/比例建议用具名常量或配置宏。
679 info SUP-MAG-001 sys/health.cpp 64 业务代码中存在裸数字常量,需确认是否应命名化 (u32)(sampler.get_current('') * 1000), 安全相关阈值/时间/比例建议用具名常量或配置宏。
680 info SUP-MAG-001 sys/health.cpp 65 业务代码中存在裸数字常量,需确认是否应命名化 (u32)(sampler.get_current('') * 1000)}; 安全相关阈值/时间/比例建议用具名常量或配置宏。
681 info SUP-MAG-001 sys/health.cpp 68 业务代码中存在裸数字常量,需确认是否应命名化 current_max = max(currents[0], currents[1], currents[2]); 安全相关阈值/时间/比例建议用具名常量或配置宏。
682 info SUP-MAG-001 sys/health.cpp 69 业务代码中存在裸数字常量,需确认是否应命名化 if (current_max < 2000) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
683 info SUP-MAG-001 sys/health.cpp 72 业务代码中存在裸数字常量,需确认是否应命名化 } else if (current_max > 3800) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
684 info SUP-MAG-001 sys/health.cpp 75 业务代码中存在裸数字常量,需确认是否应命名化 } else if (current_max > 3400) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
685 info SUP-MAG-001 sys/health.cpp 78 业务代码中存在裸数字常量,需确认是否应命名化 } else if (current_max > 3000) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
686 info SUP-MAG-001 sys/health.cpp 81 业务代码中存在裸数字常量,需确认是否应命名化 } else if (current_max > 2000) { 安全相关阈值/时间/比例建议用具名常量或配置宏。
687 info SUP-MAG-001 sys/health.h 46 业务代码中存在裸数字常量,需确认是否应命名化 u32 thermal_capacity = 3600000; 安全相关阈值/时间/比例建议用具名常量或配置宏。
688 info SUP-MAG-001 sys/health.h 48 业务代码中存在裸数字常量,需确认是否应命名化 u16 gapTimeMs = 10; 安全相关阈值/时间/比例建议用具名常量或配置宏。
689 info SUP-MAG-001 sys/health.h 52 业务代码中存在裸数字常量,需确认是否应命名化 : thermalRate(FLOAT_TO_Q16_16(0.995f)), 安全相关阈值/时间/比例建议用具名常量或配置宏。
690 info SUP-MAG-001 sys/health.h 53 业务代码中存在裸数字常量,需确认是否应命名化 recoveryRate(FLOAT_TO_Q16_16(0.33f)) {} 安全相关阈值/时间/比例建议用具名常量或配置宏。
691 info SUP-MAG-001 sys/initial.cpp 142 业务代码中存在裸数字常量,需确认是否应命名化 u8 versionData[24] = {0}; 安全相关阈值/时间/比例建议用具名常量或配置宏。
692 info SUP-MAG-001 sys/initial.cpp 147 业务代码中存在裸数字常量,需确认是否应命名化 versionData[1] = (softwareVersion.major >> 8) & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
693 info SUP-MAG-001 sys/initial.cpp 148 业务代码中存在裸数字常量,需确认是否应命名化 versionData[2] = softwareVersion.minor & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
694 info SUP-MAG-001 sys/initial.cpp 149 业务代码中存在裸数字常量,需确认是否应命名化 versionData[3] = (softwareVersion.minor >> 8) & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
695 info SUP-MAG-001 sys/initial.cpp 150 业务代码中存在裸数字常量,需确认是否应命名化 versionData[4] = softwareVersion.patch & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
696 info SUP-MAG-001 sys/initial.cpp 151 业务代码中存在裸数字常量,需确认是否应命名化 versionData[5] = (softwareVersion.patch >> 8) & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
697 info SUP-MAG-001 sys/initial.cpp 152 业务代码中存在裸数字常量,需确认是否应命名化 versionData[6] = softwareVersion.build & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
698 info SUP-MAG-001 sys/initial.cpp 153 业务代码中存在裸数字常量,需确认是否应命名化 versionData[7] = (softwareVersion.build >> 8) & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
699 info SUP-MAG-001 sys/initial.cpp 156 业务代码中存在裸数字常量,需确认是否应命名化 versionData[8] = hardwareVersion.major & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
700 info SUP-MAG-001 sys/initial.cpp 157 业务代码中存在裸数字常量,需确认是否应命名化 versionData[9] = (hardwareVersion.major >> 8) & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
701 info SUP-MAG-001 sys/initial.cpp 158 业务代码中存在裸数字常量,需确认是否应命名化 versionData[10] = hardwareVersion.minor & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
702 info SUP-MAG-001 sys/initial.cpp 159 业务代码中存在裸数字常量,需确认是否应命名化 versionData[11] = (hardwareVersion.minor >> 8) & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
703 info SUP-MAG-001 sys/initial.cpp 160 业务代码中存在裸数字常量,需确认是否应命名化 versionData[12] = hardwareVersion.patch & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
704 info SUP-MAG-001 sys/initial.cpp 161 业务代码中存在裸数字常量,需确认是否应命名化 versionData[13] = (hardwareVersion.patch >> 8) & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
705 info SUP-MAG-001 sys/initial.cpp 162 业务代码中存在裸数字常量,需确认是否应命名化 versionData[14] = hardwareVersion.build & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
706 info SUP-MAG-001 sys/initial.cpp 163 业务代码中存在裸数字常量,需确认是否应命名化 versionData[15] = (hardwareVersion.build >> 8) & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
707 info SUP-MAG-001 sys/initial.cpp 166 业务代码中存在裸数字常量,需确认是否应命名化 versionData[16] = bootVersion.major & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
708 info SUP-MAG-001 sys/initial.cpp 167 业务代码中存在裸数字常量,需确认是否应命名化 versionData[17] = (bootVersion.major >> 8) & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
709 info SUP-MAG-001 sys/initial.cpp 168 业务代码中存在裸数字常量,需确认是否应命名化 versionData[18] = bootVersion.minor & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
710 info SUP-MAG-001 sys/initial.cpp 169 业务代码中存在裸数字常量,需确认是否应命名化 versionData[19] = (bootVersion.minor >> 8) & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
711 info SUP-MAG-001 sys/initial.cpp 170 业务代码中存在裸数字常量,需确认是否应命名化 versionData[20] = bootVersion.patch & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
712 info SUP-MAG-001 sys/initial.cpp 171 业务代码中存在裸数字常量,需确认是否应命名化 versionData[21] = (bootVersion.patch >> 8) & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
713 info SUP-MAG-001 sys/initial.cpp 172 业务代码中存在裸数字常量,需确认是否应命名化 versionData[22] = bootVersion.build & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
714 info SUP-MAG-001 sys/initial.cpp 173 业务代码中存在裸数字常量,需确认是否应命名化 versionData[23] = (bootVersion.build >> 8) & 0xFF; 安全相关阈值/时间/比例建议用具名常量或配置宏。
715 info SUP-MAG-001 sys/initial.cpp 178 业务代码中存在裸数字常量,需确认是否应命名化 CAN0_transmiter.build_can_id(CANFD_VERSION_ID), 24, versionData); 安全相关阈值/时间/比例建议用具名常量或配置宏。
716 info SUP-MAG-001 sys/initial.cpp 186 业务代码中存在裸数字常量,需确认是否应命名化 char versionStr[32]; 安全相关阈值/时间/比例建议用具名常量或配置宏。
717 info SUP-MAG-001 sys/initial.cpp 219 业务代码中存在裸数字常量,需确认是否应命名化 status = fwdgt_config(time * 0.625, FWDGT_PSC_DIV64); 安全相关阈值/时间/比例建议用具名常量或配置宏。
718 info SUP-MAG-001 sys/initial.cpp 298 业务代码中存在裸数字常量,需确认是否应命名化 u32 temp_val[6]; 安全相关阈值/时间/比例建议用具名常量或配置宏。
719 info SUP-MAG-001 sys/initial.cpp 305 业务代码中存在裸数字常量,需确认是否应命名化 temp_val[2] = *flash_ptr1; 安全相关阈值/时间/比例建议用具名常量或配置宏。
720 info SUP-MAG-001 sys/initial.cpp 307 业务代码中存在裸数字常量,需确认是否应命名化 temp_val[3] = *flash_ptr1; 安全相关阈值/时间/比例建议用具名常量或配置宏。
721 info SUP-MAG-001 sys/initial.cpp 309 业务代码中存在裸数字常量,需确认是否应命名化 temp_val[4] = *flash_ptr1; 安全相关阈值/时间/比例建议用具名常量或配置宏。
722 info SUP-MAG-001 sys/initial.cpp 311 业务代码中存在裸数字常量,需确认是否应命名化 temp_val[5] = *flash_ptr1; 安全相关阈值/时间/比例建议用具名常量或配置宏。
723 info SUP-MAG-001 sys/initial.cpp 316 业务代码中存在裸数字常量,需确认是否应命名化 temp_val[0], temp_val[1], temp_val[2], temp_val[3], temp_val[4], 安全相关阈值/时间/比例建议用具名常量或配置宏。
724 info SUP-MAG-001 sys/initial.cpp 317 业务代码中存在裸数字常量,需确认是否应命名化 temp_val[5]); 安全相关阈值/时间/比例建议用具名常量或配置宏。
725 info SUP-MAG-001 sys/initial.cpp 332 业务代码中存在裸数字常量,需确认是否应命名化 u8 transmit_data[2] = {0x0A, 0xAC}; 安全相关阈值/时间/比例建议用具名常量或配置宏。
726 info SUP-MAG-001 sys/initial.cpp 334 业务代码中存在裸数字常量,需确认是否应命名化 CAN0_transmiter.CANFD_AsyncSend(CANFD_OTA_ACK_ID, 2, transmit_data); 安全相关阈值/时间/比例建议用具名常量或配置宏。
727 info SUP-MAG-001 sys/systick.cpp 159 业务代码中存在裸数字常量,需确认是否应命名化 delay_1ms(1000); 安全相关阈值/时间/比例建议用具名常量或配置宏。
728 info SUP-MAG-001 sys/systick.cpp 227 业务代码中存在裸数字常量,需确认是否应命名化 SCB->AIRCR = (0x05FA0000U | (SCB->AIRCR & (0x700U)) | (1U << 2)); 安全相关阈值/时间/比例建议用具名常量或配置宏。
@@ -1,509 +0,0 @@
# ROBOT_V2 APP 补充静态筛查报告
## 说明
- 基于上一版业务代码静态测试包继续补充筛查。
- 重点覆盖容易漏掉的评审项:Doxygen 覆盖、全局状态、switch default、无限循环、关中断成对性、ISR、头文件保护、magic number、浮点比较。
- 只生成报告,不修改源码逻辑。
## 统计
- error: 0
- warning: 207
- info: 520
## 规则命中
- SUP-CMP-001: 14
- SUP-DOC-001: 12
- SUP-GLB-001: 189
- SUP-GLB-002: 47
- SUP-IRQ-001: 3
- SUP-ISR-001: 18
- SUP-LOOP-001: 4
- SUP-MAG-001: 439
- SUP-SW-001: 1
## Warning 明细
- [SUP-CMP-001] `Algorithm/FOC.cpp:53` 浮点变量比较需确认容差或离散状态含义
- `if (rt_velocity < -0.5f) last_table = cogging_table_rev;`
- 建议:建议确认是否应使用阈值/容差比较。
- [SUP-CMP-001] `Algorithm/FOC.cpp:54` 浮点变量比较需确认容差或离散状态含义
- `else if (rt_velocity > 0.5f) last_table = cogging_table;`
- 建议:建议确认是否应使用阈值/容差比较。
- [SUP-CMP-001] `Algorithm/FOC.cpp:404` 浮点变量比较需确认容差或离散状态含义
- `u8 sector_code = (X > 0.0f ? 1u : 0u)`
- 建议:建议确认是否应使用阈值/容差比较。
- [SUP-CMP-001] `Algorithm/FOC.cpp:405` 浮点变量比较需确认容差或离散状态含义
- `+ (Y > 0.0f ? 2u : 0u)`
- 建议:建议确认是否应使用阈值/容差比较。
- [SUP-CMP-001] `Algorithm/FOC.cpp:406` 浮点变量比较需确认容差或离散状态含义
- `+ (Z > 0.0f ? 4u : 0u);`
- 建议:建议确认是否应使用阈值/容差比较。
- [SUP-CMP-001] `Algorithm/FOC.cpp:534` 浮点变量比较需确认容差或离散状态含义
- `if (HOLD_PWM_DUTY > 0.95f) {`
- 建议:建议确认是否应使用阈值/容差比较。
- [SUP-CMP-001] `Algorithm/FOC.cpp:536` 浮点变量比较需确认容差或离散状态含义
- `} else if (HOLD_PWM_DUTY < 0.0f) {`
- 建议:建议确认是否应使用阈值/容差比较。
- [SUP-CMP-001] `Algorithm/FOC.cpp:569` 浮点变量比较需确认容差或离散状态含义
- `if (voltage < 36.0f and voltage > 8.0f) {`
- 建议:建议确认是否应使用阈值/容差比较。
- [SUP-CMP-001] `Algorithm/FOC.cpp:763` 浮点变量比较需确认容差或离散状态含义
- `if (target_velocity < -120.0f) {`
- 建议:建议确认是否应使用阈值/容差比较。
- [SUP-CMP-001] `Algorithm/FOC.cpp:765` 浮点变量比较需确认容差或离散状态含义
- `} else if (target_velocity < -30.0f) {`
- 建议:建议确认是否应使用阈值/容差比较。
- [SUP-CMP-001] `Algorithm/Filter.cpp:190` 浮点变量比较需确认容差或离散状态含义
- `if (error > 180.0f) error -= 360.0f;`
- 建议:建议确认是否应使用阈值/容差比较。
- [SUP-CMP-001] `Algorithm/Filter.cpp:191` 浮点变量比较需确认容差或离散状态含义
- `else if (error < -180.0f) error += 360.0f;`
- 建议:建议确认是否应使用阈值/容差比较。
- [SUP-CMP-001] `sys/config.h:427` 浮点变量比较需确认容差或离散状态含义
- `while (angle >= 360.0f) angle -= 360.0f;`
- 建议:建议确认是否应使用阈值/容差比较。
- [SUP-CMP-001] `sys/config.h:428` 浮点变量比较需确认容差或离散状态含义
- `while (angle < 0.0f) angle += 360.0f;`
- 建议:建议确认是否应使用阈值/容差比较。
- [SUP-GLB-001] `Algorithm/FOC.cpp:23` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `FOC_Controller FOC;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `device/ADC.cpp:20` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float ADC_SCALE = 3.3f / 4096.0f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `device/ADC.cpp:22` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float TEMP_FACTOR = 1000.0f / 4.3f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `device/ADC.cpp:24` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float VCC_FACTOR = 11.0f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `device/ADC.cpp:26` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float CURRENT_FACTOR =`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `device/ADC.cpp:30` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `sampler sampler;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `device/ADC.cpp:33` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `static volatile u8 adc_current_frame_ready = 0;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `device/Can.cpp:37` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 CANX = CAN0;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `device/Can.cpp:48` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `dma_parameter_struct dma_rx_parameter;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `device/Can.cpp:51` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `static volatile bool can_rx_dma_busy = false;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `device/Can.cpp:52` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `static can_receive_message_struct can_rx_dma_message;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `device/Can.cpp:72` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `static volatile u8 rx_queue_head = 0;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `device/Can.cpp:73` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `static volatile u8 rx_queue_tail = 0;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `device/Can.cpp:74` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `static volatile u8 rx_queue_count = 0;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `device/Can.cpp:77` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `static volatile u8 tx_queue_head = 0;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `device/Can.cpp:78` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `static volatile u8 tx_queue_tail = 0;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `device/Can.cpp:79` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `static volatile u8 tx_queue_count = 0;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `device/Can.cpp:84` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `CAN_transmiter CAN0_transmiter;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `device/Timer.cpp:18` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `volatile u32 total_us100_counter = 0;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `device/ang_sensor.cpp:38` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `volatile bool spi_dma_tx_complete = false;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `device/ang_sensor.cpp:39` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `volatile bool spi_dma_rx_complete = false;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `device/ang_sensor.cpp:41` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `angle_sensor KTH7823;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `main.cpp:39` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `TaskScheduler scheduler = {0};`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `main.cpp:40` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `u32 motor_runtime_50us = 0;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `main.cpp:41` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `u32 cnt_test = 0;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:32` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 SOFTWARE_VERSION_MAJOR = 26;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:34` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 SOFTWARE_VERSION_MINOR = 5;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:36` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 SOFTWARE_VERSION_PATCH = 19;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:38` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 SOFTWARE_VERSION_BUILD = 2;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:41` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 HARDWARE_VERSION_MAJOR = 25;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:43` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 HARDWARE_VERSION_MINOR = 12;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:45` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 HARDWARE_VERSION_PATCH = 01;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:47` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 HARDWARE_VERSION_BUILD = 0;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:50` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 BOOT_VERSION_MAJOR = 26;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:52` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 BOOT_VERSION_MINOR = 1;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:54` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 BOOT_VERSION_PATCH = 12;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:56` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 BOOT_VERSION_BUILD = 0;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:60` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 BOOTLOADER_SIZE = 0x6000;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:62` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 BOOTLOADER_START_ADDR = 0x08000000;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:64` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 APPLATEST_START_ADDR = 0x08012000;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:66` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 APPBACK_START_ADDR = 0x08006000;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:68` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 APP_MAX_SIZE = 0xC000;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:70` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 FMC_PAGE_SIZE = 0x400;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:72` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 SLEEP_CONFIG_START = 0x0801E400;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:74` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 SLEEP_CONFIG_END = 0x0801E800;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:76` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 FLASH_EMPTY = 0xFFFFFFFF;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:78` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 SLEEP_ENABLE = 0x11111111;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:80` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 SLEEP_DISABLE = 0x00000000;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:92` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 NODE_ID_PAGE_ADDR = 0x0801E800;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:94` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 NODE_ID_PRIMARY_ADDR = 0x0801E800;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:96` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 NODE_ID_BACKUP_ADDR = 0x0801E840;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:98` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 NODE_ID_MAGIC = 0x4E4F4445;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:100` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 DEFAULT_NODE_ID = 1;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:102` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 BROADCAST_NODE_ID = 0x1FFF;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:104` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 MAX_NODE_ID = 0x1FFE;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:113` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u8 NODE_ID_STRUCT_SIZE = 0x10;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:115` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u8 NODE_ID_MAGIC_OFFSET = 0x00;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:117` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u8 NODE_ID_VALUE_OFFSET = 0x04;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:119` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u8 NODE_ID_COUNTER_OFFSET = 0x08;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:121` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u8 NODE_ID_CRC_OFFSET = 0x0C;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:125` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 OTA_CONFIG_NUM = 6;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:127` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 n_APP_LATEST_AVAL_ADDR = 0x0801E000;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:129` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 n_APP_BACKUP_AVAL_ADDR = 0x0801E004;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:131` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 n_APP_LATEST_EN_ADDR = 0x0801E008;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:133` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 n_APP_BACKUP_EN_ADDR = 0x0801E00C;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:135` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 n_APP_LATEST_CHECK_ADDR = 0x0801E010;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:137` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 n_APP_BACKUP_CHECK_ADDR = 0x0801E014;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:139` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 OTA_NOT_AVAL = 0xFFFFFFFF;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:141` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u32 OTA_AVAL = 0x00000000;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:145` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u8 PP = 11;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:147` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float DIR = 1.0f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:149` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 REDUCTION_RATIO = 25;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:151` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float CURRENT_OFFSET = -3.31f / 2.0f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:153` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float HOLD_PWM_DUTY = 0.1f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:155` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 ANGLESENS_OFFSET = 0;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:157` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float ANGLESENS_CALIBRATION_ANGLE = 83.0f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:159` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float KE_FACTOR = 0.0f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:163` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float ANGLE_KALMAN_INITIAL_STATE = 0.0f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:165` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float ANGLE_KALMAN_INITIAL_COVARIANCE = 0.0f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:167` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float ANGLE_KALMAN_PROCESS_NOISE_Q = 0.0f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:169` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float ANGLE_KALMAN_MEASUREMENT_NOISE_R = 0.0f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:171` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float ANGLE_OBSERVER_ALPHA = 0.75f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:173` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float ANGLE_OBSERVER_BETA = 0.002f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:177` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float VELOCITY_KALMAN_INITIAL_STATE = 0.0f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:179` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float VELOCITY_KALMAN_INITIAL_COVARIANCE = 1e-3f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:181` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float VELOCITY_KALMAN_PROCESS_NOISE_Q =`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:184` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float VELOCITY_KALMAN_MEASUREMENT_NOISE_R =`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:189` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float CURRENT_KALMAN_INITIAL_STATE = 0.0f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:191` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float CURRENT_KALMAN_INITIAL_COVARIANCE = 100.0f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:193` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float CURRENT_KALMAN_PROCESS_NOISE_Q = 10.0f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:195` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float CURRENT_KALMAN_MEASUREMENT_NOISE_R = 5e-5f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:199` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float DEFAULT_current_loop_p = 0.1f / 100 * 12;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:201` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float current_loop_Ki = 0.55f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:203` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float current_loop_Kd = 3e-4f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:206` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float DEFAULT_vel_loop_p = 0.018f / 100 * 12;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:208` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float vel_loop_Ku = 3.600000e-03 * 0.7 * 100 / 12;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:210` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float vel_loop_Tu = 17.0f * 1e-3f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:212` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float vel_loop_Ki = 1.2 * vel_loop_Ku / vel_loop_Tu;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:214` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float vel_loop_Kd = 0.075 * vel_loop_Ku * vel_loop_Tu * 2;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:217` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float DEFAULT_vel_angloop_p = 0.4f / 100;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:219` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float vel_angloop_Ki = 5.0f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:221` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float vel_angloop_Kd = 5e-05f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:224` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float DEFAULT_angle_angloop_p =`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:227` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float ang_angloop_Ki = 0.00f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:229` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float ang_angloop_Kd = 8e-04f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:232` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float DEFAULT_angle_loop_p = 60.0f / 100 * 12;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:235` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float DEFAULT_angle_MIT_p = 100.0f / 100 * 12;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:237` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float angle_MIT_Ki = 0.0f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:239` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float angle_MIT_Kd = 8e-04f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:242` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float DEFAULT_vel_MIT_p = 5.0f / 100;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:244` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float vel_MIT_Ki = 15.0f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:246` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float vel_MIT_Kd = 1e-04f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:249` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float DEFAULT_current_MIT_p = 0.2f / 100 * 12;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:251` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float current_MIT_Ki = 0.1f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:253` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float current_MIT_Kd = 3e-4f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:260` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float ADC_MAX = 65536.0f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:262` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float PI = 3.14159265358979323846f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:264` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float INV_PI_3 = 3.0f / PI;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:266` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float PI_3 = PI / 3.0f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:268` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float _1_SQRT3 = 0.57735026919f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:270` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float _3PI_2 = 4.71238898038f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:272` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float SQRT3 = 1.7320508075688772f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:274` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float SQRT3DV2 = 0.8660254037844386f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:276` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float COS_PI_3 = 0.5f;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:278` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float ANGLE_FACTOR = 25.0f / 180.0f * PI;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:280` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float DEG2RAD = 1.0f / 180.0f * PI;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:282` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr float RAD2DEG = 180.0f / PI;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:284` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u8 DEFAULT_VALUE = 0;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:286` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u8 CONFIG_SAVED_NUM = 6;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:290` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 LUT_SIZE = 1024;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:301` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 DEV_CAN0_ID = 0x0000;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:303` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 DEV_CAN0_MASK = 0x0000;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:305` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 DEV_CAN_LOOPBACK_ID = 0x0000;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:308` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 CANFD_STATUS_ID = 0x0100;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:310` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 CANFD_CONFIG_ID = 0x0101;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:312` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 CANFD_VERSION_ID = 0x00FF;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:315` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 CANFD_CMD_ID = 0x0200;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:317` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 CANFD_RESET_ID = 0x0301;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:320` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 CANFD_SET_NODE_ID = 0x0400;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:322` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 CANFD_GET_NODE_ID = 0x0401;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:326` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 CANFD_BOOT_ID = 0x0000;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:328` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 CANFD_OTA_REQ_ID = 0x0100;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:330` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 CANFD_OTA_DATA_ID = 0x0101;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:332` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 CANFD_OTA_ACK_ID = 0x0102;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:334` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u16 CANFD_OTA_WAIT_ID = 0x0103;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- [SUP-GLB-001] `sys/config.h:338` 文件作用域可变全局对象,需确认封装、并发访问和初始化顺序
- `constexpr u8 ADC_FILTER_SIZE = 6;`
- 建议:建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
- ... 其余见 supplement_findings.csv
## Info 说明
- `SUP-MAG-001` 裸数字常量数量通常较多,正式处理时应优先筛选安全阈值、时间常数、比例系数,不建议机械全改。
- `SUP-DOC-001` 用于发现可能漏补 Doxygen 的接口;多行声明、构造函数可能需要人工复核。