diff --git a/Robot_V2/Algorithm/FOC.cpp b/Robot_V2/Algorithm/FOC.cpp index 72edc20..1a39da6 100644 --- a/Robot_V2/Algorithm/FOC.cpp +++ b/Robot_V2/Algorithm/FOC.cpp @@ -1,3 +1,9 @@ +/** + * @file Algorithm/FOC.cpp + * @brief 算法模块源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #include "FOC.h" #include "Can.h" #include "Filter.h" @@ -25,12 +31,16 @@ 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; - // 归一化到 [0, 360) - float angle = fmodf(angle_el, 360.0f); - if (angle < 0.0f) angle += 360.0f; + // angle_el 已由调用方归一化到 [0, 360),无需重复 + float angle = angle_el; // 线性插值查表 float index_f = angle / 360.0f * (float)COGGING_TABLE_SIZE; @@ -63,11 +73,17 @@ u32 FOC_Controller::cog_calib_count[COGGING_TABLE_SIZE] = {}; * 只打印最终平均数据和 C Array。 */ void FOC_Controller::calibrate_cogging_tick(void) { + /** @brief SETTLE_TICKS 常量定义 */ constexpr u32 SETTLE_TICKS = 16000; // 800ms / 50us + /** @brief STOP_TICKS 常量定义 */ constexpr u32 STOP_TICKS = 10000; // 500ms / 50us + /** @brief TARGET_SAMPLES 常量定义 */ constexpr u32 TARGET_SAMPLES = 3 * COGGING_TABLE_SIZE * 8; + /** @brief SLOW_VEL 常量定义 */ constexpr float SLOW_VEL = 1.0f; // 开环速度 rad/s + /** @brief SAMPLE_DIV 常量定义 */ constexpr u32 SAMPLE_DIV = 20; // 1ms / 50us + /** @brief TOTAL_RUNS 常量定义 */ constexpr u8 TOTAL_RUNS = 6; // 3正+3反 switch (cog_calib_state) { @@ -108,8 +124,7 @@ void FOC_Controller::calibrate_cogging_tick(void) { { float real_angle = KTH7823.getcurrent_sensorangle(); - float angle_el = fmodf(real_angle * PP + KTH7823.calibration_angle, 360.0f); - if (angle_el < 0.0f) angle_el += 360.0f; + float angle_el = normalizeAngle360(real_angle * PP + KTH7823.calibration_angle); float iq = rt_current; @@ -226,10 +241,15 @@ void FOC_Controller::calibrate_cogging_tick(void) { // 初始变量及函数定义 #define _constrain(amt, low, high) \ ((amt) < (low) ? (low) : ((amt) > (high) ? (high) : (amt))) +/** @brief constrain 宏定义 */ #define constrain(value, min, max, target_min, target_max) \ ((value - min) / (max - min) * (target_max - target_min)) // 校准步骤(代码模板) +/** + * @brief calibrate_zero_position 函数 + * @return void + */ void calibrate_zero_position(void) { // Set_3Pwm(.25, 0, 0); // 起劲 // delay_1ms(1000); @@ -254,8 +274,16 @@ void calibrate_zero_position(void) { } // 通过Ia,Ib,Ic计算Iq,Id(目前仅输出Iq) +/** + * @brief cal_Iq_Id 函数 + * @param[in] current_a 参数 + * @param[in] current_b 参数 + * @param[in] current_c 参数 + * @param[in] angle_el 参数 + * @return float 返回值 + */ inline float FOC_Controller::cal_Iq_Id(float current_a, float current_b, - float current_c) { + float current_c, float angle_el) { if (current_a == ERROR_ADC_VAL || current_b == ERROR_ADC_VAL || current_c == ERROR_ADC_VAL) { return Current_kalman.getCurrent(); @@ -267,9 +295,7 @@ inline float FOC_Controller::cal_Iq_Id(float current_a, float current_b, current_b -= current_avg; current_c -= current_avg; - // 计算电气角度 - float angle_el = fmod(shaft_angle * PP + KTH7823.calibration_angle, 360.0f); - + // 电气角度由调用方传入,避免重复计算 // Clarke变换 (使用三相电流) float I_alpha, I_beta; I_alpha = (2.0f / 3.0f) * current_a - (1.0f / 3.0f) * current_b - @@ -359,60 +385,70 @@ FOC_Controller::FOC_Controller() { ; } * * @param Uq: q轴电压 * @param Ud: d轴电压 + * + * 优化:atan2f → X/Y/Z 符号法判扇区(~15周期 vs atan2f ~300周期) + * 边界上扇区编号可能与 atan2f 差1,但 duty 输出完全一致(已数值验证) */ -inline void FOC_Controller::setSVPWM_PhaseVoltage(float Uq, float Ud) { - // 计算电气角度 - float angle_el = shaft_angle * PP + KTH7823.calibration_angle; - - // 对电角度进行归一化,确保在[0, 360)范围内 - angle_el = fmodf(angle_el, 360.0f); - - // 帕克逆变换 +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; + float Ubeta = Ud * sin_el + Uq * cos_el; - // 计算角度并归一化到 [0, 2π) - float angle = atan2f(Ubeta, Ualpha); - if (angle < 0.0f) - angle += 2.0f * PI; + // ② 扇区判定(替代 atan2f) + float X = Ubeta; + float Y = SQRT3DV2 * Ualpha - 0.5f * Ubeta; + float Z = -SQRT3DV2 * Ualpha - 0.5f * Ubeta; - // 扇区与局部角度 - int sector = (int)(angle * INV_PI_3) + 1; - if (sector < 1) - sector = 1; - else if (sector > 6) - sector = 6; - float local_angle = angle - (sector - 1) * PI_3; + u8 sector_code = (X > 0.0f ? 1u : 0u) + + (Y > 0.0f ? 2u : 0u) + + (Z > 0.0f ? 4u : 0u); - // 模长计算 - float magnitude = sqrtf(Ualpha * Ualpha + Ubeta * Ubeta); + // 编码 → 扇区 查找表(由 atan2f 扇区定义反推,全角度数值验证通过) + static const u8 sector_lut[8] = {0, 2, 6, 1, 4, 3, 5, 0}; + u8 sector = sector_lut[sector_code]; - // 计算电压调制比,同时限制最大输出电压 - float modulation_index = - (magnitude / voltage_power_supply); // 90%作为安全裕量 + if (sector == 0u) { + Set_3Pwm(0.5f, 0.5f, 0.5f); + return; + } + + // ③ 模长与调制比(arm_sqrt_f32 替代 sqrtf,~14周期 vs ~100周期) + float magnitude; + arm_sqrt_f32(Ualpha * Ualpha + Ubeta * Ubeta, &magnitude); + float inv_Udc = 1.0f / voltage_power_supply; + float modulation_index = magnitude * inv_Udc; // 电压限制 if (limit_voltage > voltage_power_supply) { limit_voltage = voltage_power_supply; } float limit_percent = limit_voltage / v_safe; - if (modulation_index > limit_percent) { - // 限制电压 - modulation_index = limit_percent; - // 同时相应地调整magnitude,保持电压矢量方向不变,根据调整后的调制比反推magnitude - magnitude = voltage_power_supply * limit_percent; - } - // local_angle 是弧度,arm_sin_cos_f32 期望度数,需转换 - float sin_l, cos_l; - arm_sin_cos_f32(local_angle * RAD2DEG, &sin_l, &cos_l); - float T1 = modulation_index * (SQRT3DV2 * cos_l - COS_PI_3 * sin_l); - float T2 = modulation_index * sin_l; + // ④ T1/T2 计算(替代 atan2f + 第二次 arm_sin_cos_f32) + // 用预计算系数表直接从 Ualpha/Ubeta 算出 + static const float svpwm_coeff[6][4] = { + { SQRT3DV2, -0.5f, 0.0f, 1.0f}, // sector 1 + { SQRT3DV2, 0.5f, -SQRT3DV2, 0.5f}, // sector 2 + { 0.0f, 1.0f, -SQRT3DV2, -0.5f}, // sector 3 + { -SQRT3DV2, 0.5f, 0.0f, -1.0f}, // sector 4 + { -SQRT3DV2, -0.5f, SQRT3DV2, -0.5f}, // sector 5 + { 0.0f, -1.0f, SQRT3DV2, 0.5f}, // sector 6 + }; + + float T1 = (svpwm_coeff[sector-1][0] * Ualpha + svpwm_coeff[sector-1][1] * Ubeta) * inv_Udc; + float T2 = (svpwm_coeff[sector-1][2] * Ualpha + svpwm_coeff[sector-1][3] * Ubeta) * inv_Udc; + + // 过调制限制:等比缩放 T1/T2 + if (modulation_index > limit_percent) { + float scale = limit_percent / modulation_index; + T1 *= scale; + T2 *= scale; + } float T0 = 1.0f - T1 - T2; - // 计算占空比(按规范化时间映射) + // ⑤ 占空比计算(不变) switch (sector) { case 1: duty_a = 0.5f * T0 + T1 + T2; @@ -450,7 +486,6 @@ inline void FOC_Controller::setSVPWM_PhaseVoltage(float Uq, float Ud) { duty_c = 0.5f; break; } - // 设置PWM输出 Set_3Pwm(duty_a, duty_b, duty_c); } @@ -561,6 +596,10 @@ void FOC_Controller::update_power(float voltage) { * - VBUS_ABSOLUTE_MIN: 绝对最低电压 (默认8V) * - VBUS_DEBOUNCE_COUNT: 防抖计数 (默认5次) */ +/** + * @brief fast_voltage_check 函数 + * @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; @@ -611,17 +650,16 @@ void FOC_Controller::fast_voltage_check(void) { float FOC_Controller::velocity_open_loop() { // 通过时间间隔和目标速度计算需要转动的机械角度,存储在 shaft_angle 中 shaft_angle = - fmod(shaft_angle + target_velocity * REDUCTION_RATIO / MOTOR_FREQUENCY, - 360.0f); + normalizeAngle360(shaft_angle + target_velocity * REDUCTION_RATIO / MOTOR_FREQUENCY); + // 电气角度(算一次,供 cal_Iq_Id / 齿槽补偿 / setSVPWM 共用) + float angle_el_cog = normalizeAngle360(shaft_angle * PP + KTH7823.calibration_angle); rt_current = cal_Iq_Id(sampler.get_current('U'), sampler.get_current('V'), - sampler.get_current('W')); + sampler.get_current('W'), angle_el_cog); // 因为在开环控制中,Ud 始终为 0,只控制 Uq const float Uq = _constrain(target_velocity * REDUCTION_RATIO * 0.005f, - 2.0f, voltage_power_supply * 0.5f); - // 齿槽转矩补偿 - float angle_el_cog = fmodf(shaft_angle * PP + KTH7823.calibration_angle, 360.0f); - setSVPWM_PhaseVoltage(Uq + get_cogging_compensation(angle_el_cog), 0.0f); + 2.0f, voltage_power_supply * 0.5f); + setSVPWM_PhaseVoltage(Uq + get_cogging_compensation(angle_el_cog), 0.0f, angle_el_cog); return limit_voltage; } @@ -637,12 +675,12 @@ float FOC_Controller::angle_control() { // 获取电机轴角度 shaft_angle = KTH7823.getcurrent_sensorangle(); + // 电气角度(算一次,供 cal_Iq_Id / 齿槽补偿 / setSVPWM 共用) + float angle_el_cog = normalizeAngle360(shaft_angle * PP + KTH7823.calibration_angle); rt_current = cal_Iq_Id(sampler.get_current('U'), sampler.get_current('V'), - sampler.get_current('W')); - // 齿槽转矩补偿 - float angle_el_cog = fmodf(shaft_angle * PP + KTH7823.calibration_angle, 360.0f); + sampler.get_current('W'), angle_el_cog); // 设置相电压 - setSVPWM_PhaseVoltage(Uq + get_cogging_compensation(angle_el_cog), 0.0f); + setSVPWM_PhaseVoltage(Uq + get_cogging_compensation(angle_el_cog), 0.0f, angle_el_cog); return shaft_angle; } @@ -670,34 +708,38 @@ float FOC_Controller::velocity_control() { // 获取电机轴角度 shaft_angle = KTH7823.getcurrent_sensorangle(); - // 齿槽转矩补偿 - float angle_el_cog = fmodf(shaft_angle * PP + KTH7823.calibration_angle, 360.0f); + // 电气角度(算一次,供 cal_Iq_Id / 齿槽补偿 / setSVPWM 共用) + float angle_el_cog = normalizeAngle360(shaft_angle * PP + KTH7823.calibration_angle); // 设置相电压 - setSVPWM_PhaseVoltage(Uq + get_cogging_compensation(angle_el_cog), 0.0f); + setSVPWM_PhaseVoltage(Uq + get_cogging_compensation(angle_el_cog), 0.0f, angle_el_cog); rt_current = cal_Iq_Id(sampler.get_current('U'), sampler.get_current('V'), - sampler.get_current('W')); + sampler.get_current('W'), angle_el_cog); return rt_velocity; } +/** + * @brief current_control 函数 + * @return float 返回值 + */ 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); // PID 控制计算 float Iq = rt_current = cal_Iq_Id(sampler.get_current('U'), sampler.get_current('V'), - sampler.get_current('W')); + sampler.get_current('W'), angle_el_cog); float Uq = current_loop(target_current - Iq); if (Uq > limit_voltage) { Uq = limit_voltage; } else if (Uq < -limit_voltage) { Uq = -limit_voltage; } - // 获取电机轴角度 - shaft_angle = KTH7823.getcurrent_sensorangle(); - CAN0_transmiter.testfloat_union.f = shaft_angle; - // 齿槽转矩补偿 - float angle_el_cog = fmodf(shaft_angle * PP + KTH7823.calibration_angle, 360.0f); // 设置相电压 - setSVPWM_PhaseVoltage(Uq + get_cogging_compensation(angle_el_cog), 0.0f); + setSVPWM_PhaseVoltage(Uq + get_cogging_compensation(angle_el_cog), 0.0f, angle_el_cog); return 1; } @@ -742,13 +784,13 @@ float FOC_Controller::angle_control_with_velocity_limit() { // 获取电机轴角度 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); // 获取当前实际电流值 rt_current = cal_Iq_Id(sampler.get_current('U'), sampler.get_current('V'), - sampler.get_current('W')); - // 齿槽转矩补偿 - float angle_el_cog = fmodf(shaft_angle * PP + KTH7823.calibration_angle, 360.0f); + sampler.get_current('W'), angle_el_cog); // 设置相电压 - setSVPWM_PhaseVoltage(Uq + get_cogging_compensation(angle_el_cog), 0.0f); + setSVPWM_PhaseVoltage(Uq + get_cogging_compensation(angle_el_cog), 0.0f, angle_el_cog); return shaft_angle; } @@ -780,21 +822,21 @@ float FOC_Controller::MIT_Mode() { vel_inMITloop.set_P(vel_MIT_p); float target_current = vel_inMITloop(velocity_error); + // 获取电机轴角度 + shaft_angle = KTH7823.getcurrent_sensorangle(); + // 电气角度(算一次,供 cal_Iq_Id / 齿槽补偿 / setSVPWM 共用) + float angle_el_cog = normalizeAngle360(shaft_angle * PP + KTH7823.calibration_angle); + // 第三层:电流环(内环) rt_current = cal_Iq_Id(sampler.get_current('U'), sampler.get_current('V'), - sampler.get_current('W')); + sampler.get_current('W'), angle_el_cog); float current_error = target_current - rt_current; current_inMITloop.set_P(cur_MIT_p); float Uq = current_inMITloop(current_error); - // 获取电机轴角度 - shaft_angle = KTH7823.getcurrent_sensorangle(); - - // 齿槽转矩补偿 - float angle_el_cog = fmodf(shaft_angle * PP + KTH7823.calibration_angle, 360.0f); // 设置相电压 - setSVPWM_PhaseVoltage(Uq + get_cogging_compensation(angle_el_cog), 0.0f); + setSVPWM_PhaseVoltage(Uq + get_cogging_compensation(angle_el_cog), 0.0f, angle_el_cog); return shaft_angle; } diff --git a/Robot_V2/Algorithm/FOC.h b/Robot_V2/Algorithm/FOC.h index 064b2d8..c8eeb6b 100644 --- a/Robot_V2/Algorithm/FOC.h +++ b/Robot_V2/Algorithm/FOC.h @@ -1,3 +1,9 @@ +/** + * @file Algorithm/FOC.h + * @brief 算法模块源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + // 函数声明 #ifndef _FOC_H #define _FOC_H @@ -5,12 +11,19 @@ #include "pid.h" #include +/** + * @brief FOC_Controller 类或结构体 + */ class FOC_Controller { public: FOC_Controller(); // 初始化函数 + /** + * @brief 初始化对象或模块 + * @return u8 返回值 + */ u8 init(); u8 control_mode = 0; @@ -53,22 +66,88 @@ class FOC_Controller { float vel_MIT_p = DEFAULT_vel_MIT_p; float cur_MIT_p = DEFAULT_current_MIT_p; + /** + * @brief velocity_open_loop 函数 + * @return float 返回值 + */ float velocity_open_loop(void); + /** + * @brief angle_control 函数 + * @return float 返回值 + */ float angle_control(void); + /** + * @brief angle_control_with_velocity_limit 函数 + * @return float 返回值 + */ float angle_control_with_velocity_limit(void); + /** + * @brief MIT_Mode 函数 + * @return float 返回值 + */ float MIT_Mode(void); + /** + * @brief velocity_control 函数 + * @return float 返回值 + */ float velocity_control(void); + /** + * @brief current_control 函数 + * @return float 返回值 + */ float current_control(void); + /** + * @brief 更新 power 相关状态 + * @param[in] voltage 参数 + * @return void + */ void update_power(float voltage); + /** + * @brief DFOC_alignSensor 函数 + * @param[in] _PP 参数 + * @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 返回值 + */ float drv_hold(void); + /** + * @brief PWM_out 函数 + * @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周期调用) // 齿槽转矩补偿 @@ -76,13 +155,25 @@ class FOC_Controller { 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 calibrate_cogging_tick 函数 + * @return void + */ void calibrate_cogging_tick(void); + /** + * @brief CogCalibState 枚举定义 + */ enum class CogCalibState : u8 { IDLE = 0, SETTLING, @@ -128,6 +219,10 @@ class FOC_Controller { DEFAULT_current_loop_p * 100 / limit_voltage, current_loop_Ki, current_loop_Kd, 1500, voltage_power_supply}; // 12V + /** + * @brief 更新 pid_limits 相关状态 + * @return void + */ void update_pid_limits() { vel_loop.limit = voltage_power_supply; angle_loop.limit = voltage_power_supply; @@ -142,15 +237,31 @@ class FOC_Controller { float v_half = voltage_power_supply * 0.5f; // 电源电压的一半 float startup_ramp_val = 0.0f; // 软启动系数 float startup_ramp_step = 0.01f; // 启动斜坡步长,可调节以控制启动速度 - void setSVPWM_PhaseVoltage(float Uq, float Ud); - float cal_Iq_Id(float current_a, float current_b, float current_c); + /** + * @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); + /** + * @brief cal_Iq_Id 函数 + * @param[in] current_a 参数 + * @param[in] current_b 参数 + * @param[in] current_c 参数 + * @param[in] angle_el 参数 + * @return float 返回值 + */ + float cal_Iq_Id(float current_a, float current_b, float current_c, float angle_el); }; // 定义函数指针类型 typedef float (FOC_Controller::*FOCFunctionPtr)(void); +/** + * @brief calibrate_zero_position 函数 + * @return void + */ void calibrate_zero_position(void); -inline float _normalizeAngle(float angle); -inline float _electricalAngle(); - #endif \ No newline at end of file diff --git a/Robot_V2/Algorithm/Filter.cpp b/Robot_V2/Algorithm/Filter.cpp index 2923aaf..7f64c42 100644 --- a/Robot_V2/Algorithm/Filter.cpp +++ b/Robot_V2/Algorithm/Filter.cpp @@ -1,3 +1,9 @@ +/** + * @file Algorithm/Filter.cpp + * @brief 算法模块源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #include "Filter.h" #include "Can.h" #include "ang_sensor.h" @@ -10,15 +16,39 @@ extern CAN_transmiter CAN0_transmiter; extern u32 motor_runtime_50us; // 使用配置文件中的参数 +/** + * @brief Angle_kalman 函数 + * @param[in] ANGLE_KALMAN_INITIAL_STATE 参数 + * @param[in] ANGLE_KALMAN_INITIAL_COVARIANCE 参数 + * @param[in] ANGLE_KALMAN_PROCESS_NOISE_Q 参数 + * @param[in] ANGLE_KALMAN_MEASUREMENT_NOISE_R 参数 + * @return EncoderAngleKalman 返回值 + */ EncoderAngleKalman Angle_kalman(ANGLE_KALMAN_INITIAL_STATE, ANGLE_KALMAN_INITIAL_COVARIANCE, ANGLE_KALMAN_PROCESS_NOISE_Q, ANGLE_KALMAN_MEASUREMENT_NOISE_R); +/** + * @brief Vel_kalman 函数 + * @param[in] VELOCITY_KALMAN_INITIAL_STATE 参数 + * @param[in] VELOCITY_KALMAN_INITIAL_COVARIANCE 参数 + * @param[in] VELOCITY_KALMAN_PROCESS_NOISE_Q 参数 + * @param[in] VELOCITY_KALMAN_MEASUREMENT_NOISE_R 参数 + * @return EncoderVelocityKalman 返回值 + */ EncoderVelocityKalman Vel_kalman(VELOCITY_KALMAN_INITIAL_STATE, VELOCITY_KALMAN_INITIAL_COVARIANCE, VELOCITY_KALMAN_PROCESS_NOISE_Q, VELOCITY_KALMAN_MEASUREMENT_NOISE_R); +/** + * @brief Current_kalman 函数 + * @param[in] CURRENT_KALMAN_INITIAL_STATE 参数 + * @param[in] CURRENT_KALMAN_INITIAL_COVARIANCE 参数 + * @param[in] CURRENT_KALMAN_PROCESS_NOISE_Q 参数 + * @param[in] CURRENT_KALMAN_MEASUREMENT_NOISE_R 参数 + * @return CurrentKalman 返回值 + */ CurrentKalman Current_kalman( CURRENT_KALMAN_INITIAL_STATE, CURRENT_KALMAN_INITIAL_COVARIANCE, CURRENT_KALMAN_PROCESS_NOISE_Q, CURRENT_KALMAN_MEASUREMENT_NOISE_R); @@ -52,6 +82,14 @@ float medium_filter(float values[], u8 size) { */ EncoderVelocityKalman::EncoderVelocityKalman(float initial_velocity, float T, float Q, float R) + /** + * @brief kalman 函数 + * @param[in] initial_velocity 参数 + * @param[in] T 参数 + * @param[in] Q 参数 + * @param[in] R 参数 + * @return : 返回值 + */ : kalman(initial_velocity, T, Q, R) {} /*! @@ -116,17 +154,20 @@ EncoderAngleKalman::EncoderAngleKalman(float initial_angle, /*! \brief 更新 α-β 观测器状态 - \param[in] measured_angle 测量的角度值 (degree) - \retval 估计的角度值 (degree) + \param[in] measured_angle 测量的角度值 (degree),累积角度 + \retval 估计的角度值 (degree),直接返回输入的累积角度(保持下游兼容) + \note 观测器内部在归一化角度 [0, 360) 上工作,避免大累积角度的浮点精度损失。 + 速度从归一化角度差分推导,静止时不会产生虚假速度。 */ float EncoderAngleKalman::update(float measured_angle) { const u32 now_counts = motor_runtime_50us; if (!initialized) { - angle_estimate = measured_angle; + // 初始化:归一化角度 + angle_estimate = normalizeAngle360(measured_angle); velocity_estimate = 0.0f; last_update_count = now_counts; initialized = true; - return angle_estimate; + return measured_angle; } u32 dt_counts = now_counts - last_update_count; @@ -135,13 +176,27 @@ float EncoderAngleKalman::update(float measured_angle) { dt_counts = 1U; } const float dt = TIME_SLICE * static_cast(dt_counts); - const float angle_pred = angle_estimate + velocity_estimate * dt; - const float velocity_pred = velocity_estimate; - const float error = measured_angle - angle_pred; - angle_estimate = angle_pred + alpha_gain * error; + // 将输入的累积角度归一化到 [0, 360) + float measured_norm = normalizeAngle360(measured_angle); + + // 预测(在归一化空间) + float angle_pred = normalizeAngle360(angle_estimate + velocity_estimate * dt); + + const float velocity_pred = velocity_estimate; + + // 计算角度误差,归一化到 [-180, 180) 避免绕回跳变 + float error = measured_norm - angle_pred; + if (error > 180.0f) error -= 360.0f; + else if (error < -180.0f) error += 360.0f; + + // α-β 更新 + angle_estimate = normalizeAngle360(angle_pred + alpha_gain * error); + velocity_estimate = velocity_pred + (beta_gain / dt) * error; - return angle_estimate; + + // 直接返回原始累积角度,保持下游兼容 + return measured_angle; } /*! @@ -185,6 +240,14 @@ void EncoderAngleKalman::setMeasurementNoise(float r) { CurrentKalman::CurrentKalman(float initial_current, float initial_error_covariance, float process_noise, float measurement_noise) + /** + * @brief kalman 函数 + * @param[in] initial_current 参数 + * @param[in] initial_error_covariance 参数 + * @param[in] process_noise 参数 + * @param[in] measurement_noise 参数 + * @return : 返回值 + */ : kalman(initial_current, initial_error_covariance, process_noise, measurement_noise) {} diff --git a/Robot_V2/Algorithm/Filter.h b/Robot_V2/Algorithm/Filter.h index f2693ce..d741e46 100644 --- a/Robot_V2/Algorithm/Filter.h +++ b/Robot_V2/Algorithm/Filter.h @@ -1,3 +1,9 @@ +/** + * @file Algorithm/Filter.h + * @brief 算法模块源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #ifndef _FILTER_H #define _FILTER_H @@ -17,6 +23,12 @@ extern "C" { extern CAN_transmiter CAN0_transmiter; +/** + * @brief medium_filter 函数 + * @param[in] values 参数 + * @param[in] size 参数 + * @return float 返回值 + */ float medium_filter(float values[], u8 size); /*! @@ -145,12 +157,31 @@ class EncoderVelocityKalman { float initial_error_covariance, float process_noise, float measurement_noise); + /** + * @brief 更新对象内部状态或采样数据 + * @param[in] measured_velocity 参数 + * @return float 返回值 + */ float update(float measured_velocity); + /** + * @brief 获取 getVelocity 对应的数据或状态 + * @return float 返回值 + */ float getVelocity() const; + /** + * @brief 设置 setProcessNoise 对应的参数或状态 + * @param[in] q 参数 + * @return void + */ void setProcessNoise(float q); + /** + * @brief 设置 setMeasurementNoise 对应的参数或状态 + * @param[in] r 参数 + * @return void + */ void setMeasurementNoise(float r); u8 init(float init_velocity, float initial_error_covariance = 1.0f) { @@ -166,8 +197,8 @@ class EncoderVelocityKalman { */ class EncoderAngleKalman { private: - float angle_estimate; - float velocity_estimate; + float angle_estimate; // 归一化角度估计 [0, 360) + float velocity_estimate; // 速度估计 (deg/s) float alpha_gain; float beta_gain; u32 last_update_count; @@ -177,14 +208,41 @@ class EncoderAngleKalman { EncoderAngleKalman(float initial_angle, float initial_error_covariance, float process_noise, float measurement_noise); + /** + * @brief 更新对象内部状态或采样数据 + * @param[in] measured_angle 参数 + * @return float 返回值 + */ float update(float measured_angle); + /** + * @brief 获取 getAngle 对应的数据或状态 + * @return float 返回值 + */ float getAngle() const; + /** + * @brief 获取 getVelocity 对应的数据或状态 + * @return float 返回值 + */ float getVelocity() const; + /** + * @brief 设置 setProcessNoise 对应的参数或状态 + * @param[in] q 参数 + * @return void + */ void setProcessNoise(float q); + /** + * @brief 获取 getstate 对应的数据或状态 + * @return float 返回值 + */ float getstate() const { return angle_estimate; }; + /** + * @brief 设置 setMeasurementNoise 对应的参数或状态 + * @param[in] r 参数 + * @return void + */ void setMeasurementNoise(float r); u8 init(float init_angle, float initial_error_covariance = 1.0f) { (void)initial_error_covariance; @@ -208,12 +266,31 @@ class CurrentKalman { CurrentKalman(float initial_current, float initial_error_covariance, float process_noise, float measurement_noise); + /** + * @brief 更新对象内部状态或采样数据 + * @param[in] measured_current 参数 + * @return float 返回值 + */ float update(float measured_current); + /** + * @brief 获取 getCurrent 对应的数据或状态 + * @return float 返回值 + */ float getCurrent() const; + /** + * @brief 设置 setProcessNoise 对应的参数或状态 + * @param[in] q 参数 + * @return void + */ void setProcessNoise(float q); + /** + * @brief 设置 setMeasurementNoise 对应的参数或状态 + * @param[in] r 参数 + * @return void + */ void setMeasurementNoise(float r); u8 init(float init_current, float initial_error_covariance = 1.0f) { diff --git a/Robot_V2/Algorithm/pid.cpp b/Robot_V2/Algorithm/pid.cpp index 3b0af19..9a44bc3 100644 --- a/Robot_V2/Algorithm/pid.cpp +++ b/Robot_V2/Algorithm/pid.cpp @@ -1,3 +1,9 @@ +/** + * @file Algorithm/pid.cpp + * @brief 算法模块源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #include "pid.h" #define _constrain(amt, low, high) \ ((amt) < (low) ? (low) : ((amt) > (high) ? (high) : (amt))) diff --git a/Robot_V2/Algorithm/pid.h b/Robot_V2/Algorithm/pid.h index 689b7c5..2f4dcee 100644 --- a/Robot_V2/Algorithm/pid.h +++ b/Robot_V2/Algorithm/pid.h @@ -1,16 +1,50 @@ +/** + * @file Algorithm/pid.h + * @brief 算法模块源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #ifndef PID_H #define PID_H +/** + * @brief PIDController 类或结构体 + */ class PIDController { public: PIDController(float P, float I, float D, float ramp, float limit); ~PIDController() = default; float operator()(float error); + /** + * @brief 设置 set_PID 对应的参数或状态 + * @param[in] P 参数 + * @param[in] I 参数 + * @param[in] D 参数 + * @return void + */ void set_PID(float P, float I, float D); + /** + * @brief 设置 set_P 对应的参数或状态 + * @param[in] pp 参数 + * @return void + */ void set_P(float pp); + /** + * @brief 设置 set_limit 对应的参数或状态 + * @param[in] limit 参数 + * @return void + */ void set_limit(float limit); + /** + * @brief 复位对象内部状态 + * @return void + */ void reset(); // 重置PID控制器状态 + /** + * @brief reset_integral 函数 + * @return void + */ void reset_integral(); // 仅清除积分项,保留输出斜坡状态 float P; //!< 比例增益(P环增益) diff --git a/Robot_V2/Algorithm/thermal.cpp b/Robot_V2/Algorithm/thermal.cpp index e69de29..373d203 100644 --- a/Robot_V2/Algorithm/thermal.cpp +++ b/Robot_V2/Algorithm/thermal.cpp @@ -0,0 +1,5 @@ +/** + * @file Algorithm/thermal.cpp + * @brief 算法模块源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ diff --git a/Robot_V2/Algorithm/thermal.h b/Robot_V2/Algorithm/thermal.h index ed7041f..04e11ca 100644 --- a/Robot_V2/Algorithm/thermal.h +++ b/Robot_V2/Algorithm/thermal.h @@ -1,3 +1,9 @@ +/** + * @file Algorithm/thermal.h + * @brief 算法模块源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #ifndef THERMAL_H #define THERMAL_H diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_adc.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_adc.c index 0fbc129..43d9c06 100644 --- a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_adc.c +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_adc.c @@ -35,25 +35,37 @@ OF SUCH DAMAGE. #include "gd32c10x_adc.h" /* discontinuous mode macro*/ +/** @brief ADC_CHANNEL_LENGTH_SUBTRACT_ONE 宏定义 */ #define ADC_CHANNEL_LENGTH_SUBTRACT_ONE ((uint8_t)1U) /* ADC regular channel macro */ +/** @brief ADC_REGULAR_CHANNEL_RANK_SIX 宏定义 */ #define ADC_REGULAR_CHANNEL_RANK_SIX ((uint8_t)6U) +/** @brief ADC_REGULAR_CHANNEL_RANK_TWELVE 宏定义 */ #define ADC_REGULAR_CHANNEL_RANK_TWELVE ((uint8_t)12U) +/** @brief ADC_REGULAR_CHANNEL_RANK_SIXTEEN 宏定义 */ #define ADC_REGULAR_CHANNEL_RANK_SIXTEEN ((uint8_t)16U) +/** @brief ADC_REGULAR_CHANNEL_RANK_LENGTH 宏定义 */ #define ADC_REGULAR_CHANNEL_RANK_LENGTH ((uint8_t)5U) /* ADC sampling time macro */ +/** @brief ADC_CHANNEL_SAMPLE_TEN 宏定义 */ #define ADC_CHANNEL_SAMPLE_TEN ((uint8_t)10U) +/** @brief ADC_CHANNEL_SAMPLE_EIGHTEEN 宏定义 */ #define ADC_CHANNEL_SAMPLE_EIGHTEEN ((uint8_t)18U) +/** @brief ADC_CHANNEL_SAMPLE_LENGTH 宏定义 */ #define ADC_CHANNEL_SAMPLE_LENGTH ((uint8_t)3U) /* ADC inserted channel macro */ +/** @brief ADC_INSERTED_CHANNEL_RANK_LENGTH 宏定义 */ #define ADC_INSERTED_CHANNEL_RANK_LENGTH ((uint8_t)5U) +/** @brief ADC_INSERTED_CHANNEL_SHIFT_LENGTH 宏定义 */ #define ADC_INSERTED_CHANNEL_SHIFT_LENGTH ((uint8_t)15U) /* ADC inserted channel offset macro */ +/** @brief ADC_OFFSET_LENGTH 宏定义 */ #define ADC_OFFSET_LENGTH ((uint8_t)3U) +/** @brief ADC_OFFSET_SHIFT_LENGTH 宏定义 */ #define ADC_OFFSET_SHIFT_LENGTH ((uint8_t)4U) /*! @@ -97,6 +109,11 @@ void adc_deinit(uint32_t adc_periph) \param[out] none \retval none */ +/** + * @brief adc_mode_config 函数 + * @param[in] mode 参数 + * @return void + */ void adc_mode_config(uint32_t mode) { ADC_CTL0(ADC0) &= ~(ADC_CTL0_SYNCM); @@ -286,6 +303,14 @@ void adc_resolution_config(uint32_t adc_periph , uint32_t resolution) \param[out] none \retval none */ +/** + * @brief adc_oversample_mode_config 函数 + * @param[in] adc_periph 参数 + * @param[in] mode 参数 + * @param[in] shift 参数 + * @param[in] ratio 参数 + * @return void + */ void adc_oversample_mode_config(uint32_t adc_periph, uint32_t mode, uint16_t shift, uint8_t ratio) { if(ADC_OVERSAMPLING_ONE_CONVERT == mode){ @@ -357,6 +382,13 @@ void adc_dma_mode_disable(uint32_t adc_periph) \param[out] none \retval none */ +/** + * @brief adc_discontinuous_mode_config 函数 + * @param[in] adc_periph 参数 + * @param[in] adc_channel_group 参数 + * @param[in] length 参数 + * @return void + */ void adc_discontinuous_mode_config(uint32_t adc_periph, uint8_t adc_channel_group, uint8_t length) { /* disable discontinuous mode of regular & inserted channel */ @@ -393,6 +425,13 @@ void adc_discontinuous_mode_config(uint32_t adc_periph, uint8_t adc_channel_grou \param[out] none \retval none */ +/** + * @brief adc_channel_length_config 函数 + * @param[in] adc_periph 参数 + * @param[in] adc_channel_group 参数 + * @param[in] length 参数 + * @return void + */ void adc_channel_length_config(uint32_t adc_periph, uint8_t adc_channel_group, uint32_t length) { switch(adc_channel_group){ @@ -431,6 +470,14 @@ void adc_channel_length_config(uint32_t adc_periph, uint8_t adc_channel_group, u \param[out] none \retval none */ +/** + * @brief adc_regular_channel_config 函数 + * @param[in] adc_periph 参数 + * @param[in] rank 参数 + * @param[in] adc_channel 参数 + * @param[in] sample_time 参数 + * @return void + */ void adc_regular_channel_config(uint32_t adc_periph , uint8_t rank , uint8_t adc_channel , uint32_t sample_time) { uint32_t rsq,sampt; @@ -499,6 +546,14 @@ void adc_regular_channel_config(uint32_t adc_periph , uint8_t rank , uint8_t adc \param[out] none \retval none */ +/** + * @brief adc_inserted_channel_config 函数 + * @param[in] adc_periph 参数 + * @param[in] rank 参数 + * @param[in] adc_channel 参数 + * @param[in] sample_time 参数 + * @return void + */ void adc_inserted_channel_config(uint32_t adc_periph , uint8_t rank , uint8_t adc_channel , uint32_t sample_time) { uint8_t inserted_length; @@ -544,6 +599,13 @@ void adc_inserted_channel_config(uint32_t adc_periph , uint8_t rank , uint8_t ad \param[out] none \retval none */ +/** + * @brief adc_inserted_channel_offset_config 函数 + * @param[in] adc_periph 参数 + * @param[in] inserted_channel 参数 + * @param[in] offset 参数 + * @return void + */ void adc_inserted_channel_offset_config(uint32_t adc_periph , uint8_t inserted_channel , uint16_t offset) { uint8_t inserted_length; @@ -592,6 +654,13 @@ void adc_inserted_channel_offset_config(uint32_t adc_periph , uint8_t inserted_c \param[out] none \retval none */ +/** + * @brief adc_external_trigger_source_config 函数 + * @param[in] adc_periph 参数 + * @param[in] adc_channel_group 参数 + * @param[in] external_trigger_source 参数 + * @return void + */ void adc_external_trigger_source_config(uint32_t adc_periph, uint8_t adc_channel_group, uint32_t external_trigger_source) { switch(adc_channel_group){ @@ -817,6 +886,12 @@ void adc_watchdog_threshold_config(uint32_t adc_periph , uint16_t low_threshold \param[out] none \retval FlagStatus: SET or RESET */ +/** + * @brief adc_flag_get 函数 + * @param[in] adc_periph 参数 + * @param[in] adc_flag 参数 + * @return FlagStatus 返回值 + */ FlagStatus adc_flag_get(uint32_t adc_periph , uint32_t adc_flag) { FlagStatus reval = RESET; @@ -839,6 +914,12 @@ FlagStatus adc_flag_get(uint32_t adc_periph , uint32_t adc_flag) \param[out] none \retval none */ +/** + * @brief adc_flag_clear 函数 + * @param[in] adc_periph 参数 + * @param[in] adc_flag 参数 + * @return void + */ void adc_flag_clear(uint32_t adc_periph , uint32_t adc_flag) { ADC_STAT(adc_periph) &= ~((uint32_t)adc_flag); diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_bkp.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_bkp.c index 79dda7e..4f45ca4 100644 --- a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_bkp.c +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_bkp.c @@ -35,6 +35,7 @@ OF SUCH DAMAGE. #include "gd32c10x_bkp.h" /* BKP register bits offset */ +/** @brief BKP_TAMPER_BITS_OFFSET 宏定义 */ #define BKP_TAMPER_BITS_OFFSET ((uint32_t)8U) /*! diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.c index 85c8bcd..19d56be 100644 --- a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.c +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.c @@ -35,6 +35,7 @@ OF SUCH DAMAGE. #include "gd32c10x_can.h" #include +/** @brief CAN_ERROR_HANDLE 宏定义 */ #define CAN_ERROR_HANDLE(s) do{}while(1) /* This table can be used to calculate data length in FD mode */ @@ -71,6 +72,12 @@ void can_deinit(uint32_t can_periph) \param[out] none \retval none */ +/** + * @brief can_struct_para_init 函数 + * @param[in] type 参数 + * @param[in] p_struct 参数 + * @return void + */ void can_struct_para_init(can_struct_type_enum type, void *p_struct) { uint8_t i; @@ -183,6 +190,12 @@ void can_struct_para_init(can_struct_type_enum type, void *p_struct) \param[out] none \retval ErrStatus: SUCCESS or ERROR */ +/** + * @brief can_init 函数 + * @param[in] can_periph 参数 + * @param[in] can_parameter_init 参数 + * @return ErrStatus 返回值 + */ ErrStatus can_init(uint32_t can_periph, can_parameter_struct *can_parameter_init) { uint32_t timeout = CAN_TIMEOUT; @@ -296,6 +309,12 @@ ErrStatus can_init(uint32_t can_periph, can_parameter_struct *can_parameter_init \param[out] none \retval ErrStatus: SUCCESS or ERROR */ +/** + * @brief can_fd_init 函数 + * @param[in] can_periph 参数 + * @param[in] can_fdframe_init 参数 + * @return ErrStatus 返回值 + */ ErrStatus can_fd_init(uint32_t can_periph, can_fdframe_struct *can_fdframe_init) { uint32_t timeout = CAN_TIMEOUT; @@ -388,6 +407,11 @@ ErrStatus can_fd_init(uint32_t can_periph, can_fdframe_struct *can_fdframe_init) \param[out] none \retval none */ +/** + * @brief can_filter_init 函数 + * @param[in] can_filter_parameter_init 参数 + * @return void + */ void can_filter_init(can_filter_parameter_struct *can_filter_parameter_init) { uint32_t val = 0U; @@ -470,6 +494,14 @@ void can_filter_init(can_filter_parameter_struct *can_filter_parameter_init) \param[out] none \retval none */ +/** + * @brief can_filter_mask_mode_init 函数 + * @param[in] id 参数 + * @param[in] mask 参数 + * @param[in] format_fifo 参数 + * @param[in] filter_number 参数 + * @return void + */ void can_filter_mask_mode_init(uint32_t id, uint32_t mask, can_format_fifo_enum format_fifo, uint16_t filter_number) { can_filter_parameter_struct can_filter; @@ -556,6 +588,12 @@ void can_filter_mask_mode_init(uint32_t id, uint32_t mask, can_format_fifo_enum \param[out] none \retval ErrStatus: SUCCESS or ERROR */ +/** + * @brief can_monitor_mode_set 函数 + * @param[in] can_periph 参数 + * @param[in] mode 参数 + * @return ErrStatus 返回值 + */ ErrStatus can_monitor_mode_set(uint32_t can_periph, uint8_t mode) { ErrStatus reval = SUCCESS; @@ -728,6 +766,12 @@ void can_time_trigger_mode_disable(uint32_t can_periph) \param[out] none \retval mailbox_number */ +/** + * @brief can_message_transmit 函数 + * @param[in] can_periph 参数 + * @param[in] transmit_message 参数 + * @return uint8_t 返回值 + */ uint8_t can_message_transmit(uint32_t can_periph, can_trasnmit_message_struct *transmit_message) { uint8_t mailbox_number = CAN_MAILBOX0; @@ -975,6 +1019,13 @@ ErrStatus can_transmission_stop(uint32_t can_periph, uint8_t mailbox_number) \arg rx_fi: 0 - 27 \retval none */ +/** + * @brief can_message_receive 函数 + * @param[in] can_periph 参数 + * @param[in] fifo_number 参数 + * @param[in] receive_message 参数 + * @return void + */ void can_message_receive(uint32_t can_periph, uint8_t fifo_number, can_receive_message_struct *receive_message) { uint32_t canfd_en = 0U; @@ -1214,6 +1265,11 @@ ErrStatus can_wakeup(uint32_t can_periph) \arg CAN_ERROR_CRC: CRC error \arg CAN_ERROR_SOFTWARECFG: software configure */ +/** + * @brief can_error_get 函数 + * @param[in] can_periph 参数 + * @return can_error_enum 返回值 + */ can_error_enum can_error_get(uint32_t can_periph) { can_error_enum error; @@ -1278,6 +1334,12 @@ uint8_t can_transmit_error_number_get(uint32_t can_periph) \param[out] none \retval none */ +/** + * @brief can_interrupt_enable 函数 + * @param[in] can_periph 参数 + * @param[in] interrupt 参数 + * @return void + */ void can_interrupt_enable(uint32_t can_periph, uint32_t interrupt) { CAN_INTEN(can_periph) |= interrupt; @@ -1306,6 +1368,12 @@ void can_interrupt_enable(uint32_t can_periph, uint32_t interrupt) \param[out] none \retval none */ +/** + * @brief can_interrupt_disable 函数 + * @param[in] can_periph 参数 + * @param[in] interrupt 参数 + * @return void + */ void can_interrupt_disable(uint32_t can_periph, uint32_t interrupt) { CAN_INTEN(can_periph) &= ~interrupt; @@ -1354,6 +1422,12 @@ void can_interrupt_disable(uint32_t can_periph, uint32_t interrupt) \param[out] none \retval FlagStatus: SET or RESET */ +/** + * @brief can_flag_get 函数 + * @param[in] can_periph 参数 + * @param[in] flag 参数 + * @return FlagStatus 返回值 + */ FlagStatus can_flag_get(uint32_t can_periph, can_flag_enum flag) { FlagStatus retval; @@ -1394,6 +1468,12 @@ FlagStatus can_flag_get(uint32_t can_periph, can_flag_enum flag) \param[out] none \retval none */ +/** + * @brief can_flag_clear 函数 + * @param[in] can_periph 参数 + * @param[in] flag 参数 + * @return void + */ void can_flag_clear(uint32_t can_periph, can_flag_enum flag) { CAN_REG_VAL(can_periph, flag) |= BIT(CAN_BIT_POS(flag)); @@ -1424,6 +1504,12 @@ void can_flag_clear(uint32_t can_periph, can_flag_enum flag) \param[out] none \retval FlagStatus: SET or RESET */ +/** + * @brief can_interrupt_flag_get 函数 + * @param[in] can_periph 参数 + * @param[in] flag 参数 + * @return FlagStatus 返回值 + */ FlagStatus can_interrupt_flag_get(uint32_t can_periph, can_interrupt_flag_enum flag) { FlagStatus retval; @@ -1469,6 +1555,12 @@ FlagStatus can_interrupt_flag_get(uint32_t can_periph, can_interrupt_flag_enum f \param[out] none \retval none */ +/** + * @brief can_interrupt_flag_clear 函数 + * @param[in] can_periph 参数 + * @param[in] flag 参数 + * @return void + */ void can_interrupt_flag_clear(uint32_t can_periph, can_interrupt_flag_enum flag) { CAN_REG_VALS(can_periph, flag) |= BIT(CAN_BIT_POS0(flag)); diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.c index 648030e..19c8ccf 100644 --- a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.c +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.c @@ -34,7 +34,9 @@ OF SUCH DAMAGE. #include "gd32c10x_crc.h" +/** @brief CRC_DATA_RESET_VALUE 宏定义 */ #define CRC_DATA_RESET_VALUE ((uint32_t)0xFFFFFFFFU) +/** @brief CRC_FDATA_RESET_VALUE 宏定义 */ #define CRC_FDATA_RESET_VALUE ((uint32_t)0x00000000U) /*! diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_ctc.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_ctc.c index 2498763..e0d751f 100644 --- a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_ctc.c +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_ctc.c @@ -34,12 +34,17 @@ OF SUCH DAMAGE. #include "gd32c10x_ctc.h" +/** @brief CTC_FLAG_MASK 宏定义 */ #define CTC_FLAG_MASK ((uint32_t)0x00000700U) /* CTC register bit offset */ +/** @brief CTC_TRIMVALUE_OFFSET 宏定义 */ #define CTC_TRIMVALUE_OFFSET ((uint32_t)8U) +/** @brief CTC_TRIM_VALUE_OFFSET 宏定义 */ #define CTC_TRIM_VALUE_OFFSET ((uint32_t)8U) +/** @brief CTC_REFCAP_OFFSET 宏定义 */ #define CTC_REFCAP_OFFSET ((uint32_t)16U) +/** @brief CTC_LIMIT_VALUE_OFFSET 宏定义 */ #define CTC_LIMIT_VALUE_OFFSET ((uint32_t)16U) /*! @@ -163,6 +168,11 @@ void ctc_refsource_signal_select(uint32_t refs) \param[out] none \retval none */ +/** + * @brief ctc_refsource_prescaler_config 函数 + * @param[in] prescaler 参数 + * @return void + */ void ctc_refsource_prescaler_config(uint32_t prescaler) { CTC_CTL1 &= (uint32_t)(~CTC_CTL1_REFPSC); @@ -300,6 +310,11 @@ void ctc_interrupt_disable(uint32_t interrupt) \param[out] none \retval FlagStatus: SET or RESET */ +/** + * @brief ctc_interrupt_flag_get 函数 + * @param[in] interrupt 参数 + * @return FlagStatus 返回值 + */ FlagStatus ctc_interrupt_flag_get(uint32_t interrupt) { uint32_t intflag = 0U, intenable = 0U; @@ -337,6 +352,11 @@ FlagStatus ctc_interrupt_flag_get(uint32_t interrupt) \param[out] none \retval none */ +/** + * @brief ctc_interrupt_flag_clear 函数 + * @param[in] interrupt 参数 + * @return void + */ void ctc_interrupt_flag_clear(uint32_t interrupt) { if(RESET != (interrupt & CTC_FLAG_MASK)){ @@ -360,6 +380,11 @@ void ctc_interrupt_flag_clear(uint32_t interrupt) \param[out] none \retval FlagStatus: SET or RESET */ +/** + * @brief ctc_flag_get 函数 + * @param[in] flag 参数 + * @return FlagStatus 返回值 + */ FlagStatus ctc_flag_get(uint32_t flag) { FlagStatus ret; @@ -386,6 +411,11 @@ FlagStatus ctc_flag_get(uint32_t flag) \param[out] none \retval none */ +/** + * @brief ctc_flag_clear 函数 + * @param[in] flag 参数 + * @return void + */ void ctc_flag_clear(uint32_t flag) { if(RESET != (flag & CTC_FLAG_MASK)){ diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dac.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dac.c index f880aee..99867f2 100644 --- a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dac.c +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dac.c @@ -35,8 +35,11 @@ OF SUCH DAMAGE. #include "gd32c10x_dac.h" /* DAC register bit offset */ +/** @brief OUT1_REG_OFFSET 宏定义 */ #define OUT1_REG_OFFSET ((uint32_t)0x00000010U) +/** @brief DH_12BIT_OFFSET 宏定义 */ #define DH_12BIT_OFFSET ((uint32_t)0x00000010U) +/** @brief DH_8BIT_OFFSET 宏定义 */ #define DH_8BIT_OFFSET ((uint32_t)0x00000008U) /*! @@ -203,6 +206,14 @@ uint16_t dac_output_value_get(uint32_t dac_periph, uint8_t dac_out) \param[out] none \retval none */ +/** + * @brief dac_data_set 函数 + * @param[in] dac_periph 参数 + * @param[in] dac_out 参数 + * @param[in] dac_align 参数 + * @param[in] data 参数 + * @return void + */ void dac_data_set(uint32_t dac_periph, uint8_t dac_out, uint32_t dac_align, uint16_t data) { /* DAC_OUT0 data alignment */ @@ -299,6 +310,13 @@ void dac_trigger_disable(uint32_t dac_periph, uint8_t dac_out) \param[out] none \retval none */ +/** + * @brief dac_trigger_source_config 函数 + * @param[in] dac_periph 参数 + * @param[in] dac_out 参数 + * @param[in] triggersource 参数 + * @return void + */ void dac_trigger_source_config(uint32_t dac_periph, uint8_t dac_out, uint32_t triggersource) { if(DAC_OUT0 == dac_out){ @@ -380,6 +398,13 @@ void dac_wave_mode_config(uint32_t dac_periph, uint8_t dac_out, uint32_t wave_mo \param[out] none \retval none */ +/** + * @brief dac_lfsr_noise_config 函数 + * @param[in] dac_periph 参数 + * @param[in] dac_out 参数 + * @param[in] unmask_bits 参数 + * @return void + */ void dac_lfsr_noise_config(uint32_t dac_periph, uint8_t dac_out, uint32_t unmask_bits) { if(DAC_OUT0 == dac_out){ @@ -416,6 +441,13 @@ void dac_lfsr_noise_config(uint32_t dac_periph, uint8_t dac_out, uint32_t unmask \param[out] none \retval none */ +/** + * @brief dac_triangle_noise_config 函数 + * @param[in] dac_periph 参数 + * @param[in] dac_out 参数 + * @param[in] amplitude 参数 + * @return void + */ void dac_triangle_noise_config(uint32_t dac_periph, uint8_t dac_out, uint32_t amplitude) { if(DAC_OUT0 == dac_out){ @@ -514,6 +546,14 @@ void dac_concurrent_output_buffer_disable(uint32_t dac_periph) \param[out] none \retval none */ +/** + * @brief dac_concurrent_data_set 函数 + * @param[in] dac_periph 参数 + * @param[in] dac_align 参数 + * @param[in] data0 参数 + * @param[in] data1 参数 + * @return void + */ void dac_concurrent_data_set(uint32_t dac_periph, uint32_t dac_align, uint16_t data0, uint16_t data1) { uint32_t data = 0U; diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.c index baf1f82..973d713 100644 --- a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.c +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.c @@ -35,9 +35,16 @@ OF SUCH DAMAGE. #include "gd32c10x_dma.h" #include +/** @brief DMA_WRONG_HANDLE 宏定义 */ #define DMA_WRONG_HANDLE while(1){} /* check whether peripheral matches channels or not */ +/** + * @brief dma_periph_and_channel_check 函数 + * @param[in] dma_periph 参数 + * @param[in] channelx 参数 + * @return ErrStatus 返回值 + */ static ErrStatus dma_periph_and_channel_check(uint32_t dma_periph, dma_channel_enum channelx); /*! @@ -110,6 +117,13 @@ void dma_struct_para_init(dma_parameter_struct* init_struct) \param[out] none \retval none */ +/** + * @brief dma_init 函数 + * @param[in] dma_periph 参数 + * @param[in] channelx 参数 + * @param[in] init_struct 参数 + * @return void + */ void dma_init(uint32_t dma_periph, dma_channel_enum channelx, dma_parameter_struct* init_struct) { uint32_t ctl; @@ -365,6 +379,13 @@ uint32_t dma_transfer_number_get(uint32_t dma_periph, dma_channel_enum channelx) \param[out] none \retval none */ +/** + * @brief dma_priority_config 函数 + * @param[in] dma_periph 参数 + * @param[in] channelx 参数 + * @param[in] priority 参数 + * @return void + */ void dma_priority_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t priority) { uint32_t ctl; @@ -396,6 +417,13 @@ void dma_priority_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_ \param[out] none \retval none */ +/** + * @brief dma_memory_width_config 函数 + * @param[in] dma_periph 参数 + * @param[in] channelx 参数 + * @param[in] mwidth 参数 + * @return void + */ void dma_memory_width_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t mwidth) { uint32_t ctl; @@ -427,6 +455,13 @@ void dma_memory_width_config(uint32_t dma_periph, dma_channel_enum channelx, uin \param[out] none \retval none */ +/** + * @brief dma_periph_width_config 函数 + * @param[in] dma_periph 参数 + * @param[in] channelx 参数 + * @param[in] pwidth 参数 + * @return void + */ void dma_periph_width_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t pwidth) { uint32_t ctl; @@ -533,6 +568,13 @@ void dma_periph_increase_disable(uint32_t dma_periph, dma_channel_enum channelx) \param[out] none \retval none */ +/** + * @brief dma_transfer_direction_config 函数 + * @param[in] dma_periph 参数 + * @param[in] channelx 参数 + * @param[in] direction 参数 + * @return void + */ void dma_transfer_direction_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t direction) { if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ @@ -561,6 +603,13 @@ void dma_transfer_direction_config(uint32_t dma_periph, dma_channel_enum channel \param[out] none \retval FlagStatus: SET or RESET */ +/** + * @brief dma_flag_get 函数 + * @param[in] dma_periph 参数 + * @param[in] channelx 参数 + * @param[in] flag 参数 + * @return FlagStatus 返回值 + */ FlagStatus dma_flag_get(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) { FlagStatus reval; @@ -591,6 +640,13 @@ FlagStatus dma_flag_get(uint32_t dma_periph, dma_channel_enum channelx, uint32_t \param[out] none \retval none */ +/** + * @brief dma_flag_clear 函数 + * @param[in] dma_periph 参数 + * @param[in] channelx 参数 + * @param[in] flag 参数 + * @return void + */ void dma_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) { DMA_INTC(dma_periph) |= DMA_FLAG_ADD(flag, channelx); @@ -611,6 +667,13 @@ void dma_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t fla \param[out] none \retval FlagStatus: SET or RESET */ +/** + * @brief dma_interrupt_flag_get 函数 + * @param[in] dma_periph 参数 + * @param[in] channelx 参数 + * @param[in] flag 参数 + * @return FlagStatus 返回值 + */ FlagStatus dma_interrupt_flag_get(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) { uint32_t interrupt_enable = 0U, interrupt_flag = 0U; @@ -661,6 +724,13 @@ FlagStatus dma_interrupt_flag_get(uint32_t dma_periph, dma_channel_enum channelx \param[out] none \retval none */ +/** + * @brief dma_interrupt_flag_clear 函数 + * @param[in] dma_periph 参数 + * @param[in] channelx 参数 + * @param[in] flag 参数 + * @return void + */ void dma_interrupt_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) { DMA_INTC(dma_periph) |= DMA_FLAG_ADD(flag, channelx); @@ -681,6 +751,13 @@ void dma_interrupt_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, ui \param[out] none \retval none */ +/** + * @brief dma_interrupt_enable 函数 + * @param[in] dma_periph 参数 + * @param[in] channelx 参数 + * @param[in] source 参数 + * @return void + */ void dma_interrupt_enable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source) { if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ @@ -705,6 +782,13 @@ void dma_interrupt_enable(uint32_t dma_periph, dma_channel_enum channelx, uint32 \param[out] none \retval none */ +/** + * @brief dma_interrupt_disable 函数 + * @param[in] dma_periph 参数 + * @param[in] channelx 参数 + * @param[in] source 参数 + * @return void + */ void dma_interrupt_disable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source) { if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exmc.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exmc.c index eeffa67..93bdc91 100644 --- a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exmc.c +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exmc.c @@ -35,25 +35,41 @@ OF SUCH DAMAGE. #include "gd32c10x_exmc.h" /* EXMC bank0 register reset value */ +/** @brief BANK0_SNCTL_RESET 宏定义 */ #define BANK0_SNCTL_RESET ((uint32_t)0x000030DBU) +/** @brief BANK0_SNTCFG_RESET 宏定义 */ #define BANK0_SNTCFG_RESET ((uint32_t)0x0FFFFFFFU) +/** @brief BANK0_SNWTCFG_RESET 宏定义 */ #define BANK0_SNWTCFG_RESET ((uint32_t)0x0FFFFFFFU) /* EXMC register bit offset */ +/** @brief SNCTL_NRMUX_OFFSET 宏定义 */ #define SNCTL_NRMUX_OFFSET ((uint32_t)1U) +/** @brief SNCTL_SBRSTEN_OFFSET 宏定义 */ #define SNCTL_SBRSTEN_OFFSET ((uint32_t)8U) +/** @brief SNCTL_WRAPEN_OFFSET 宏定义 */ #define SNCTL_WRAPEN_OFFSET ((uint32_t)10U) +/** @brief SNCTL_WREN_OFFSET 宏定义 */ #define SNCTL_WREN_OFFSET ((uint32_t)12U) +/** @brief SNCTL_NRWTEN_OFFSET 宏定义 */ #define SNCTL_NRWTEN_OFFSET ((uint32_t)13U) +/** @brief SNCTL_EXMODEN_OFFSET 宏定义 */ #define SNCTL_EXMODEN_OFFSET ((uint32_t)14U) +/** @brief SNCTL_ASYNCWAIT_OFFSET 宏定义 */ #define SNCTL_ASYNCWAIT_OFFSET ((uint32_t)15U) +/** @brief SNTCFG_AHLD_OFFSET 宏定义 */ #define SNTCFG_AHLD_OFFSET ((uint32_t)4U) +/** @brief SNTCFG_DSET_OFFSET 宏定义 */ #define SNTCFG_DSET_OFFSET ((uint32_t)8U) +/** @brief SNTCFG_BUSLAT_OFFSET 宏定义 */ #define SNTCFG_BUSLAT_OFFSET ((uint32_t)16U) +/** @brief SNWTCFG_WAHLD_OFFSET 宏定义 */ #define SNWTCFG_WAHLD_OFFSET ((uint32_t)4U) +/** @brief SNWTCFG_WDSET_OFFSET 宏定义 */ #define SNWTCFG_WDSET_OFFSET ((uint32_t)8U) +/** @brief SNWTCFG_WBUSLAT_OFFSET 宏定义 */ #define SNWTCFG_WBUSLAT_OFFSET ((uint32_t)16U) /*! @@ -130,6 +146,11 @@ void exmc_norsram_struct_para_init(exmc_norsram_parameter_struct* exmc_norsram_i \param[out] none \retval none */ +/** + * @brief exmc_norsram_init 函数 + * @param[in] exmc_norsram_init_struct 参数 + * @return void + */ void exmc_norsram_init(exmc_norsram_parameter_struct* exmc_norsram_init_struct) { uint32_t snctl = 0x00000000U, sntcfg = 0x00000000U, snwtcfg = 0x00000000U; diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exti.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exti.c index 1d8276f..879fdf0 100644 --- a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exti.c +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exti.c @@ -34,6 +34,7 @@ OF SUCH DAMAGE. #include "gd32c10x_exti.h" +/** @brief EXTI_REG_RESET_VALUE 宏定义 */ #define EXTI_REG_RESET_VALUE ((uint32_t)0x00000000U) /*! @@ -69,6 +70,13 @@ void exti_deinit(void) \param[out] none \retval none */ +/** + * @brief exti_init 函数 + * @param[in] linex 参数 + * @param[in] mode 参数 + * @param[in] trig_type 参数 + * @return void + */ void exti_init(exti_line_enum linex, exti_mode_enum mode, exti_trig_type_enum trig_type) { /* reset the EXTI line x */ diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.c index 7c38e0b..cf44a1f 100644 --- a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.c +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.c @@ -35,25 +35,45 @@ OF SUCH DAMAGE. #include "gd32c10x_fmc.h" /* FMC mask */ +/** @brief LOW_8BITS_MASK 宏定义 */ #define LOW_8BITS_MASK ((uint32_t)0x000000FFU) +/** @brief HIGH_8BITS_MASK 宏定义 */ #define HIGH_8BITS_MASK ((uint32_t)0x0000FF00U) +/** @brief LOW_8BITS_MASK1 宏定义 */ #define LOW_8BITS_MASK1 ((uint32_t)0x00FF0000U) +/** @brief HIGH_8BITS_MASK1 宏定义 */ #define HIGH_8BITS_MASK1 ((uint32_t)0xFF000000U) +/** @brief LOW_16BITS_MASK 宏定义 */ #define LOW_16BITS_MASK ((uint32_t)0x0000FFFFU) +/** @brief HIGH_16BITS_MASK 宏定义 */ #define HIGH_16BITS_MASK ((uint32_t)0xFFFF0000U) /* USER of option bytes mask */ +/** @brief OB_USER_MASK 宏定义 */ #define OB_USER_MASK ((uint8_t)0xF8U) /* OB_WP mask */ +/** @brief OB_WP0_MASK 宏定义 */ #define OB_WP0_MASK ((uint32_t)0x000000FFU) +/** @brief OB_WP1_MASK 宏定义 */ #define OB_WP1_MASK ((uint32_t)0x0000FF00U) +/** @brief OB_WP2_MASK 宏定义 */ #define OB_WP2_MASK ((uint32_t)0x00FF0000U) +/** @brief OB_WP3_MASK 宏定义 */ #define OB_WP3_MASK ((uint32_t)0xFF000000U) /* return the FMC state */ +/** + * @brief fmc_state_get 函数 + * @return fmc_state_enum 返回值 + */ static fmc_state_enum fmc_state_get(void); /* check FMC ready or not */ +/** + * @brief fmc_ready_wait 函数 + * @param[in] timeout 参数 + * @return fmc_state_enum 返回值 + */ static fmc_state_enum fmc_ready_wait(uint32_t timeout); /* FMC main memory programming functions */ @@ -446,6 +466,11 @@ fmc_state_enum ob_erase(void) \arg FMC_PGAERR: program alignment error \arg FMC_TOERR: timeout error */ +/** + * @brief ob_write_protection_enable 函数 + * @param[in] ob_wp 参数 + * @return fmc_state_enum 返回值 + */ fmc_state_enum ob_write_protection_enable(uint32_t ob_wp) { uint32_t i; @@ -505,6 +530,11 @@ fmc_state_enum ob_write_protection_enable(uint32_t ob_wp) \arg FMC_PGAERR: program alignment error \arg FMC_TOERR: timeout error */ +/** + * @brief ob_security_protection_config 函数 + * @param[in] ob_spc 参数 + * @return fmc_state_enum 返回值 + */ fmc_state_enum ob_security_protection_config(uint8_t ob_spc) { uint32_t i; @@ -571,6 +601,13 @@ fmc_state_enum ob_security_protection_config(uint8_t ob_spc) \arg FMC_PGAERR: program alignment error \arg FMC_TOERR: timeout error */ +/** + * @brief ob_user_write 函数 + * @param[in] ob_fwdgt 参数 + * @param[in] ob_deepsleep 参数 + * @param[in] ob_stdby 参数 + * @return fmc_state_enum 返回值 + */ fmc_state_enum ob_user_write(uint8_t ob_fwdgt, uint8_t ob_deepsleep, uint8_t ob_stdby) { uint32_t i; @@ -700,6 +737,11 @@ uint16_t fmc_ecc_address_get(void) \param[out] none \retval FlagStatus: SET or RESET */ +/** + * @brief fmc_ecc_flag_get 函数 + * @param[in] flag 参数 + * @return FlagStatus 返回值 + */ FlagStatus fmc_ecc_flag_get(uint32_t flag) { FlagStatus status = RESET; @@ -725,6 +767,11 @@ FlagStatus fmc_ecc_flag_get(uint32_t flag) \param[out] none \retval FlagStatus: SET or RESET */ +/** + * @brief fmc_ecc_flag_clear 函数 + * @param[in] flag 参数 + * @return void + */ void fmc_ecc_flag_clear(uint32_t flag) { FMC_ECCCS |= flag; diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.c index 7c4ef70..901ea17 100644 --- a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.c +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.c @@ -81,6 +81,11 @@ void fwdgt_enable(void) \param[out] none \retval ErrStatus: ERROR or SUCCESS */ +/** + * @brief fwdgt_prescaler_value_config 函数 + * @param[in] prescaler_value 参数 + * @return ErrStatus 返回值 + */ ErrStatus fwdgt_prescaler_value_config(uint16_t prescaler_value) { uint32_t timeout = FWDGT_PSC_TIMEOUT; @@ -161,6 +166,12 @@ void fwdgt_counter_reload(void) \param[out] none \retval ErrStatus: ERROR or SUCCESS */ +/** + * @brief fwdgt_config 函数 + * @param[in] reload_value 参数 + * @param[in] prescaler_value 参数 + * @return ErrStatus 返回值 + */ ErrStatus fwdgt_config(uint16_t reload_value, uint8_t prescaler_value) { uint32_t timeout = FWDGT_PSC_TIMEOUT; diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.c index 7ccdf53..fb35f87 100644 --- a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.c +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.c @@ -34,6 +34,7 @@ OF SUCH DAMAGE. #include "gd32c10x_gpio.h" +/** @brief AFIO_EXTI_SOURCE_MASK 宏定义 */ #define AFIO_EXTI_SOURCE_MASK ((uint8_t)0x03U) /*!< AFIO exti source selection mask*/ #define AFIO_EXTI_SOURCE_FIELDS ((uint8_t)0x04U) /*!< select AFIO exti source registers */ #define LSB_16BIT_MASK ((uint16_t)0xFFFFU) /*!< LSB 16-bit mask */ @@ -120,6 +121,14 @@ void gpio_afio_deinit(void) \param[out] none \retval none */ +/** + * @brief gpio_init 函数 + * @param[in] gpio_periph 参数 + * @param[in] mode 参数 + * @param[in] speed 参数 + * @param[in] pin 参数 + * @return void + */ void gpio_init(uint32_t gpio_periph, uint32_t mode, uint32_t speed, uint32_t pin) { uint16_t i; @@ -352,6 +361,12 @@ uint16_t gpio_output_port_get(uint32_t gpio_periph) \param[out] none \retval none */ +/** + * @brief gpio_pin_remap_config 函数 + * @param[in] remap 参数 + * @param[in] newvalue 参数 + * @return void + */ void gpio_pin_remap_config(uint32_t remap, ControlStatus newvalue) { uint32_t remap1 = 0U, remap2 = 0U, temp_reg = 0U, temp_mask = 0U; @@ -409,6 +424,12 @@ void gpio_pin_remap_config(uint32_t remap, ControlStatus newvalue) \param[out] none \retval none */ +/** + * @brief gpio_exti_source_select 函数 + * @param[in] output_port 参数 + * @param[in] output_pin 参数 + * @return void + */ void gpio_exti_source_select(uint8_t output_port, uint8_t output_pin) { uint32_t source = 0U; @@ -449,6 +470,12 @@ void gpio_exti_source_select(uint8_t output_port, uint8_t output_pin) \param[out] none \retval none */ +/** + * @brief gpio_event_output_config 函数 + * @param[in] output_port 参数 + * @param[in] output_pin 参数 + * @return void + */ void gpio_event_output_config(uint8_t output_port, uint8_t output_pin) { uint32_t reg = 0U; diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_i2c.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_i2c.c index e2d9fc7..e0ead1f 100644 --- a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_i2c.c +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_i2c.c @@ -35,6 +35,7 @@ OF SUCH DAMAGE. #include "gd32c10x_i2c.h" /* I2C register bit mask */ +/** @brief I2CCLK_MAX 宏定义 */ #define I2CCLK_MAX ((uint32_t)0x0000003FU) /*!< i2cclk maximum value */ #define I2CCLK_MIN ((uint32_t)0x00000002U) /*!< i2cclk minimum value */ #define I2C_FLAG_MASK ((uint32_t)0x0000FFFFU) /*!< i2c flag mask */ @@ -42,6 +43,7 @@ OF SUCH DAMAGE. #define I2C_ADDRESS2_MASK ((uint32_t)0x000000FEU) /*!< the second i2c address mask */ /* I2C register bit offset */ +/** @brief STAT1_PECV_OFFSET 宏定义 */ #define STAT1_PECV_OFFSET ((uint32_t)0x00000008U) /*!< bit offset of PECV in I2C_STAT1 */ /*! @@ -167,6 +169,14 @@ void i2c_clock_config(uint32_t i2c_periph, uint32_t clkspeed, uint32_t dutycyc) \param[out] none \retval none */ +/** + * @brief i2c_mode_addr_config 函数 + * @param[in] i2c_periph 参数 + * @param[in] mode 参数 + * @param[in] addformat 参数 + * @param[in] addr 参数 + * @return void + */ void i2c_mode_addr_config(uint32_t i2c_periph, uint32_t mode, uint32_t addformat, uint32_t addr) { /* SMBus/I2C mode selected */ @@ -633,6 +643,12 @@ void i2c_sam_timeout_disable(uint32_t i2c_periph) \param[out] none \retval FlagStatus: SET or RESET */ +/** + * @brief i2c_flag_get 函数 + * @param[in] i2c_periph 参数 + * @param[in] flag 参数 + * @return FlagStatus 返回值 + */ FlagStatus i2c_flag_get(uint32_t i2c_periph, i2c_flag_enum flag) { FlagStatus status = RESET; @@ -664,6 +680,12 @@ FlagStatus i2c_flag_get(uint32_t i2c_periph, i2c_flag_enum flag) \param[out] none \retval none */ +/** + * @brief i2c_flag_clear 函数 + * @param[in] i2c_periph 参数 + * @param[in] flag 参数 + * @return void + */ void i2c_flag_clear(uint32_t i2c_periph, i2c_flag_enum flag) { if(I2C_FLAG_ADDSEND == flag){ @@ -690,6 +712,12 @@ void i2c_flag_clear(uint32_t i2c_periph, i2c_flag_enum flag) \param[out] none \retval none */ +/** + * @brief i2c_interrupt_enable 函数 + * @param[in] i2c_periph 参数 + * @param[in] interrupt 参数 + * @return void + */ void i2c_interrupt_enable(uint32_t i2c_periph, i2c_interrupt_enum interrupt) { I2C_REG_VAL(i2c_periph, interrupt) |= BIT(I2C_BIT_POS(interrupt)); @@ -710,6 +738,12 @@ void i2c_interrupt_enable(uint32_t i2c_periph, i2c_interrupt_enum interrupt) \param[out] none \retval none */ +/** + * @brief i2c_interrupt_disable 函数 + * @param[in] i2c_periph 参数 + * @param[in] interrupt 参数 + * @return void + */ void i2c_interrupt_disable(uint32_t i2c_periph, i2c_interrupt_enum interrupt) { I2C_REG_VAL(i2c_periph, interrupt) &= ~BIT(I2C_BIT_POS(interrupt)); @@ -741,6 +775,12 @@ void i2c_interrupt_disable(uint32_t i2c_periph, i2c_interrupt_enum interrupt) \param[out] none \retval FlagStatus: SET or RESET */ +/** + * @brief i2c_interrupt_flag_get 函数 + * @param[in] i2c_periph 参数 + * @param[in] int_flag 参数 + * @return FlagStatus 返回值 + */ FlagStatus i2c_interrupt_flag_get(uint32_t i2c_periph, i2c_interrupt_flag_enum int_flag) { uint32_t intenable = 0U, flagstatus = 0U, bufie; @@ -789,6 +829,12 @@ FlagStatus i2c_interrupt_flag_get(uint32_t i2c_periph, i2c_interrupt_flag_enum i \param[out] none \retval none */ +/** + * @brief i2c_interrupt_flag_clear 函数 + * @param[in] i2c_periph 参数 + * @param[in] int_flag 参数 + * @return void + */ void i2c_interrupt_flag_clear(uint32_t i2c_periph, i2c_interrupt_flag_enum int_flag) { if(I2C_INT_FLAG_ADDSEND == int_flag){ diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_pmu.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_pmu.c index b71f9ef..20fe234 100644 --- a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_pmu.c +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_pmu.c @@ -62,6 +62,11 @@ void pmu_deinit(void) \param[out] none \retval none */ +/** + * @brief pmu_lvd_select 函数 + * @param[in] lvdt_n 参数 + * @return void + */ void pmu_lvd_select(uint32_t lvdt_n) { /* disable LVD */ @@ -139,6 +144,12 @@ void pmu_to_sleepmode(uint8_t sleepmodecmd) \param[out] none \retval none */ +/** + * @brief pmu_to_deepsleepmode 函数 + * @param[in] ldo 参数 + * @param[in] deepsleepmodecmd 参数 + * @return void + */ void pmu_to_deepsleepmode(uint32_t ldo,uint8_t deepsleepmodecmd) { static uint32_t reg_snap[4]; diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rcu.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rcu.c index beecfd6..84791d7 100644 --- a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rcu.c +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rcu.c @@ -35,24 +35,34 @@ OF SUCH DAMAGE. #include "gd32c10x_rcu.h" /* define clock source */ +/** @brief SEL_IRC8M 宏定义 */ #define SEL_IRC8M ((uint16_t)0U) /* IRC8M is selected as CK_SYS */ +/** @brief SEL_HXTAL 宏定义 */ #define SEL_HXTAL ((uint16_t)1U) /* HXTAL is selected as CK_SYS */ +/** @brief SEL_PLL 宏定义 */ #define SEL_PLL ((uint16_t)2U) /* PLL is selected as CK_SYS */ /* define startup timeout count */ +/** @brief OSC_STARTUP_TIMEOUT 宏定义 */ #define OSC_STARTUP_TIMEOUT ((uint32_t)0x000FFFFFU) +/** @brief LXTAL_STARTUP_TIMEOUT 宏定义 */ #define LXTAL_STARTUP_TIMEOUT ((uint32_t)0x03FFFFFFU) /* ADC clock prescaler offset */ +/** @brief RCU_ADC_PSC_OFFSET 宏定义 */ #define RCU_ADC_PSC_OFFSET ((uint32_t)14U) /* RCU IRC8M adjust value mask and offset*/ +/** @brief RCU_IRC8M_ADJUST_MASK 宏定义 */ #define RCU_IRC8M_ADJUST_MASK ((uint8_t)0x1FU) +/** @brief RCU_IRC8M_ADJUST_OFFSET 宏定义 */ #define RCU_IRC8M_ADJUST_OFFSET ((uint32_t)3U) /* RCU PLL1 clock multiplication factor offset */ +/** @brief RCU_CFG1_PLL1MF_OFFSET 宏定义 */ #define RCU_CFG1_PLL1MF_OFFSET ((uint32_t)8U) /* RCU PREDV1 division factor offset*/ +/** @brief RCU_CFG1_PREDV1_OFFSET 宏定义 */ #define RCU_CFG1_PREDV1_OFFSET ((uint32_t)4U) /*! @@ -115,6 +125,11 @@ void rcu_deinit(void) \param[out] none \retval none */ +/** + * @brief rcu_periph_clock_enable 函数 + * @param[in] periph 参数 + * @return void + */ void rcu_periph_clock_enable(rcu_periph_enum periph) { RCU_REG_VAL(periph) |= BIT(RCU_BIT_POS(periph)); @@ -146,6 +161,11 @@ void rcu_periph_clock_enable(rcu_periph_enum periph) \param[out] none \retval none */ +/** + * @brief rcu_periph_clock_disable 函数 + * @param[in] periph 参数 + * @return void + */ void rcu_periph_clock_disable(rcu_periph_enum periph) { RCU_REG_VAL(periph) &= ~BIT(RCU_BIT_POS(periph)); @@ -201,6 +221,11 @@ void rcu_periph_clock_sleep_disable(rcu_periph_sleep_enum periph) \param[out] none \retval none */ +/** + * @brief rcu_periph_reset_enable 函数 + * @param[in] periph_reset 参数 + * @return void + */ void rcu_periph_reset_enable(rcu_periph_reset_enum periph_reset) { RCU_REG_VAL(periph_reset) |= BIT(RCU_BIT_POS(periph_reset)); @@ -228,6 +253,11 @@ void rcu_periph_reset_enable(rcu_periph_reset_enum periph_reset) \param[out] none \retval none */ +/** + * @brief rcu_periph_reset_disable 函数 + * @param[in] periph_reset 参数 + * @return void + */ void rcu_periph_reset_disable(rcu_periph_reset_enum periph_reset) { RCU_REG_VAL(periph_reset) &= ~BIT(RCU_BIT_POS(periph_reset)); @@ -371,6 +401,11 @@ void rcu_apb2_clock_config(uint32_t ck_apb2) \param[out] none \retval none */ +/** + * @brief rcu_ckout0_config 函数 + * @param[in] ckout0_src 参数 + * @return void + */ void rcu_ckout0_config(uint32_t ckout0_src) { uint32_t reg; @@ -520,6 +555,11 @@ void rcu_pll2_config(uint32_t pll_mul) \param[out] none \retval none */ +/** + * @brief rcu_adc_clock_config 函数 + * @param[in] adc_psc 参数 + * @return void + */ void rcu_adc_clock_config(uint32_t adc_psc) { uint32_t reg0,reg1; @@ -577,6 +617,11 @@ void rcu_adc_clock_config(uint32_t adc_psc) \param[out] none \retval none */ +/** + * @brief rcu_usb_clock_config 函数 + * @param[in] usb_psc 参数 + * @return void + */ void rcu_usb_clock_config(uint32_t usb_psc) { uint32_t reg; @@ -688,6 +733,11 @@ void rcu_ck48m_clock_config(uint32_t ck48m_clock_source) \param[out] none \retval none */ +/** + * @brief rcu_flag_get 函数 + * @param[in] flag 参数 + * @return FlagStatus 返回值 + */ FlagStatus rcu_flag_get(rcu_flag_enum flag) { FlagStatus rcu_flag = RESET; @@ -729,6 +779,11 @@ void rcu_all_reset_flag_clear(void) \param[out] none \retval FlagStatus: SET or RESET */ +/** + * @brief rcu_interrupt_flag_get 函数 + * @param[in] int_flag 参数 + * @return FlagStatus 返回值 + */ FlagStatus rcu_interrupt_flag_get(rcu_int_flag_enum int_flag) { FlagStatus rcu_int_flag = RESET; @@ -759,6 +814,11 @@ FlagStatus rcu_interrupt_flag_get(rcu_int_flag_enum int_flag) \param[out] none \retval none */ +/** + * @brief rcu_interrupt_flag_clear 函数 + * @param[in] int_flag_clear 参数 + * @return void + */ void rcu_interrupt_flag_clear(rcu_int_flag_clear_enum int_flag_clear) { RCU_REG_VAL(int_flag_clear) |= BIT(RCU_BIT_POS(int_flag_clear)); @@ -779,6 +839,11 @@ void rcu_interrupt_flag_clear(rcu_int_flag_clear_enum int_flag_clear) \param[out] none \retval none */ +/** + * @brief rcu_interrupt_enable 函数 + * @param[in] stab_int 参数 + * @return void + */ void rcu_interrupt_enable(rcu_int_enum stab_int) { RCU_REG_VAL(stab_int) |= BIT(RCU_BIT_POS(stab_int)); @@ -799,6 +864,11 @@ void rcu_interrupt_enable(rcu_int_enum stab_int) \param[out] none \retval none */ +/** + * @brief rcu_interrupt_disable 函数 + * @param[in] stab_int 参数 + * @return void + */ void rcu_interrupt_disable(rcu_int_enum stab_int) { RCU_REG_VAL(stab_int) &= ~BIT(RCU_BIT_POS(stab_int)); @@ -841,6 +911,11 @@ void rcu_lxtal_drive_capability_config(uint32_t lxtal_dricap) \param[out] none \retval ErrStatus: SUCCESS or ERROR */ +/** + * @brief rcu_osci_stab_wait 函数 + * @param[in] osci 参数 + * @return ErrStatus 返回值 + */ ErrStatus rcu_osci_stab_wait(rcu_osci_type_enum osci) { uint32_t stb_cnt = 0U; @@ -974,6 +1049,11 @@ ErrStatus rcu_osci_stab_wait(rcu_osci_type_enum osci) \param[out] none \retval none */ +/** + * @brief rcu_osci_on 函数 + * @param[in] osci 参数 + * @return void + */ void rcu_osci_on(rcu_osci_type_enum osci) { RCU_REG_VAL(osci) |= BIT(RCU_BIT_POS(osci)); @@ -994,6 +1074,11 @@ void rcu_osci_on(rcu_osci_type_enum osci) \param[out] none \retval none */ +/** + * @brief rcu_osci_off 函数 + * @param[in] osci 参数 + * @return void + */ void rcu_osci_off(rcu_osci_type_enum osci) { RCU_REG_VAL(osci) &= ~BIT(RCU_BIT_POS(osci)); diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rtc.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rtc.c index 776d900..3589126 100644 --- a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rtc.c +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rtc.c @@ -35,10 +35,13 @@ OF SUCH DAMAGE. #include "gd32c10x_rtc.h" /* RTC register high / low bits mask */ +/** @brief RTC_HIGH_BITS_MASK 宏定义 */ #define RTC_HIGH_BITS_MASK ((uint32_t)0x000F0000U) /* RTC high bits mask */ +/** @brief RTC_LOW_BITS_MASK 宏定义 */ #define RTC_LOW_BITS_MASK ((uint32_t)0x0000FFFFU) /* RTC low bits mask */ /* RTC register high bits offset */ +/** @brief RTC_HIGH_BITS_OFFSET 宏定义 */ #define RTC_HIGH_BITS_OFFSET ((uint32_t)16U) /*! diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_spi.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_spi.c index 7ef3499..3bb3ee5 100644 --- a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_spi.c +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_spi.c @@ -34,21 +34,31 @@ OF SUCH DAMAGE. #include "gd32c10x_spi.h" +/** @brief SPI_ERROR_HANDLE 宏定义 */ #define SPI_ERROR_HANDLE(s) do{}while(1) /* SPI/I2S parameter initialization mask */ +/** @brief SPI_INIT_MASK 宏定义 */ #define SPI_INIT_MASK ((uint32_t)0x00003040U) /* SPI parameter initialization mask */ +/** @brief I2S_INIT_MASK 宏定义 */ #define I2S_INIT_MASK ((uint32_t)0x0000F047U) /* I2S parameter initialization mask */ /* I2S clock source selection, multiplication and division mask */ +/** @brief I2S1_CLOCK_SEL 宏定义 */ #define I2S1_CLOCK_SEL ((uint32_t)0x00020000U) /* I2S1 clock source selection */ +/** @brief I2S2_CLOCK_SEL 宏定义 */ #define I2S2_CLOCK_SEL ((uint32_t)0x00040000U) /* I2S2 clock source selection */ +/** @brief I2S_CLOCK_MUL_MASK 宏定义 */ #define I2S_CLOCK_MUL_MASK ((uint32_t)0x0000F000U) /* I2S clock multiplication mask */ +/** @brief I2S_CLOCK_DIV_MASK 宏定义 */ #define I2S_CLOCK_DIV_MASK ((uint32_t)0x000000F0U) /* I2S clock division mask */ /* default value and offset */ +/** @brief SPI_I2SPSC_DEFAULT_VALUE 宏定义 */ #define SPI_I2SPSC_DEFAULT_VALUE ((uint32_t)0x00000002U) /* default value of SPI_I2SPSC register */ +/** @brief RCU_CFG1_PREDV1_OFFSET 宏定义 */ #define RCU_CFG1_PREDV1_OFFSET 4U /* PREDV1 offset in RCU_CFG1 */ +/** @brief RCU_CFG1_PLL2MF_OFFSET 宏定义 */ #define RCU_CFG1_PLL2MF_OFFSET 12U /* PLL2MF offset in RCU_CFG1 */ /*! @@ -115,6 +125,12 @@ void spi_struct_para_init(spi_parameter_struct* spi_struct) \param[out] none \retval none */ +/** + * @brief spi_init 函数 + * @param[in] spi_periph 参数 + * @param[in] spi_struct 参数 + * @return void + */ void spi_init(uint32_t spi_periph, spi_parameter_struct* spi_struct) { uint32_t reg = 0U; @@ -187,6 +203,14 @@ void spi_disable(uint32_t spi_periph) \param[out] none \retval none */ +/** + * @brief i2s_init 函数 + * @param[in] spi_periph 参数 + * @param[in] mode 参数 + * @param[in] standard 参数 + * @param[in] ckpl 参数 + * @return void + */ void i2s_init(uint32_t spi_periph, uint32_t mode, uint32_t standard, uint32_t ckpl) { uint32_t reg = 0U; @@ -233,6 +257,14 @@ void i2s_init(uint32_t spi_periph, uint32_t mode, uint32_t standard, uint32_t ck \param[out] none \retval none */ +/** + * @brief i2s_psc_config 函数 + * @param[in] spi_periph 参数 + * @param[in] audiosample 参数 + * @param[in] frameformat 参数 + * @param[in] mckout 参数 + * @return void + */ void i2s_psc_config(uint32_t spi_periph, uint32_t audiosample, uint32_t frameformat, uint32_t mckout) { uint32_t i2sdiv = 2U, i2sof = 0U; @@ -752,6 +784,12 @@ void spi_i2s_interrupt_disable(uint32_t spi_periph, uint8_t interrupt) \param[out] none \retval FlagStatus: SET or RESET */ +/** + * @brief spi_i2s_interrupt_flag_get 函数 + * @param[in] spi_periph 参数 + * @param[in] interrupt 参数 + * @return FlagStatus 返回值 + */ FlagStatus spi_i2s_interrupt_flag_get(uint32_t spi_periph, uint8_t interrupt) { FlagStatus status = RESET; @@ -829,6 +867,12 @@ FlagStatus spi_i2s_interrupt_flag_get(uint32_t spi_periph, uint8_t interrupt) \param[out] none \retval FlagStatus: SET or RESET */ +/** + * @brief spi_i2s_flag_get 函数 + * @param[in] spi_periph 参数 + * @param[in] flag 参数 + * @return FlagStatus 返回值 + */ FlagStatus spi_i2s_flag_get(uint32_t spi_periph, uint32_t flag) { FlagStatus status = RESET; diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_timer.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_timer.c index 035ed5a..c028885 100644 --- a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_timer.c +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_timer.c @@ -35,6 +35,7 @@ OF SUCH DAMAGE. #include "gd32c10x_timer.h" /* TIMER init parameter mask */ +/** @brief ALIGNEDMODE_MASK 宏定义 */ #define ALIGNEDMODE_MASK ((uint32_t)0x00000060U) /*!< TIMER init parameter aligne dmode mask */ #define COUNTERDIRECTION_MASK ((uint32_t)0x00000010U) /*!< TIMER init parameter counter direction mask */ #define CLOCKDIVISION_MASK ((uint32_t)0x00000300U) /*!< TIMER init parameter clock division value mask */ @@ -154,6 +155,12 @@ void timer_struct_para_init(timer_parameter_struct* initpara) \param[out] none \retval none */ +/** + * @brief timer_init 函数 + * @param[in] timer_periph 参数 + * @param[in] initpara 参数 + * @return void + */ void timer_init(uint32_t timer_periph, timer_parameter_struct* initpara) { /* configure the counter prescaler value */ @@ -431,6 +438,12 @@ void timer_update_source_config(uint32_t timer_periph, uint32_t update) \param[out] none \retval none */ +/** + * @brief timer_dma_enable 函数 + * @param[in] timer_periph 参数 + * @param[in] dma 参数 + * @return void + */ void timer_dma_enable(uint32_t timer_periph, uint16_t dma) { TIMER_DMAINTEN(timer_periph) |= (uint32_t) dma; @@ -451,6 +464,12 @@ void timer_dma_enable(uint32_t timer_periph, uint16_t dma) \param[out] none \retval none */ +/** + * @brief timer_dma_disable 函数 + * @param[in] timer_periph 参数 + * @param[in] dma 参数 + * @return void + */ void timer_dma_disable(uint32_t timer_periph, uint16_t dma) { TIMER_DMAINTEN(timer_periph) &= (~(uint32_t)(dma)); @@ -507,6 +526,13 @@ void timer_channel_dma_request_source_select(uint32_t timer_periph, uint32_t dma \param[out] none \retval none */ +/** + * @brief timer_dma_transfer_config 函数 + * @param[in] timer_periph 参数 + * @param[in] dma_baseaddr 参数 + * @param[in] dma_lenth 参数 + * @return void + */ void timer_dma_transfer_config(uint32_t timer_periph, uint32_t dma_baseaddr, uint32_t dma_lenth) { TIMER_DMACFG(timer_periph) &= (~(uint32_t)(TIMER_DMACFG_DMATA | TIMER_DMACFG_DMATC)); @@ -529,6 +555,12 @@ void timer_dma_transfer_config(uint32_t timer_periph, uint32_t dma_baseaddr, uin \param[out] none \retval none */ +/** + * @brief timer_event_software_generate 函数 + * @param[in] timer_periph 参数 + * @param[in] event 参数 + * @return void + */ void timer_event_software_generate(uint32_t timer_periph, uint16_t event) { TIMER_SWEVG(timer_periph) |= (uint32_t)event; @@ -566,6 +598,12 @@ void timer_break_struct_para_init(timer_break_parameter_struct* breakpara) \param[out] none \retval none */ +/** + * @brief timer_break_config 函数 + * @param[in] timer_periph 参数 + * @param[in] breakpara 参数 + * @return void + */ void timer_break_config(uint32_t timer_periph, timer_break_parameter_struct* breakpara) { TIMER_CCHP(timer_periph) = (uint32_t)(((uint32_t)(breakpara->runoffstate)) | @@ -710,6 +748,13 @@ void timer_channel_output_struct_para_init(timer_oc_parameter_struct* ocpara) \param[out] none \retval none */ +/** + * @brief timer_channel_output_config 函数 + * @param[in] timer_periph 参数 + * @param[in] channel 参数 + * @param[in] ocpara 参数 + * @return void + */ void timer_channel_output_config(uint32_t timer_periph, uint16_t channel, timer_oc_parameter_struct* ocpara) { switch(channel){ @@ -852,6 +897,13 @@ void timer_channel_output_config(uint32_t timer_periph, uint16_t channel, timer_ \param[out] none \retval none */ +/** + * @brief timer_channel_output_mode_config 函数 + * @param[in] timer_periph 参数 + * @param[in] channel 参数 + * @param[in] ocmode 参数 + * @return void + */ void timer_channel_output_mode_config(uint32_t timer_periph, uint16_t channel, uint16_t ocmode) { switch(channel){ @@ -893,6 +945,13 @@ void timer_channel_output_mode_config(uint32_t timer_periph, uint16_t channel, u \param[out] none \retval none */ +/** + * @brief timer_channel_output_pulse_value_config 函数 + * @param[in] timer_periph 参数 + * @param[in] channel 参数 + * @param[in] pulse 参数 + * @return void + */ void timer_channel_output_pulse_value_config(uint32_t timer_periph, uint16_t channel, uint32_t pulse) { switch(channel){ @@ -933,6 +992,13 @@ void timer_channel_output_pulse_value_config(uint32_t timer_periph, uint16_t cha \param[out] none \retval none */ +/** + * @brief timer_channel_output_shadow_config 函数 + * @param[in] timer_periph 参数 + * @param[in] channel 参数 + * @param[in] ocshadow 参数 + * @return void + */ void timer_channel_output_shadow_config(uint32_t timer_periph, uint16_t channel, uint16_t ocshadow) { switch(channel){ @@ -977,6 +1043,13 @@ void timer_channel_output_shadow_config(uint32_t timer_periph, uint16_t channel, \param[out] none \retval none */ +/** + * @brief timer_channel_output_fast_config 函数 + * @param[in] timer_periph 参数 + * @param[in] channel 参数 + * @param[in] ocfast 参数 + * @return void + */ void timer_channel_output_fast_config(uint32_t timer_periph, uint16_t channel, uint16_t ocfast) { switch(channel){ @@ -1021,6 +1094,13 @@ void timer_channel_output_fast_config(uint32_t timer_periph, uint16_t channel, u \param[out] none \retval none */ +/** + * @brief timer_channel_output_clear_config 函数 + * @param[in] timer_periph 参数 + * @param[in] channel 参数 + * @param[in] occlear 参数 + * @return void + */ void timer_channel_output_clear_config(uint32_t timer_periph, uint16_t channel, uint16_t occlear) { switch(channel){ @@ -1065,6 +1145,13 @@ void timer_channel_output_clear_config(uint32_t timer_periph, uint16_t channel, \param[out] none \retval none */ +/** + * @brief timer_channel_output_polarity_config 函数 + * @param[in] timer_periph 参数 + * @param[in] channel 参数 + * @param[in] ocpolarity 参数 + * @return void + */ void timer_channel_output_polarity_config(uint32_t timer_periph, uint16_t channel, uint16_t ocpolarity) { switch(channel){ @@ -1108,6 +1195,13 @@ void timer_channel_output_polarity_config(uint32_t timer_periph, uint16_t channe \param[out] none \retval none */ +/** + * @brief timer_channel_complementary_output_polarity_config 函数 + * @param[in] timer_periph 参数 + * @param[in] channel 参数 + * @param[in] ocnpolarity 参数 + * @return void + */ void timer_channel_complementary_output_polarity_config(uint32_t timer_periph, uint16_t channel, uint16_t ocnpolarity) { switch(channel){ @@ -1147,6 +1241,13 @@ void timer_channel_complementary_output_polarity_config(uint32_t timer_periph, u \param[out] none \retval none */ +/** + * @brief timer_channel_output_state_config 函数 + * @param[in] timer_periph 参数 + * @param[in] channel 参数 + * @param[in] state 参数 + * @return void + */ void timer_channel_output_state_config(uint32_t timer_periph, uint16_t channel, uint32_t state) { switch(channel){ @@ -1190,6 +1291,13 @@ void timer_channel_output_state_config(uint32_t timer_periph, uint16_t channel, \param[out] none \retval none */ +/** + * @brief timer_channel_complementary_output_state_config 函数 + * @param[in] timer_periph 参数 + * @param[in] channel 参数 + * @param[in] ocnstate 参数 + * @return void + */ void timer_channel_complementary_output_state_config(uint32_t timer_periph, uint16_t channel, uint16_t ocnstate) { switch(channel){ @@ -1248,6 +1356,13 @@ void timer_channel_input_struct_para_init(timer_ic_parameter_struct* icpara) \param[out] none \retval none */ +/** + * @brief timer_input_capture_config 函数 + * @param[in] timer_periph 参数 + * @param[in] channel 参数 + * @param[in] icpara 参数 + * @return void + */ void timer_input_capture_config(uint32_t timer_periph, uint16_t channel, timer_ic_parameter_struct* icpara) { switch(channel){ @@ -1353,6 +1468,13 @@ void timer_input_capture_config(uint32_t timer_periph, uint16_t channel, timer_i \param[out] none \retval none */ +/** + * @brief timer_channel_input_capture_prescaler_config 函数 + * @param[in] timer_periph 参数 + * @param[in] channel 参数 + * @param[in] prescaler 参数 + * @return void + */ void timer_channel_input_capture_prescaler_config(uint32_t timer_periph, uint16_t channel, uint16_t prescaler) { switch(channel){ @@ -1436,6 +1558,13 @@ uint32_t timer_channel_capture_value_register_read(uint32_t timer_periph, uint16 \param[out] none \retval none */ +/** + * @brief timer_input_pwm_capture_config 函数 + * @param[in] timer_periph 参数 + * @param[in] channel 参数 + * @param[in] icpwm 参数 + * @return void + */ void timer_input_pwm_capture_config(uint32_t timer_periph, uint16_t channel, timer_ic_parameter_struct* icpwm) { uint16_t icpolarity = 0x0U; @@ -1570,6 +1699,12 @@ void timer_hall_mode_config(uint32_t timer_periph, uint32_t hallmode) \param[out] none \retval none */ +/** + * @brief timer_input_trigger_source_select 函数 + * @param[in] timer_periph 参数 + * @param[in] intrigger 参数 + * @return void + */ void timer_input_trigger_source_select(uint32_t timer_periph, uint32_t intrigger) { TIMER_SMCFG(timer_periph) &= (~(uint32_t)TIMER_SMCFG_TRGS); @@ -1592,6 +1727,12 @@ void timer_input_trigger_source_select(uint32_t timer_periph, uint32_t intrigger \param[out] none \retval none */ +/** + * @brief timer_master_output_trigger_source_select 函数 + * @param[in] timer_periph 参数 + * @param[in] outrigger 参数 + * @return void + */ void timer_master_output_trigger_source_select(uint32_t timer_periph, uint32_t outrigger) { TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_MMC); @@ -1615,6 +1756,12 @@ void timer_master_output_trigger_source_select(uint32_t timer_periph, uint32_t o \retval none */ +/** + * @brief timer_slave_mode_select 函数 + * @param[in] timer_periph 参数 + * @param[in] slavemode 参数 + * @return void + */ void timer_slave_mode_select(uint32_t timer_periph, uint32_t slavemode) { TIMER_SMCFG(timer_periph) &= (~(uint32_t)TIMER_SMCFG_SMC); @@ -1659,6 +1806,14 @@ void timer_master_slave_mode_config(uint32_t timer_periph, uint32_t masterslave) \param[out] none \retval none */ +/** + * @brief timer_external_trigger_config 函数 + * @param[in] timer_periph 参数 + * @param[in] extprescaler 参数 + * @param[in] extpolarity 参数 + * @param[in] extfilter 参数 + * @return void + */ void timer_external_trigger_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint32_t extfilter) { TIMER_SMCFG(timer_periph) &= (~(uint32_t)(TIMER_SMCFG_ETP | TIMER_SMCFG_ETPSC | TIMER_SMCFG_ETFC)); @@ -1685,6 +1840,14 @@ void timer_external_trigger_config(uint32_t timer_periph, uint32_t extprescaler, \param[out] none \retval none */ +/** + * @brief timer_quadrature_decoder_mode_config 函数 + * @param[in] timer_periph 参数 + * @param[in] decomode 参数 + * @param[in] ic0polarity 参数 + * @param[in] ic1polarity 参数 + * @return void + */ void timer_quadrature_decoder_mode_config(uint32_t timer_periph, uint32_t decomode, uint16_t ic0polarity, uint16_t ic1polarity) { /* configure the quadrature decoder mode */ @@ -1745,6 +1908,14 @@ void timer_internal_trigger_as_external_clock_config(uint32_t timer_periph, uint \param[out] none \retval none */ +/** + * @brief timer_external_trigger_as_external_clock_config 函数 + * @param[in] timer_periph 参数 + * @param[in] extrigger 参数 + * @param[in] extpolarity 参数 + * @param[in] extfilter 参数 + * @return void + */ void timer_external_trigger_as_external_clock_config(uint32_t timer_periph, uint32_t extrigger, uint16_t extpolarity, uint32_t extfilter) { if(TIMER_SMCFG_TRGSEL_CI1FE1 == extrigger){ @@ -1807,6 +1978,14 @@ void timer_external_trigger_as_external_clock_config(uint32_t timer_periph, uint \param[out] none \retval none */ +/** + * @brief timer_external_clock_mode0_config 函数 + * @param[in] timer_periph 参数 + * @param[in] extprescaler 参数 + * @param[in] extpolarity 参数 + * @param[in] extfilter 参数 + * @return void + */ void timer_external_clock_mode0_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint32_t extfilter) { /* configure TIMER external trigger input */ @@ -1834,6 +2013,14 @@ void timer_external_clock_mode0_config(uint32_t timer_periph, uint32_t extpresca \param[out] none \retval none */ +/** + * @brief timer_external_clock_mode1_config 函数 + * @param[in] timer_periph 参数 + * @param[in] extprescaler 参数 + * @param[in] extpolarity 参数 + * @param[in] extfilter 参数 + * @return void + */ void timer_external_clock_mode1_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint32_t extfilter) { /* configure TIMER external trigger input */ @@ -1910,6 +2097,12 @@ void timer_output_value_selection_config(uint32_t timer_periph, uint16_t outsel) \param[out] none \retval none */ +/** + * @brief timer_interrupt_enable 函数 + * @param[in] timer_periph 参数 + * @param[in] interrupt 参数 + * @return void + */ void timer_interrupt_enable(uint32_t timer_periph, uint32_t interrupt) { TIMER_DMAINTEN(timer_periph) |= (uint32_t) interrupt; @@ -1931,6 +2124,12 @@ void timer_interrupt_enable(uint32_t timer_periph, uint32_t interrupt) \param[out] none \retval none */ +/** + * @brief timer_interrupt_disable 函数 + * @param[in] timer_periph 参数 + * @param[in] interrupt 参数 + * @return void + */ void timer_interrupt_disable(uint32_t timer_periph, uint32_t interrupt) { TIMER_DMAINTEN(timer_periph) &= (~(uint32_t)interrupt); @@ -1952,6 +2151,12 @@ void timer_interrupt_disable(uint32_t timer_periph, uint32_t interrupt) \param[out] none \retval FlagStatus: SET or RESET */ +/** + * @brief timer_interrupt_flag_get 函数 + * @param[in] timer_periph 参数 + * @param[in] interrupt 参数 + * @return FlagStatus 返回值 + */ FlagStatus timer_interrupt_flag_get(uint32_t timer_periph, uint32_t interrupt) { uint32_t val; @@ -1981,6 +2186,12 @@ FlagStatus timer_interrupt_flag_get(uint32_t timer_periph, uint32_t interrupt) \param[out] none \retval none */ +/** + * @brief timer_interrupt_flag_clear 函数 + * @param[in] timer_periph 参数 + * @param[in] interrupt 参数 + * @return void + */ void timer_interrupt_flag_clear(uint32_t timer_periph, uint32_t interrupt) { TIMER_INTF(timer_periph) = (~(uint32_t)interrupt); @@ -2006,6 +2217,12 @@ void timer_interrupt_flag_clear(uint32_t timer_periph, uint32_t interrupt) \param[out] none \retval FlagStatus: SET or RESET */ +/** + * @brief timer_flag_get 函数 + * @param[in] timer_periph 参数 + * @param[in] flag 参数 + * @return FlagStatus 返回值 + */ FlagStatus timer_flag_get(uint32_t timer_periph, uint32_t flag) { FlagStatus ret; @@ -2037,6 +2254,12 @@ FlagStatus timer_flag_get(uint32_t timer_periph, uint32_t flag) \param[out] none \retval none */ +/** + * @brief timer_flag_clear 函数 + * @param[in] timer_periph 参数 + * @param[in] flag 参数 + * @return void + */ void timer_flag_clear(uint32_t timer_periph, uint32_t flag) { TIMER_INTF(timer_periph) = (~(uint32_t)flag); diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_usart.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_usart.c index 1beaacb..1246d8e 100644 --- a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_usart.c +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_usart.c @@ -35,8 +35,11 @@ OF SUCH DAMAGE. #include "gd32c10x_usart.h" /* USART register bit offset */ +/** @brief GP_GUAT_OFFSET 宏定义 */ #define GP_GUAT_OFFSET ((uint32_t)8U) /* bit offset of GUAT in USART_GP */ +/** @brief CTL3_SCRTNUM_OFFSET 宏定义 */ #define CTL3_SCRTNUM_OFFSET ((uint32_t)1U) /* bit offset of SCRTNUM in USART_CTL3 */ +/** @brief RT_BL_OFFSET 宏定义 */ #define RT_BL_OFFSET ((uint32_t)24U) /* bit offset of BL in USART_RT */ /*! @@ -261,6 +264,12 @@ void usart_data_first_config(uint32_t usart_periph, uint32_t msbf) \param[out] none \retval none */ +/** + * @brief usart_invert_config 函数 + * @param[in] usart_periph 参数 + * @param[in] invertpara 参数 + * @return void + */ void usart_invert_config(uint32_t usart_periph, usart_invert_enum invertpara) { /* inverted or not the specified signal */ @@ -514,6 +523,14 @@ void usart_synchronous_clock_disable(uint32_t usart_periph) \param[out] none \retval none */ +/** + * @brief usart_synchronous_clock_config 函数 + * @param[in] usart_periph 参数 + * @param[in] clen 参数 + * @param[in] cph 参数 + * @param[in] cpl 参数 + * @return void + */ void usart_synchronous_clock_config(uint32_t usart_periph, uint32_t clen, uint32_t cph, uint32_t cpl) { USART_CTL1(usart_periph) &= ~(USART_CTL1_CLEN | USART_CTL1_CPH | USART_CTL1_CPL); @@ -755,6 +772,12 @@ void usart_hardware_flow_coherence_config(uint32_t usart_periph, uint32_t hcm) \param[out] none \retval FlagStatus: SET or RESET */ +/** + * @brief usart_flag_get 函数 + * @param[in] usart_periph 参数 + * @param[in] flag 参数 + * @return FlagStatus 返回值 + */ FlagStatus usart_flag_get(uint32_t usart_periph, usart_flag_enum flag) { FlagStatus ret; @@ -782,6 +805,12 @@ FlagStatus usart_flag_get(uint32_t usart_periph, usart_flag_enum flag) \param[out] none \retval none */ +/** + * @brief usart_flag_clear 函数 + * @param[in] usart_periph 参数 + * @param[in] flag 参数 + * @return void + */ void usart_flag_clear(uint32_t usart_periph, usart_flag_enum flag) { if(USART_FLAG_EPERR == flag) { @@ -809,6 +838,12 @@ void usart_flag_clear(uint32_t usart_periph, usart_flag_enum flag) \param[out] none \retval none */ +/** + * @brief usart_interrupt_enable 函数 + * @param[in] usart_periph 参数 + * @param[in] interrupt 参数 + * @return void + */ void usart_interrupt_enable(uint32_t usart_periph, usart_interrupt_enum interrupt) { USART_REG_VAL(usart_periph, interrupt) |= BIT(USART_BIT_POS(interrupt)); @@ -832,6 +867,12 @@ void usart_interrupt_enable(uint32_t usart_periph, usart_interrupt_enum interrup \param[out] none \retval none */ +/** + * @brief usart_interrupt_disable 函数 + * @param[in] usart_periph 参数 + * @param[in] interrupt 参数 + * @return void + */ void usart_interrupt_disable(uint32_t usart_periph, usart_interrupt_enum interrupt) { USART_REG_VAL(usart_periph, interrupt) &= ~BIT(USART_BIT_POS(interrupt)); @@ -858,6 +899,12 @@ void usart_interrupt_disable(uint32_t usart_periph, usart_interrupt_enum interru \param[out] none \retval FlagStatus: SET or RESET */ +/** + * @brief usart_interrupt_flag_get 函数 + * @param[in] usart_periph 参数 + * @param[in] int_flag 参数 + * @return FlagStatus 返回值 + */ FlagStatus usart_interrupt_flag_get(uint32_t usart_periph, usart_interrupt_flag_enum int_flag) { uint32_t intenable = 0U, flagstatus = 0U; @@ -889,6 +936,12 @@ FlagStatus usart_interrupt_flag_get(uint32_t usart_periph, usart_interrupt_flag_ \param[out] none \retval none */ +/** + * @brief usart_interrupt_flag_clear 函数 + * @param[in] usart_periph 参数 + * @param[in] int_flag 参数 + * @return void + */ void usart_interrupt_flag_clear(uint32_t usart_periph, usart_interrupt_flag_enum int_flag) { USART_REG_VAL2(usart_periph, int_flag) = ~BIT(USART_BIT_POS2(int_flag)); diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_wwdgt.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_wwdgt.c index 190002b..c761b76 100644 --- a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_wwdgt.c +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_wwdgt.c @@ -81,6 +81,13 @@ void wwdgt_counter_update(uint16_t counter_value) \param[out] none \retval none */ +/** + * @brief wwdgt_config 函数 + * @param[in] counter 参数 + * @param[in] window 参数 + * @param[in] prescaler 参数 + * @return void + */ void wwdgt_config(uint16_t counter, uint16_t window, uint32_t prescaler) { WWDGT_CTL = (uint32_t)(CTL_CNT(counter)); diff --git a/Robot_V2/RTE/Device/GD32C103CB/regions_GD32C103CB.h b/Robot_V2/RTE/Device/GD32C103CB/regions_GD32C103CB.h index 54b2c27..77c12cd 100644 --- a/Robot_V2/RTE/Device/GD32C103CB/regions_GD32C103CB.h +++ b/Robot_V2/RTE/Device/GD32C103CB/regions_GD32C103CB.h @@ -1,3 +1,9 @@ +/** + * @file RTE/Device/GD32C103CB/regions_GD32C103CB.h + * @brief GD32 RTE 外设库或运行时配置源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #ifndef REGIONS_GD32C103CB_H #define REGIONS_GD32C103CB_H diff --git a/Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.c b/Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.c index 9142dca..1409bed 100644 --- a/Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.c +++ b/Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.c @@ -42,6 +42,7 @@ #define __SYS_OSC_CLK (__IRC8M) /* main oscillator frequency */ /* Vector Table base offset */ +/** @brief APP_BASE 宏定义 */ #define APP_BASE ((uint32_t)0x08012000U) /*!< main FLASH base address */ #define VECT_TAB_OFFSET (uint32_t)APP_BASE-FLASH_BASE /* This value must be a multiple of 0x200. */ @@ -62,6 +63,7 @@ /* The following is to prevent Vcore fluctuations caused by frequency switching. It is strongly recommended to include it to avoid issues caused by self-removal. */ +/** @brief RCU_MODIFY_4 宏定义 */ #define RCU_MODIFY_4(__delay) do{ \ volatile uint32_t i, reg; \ if(0 != __delay){ \ @@ -103,49 +105,101 @@ } \ }while(0) +/** @brief SEL_IRC8M 宏定义 */ #define SEL_IRC8M 0x00U +/** @brief SEL_HXTAL 宏定义 */ #define SEL_HXTAL 0x01U +/** @brief SEL_PLL 宏定义 */ #define SEL_PLL 0x02U /* set the system clock frequency and declare the system clock configuration function */ #ifdef __SYSTEM_CLOCK_IRC8M uint32_t SystemCoreClock = __SYSTEM_CLOCK_IRC8M; +/** + * @brief system_clock_8m_irc8m 函数 + * @return void + */ static void system_clock_8m_irc8m(void); #elif defined (__SYSTEM_CLOCK_48M_PLL_IRC8M) uint32_t SystemCoreClock = __SYSTEM_CLOCK_48M_PLL_IRC8M; +/** + * @brief system_clock_48m_irc8m 函数 + * @return void + */ static void system_clock_48m_irc8m(void); #elif defined (__SYSTEM_CLOCK_72M_PLL_IRC8M) uint32_t SystemCoreClock = __SYSTEM_CLOCK_72M_PLL_IRC8M; +/** + * @brief system_clock_72m_irc8m 函数 + * @return void + */ static void system_clock_72m_irc8m(void); #elif defined (__SYSTEM_CLOCK_108M_PLL_IRC8M) uint32_t SystemCoreClock = __SYSTEM_CLOCK_108M_PLL_IRC8M; +/** + * @brief system_clock_108m_irc8m 函数 + * @return void + */ static void system_clock_108m_irc8m(void); #elif defined (__SYSTEM_CLOCK_120M_PLL_IRC8M) uint32_t SystemCoreClock = __SYSTEM_CLOCK_120M_PLL_IRC8M; +/** + * @brief system_clock_120m_irc8m 函数 + * @return void + */ static void system_clock_120m_irc8m(void); #elif defined (__SYSTEM_CLOCK_HXTAL) uint32_t SystemCoreClock = __SYSTEM_CLOCK_HXTAL; +/** + * @brief system_clock_hxtal 函数 + * @return void + */ static void system_clock_hxtal(void); #elif defined (__SYSTEM_CLOCK_48M_PLL_HXTAL) uint32_t SystemCoreClock = __SYSTEM_CLOCK_48M_PLL_HXTAL; +/** + * @brief system_clock_48m_hxtal 函数 + * @return void + */ static void system_clock_48m_hxtal(void); #elif defined (__SYSTEM_CLOCK_72M_PLL_HXTAL) uint32_t SystemCoreClock = __SYSTEM_CLOCK_72M_PLL_HXTAL; +/** + * @brief system_clock_72m_hxtal 函数 + * @return void + */ static void system_clock_72m_hxtal(void); #elif defined (__SYSTEM_CLOCK_108M_PLL_HXTAL) uint32_t SystemCoreClock = __SYSTEM_CLOCK_108M_PLL_HXTAL; +/** + * @brief system_clock_108m_hxtal 函数 + * @return void + */ static void system_clock_108m_hxtal(void); #elif defined (__SYSTEM_CLOCK_120M_PLL_HXTAL) uint32_t SystemCoreClock = __SYSTEM_CLOCK_120M_PLL_HXTAL; +/** + * @brief system_clock_120m_hxtal 函数 + * @return void + */ static void system_clock_120m_hxtal(void); #endif /* __SYSTEM_CLOCK_IRC8M */ /* configure the system clock */ +/** + * @brief system_clock_config 函数 + * @return void + */ static void system_clock_config(void); /* software delay to prevent the impact of Vcore fluctuations. It is strongly recommended to include it to avoid issues caused by self-removal. */ +/** + * @brief _soft_delay_ 函数 + * @param[in] time 参数 + * @return void + */ static void _soft_delay_(uint32_t time) { __IO uint32_t i; diff --git a/Robot_V2/RTE/_Debug_GD32C103CB/RTE_Components.h b/Robot_V2/RTE/_Debug_GD32C103CB/RTE_Components.h index 4d6d49e..d6a730b 100644 --- a/Robot_V2/RTE/_Debug_GD32C103CB/RTE_Components.h +++ b/Robot_V2/RTE/_Debug_GD32C103CB/RTE_Components.h @@ -1,3 +1,9 @@ +/** + * @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 @@ -13,43 +19,62 @@ /* * 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 宏定义 */ #define RTE_DEVICE_STDPERIPHERALS_ADC /* GigaDevice::Device:GD32C10x_StdPeripherals:BKP@1.0.0 */ +/** @brief RTE_DEVICE_STDPERIPHERALS_BKP 宏定义 */ #define RTE_DEVICE_STDPERIPHERALS_BKP /* GigaDevice::Device:GD32C10x_StdPeripherals:CAN@1.0.0 */ +/** @brief RTE_DEVICE_STDPERIPHERALS_CAN 宏定义 */ #define RTE_DEVICE_STDPERIPHERALS_CAN /* GigaDevice::Device:GD32C10x_StdPeripherals:CRC@1.0.0 */ +/** @brief RTE_DEVICE_STDPERIPHERALS_CRC 宏定义 */ #define RTE_DEVICE_STDPERIPHERALS_CRC /* GigaDevice::Device:GD32C10x_StdPeripherals:DBG@1.0.0 */ +/** @brief RTE_DEVICE_STDPERIPHERALS_DBG 宏定义 */ #define RTE_DEVICE_STDPERIPHERALS_DBG /* GigaDevice::Device:GD32C10x_StdPeripherals:DMA@1.0.0 */ +/** @brief RTE_DEVICE_STDPERIPHERALS_DMA 宏定义 */ #define RTE_DEVICE_STDPERIPHERALS_DMA /* GigaDevice::Device:GD32C10x_StdPeripherals:EXTI@1.0.0 */ +/** @brief RTE_DEVICE_STDPERIPHERALS_EXTI 宏定义 */ #define RTE_DEVICE_STDPERIPHERALS_EXTI /* GigaDevice::Device:GD32C10x_StdPeripherals:FMC@1.0.0 */ +/** @brief RTE_DEVICE_STDPERIPHERALS_FMC 宏定义 */ #define RTE_DEVICE_STDPERIPHERALS_FMC /* GigaDevice::Device:GD32C10x_StdPeripherals:FWDGT@1.0.0 */ +/** @brief RTE_DEVICE_STDPERIPHERALS_FWDGT 宏定义 */ #define RTE_DEVICE_STDPERIPHERALS_FWDGT /* GigaDevice::Device:GD32C10x_StdPeripherals:GPIO@1.0.0 */ +/** @brief RTE_DEVICE_STDPERIPHERALS_GPIO 宏定义 */ #define RTE_DEVICE_STDPERIPHERALS_GPIO /* GigaDevice::Device:GD32C10x_StdPeripherals:MISC@1.0.0 */ +/** @brief RTE_DEVICE_STDPERIPHERALS_MISC 宏定义 */ #define RTE_DEVICE_STDPERIPHERALS_MISC /* GigaDevice::Device:GD32C10x_StdPeripherals:PMU@1.0.0 */ +/** @brief RTE_DEVICE_STDPERIPHERALS_PMU 宏定义 */ #define RTE_DEVICE_STDPERIPHERALS_PMU /* GigaDevice::Device:GD32C10x_StdPeripherals:RCU@1.0.0 */ +/** @brief RTE_DEVICE_STDPERIPHERALS_RCU 宏定义 */ #define RTE_DEVICE_STDPERIPHERALS_RCU /* GigaDevice::Device:GD32C10x_StdPeripherals:RTC@1.0.0 */ +/** @brief RTE_DEVICE_STDPERIPHERALS_RTC 宏定义 */ #define RTE_DEVICE_STDPERIPHERALS_RTC /* GigaDevice::Device:GD32C10x_StdPeripherals:SPI_I2S@1.0.0 */ +/** @brief RTE_DEVICE_STDPERIPHERALS_SPI 宏定义 */ #define RTE_DEVICE_STDPERIPHERALS_SPI /* GigaDevice::Device:GD32C10x_StdPeripherals:TIMER@1.0.0 */ +/** @brief RTE_DEVICE_STDPERIPHERALS_TIMER 宏定义 */ #define RTE_DEVICE_STDPERIPHERALS_TIMER /* GigaDevice::Device:GD32C10x_StdPeripherals:USART@1.0.0 */ +/** @brief RTE_DEVICE_STDPERIPHERALS_USART 宏定义 */ #define RTE_DEVICE_STDPERIPHERALS_USART /* GigaDevice::Device:GD32C10x_StdPeripherals:WWDGT@1.0.0 */ +/** @brief RTE_DEVICE_STDPERIPHERALS_WWDGT 宏定义 */ #define RTE_DEVICE_STDPERIPHERALS_WWDGT diff --git a/Robot_V2/device/ADC.cpp b/Robot_V2/device/ADC.cpp index 0528a75..74044af 100644 --- a/Robot_V2/device/ADC.cpp +++ b/Robot_V2/device/ADC.cpp @@ -1,3 +1,9 @@ +/** + * @file device/ADC.cpp + * @brief 底层设备驱动与外设封装源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #include "adc.h" #include "Can.h" #include "FOC.h" @@ -10,9 +16,13 @@ #include #include +/** @brief ADC_SCALE 常量定义 */ constexpr float ADC_SCALE = 3.3f / 4096.0f; +/** @brief TEMP_FACTOR 常量定义 */ constexpr float TEMP_FACTOR = 1000.0f / 4.3f; +/** @brief VCC_FACTOR 常量定义 */ constexpr float VCC_FACTOR = 11.0f; +/** @brief CURRENT_FACTOR 常量定义 */ constexpr float CURRENT_FACTOR = 1.0f / 50.0f * 100.0f; // 50倍放大,100倍电流采样电阻, 单位mA extern CAN_transmiter CAN0_transmiter; @@ -22,6 +32,11 @@ u16 adc_value[3] = {0}; // regular DMA: MCU温度 / DRV温度 / VBUS static volatile u16 adc_current_value[3] = {0}; // injected 同步采样: U / V / W static volatile u8 adc_current_frame_ready = 0; +/** + * @brief 将电流 ADC 原始值换算为毫安值 + * @param[in] raw_adc 参数 + * @return float 返回值 + */ static inline float current_adc_to_ma(u16 raw_adc) { return (raw_adc * ADC_SCALE + CURRENT_OFFSET) * CURRENT_FACTOR; } @@ -155,12 +170,7 @@ u8 sampler::init() { * 温度值,单位为摄氏度,范围应在-40到145之间,如果读取失败则返回0.0f */ float sampler::get_mcu_temp() { - tempora_sample = medium_filter(mcu_temp_samples, ADC_FILTER_SIZE); - // 检查温度读数是否在有效范围内 - if (tempora_sample < MIN_TEMP or tempora_sample > MAX_TEMP) { - return ERROR_ADC_VAL; - } - return tempora_sample; + return cached_mcu_temp; } /** @@ -171,12 +181,7 @@ float sampler::get_mcu_temp() { * 如果计算结果超出有效范围(-40到255摄氏度),则重新采样计算。 */ float sampler::get_drv_temp() { - tempora_sample = medium_filter(drv_temp_samples, ADC_FILTER_SIZE); - // 检查温度读数是否在有效范围内 - if (tempora_sample < MIN_TEMP || tempora_sample > MAX_TEMP) { - return ERROR_ADC_VAL; - } - return tempora_sample; + return cached_drv_temp; } /** @@ -221,13 +226,7 @@ float sampler::get_current(char type) { * 如果计算结果超出有效范围(-40到255伏特),则重新采样计算。 */ float sampler::get_vbus_voltage() { - tempora_sample = medium_filter(vbus_samples, ADC_FILTER_SIZE); - // 检查电压读数是否在有效范围内 - const u8 mid = ADC_FILTER_SIZE / 2; - if (vbus_samples[mid] > MAX_VCC or vbus_samples[mid] < MIN_VCC) { - return ERROR_ADC_VAL; - } - return tempora_sample; + return cached_vbus; } /** @@ -237,21 +236,39 @@ float sampler::get_vbus_voltage() { * 如果计算结果超出有效范围(-40到255摄氏度),则重新采样计算。 */ void sampler::update_mcu_temp() { - memmove(mcu_temp_samples, mcu_temp_samples + 1, - (ADC_FILTER_SIZE - 1) * sizeof(float)); - mcu_temp_samples[ADC_FILTER_SIZE - 1] = + // 环形缓冲区写入,替代 memmove + mcu_temp_samples[mcu_temp_head] = (1.43f - adc_value[0] * ADC_SCALE) * TEMP_FACTOR + 35.0f; + mcu_temp_head++; + if (mcu_temp_head >= ADC_FILTER_SIZE) mcu_temp_head = 0; + + // 更新缓存:中值滤波 + tempora_sample = medium_filter(mcu_temp_samples, ADC_FILTER_SIZE); + if (tempora_sample < MIN_TEMP || tempora_sample > MAX_TEMP) { + cached_mcu_temp = ERROR_ADC_VAL; + } else { + cached_mcu_temp = tempora_sample; + } } /** * @brief 更新MCU温度 */ void sampler::update_drv_temp() { - memmove(drv_temp_samples, drv_temp_samples + 1, - (ADC_FILTER_SIZE - 1) * sizeof(float)); + // 环形缓冲区写入,替代 memmove float R_now = (float)adc_value[1] / (4096 - (float)adc_value[1]) * 4700; - drv_temp_samples[ADC_FILTER_SIZE - 1] = + drv_temp_samples[drv_temp_head] = 1.0f / (0.00335f + 0.00025f * log(R_now / 10000.0f)) - 273.15f; + drv_temp_head++; + if (drv_temp_head >= ADC_FILTER_SIZE) drv_temp_head = 0; + + // 更新缓存:中值滤波 + tempora_sample = medium_filter(drv_temp_samples, ADC_FILTER_SIZE); + if (tempora_sample < MIN_TEMP || tempora_sample > MAX_TEMP) { + cached_drv_temp = ERROR_ADC_VAL; + } else { + cached_drv_temp = tempora_sample; + } } /** @@ -278,10 +295,25 @@ void sampler::update_current() { * @brief 更新供电电压 */ void sampler::update_vbus_voltage() { - memmove(vbus_samples, vbus_samples + 1, (ADC_FILTER_SIZE - 1) * sizeof(float)); - vbus_samples[ADC_FILTER_SIZE - 1] = adc_value[2] * ADC_SCALE * VCC_FACTOR; + // 环形缓冲区写入,替代 memmove + vbus_samples[temp_vbus_head] = adc_value[2] * ADC_SCALE * VCC_FACTOR; + temp_vbus_head++; + if (temp_vbus_head >= ADC_FILTER_SIZE) temp_vbus_head = 0; + + // 更新缓存:中值滤波 + 范围检查 + tempora_sample = medium_filter(vbus_samples, ADC_FILTER_SIZE); + const u8 mid = ADC_FILTER_SIZE / 2; + if (vbus_samples[mid] > MAX_VCC || vbus_samples[mid] < MIN_VCC) { + cached_vbus = ERROR_ADC_VAL; + } else { + cached_vbus = tempora_sample; + } } +/** + * @brief ADC0_1_IRQHandler 中断处理函数 + * @return void + */ 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 时刻 */ diff --git a/Robot_V2/device/Can.cpp b/Robot_V2/device/Can.cpp index 5a89287..fdd41de 100644 --- a/Robot_V2/device/Can.cpp +++ b/Robot_V2/device/Can.cpp @@ -1,3 +1,9 @@ +/** + * @file device/Can.cpp + * @brief 底层设备驱动与外设封装源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #include "Can.h" #include "FOC.h" #include "Filter.h" @@ -20,11 +26,14 @@ // CAN 调试宏定义 #if CAN_DEBUG +/** @brief CAN_DEBUG_PRINT 宏定义 */ #define CAN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) #else +/** @brief CAN_DEBUG_PRINT 宏定义 */ #define CAN_DEBUG_PRINT(fmt, ...) ((void)0) #endif +/** @brief CANX 常量定义 */ constexpr u16 CANX = CAN0; extern FOC_Controller FOC; extern sampler sampler; @@ -43,7 +52,9 @@ static volatile bool can_rx_dma_busy = false; static can_receive_message_struct can_rx_dma_message; // CAN接收/发送队列结构 +/** @brief CAN_RX_QUEUE_SIZE 宏定义 */ #define CAN_RX_QUEUE_SIZE 32 +/** @brief CAN_TX_QUEUE_SIZE 宏定义 */ #define CAN_TX_QUEUE_SIZE 32 typedef struct { @@ -233,6 +244,10 @@ bool CAN_transmiter::dequeue_rx_message(can_receive_message_struct &message) { // 静默模式相关函数实现 // 使用 systick 获取系统时间(ms) +/** + * @brief 获取系统毫秒计数 + * @return extern u32 返回值 + */ extern u32 get_systick_ms(void); /*! @@ -523,6 +538,10 @@ void canfd_loopback_test(void) { uint8_t transmit_mailbox = 0; std::mt19937 gen; + /** + * @brief dis 函数 + * @return std::uniform_int_distribution 返回值 + */ std::uniform_int_distribution dis(0, 255); can_struct_para_init(CAN_FD_FRAME_STRUCT, &transmit_message); @@ -581,7 +600,17 @@ void can_loopback_test(void) { 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 返回值 + */ std::uniform_int_distribution dis(0, 0xff); can_struct_para_init(CAN_TX_MESSAGE_STRUCT, &transmit_message); @@ -671,19 +700,38 @@ u8 CAN_transmiter::init() { return 0; } +/** + * @brief CAN_EnterCritical 函数 + * @return uint32_t 返回值 + */ static uint32_t CAN_EnterCritical(void) { uint32_t primask = __get_PRIMASK(); __disable_irq(); return primask; } +/** + * @brief CAN_ExitCritical 函数 + * @param[in] primask 参数 + * @return void + */ static void CAN_ExitCritical(uint32_t primask) { __set_PRIMASK(primask); } +/** + * @brief CANFD_DlcToLength 函数 + * @param[in] dlc 参数 + * @return u8 返回值 + */ static u8 CANFD_DlcToLength(u8 dlc) { return (dlc <= 8U) ? dlc : ((dlc <= 15U) ? CANFD_DLC_LENGTH_TABLE[dlc - 9U] : 0U); } +/** + * @brief CANFD_NormalizeLength 函数 + * @param[in] length 参数 + * @return u8 返回值 + */ static u8 CANFD_NormalizeLength(u8 length) { if (length <= 8U) return length; @@ -695,8 +743,18 @@ static u8 CANFD_NormalizeLength(u8 length) { return 0U; } +/** + * @brief CANFD_WordCount 函数 + * @param[in] length 参数 + * @return u8 返回值 + */ static u8 CANFD_WordCount(u8 length) { return (length + 3U) / 4U; } +/** + * @brief CAN_RX_QueuePushFromIsr 函数 + * @param[in] message 参数 + * @return void + */ static void CAN_RX_QueuePushFromIsr(const can_receive_message_struct &message) { if (rx_queue_count < CAN_RX_QUEUE_SIZE) { rx_queue[rx_queue_tail].id = message.rx_efid; @@ -716,16 +774,29 @@ static void CAN_RX_QueuePushFromIsr(const can_receive_message_struct &message) { static void CAN_RX_ReleaseFifo0(void) { CAN_RFIFO0(CAN0) |= CAN_RFIFO0_RFD0; } +/** + * @brief CAN_RX_Fifo0PendingCount 函数 + * @return u8 返回值 + */ static u8 CAN_RX_Fifo0PendingCount(void) { return can_receive_message_length_get(CAN0, CAN_FIFO0); } +/** + * @brief CAN_TX_HasEmptyMailbox 函数 + * @return bool 返回值 + */ static bool CAN_TX_HasEmptyMailbox(void) { return (can_flag_get(CAN0, CAN_FLAG_TME0) != RESET) || (can_flag_get(CAN0, CAN_FLAG_TME1) != RESET) || (can_flag_get(CAN0, CAN_FLAG_TME2) != RESET); } +/** + * @brief CAN_RX_ReadMetadata 函数 + * @param[in] message 参数 + * @return void + */ static void CAN_RX_ReadMetadata(can_receive_message_struct *message) { uint8_t dlc; uint32_t rfifomi = CAN_RFIFOMI(CAN0, CAN_FIFO0); @@ -752,6 +823,11 @@ static void CAN_RX_ReadMetadata(can_receive_message_struct *message) { } } +/** + * @brief CAN_RX_StartPayloadDma 函数 + * @param[in] metadata 参数 + * @return void + */ static void CAN_RX_StartPayloadDma(const can_receive_message_struct &metadata) { can_rx_dma_message = metadata; if (can_rx_dma_message.rx_dlen > 64) { @@ -775,6 +851,10 @@ static void CAN_RX_StartPayloadDma(const can_receive_message_struct &metadata) { dma_channel_enable(DMA0, DMA_CH4); } +/** + * @brief CAN_RX_PumpFifo0 函数 + * @return void + */ static void CAN_RX_PumpFifo0(void) { while (!can_rx_dma_busy) { if (CAN_RX_Fifo0PendingCount() == 0U) { @@ -794,6 +874,11 @@ static void CAN_RX_PumpFifo0(void) { } } +/** + * @brief CAN_RX_QueuePop 函数 + * @param[in] item 参数 + * @return u8 返回值 + */ static u8 CAN_RX_QueuePop(can_rx_queue_item_t *item) { u8 popped = 0U; uint32_t primask = CAN_EnterCritical(); @@ -810,6 +895,11 @@ static u8 CAN_RX_QueuePop(can_rx_queue_item_t *item) { return popped; } +/** + * @brief CAN_TX_QueuePush 函数 + * @param[in] message 参数 + * @return u8 返回值 + */ static u8 CAN_TX_QueuePush(const can_trasnmit_message_struct &message) { u8 queued = 0U; uint32_t primask = CAN_EnterCritical(); @@ -831,6 +921,11 @@ static u8 CAN_TX_QueuePush(const can_trasnmit_message_struct &message) { return 0U; } +/** + * @brief CAN_TX_QueuePeek 函数 + * @param[in] message 参数 + * @return u8 返回值 + */ static u8 CAN_TX_QueuePeek(can_trasnmit_message_struct *message) { u8 has_message = 0U; uint32_t primask = CAN_EnterCritical(); @@ -842,6 +937,11 @@ static u8 CAN_TX_QueuePeek(can_trasnmit_message_struct *message) { return has_message; } +/** + * @brief CAN_TX_QueuePop 函数 + * @param[in] message 参数 + * @return u8 返回值 + */ static u8 CAN_TX_QueuePop(can_trasnmit_message_struct *message) { u8 popped = 0U; uint32_t primask = CAN_EnterCritical(); @@ -856,6 +956,10 @@ static u8 CAN_TX_QueuePop(can_trasnmit_message_struct *message) { return popped; } +/** + * @brief CAN_TX_DisableTmeIfQueueEmpty 函数 + * @return void + */ static void CAN_TX_DisableTmeIfQueueEmpty(void) { uint32_t primask = CAN_EnterCritical(); if (tx_queue_count == 0U) { @@ -864,6 +968,10 @@ static void CAN_TX_DisableTmeIfQueueEmpty(void) { CAN_ExitCritical(primask); } +/** + * @brief CAN_TX_ServiceQueue 函数 + * @return void + */ static void CAN_TX_ServiceQueue(void) { can_trasnmit_message_struct queued_message; while (CAN_TX_HasEmptyMailbox()) { diff --git a/Robot_V2/device/Can.h b/Robot_V2/device/Can.h index 6f88c35..47c0268 100644 --- a/Robot_V2/device/Can.h +++ b/Robot_V2/device/Can.h @@ -1,3 +1,9 @@ +/** + * @file device/Can.h + * @brief 底层设备驱动与外设封装源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #ifndef _CAN_H #define _CAN_H @@ -11,18 +17,35 @@ extern "C" { #include "config.h" // 定义一个联合体类型用于 float 和 byte 数组之间的转换 +/** + * @brief 匿名联合体 联合体定义 + */ typedef union { float f; u8 b[4]; } float_union_t; // 添加辅助函数用于将 u16 类型数据打包到 u8 数组中 +/** + * @brief pack_u16_to_bytes 函数 + * @param[in] buffer 参数 + * @param[in] offset 参数 + * @param[in] value 参数 + * @return void + */ static inline void pack_u16_to_bytes(u8 *buffer, u16 offset, u16 value) { buffer[offset] = (u8)(value & 0xFF); buffer[offset + 1] = (u8)((value >> 8) & 0xFF); } // 添加辅助函数用于将 float 类型数据打包到 u8 数组中 +/** + * @brief pack_float_to_bytes 函数 + * @param[in] buffer 参数 + * @param[in] offset 参数 + * @param[in] float_union 参数 + * @return void + */ static inline void pack_float_to_bytes(u8 *buffer, u16 offset, float_union_t &float_union) { buffer[offset] = float_union.b[0]; @@ -32,18 +55,36 @@ static inline void pack_float_to_bytes(u8 *buffer, u16 offset, } // 添加辅助函数用于从 u8 数组中解包 short 类型数据 +/** + * @brief unpack_bytes_to_short 函数 + * @param[in] buffer 参数 + * @param[in] offset 参数 + * @return short 返回值 + */ static inline short unpack_bytes_to_short(u8 *buffer, u16 offset) { short value = (short)(buffer[offset] | (buffer[offset + 1] << 8)); return value; } // 添加辅助函数用于从 u8 数组中解包 u16 类型数据 +/** + * @brief unpack_bytes_to_u16 函数 + * @param[in] buffer 参数 + * @param[in] offset 参数 + * @return u16 返回值 + */ static inline u16 unpack_bytes_to_u16(u8 *buffer, u16 offset) { u16 value = (u16)(buffer[offset] | (buffer[offset + 1] << 8)); return value; } // 添加辅助函数用于从 u8 数组中解包 float 类型数据 +/** + * @brief unpack_bytes_to_float 函数 + * @param[in] buffer 参数 + * @param[in] offset 参数 + * @return float_union_t 返回值 + */ static inline float_union_t unpack_bytes_to_float(u8 *buffer, u16 offset) { float_union_t float_union; float_union.b[0] = buffer[offset]; @@ -53,17 +94,61 @@ static inline float_union_t unpack_bytes_to_float(u8 *buffer, u16 offset) { return float_union; } +/** + * @brief 初始化 CAN 引脚 + * @return u8 返回值 + */ u8 can_gpio_init(void); // CAN 引脚初始化 +/** + * @brief 配置 CAN 外设 + * @return void + */ void can_config(void); // CAN 初始化 +/** + * @brief 配置 CAN FD 外设 + * @return void + */ void canfd_config(void); // CANFD 初始化 +/** + * @brief 初始化 CAN DMA 通道 + * @return void + */ void can_dma_init(void); // CAN DMA 初始化 +/** + * @brief CAN0 发送中断处理函数 + * @return void + */ void CAN0_TX_IRQHandler(void); // CAN 发送中断处理函数 +/** + * @brief CAN0 接收中断处理函数 + * @return void + */ void CAN0_RX0_IRQHandler(void); // CAN 接收中断处理函数 +/** + * @brief DMA0 通道 4 中断处理函数 + * @return void + */ void DMA0_Channel4_IRQHandler(void); // DMA 通道 4 中断处理函数 (CAN 接收) +/** + * @brief DMA0 通道 5 中断处理函数 + * @return void + */ void DMA0_Channel5_IRQHandler(void); // DMA 通道 5 中断处理函数 (CAN 发送) +/** + * @brief jumpToBOOT 函数 + * @return void + */ void jumpToBOOT(); +/** + * @brief can_loopback_init 函数 + * @return void + */ void can_loopback_init(void); +/** + * @brief can_loopback_test 函数 + * @return void + */ void can_loopback_test(void); /*! @@ -114,21 +199,64 @@ class CAN_transmiter { volatile uint8_t rx_buffer_head = 0; volatile uint8_t rx_buffer_tail = 0; + /** + * @brief 更新对象内部状态或采样数据 + * @return void + */ void update(); // 更新数据 + /** + * @brief CAN_Receive 函数 + * @return u8 返回值 + */ u8 CAN_Receive(); // CAN 接收 + /** + * @brief CANFD_Receive 函数 + * @return u8 返回值 + */ u8 CANFD_Receive(); // CANFD 接收 + /** + * @brief is_rx_buffer_full 函数 + * @return bool 返回值 + */ bool is_rx_buffer_full(); + /** + * @brief is_rx_buffer_empty 函数 + * @return bool 返回值 + */ bool is_rx_buffer_empty(); + /** + * @brief dequeue_rx_message 函数 + * @param[in] message 参数 + * @return bool 返回值 + */ bool dequeue_rx_message(can_receive_message_struct& message); + /** + * @brief check_silent_mode 函数 + * @return void + */ void check_silent_mode(); // 检查静默模式是否结束 public: // 节点 ID 相关辅助函数 (使用高 16 位存储节点 ID) + /** + * @brief build_can_id 函数 + * @param[in] base_id 参数 + * @return u32 返回值 + */ u32 build_can_id(u32 base_id); // 根据节点 ID 构建 CAN ID,格式:[节点 ID(16 位)][基础 ID(16 位)] + /** + * @brief is_message_for_me 函数 + * @param[in] received_id 参数 + * @return bool 返回值 + */ bool is_message_for_me(u32 received_id); // 判断消息是否发给本节点 public: // 添加构造函数声明 + /** + * @brief 初始化对象或模块 + * @return u8 返回值 + */ u8 init(void); can_receive_message_struct receive_message; // 接收消息结构体 @@ -138,23 +266,88 @@ class CAN_transmiter { bool MagStatus = 0; // 磁状态码 bool ThermalStatus = 0; // 热能状态码 + /** + * @brief communication_check 函数 + * @return void + */ void communication_check(); // 通信检查 + /** + * @brief CAN_Sleep 函数 + * @return u8 返回值 + */ u8 CAN_Sleep(); // CAN 进入睡眠 + /** + * @brief CAN_Wakeup 函数 + * @return u8 返回值 + */ u8 CAN_Wakeup(); // CAN 唤醒 + /** + * @brief CAN_AsyncSend 函数 + * @param[in] ID 参数 + * @param[in] length 参数 + * @param[in] data 参数 + * @return u8 返回值 + */ u8 CAN_AsyncSend(u32 ID, u8 length, u8 *data); // CAN 异步发送 (使用 DMA) + /** + * @brief CANFD_AsyncSend 函数 + * @param[in] ID 参数 + * @param[in] length 参数 + * @param[in] data 参数 + * @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 + */ void enter_silent_mode(); // 进入静默模式(停发 10 秒) + /** + * @brief is_in_silent_mode 函数 + * @return bool 返回值 + */ bool is_in_silent_mode(); // 检查是否在静默模式中 // 节点 ID 管理接口 + /** + * @brief 获取 get_node_id 对应的数据或状态 + * @return u16 返回值 + */ u16 get_node_id(); // 获取当前节点 ID + /** + * @brief 设置 set_node_id 对应的参数或状态 + * @param[in] new_id 参数 + * @return void + */ void set_node_id(u16 new_id); // 设置节点 ID + /** + * @brief load_node_id_from_flash 函数 + * @return u8 返回值 + */ u8 load_node_id_from_flash(); // 从 Flash 加载节点 ID + /** + * @brief save_node_id_to_flash 函数 + * @param[in] new_id 参数 + * @return u8 返回值 + */ u8 save_node_id_to_flash(u16 new_id); // 保存节点 ID 到 Flash // 中断处理函数需要访问的公共接口 + /** + * @brief enqueue_rx_message_from_isr 函数 + * @param[in] message 参数 + * @return void + */ void enqueue_rx_message_from_isr(const can_receive_message_struct& message) { if (!is_rx_buffer_full()) { rx_message_buffer[rx_buffer_head] = message; diff --git a/Robot_V2/device/Timer.cpp b/Robot_V2/device/Timer.cpp index 1366d24..ae7ec4c 100644 --- a/Robot_V2/device/Timer.cpp +++ b/Robot_V2/device/Timer.cpp @@ -1,3 +1,9 @@ +/** + * @file device/Timer.cpp + * @brief 底层设备驱动与外设封装源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #include "Timer.h" #include "Can.h" #include "FOC.h" diff --git a/Robot_V2/device/Timer.h b/Robot_V2/device/Timer.h index 248b317..ac56b20 100644 --- a/Robot_V2/device/Timer.h +++ b/Robot_V2/device/Timer.h @@ -1,3 +1,9 @@ +/** + * @file device/Timer.h + * @brief 底层设备驱动与外设封装源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #ifndef _TIMER_H #define _TIMER_H @@ -7,13 +13,46 @@ extern "C" { #include +/** + * @brief User_timer_init 函数 + * @return void + */ void User_timer_init(void); +/** + * @brief Set_Pwm 函数 + * @param[in] channel 参数 + * @param[in] duty_cycle 参数 + * @return void + */ void Set_Pwm(u16 channel, float duty_cycle); +/** + * @brief Set_3Pwm 函数 + * @param[in] duty_cycle0 参数 + * @param[in] duty_cycle1 参数 + * @param[in] duty_cycle2 参数 + * @return void + */ void Set_3Pwm(float duty_cycle0, float duty_cycle1,float duty_cycle2); +/** + * @brief TIMER2 中断处理函数 + * @return void + */ void TIMER2_IRQHandler(void); +/** + * @brief timer1_pwm_config 函数 + * @return void + */ void timer1_pwm_config(void); +/** + * @brief timer1_gpio_config 函数 + * @return void + */ void timer1_gpio_config(void); +/** + * @brief TIMER1 中断处理函数 + * @return void + */ void TIMER1_IRQHandler(void); // 添加TIMER1中断处理函数声明 #ifdef __cplusplus diff --git a/Robot_V2/device/adc.h b/Robot_V2/device/adc.h index b69af96..7581fd0 100644 --- a/Robot_V2/device/adc.h +++ b/Robot_V2/device/adc.h @@ -1,3 +1,9 @@ +/** + * @file device/adc.h + * @brief 底层设备驱动与外设封装源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #ifndef _ADC_H #define _ADC_H @@ -7,6 +13,9 @@ extern "C" { #include "config.h" +/** + * @brief sampler 类或结构体 + */ class sampler { private: float vbus_samples[ADC_FILTER_SIZE]; @@ -16,22 +25,69 @@ class sampler { float mcu_temp_samples[ADC_FILTER_SIZE]; float drv_temp_samples[ADC_FILTER_SIZE]; u8 current_sample_head; + u8 temp_vbus_head; // 环形缓冲区 head + u8 mcu_temp_head; + u8 drv_temp_head; float tempora_sample; + float cached_mcu_temp; // getter 缓存 + float cached_drv_temp; + float cached_vbus; public: + /** + * @brief 初始化对象或模块 + * @return u8 返回值 + */ u8 init(void); + /** + * @brief 更新 mcu_temp 相关状态 + * @return void + */ void update_mcu_temp(void); + /** + * @brief 更新 drv_temp 相关状态 + * @return void + */ void update_drv_temp(void); + /** + * @brief 更新 vbus_voltage 相关状态 + * @return void + */ void update_vbus_voltage(void); + /** + * @brief 更新 current 相关状态 + * @return void + */ void update_current(void); + /** + * @brief 获取 get_mcu_temp 对应的数据或状态 + * @return float 返回值 + */ float get_mcu_temp(void); + /** + * @brief 获取 get_drv_temp 对应的数据或状态 + * @return float 返回值 + */ float get_drv_temp(void); + /** + * @brief 获取 get_vbus_voltage 对应的数据或状态 + * @return float 返回值 + */ float get_vbus_voltage(void); + /** + * @brief 获取 get_current 对应的数据或状态 + * @param[in] char 参数 + * @return float 返回值 + */ float get_current(char); }; +/** + * @brief ADC0_1_IRQHandler 中断处理函数 + * @return void + */ void ADC0_1_IRQHandler(void); #ifdef __cplusplus diff --git a/Robot_V2/device/ang_sensor.cpp b/Robot_V2/device/ang_sensor.cpp index 0bbb233..b37917f 100644 --- a/Robot_V2/device/ang_sensor.cpp +++ b/Robot_V2/device/ang_sensor.cpp @@ -1,3 +1,9 @@ +/** + * @file device/ang_sensor.cpp + * @brief 底层设备驱动与外设封装源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #include "ang_sensor.h" #include "Can.h" #include "Filter.h" @@ -12,14 +18,20 @@ // ANG_SENS 调试宏定义 #if ANG_SENS_DEBUG +/** @brief ANG_SENS_DEBUG_PRINT 宏定义 */ #define ANG_SENS_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) #else +/** @brief ANG_SENS_DEBUG_PRINT 宏定义 */ #define ANG_SENS_DEBUG_PRINT(fmt, ...) ((void)0) #endif +/** @brief ANG_SPI_CS_ENABLE 宏定义 */ #define ANG_SPI_CS_ENABLE() gpio_bit_reset(GPIOA, GPIO_PIN_15) +/** @brief ANG_SPI_CS_DISABLE 宏定义 */ #define ANG_SPI_CS_DISABLE() gpio_bit_set(GPIOA, GPIO_PIN_15) +/** @brief DRV_SPI_CS_ENABLE 宏定义 */ #define DRV_SPI_CS_ENABLE() gpio_bit_reset(GPIOB, GPIO_PIN_14) +/** @brief DRV_SPI_CS_DISABLE 宏定义 */ #define DRV_SPI_CS_DISABLE() gpio_bit_set(GPIOB, GPIO_PIN_14) // DMA 传输完成标志 diff --git a/Robot_V2/device/ang_sensor.h b/Robot_V2/device/ang_sensor.h index 51a0e6f..6746769 100644 --- a/Robot_V2/device/ang_sensor.h +++ b/Robot_V2/device/ang_sensor.h @@ -1,3 +1,9 @@ +/** + * @file device/ang_sensor.h + * @brief 底层设备驱动与外设封装源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #ifndef _angsensor_H #define _angsensor_H #ifdef __cplusplus @@ -7,22 +13,76 @@ extern "C" { #include #include "config.h" +/** + * @brief spi_rw_half_word 函数 + * @param[in] spi_periph 参数 + * @param[in] i_HalfWord 参数 + * @return u16 返回值 + */ 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 返回值 + */ int spi_rw_half_word_dma(uint32_t spi_periph, uint16_t tx_data, uint16_t *rx_data); +/** + * @brief angle_sensor 类或结构体 + */ class angle_sensor { public: float calibration_angle = ANGLESENS_CALIBRATION_ANGLE; + /** + * @brief 初始化对象或模块 + * @return u8 返回值 + */ u8 init(void); + /** + * @brief 读取 read_sensorAngle 相关数据 + * @return float 返回值 + */ float read_sensorAngle(void); + /** + * @brief 更新对象内部状态或采样数据 + * @return float 返回值 + */ float update(void); + /** + * @brief 复位对象内部状态 + * @return void + */ void reset(void); + /** + * @brief 获取 getAngle 对应的数据或状态 + * @return float 返回值 + */ float getAngle(void) const; + /** + * @brief 获取 getRawAngle 对应的数据或状态 + * @return float 返回值 + */ float getRawAngle(void) const; + /** + * @brief 获取 getcurrent_sensorangle 对应的数据或状态 + * @return float 返回值 + */ float getcurrent_sensorangle(void) const; + /** + * @brief angle_set 函数 + * @param[in] angle 参数 + * @return u8 返回值 + */ u8 angle_set(float angle); + /** + * @brief 设置 set_calibration 对应的参数或状态 + * @param[in] angle 参数 + * @return u8 返回值 + */ u8 set_calibration(float angle); protected: @@ -34,7 +94,16 @@ class angle_sensor { float m_lastcumulativeAngle; float velocity[VEL_FILTER_SIZE] = {0.0f}; }; - +/** + * @brief 快速角度归一化到 [0, 360) + * 用 while 减法替代 fmodf,在角度变化量很小时(电机控制场景) + * 通常只需 0~1 次减法,远快于 fmodf 的 ~30-50 周期开销。 + */ +inline float normalizeAngle360(float angle) { + while (angle >= 360.0f) angle -= 360.0f; + while (angle < 0.0f) angle += 360.0f; + return angle; +} #ifdef __cplusplus } #endif diff --git a/Robot_V2/device/motor.cpp b/Robot_V2/device/motor.cpp index 1dffc51..eaf5cd1 100644 --- a/Robot_V2/device/motor.cpp +++ b/Robot_V2/device/motor.cpp @@ -1,3 +1,9 @@ +/** + * @file device/motor.cpp + * @brief 底层设备驱动与外设封装源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #include "motor.h" #include "Timer.h" #include "gd32c10x_eval.h" diff --git a/Robot_V2/device/motor.h b/Robot_V2/device/motor.h index d4c74c1..49ba865 100644 --- a/Robot_V2/device/motor.h +++ b/Robot_V2/device/motor.h @@ -1,14 +1,39 @@ +/** + * @file device/motor.h + * @brief 底层设备驱动与外设封装源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #ifndef _MOTOR_H #define _MOTOR_H // 定义电机驱动使能引脚 +/** @brief MOTOR_EN_GPIO_PORT 宏定义 */ #define MOTOR_EN_GPIO_PORT GPIOC +/** @brief MOTOR_EN_GPIO_PIN 宏定义 */ #define MOTOR_EN_GPIO_PIN GPIO_PIN_13 +/** @brief RCU_MOTOR_EN_GPIO 宏定义 */ #define RCU_MOTOR_EN_GPIO RCU_GPIOC +/** + * @brief 初始化电机驱动输出 + * @return void + */ void motor_init(void); +/** + * @brief 复位电机驱动 + * @return void + */ void motor_reset(void); +/** + * @brief 唤醒电机驱动 + * @return void + */ void motor_resume(void); +/** + * @brief 使电机驱动进入休眠 + * @return void + */ void motor_sleep(void); #endif \ No newline at end of file diff --git a/Robot_V2/main.cpp b/Robot_V2/main.cpp index 1edb100..d352c55 100644 --- a/Robot_V2/main.cpp +++ b/Robot_V2/main.cpp @@ -1,3 +1,9 @@ +/** + * @file main.cpp + * @brief 应用程序主流程源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #include "main.h" #include "Can.h" #include "FOC.h" @@ -12,8 +18,10 @@ // MAIN 调试宏定义 #if MAIN_DEBUG +/** @brief MAIN_DEBUG_PRINT 宏定义 */ #define MAIN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) #else +/** @brief MAIN_DEBUG_PRINT 宏定义 */ #define MAIN_DEBUG_PRINT(fmt, ...) ((void)0) #endif @@ -45,6 +53,10 @@ static FOCFunctionPtr control_functions[] = { &FOC_Controller::velocity_open_loop, // 6: 速度开环控制 &FOC_Controller::PWM_out, // 0: 占空比置 }; +/** + * @brief 应用程序入口函数 + * @return int 返回值 + */ int main(void) { u8 init_status = hardware_init(); @@ -73,6 +85,10 @@ int main(void) { return 0; } +/** + * @brief 初始化应用层使用的硬件与软件模块 + * @return u8 返回值 + */ u8 hardware_init(void) { __enable_irq(); systick_config(); // 系统时钟初始化 @@ -96,6 +112,11 @@ u8 hardware_init(void) { return init_status; } +/** + * @brief 根据任务标志调度周期性业务任务 + * @param[in] currentTasks 参数 + * @return void + */ void do_task(u32 currentTasks) { busy_task_enter(); // DWT: 记录忙碌起始周期 cnt_test++; @@ -115,7 +136,11 @@ void do_task(u32 currentTasks) { motor_runtime_50us++; // 快速电压检测(每100us执行一次,响应时间 < 200us) - FOC.fast_voltage_check(); + static u8 vcheck_div = 0; + if (++vcheck_div >= 2u) { + vcheck_div = 0; + FOC.fast_voltage_check(); + } // 静态变量用于跟踪上一次的控制模式 static int last_control_mode = -1; diff --git a/Robot_V2/main.h b/Robot_V2/main.h index da98c6e..3992cf0 100644 --- a/Robot_V2/main.h +++ b/Robot_V2/main.h @@ -37,7 +37,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include +/** + * @brief 根据任务标志调度周期性业务任务 + * @param[in] currentTasks 参数 + * @return void + */ void do_task(u32 currentTasks); +/** + * @brief 初始化应用层使用的硬件与软件模块 + * @return u8 返回值 + */ u8 hardware_init(void); #endif /* MAIN_H */ diff --git a/Robot_V2/sys/config.h b/Robot_V2/sys/config.h index 614bb25..57d8294 100644 --- a/Robot_V2/sys/config.h +++ b/Robot_V2/sys/config.h @@ -1,3 +1,9 @@ +/** + * @file sys/config.h + * @brief 系统服务与平台支持源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #ifndef __CONFIG_H #define __CONFIG_H #include "gd32c10x_eval.h" @@ -6,41 +12,71 @@ // 如果使用 CMSIS DSP 库,需要定义 ARM_MATH_CM4 #define ARM_MATH_CM4 +/** @brief EEP_DEBUG 宏定义 */ #define EEP_DEBUG 0 +/** @brief OTA_DEBUG 宏定义 */ #define OTA_DEBUG 0 +/** @brief SLEEP_DEBUG 宏定义 */ #define SLEEP_DEBUG 0 +/** @brief ANG_SENS_DEBUG 宏定义 */ #define ANG_SENS_DEBUG 0 +/** @brief CAN_DEBUG 宏定义 */ #define CAN_DEBUG 0 +/** @brief MAIN_DEBUG 宏定义 */ #define MAIN_DEBUG 0 +/** @brief FOC_DEBUG 宏定义 */ #define FOC_DEBUG 0 // 版本号定义 - 可根据实际项目进行调整 +/** @brief SOFTWARE_VERSION_MAJOR 常量定义 */ constexpr u16 SOFTWARE_VERSION_MAJOR = 26; +/** @brief SOFTWARE_VERSION_MINOR 常量定义 */ constexpr u16 SOFTWARE_VERSION_MINOR = 5; +/** @brief SOFTWARE_VERSION_PATCH 常量定义 */ constexpr u16 SOFTWARE_VERSION_PATCH = 19; +/** @brief SOFTWARE_VERSION_BUILD 常量定义 */ constexpr u16 SOFTWARE_VERSION_BUILD = 2; +/** @brief HARDWARE_VERSION_MAJOR 常量定义 */ constexpr u16 HARDWARE_VERSION_MAJOR = 25; +/** @brief HARDWARE_VERSION_MINOR 常量定义 */ constexpr u16 HARDWARE_VERSION_MINOR = 12; +/** @brief HARDWARE_VERSION_PATCH 常量定义 */ constexpr u16 HARDWARE_VERSION_PATCH = 01; +/** @brief HARDWARE_VERSION_BUILD 常量定义 */ constexpr u16 HARDWARE_VERSION_BUILD = 0; +/** @brief BOOT_VERSION_MAJOR 常量定义 */ constexpr u16 BOOT_VERSION_MAJOR = 26; +/** @brief BOOT_VERSION_MINOR 常量定义 */ constexpr u16 BOOT_VERSION_MINOR = 1; +/** @brief BOOT_VERSION_PATCH 常量定义 */ constexpr u16 BOOT_VERSION_PATCH = 12; +/** @brief BOOT_VERSION_BUILD 常量定义 */ constexpr u16 BOOT_VERSION_BUILD = 0; // Flash 分区配置 +/** @brief BOOTLOADER_SIZE 常量定义 */ constexpr u32 BOOTLOADER_SIZE = 0x6000; // 24KB +/** @brief BOOTLOADER_START_ADDR 常量定义 */ constexpr u32 BOOTLOADER_START_ADDR = 0x08000000; // BOOT 起始地址 +/** @brief APPLATEST_START_ADDR 常量定义 */ constexpr u32 APPLATEST_START_ADDR = 0x08012000; // APP 起始地址 +/** @brief APPBACK_START_ADDR 常量定义 */ constexpr u32 APPBACK_START_ADDR = 0x08006000; // APPBACK 起始地址 +/** @brief APP_MAX_SIZE 常量定义 */ constexpr u32 APP_MAX_SIZE = 0xC000; // 48KB +/** @brief FMC_PAGE_SIZE 常量定义 */ constexpr u32 FMC_PAGE_SIZE = 0x400; // 1KB +/** @brief SLEEP_CONFIG_START 常量定义 */ constexpr u32 SLEEP_CONFIG_START = 0x0801E400; // 睡眠配置起始地址 +/** @brief SLEEP_CONFIG_END 常量定义 */ constexpr u32 SLEEP_CONFIG_END = 0x0801E800; // 睡眠配置结束地址 +/** @brief FLASH_EMPTY 常量定义 */ constexpr u32 FLASH_EMPTY = 0xFFFFFFFF; // 空数据 +/** @brief SLEEP_ENABLE 常量定义 */ constexpr u32 SLEEP_ENABLE = 0x11111111; // 睡眠使能 +/** @brief SLEEP_DISABLE 常量定义 */ constexpr u32 SLEEP_DISABLE = 0x00000000; // 睡眠禁止 // 节点 ID 配置 (用于多电机 CAN 总线隔离) @@ -52,12 +88,19 @@ constexpr u32 SLEEP_DISABLE = 0x00000000; // 睡眠禁止 // - 采用双重备份机制 (主备份 + 备用备份) // - 使用魔数 (NODE_ID_MAGIC) 验证数据有效性,防止位翻转导致错读 // - 使用写入计数器区分最新数据 +/** @brief NODE_ID_PAGE_ADDR 常量定义 */ constexpr u32 NODE_ID_PAGE_ADDR = 0x0801E800; // 节点 ID 存储页 (1KB,独立区域) +/** @brief NODE_ID_PRIMARY_ADDR 常量定义 */ constexpr u32 NODE_ID_PRIMARY_ADDR = 0x0801E800; // 主存储地址 +/** @brief NODE_ID_BACKUP_ADDR 常量定义 */ constexpr u32 NODE_ID_BACKUP_ADDR = 0x0801E840; // 备份存储地址 (偏移64字节) +/** @brief NODE_ID_MAGIC 常量定义 */ constexpr u32 NODE_ID_MAGIC = 0x4E4F4445; // 魔数 'NODE' 用于验证数据有效性 +/** @brief DEFAULT_NODE_ID 常量定义 */ constexpr u16 DEFAULT_NODE_ID = 1; // 默认节点 ID +/** @brief BROADCAST_NODE_ID 常量定义 */ constexpr u16 BROADCAST_NODE_ID = 0x1FFF; // 广播 ID (所有节点响应) +/** @brief MAX_NODE_ID 常量定义 */ constexpr u16 MAX_NODE_ID = 0x1FFE; // 最大有效节点 ID (0~0x1FFE) // 节点 ID 存储结构 (存储在Flash中的格式) @@ -66,174 +109,296 @@ constexpr u16 MAX_NODE_ID = 0x1FFE; // 最大有效节点 ID (0~0x1FFE) // 地址偏移 0x06: 保留 (u16,填充为0xFFFF) // 地址偏移 0x08: 写入计数器 (u32,用于区分最新数据) // 地址偏移 0x0C: CRC32 校验 (u32) +/** @brief NODE_ID_STRUCT_SIZE 常量定义 */ constexpr u8 NODE_ID_STRUCT_SIZE = 0x10; // 结构体大小 16 字节 +/** @brief NODE_ID_MAGIC_OFFSET 常量定义 */ constexpr u8 NODE_ID_MAGIC_OFFSET = 0x00; // 魔数偏移 +/** @brief NODE_ID_VALUE_OFFSET 常量定义 */ constexpr u8 NODE_ID_VALUE_OFFSET = 0x04; // 节点ID值偏移 +/** @brief NODE_ID_COUNTER_OFFSET 常量定义 */ constexpr u8 NODE_ID_COUNTER_OFFSET = 0x08; // 写入计数器偏移 +/** @brief NODE_ID_CRC_OFFSET 常量定义 */ constexpr u8 NODE_ID_CRC_OFFSET = 0x0C; // CRC偏移 // BOOT 相关 +/** @brief OTA_CONFIG_NUM 常量定义 */ constexpr u32 OTA_CONFIG_NUM = 6; +/** @brief n_APP_LATEST_AVAL_ADDR 常量定义 */ constexpr u32 n_APP_LATEST_AVAL_ADDR = 0x0801E000; // 最新 APP 可用地址 +/** @brief n_APP_BACKUP_AVAL_ADDR 常量定义 */ constexpr u32 n_APP_BACKUP_AVAL_ADDR = 0x0801E004; // 备份 APP 可用地址 +/** @brief n_APP_LATEST_EN_ADDR 常量定义 */ constexpr u32 n_APP_LATEST_EN_ADDR = 0x0801E008; // 最新 APP 激活 +/** @brief n_APP_BACKUP_EN_ADDR 常量定义 */ constexpr u32 n_APP_BACKUP_EN_ADDR = 0x0801E00C; // 备份 APP 激活 +/** @brief n_APP_LATEST_CHECK_ADDR 常量定义 */ constexpr u32 n_APP_LATEST_CHECK_ADDR = 0x0801E010; // 最新 APP 校验 +/** @brief n_APP_BACKUP_CHECK_ADDR 常量定义 */ constexpr u32 n_APP_BACKUP_CHECK_ADDR = 0x0801E014; // 备份 APP 校验 +/** @brief OTA_NOT_AVAL 常量定义 */ constexpr u32 OTA_NOT_AVAL = 0xFFFFFFFF; +/** @brief OTA_AVAL 常量定义 */ constexpr u32 OTA_AVAL = 0x00000000; // 全零表示可用 // 参数配置 +/** @brief PP 常量定义 */ constexpr u8 PP = 11; +/** @brief DIR 常量定义 */ constexpr float DIR = 1.0f; // 默认方向:-1.0f 反转,1.0f 正转 +/** @brief REDUCTION_RATIO 常量定义 */ constexpr u16 REDUCTION_RATIO = 25; +/** @brief CURRENT_OFFSET 常量定义 */ constexpr float CURRENT_OFFSET = -3.31f / 2.0f; // 当前电流传感器的零点偏移 +/** @brief HOLD_PWM_DUTY 常量定义 */ constexpr float HOLD_PWM_DUTY = 0.1f; +/** @brief ANGLESENS_OFFSET 常量定义 */ constexpr u16 ANGLESENS_OFFSET = 0; +/** @brief ANGLESENS_CALIBRATION_ANGLE 常量定义 */ constexpr float ANGLESENS_CALIBRATION_ANGLE = 83.0f; +/** @brief KE_FACTOR 常量定义 */ constexpr float KE_FACTOR = 0.0f; // 角度/速度 α-β 观测器参数 +/** @brief ANGLE_KALMAN_INITIAL_STATE 常量定义 */ constexpr float ANGLE_KALMAN_INITIAL_STATE = 0.0f; +/** @brief ANGLE_KALMAN_INITIAL_COVARIANCE 常量定义 */ constexpr float ANGLE_KALMAN_INITIAL_COVARIANCE = 0.0f; +/** @brief ANGLE_KALMAN_PROCESS_NOISE_Q 常量定义 */ constexpr float ANGLE_KALMAN_PROCESS_NOISE_Q = 0.0f; +/** @brief ANGLE_KALMAN_MEASUREMENT_NOISE_R 常量定义 */ constexpr float ANGLE_KALMAN_MEASUREMENT_NOISE_R = 0.0f; +/** @brief ANGLE_OBSERVER_ALPHA 常量定义 */ constexpr float ANGLE_OBSERVER_ALPHA = 0.75f; // 角度校正增益,越大越跟测量 +/** @brief ANGLE_OBSERVER_BETA 常量定义 */ constexpr float ANGLE_OBSERVER_BETA = 0.002f; // 速度校正增益,原0.001微调至0.002 // 旧速度 Kalman 参数保留用于接口兼容;主速度输出现在直接来自 α-β 观测器 +/** @brief VELOCITY_KALMAN_INITIAL_STATE 常量定义 */ constexpr float VELOCITY_KALMAN_INITIAL_STATE = 0.0f; +/** @brief VELOCITY_KALMAN_INITIAL_COVARIANCE 常量定义 */ constexpr float VELOCITY_KALMAN_INITIAL_COVARIANCE = 1e-3f; +/** @brief VELOCITY_KALMAN_PROCESS_NOISE_Q 常量定义 */ constexpr float VELOCITY_KALMAN_PROCESS_NOISE_Q = 5e-4f; // 略增大,减少拖尾 +/** @brief VELOCITY_KALMAN_MEASUREMENT_NOISE_R 常量定义 */ constexpr float VELOCITY_KALMAN_MEASUREMENT_NOISE_R = 0.05f; // 明显小于旧值,避免压得太死 // 电流卡尔曼滤波器参数 +/** @brief CURRENT_KALMAN_INITIAL_STATE 常量定义 */ constexpr float CURRENT_KALMAN_INITIAL_STATE = 0.0f; +/** @brief CURRENT_KALMAN_INITIAL_COVARIANCE 常量定义 */ constexpr float CURRENT_KALMAN_INITIAL_COVARIANCE = 100.0f; // 增大初始协方差 +/** @brief CURRENT_KALMAN_PROCESS_NOISE_Q 常量定义 */ constexpr float CURRENT_KALMAN_PROCESS_NOISE_Q = 10.0f; // 降低过程噪声 +/** @brief CURRENT_KALMAN_MEASUREMENT_NOISE_R 常量定义 */ constexpr float CURRENT_KALMAN_MEASUREMENT_NOISE_R = 5e-5f; // 增大测量噪声 // PID 配置 +/** @brief DEFAULT_current_loop_p 常量定义 */ constexpr float DEFAULT_current_loop_p = 0.1f / 100 * 12; // 电流 P +/** @brief current_loop_Ki 常量定义 */ constexpr float current_loop_Ki = 0.55f; // 电流 P +/** @brief current_loop_Kd 常量定义 */ constexpr float current_loop_Kd = 3e-4f; // 电流 P +/** @brief DEFAULT_vel_loop_p 常量定义 */ constexpr float DEFAULT_vel_loop_p = 0.018f / 100 * 12; // 速度 P +/** @brief vel_loop_Ku 常量定义 */ constexpr float vel_loop_Ku = 3.600000e-03 * 0.7 * 100 / 12; +/** @brief vel_loop_Tu 常量定义 */ constexpr float vel_loop_Tu = 17.0f * 1e-3f; +/** @brief vel_loop_Ki 常量定义 */ constexpr float vel_loop_Ki = 1.2 * vel_loop_Ku / vel_loop_Tu; +/** @brief vel_loop_Kd 常量定义 */ constexpr float vel_loop_Kd = 0.075 * vel_loop_Ku * vel_loop_Tu * 2; +/** @brief DEFAULT_vel_angloop_p 常量定义 */ constexpr float DEFAULT_vel_angloop_p = 0.4f / 100; // 速度 速度 - 角度 P +/** @brief vel_angloop_Ki 常量定义 */ constexpr float vel_angloop_Ki = 5.0f; // 速度 速度 - 角度 I +/** @brief vel_angloop_Kd 常量定义 */ constexpr float vel_angloop_Kd = 5e-05f; // 速度 速度 - 角度 D +/** @brief DEFAULT_angle_angloop_p 常量定义 */ constexpr float DEFAULT_angle_angloop_p = 150.0f / 100 * 12; // 角度 速度 - 角度 P +/** @brief ang_angloop_Ki 常量定义 */ constexpr float ang_angloop_Ki = 0.00f; // 角度 速度 - 角度 I +/** @brief ang_angloop_Kd 常量定义 */ constexpr float ang_angloop_Kd = 8e-04f; // 角度 速度 - 角度 D +/** @brief DEFAULT_angle_loop_p 常量定义 */ constexpr float DEFAULT_angle_loop_p = 60.0f / 100 * 12; // 角度 P +/** @brief DEFAULT_angle_MIT_p 常量定义 */ constexpr float DEFAULT_angle_MIT_p = 100.0f / 100 * 12; // 角度 MIT P +/** @brief angle_MIT_Ki 常量定义 */ constexpr float angle_MIT_Ki = 0.0f; +/** @brief angle_MIT_Kd 常量定义 */ constexpr float angle_MIT_Kd = 8e-04f; +/** @brief DEFAULT_vel_MIT_p 常量定义 */ constexpr float DEFAULT_vel_MIT_p = 5.0f / 100; // 速度 MIT P +/** @brief vel_MIT_Ki 常量定义 */ constexpr float vel_MIT_Ki = 15.0f; +/** @brief vel_MIT_Kd 常量定义 */ constexpr float vel_MIT_Kd = 1e-04f; +/** @brief DEFAULT_current_MIT_p 常量定义 */ constexpr float DEFAULT_current_MIT_p = 0.2f / 100 * 12; // 电流 MIT P +/** @brief current_MIT_Ki 常量定义 */ constexpr float current_MIT_Ki = 0.1f; +/** @brief current_MIT_Kd 常量定义 */ constexpr float current_MIT_Kd = 3e-4f; // 常量定义 +/** @brief SIZE_FLOAT 常量定义 */ constexpr u8 SIZE_FLOAT = sizeof(float); +/** @brief SIZE_U32 常量定义 */ constexpr u8 SIZE_U32 = sizeof(uint32_t); +/** @brief ADC_MAX 常量定义 */ constexpr float ADC_MAX = 65536.0f; +/** @brief PI 常量定义 */ constexpr float PI = 3.14159265358979323846f; +/** @brief INV_PI_3 常量定义 */ constexpr float INV_PI_3 = 3.0f / PI; +/** @brief PI_3 常量定义 */ constexpr float PI_3 = PI / 3.0f; +/** @brief _1_SQRT3 常量定义 */ constexpr float _1_SQRT3 = 0.57735026919f; // 1/sqrt(3) +/** @brief _3PI_2 常量定义 */ constexpr float _3PI_2 = 4.71238898038f; +/** @brief SQRT3 常量定义 */ constexpr float SQRT3 = 1.7320508075688772f; +/** @brief SQRT3DV2 常量定义 */ constexpr float SQRT3DV2 = 0.8660254037844386f; // sqrt(3)/2 +/** @brief COS_PI_3 常量定义 */ constexpr float COS_PI_3 = 0.5f; +/** @brief ANGLE_FACTOR 常量定义 */ constexpr float ANGLE_FACTOR = 25.0f / 180.0f * PI; +/** @brief DEG2RAD 常量定义 */ constexpr float DEG2RAD = 1.0f / 180.0f * PI; +/** @brief RAD2DEG 常量定义 */ constexpr float RAD2DEG = 180.0f / PI; // 修正 RAD2DEG 定义,应该是 180/π +/** @brief DEFAULT_VALUE 常量定义 */ constexpr u8 DEFAULT_VALUE = 0; +/** @brief CONFIG_SAVED_NUM 常量定义 */ constexpr u8 CONFIG_SAVED_NUM = 6; // 三角函数快速计算 LUT +/** @brief LUT_SIZE 常量定义 */ constexpr u16 LUT_SIZE = 1024; +/** @brief LUT_MASK 常量定义 */ constexpr u16 LUT_MASK = (LUT_SIZE - 1); +/** @brief LUT_SCALE 常量定义 */ 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 +/** @brief DEV_CAN0_ID 常量定义 */ constexpr u16 DEV_CAN0_ID = 0x0000; +/** @brief DEV_CAN0_MASK 常量定义 */ constexpr u16 DEV_CAN0_MASK = 0x0000; +/** @brief DEV_CAN_LOOPBACK_ID 常量定义 */ constexpr u16 DEV_CAN_LOOPBACK_ID = 0x0000; // 反馈基础 ID +/** @brief CANFD_STATUS_ID 常量定义 */ constexpr u16 CANFD_STATUS_ID = 0x0100; // 状态反馈基础 ID +/** @brief CANFD_CONFIG_ID 常量定义 */ constexpr u16 CANFD_CONFIG_ID = 0x0101; // 配置信息基础 ID +/** @brief CANFD_VERSION_ID 常量定义 */ constexpr u16 CANFD_VERSION_ID = 0x00FF; // 版本信息基础 ID // 命令基础 ID +/** @brief CANFD_CMD_ID 常量定义 */ constexpr u16 CANFD_CMD_ID = 0x0200; // 控制命令基础 ID +/** @brief CANFD_RESET_ID 常量定义 */ constexpr u16 CANFD_RESET_ID = 0x0301; // 重置命令基础 ID // 节点 ID 管理基础 ID +/** @brief CANFD_SET_NODE_ID 常量定义 */ constexpr u16 CANFD_SET_NODE_ID = 0x0400; // 设置节点 ID 基础 ID +/** @brief CANFD_GET_NODE_ID 常量定义 */ constexpr u16 CANFD_GET_NODE_ID = 0x0401; // 查询节点 ID 基础 ID // OTA 相关基础 ID 不受到node ID影响 +/** @brief CANFD_BOOT_ID 常量定义 */ constexpr u16 CANFD_BOOT_ID = 0x0000; // BOOT 模式基础 ID (进入 BOOT 使用此 ID) +/** @brief CANFD_OTA_REQ_ID 常量定义 */ constexpr u16 CANFD_OTA_REQ_ID = 0x0100; // OTA 请求基础 ID +/** @brief CANFD_OTA_DATA_ID 常量定义 */ constexpr u16 CANFD_OTA_DATA_ID = 0x0101; // OTA 数据基础 ID +/** @brief CANFD_OTA_ACK_ID 常量定义 */ constexpr u16 CANFD_OTA_ACK_ID = 0x0102; // OTA 确认基础 ID +/** @brief CANFD_OTA_WAIT_ID 常量定义 */ constexpr u16 CANFD_OTA_WAIT_ID = 0x0103; // OTA 等待基础 ID // ADC +/** @brief ADC_FILTER_SIZE 常量定义 */ constexpr u8 ADC_FILTER_SIZE = 6; +/** @brief BLOCK_SIZE 常量定义 */ constexpr u8 BLOCK_SIZE = ADC_FILTER_SIZE * SIZE_FLOAT; +/** @brief ERROR_ADC_VAL 常量定义 */ constexpr float ERROR_ADC_VAL = 255.0f; +/** @brief MAX_TEMP 常量定义 */ constexpr float MAX_TEMP = 150.0f; +/** @brief MIN_TEMP 常量定义 */ constexpr float MIN_TEMP = -40.0f; +/** @brief MAX_CURRENT 常量定义 */ constexpr float MAX_CURRENT = 40.0f; +/** @brief MIN_CURRENT 常量定义 */ constexpr float MIN_CURRENT = -40.0f; +/** @brief MAX_VCC 常量定义 */ constexpr float MAX_VCC = 65.0f; +/** @brief MIN_VCC 常量定义 */ constexpr float MIN_VCC = -0.1f; // ang_sensor +/** @brief VEL_FILTER_SIZE 常量定义 */ constexpr u16 VEL_FILTER_SIZE = 4; +/** @brief DEFAULT_COMMAND 常量定义 */ constexpr u16 DEFAULT_COMMAND = 0x0000; +/** @brief FAULT_RECEIVE 常量定义 */ constexpr u16 FAULT_RECEIVE = 0xFFFF; +/** @brief ANGLE_WRAP_THRESHOLD 常量定义 */ constexpr float ANGLE_WRAP_THRESHOLD = 300.0f; +/** @brief ANGLE_WRAP_VALUE 常量定义 */ constexpr float ANGLE_WRAP_VALUE = 360.0f; +/** @brief RAD_FACTOR 常量定义 */ constexpr float RAD_FACTOR = 1.0f / ADC_MAX * 2.0f * PI; +/** @brief ANGLESENS_FACTOR 常量定义 */ constexpr float ANGLESENS_FACTOR = 1.0f / ADC_MAX * 360.0f; // TIMER2-任务调度 +/** @brief TIMER2_PRESCALER 常量定义 */ constexpr int TIMER2_PRESCALER = 119; // 120MHz / 120 = 1MHz +/** @brief TIMER2_PERIOD 常量定义 */ constexpr int TIMER2_PERIOD = 49; // 1 / 1MHz * 50 = 50us +/** @brief MOTOR_PERIOD 常量定义 */ constexpr int MOTOR_PERIOD = 1; // 控制每50us执行一次,无分频 +/** @brief TIME_SLICE 常量定义 */ constexpr float TIME_SLICE = (TIMER2_PERIOD + 1) * (TIMER2_PRESCALER + 1) / 120000000.0f; // 周期 +/** @brief TIMER2_FREQUENCY 常量定义 */ constexpr float TIMER2_FREQUENCY = 1 / TIME_SLICE; // 频率 +/** @brief MOTOR_FREQUENCY 常量定义 */ constexpr float MOTOR_FREQUENCY = 1 / TIME_SLICE / MOTOR_PERIOD; // 频率 // TIMER1-PWM +/** @brief TIMER1_PRESCALER 常量定义 */ constexpr int TIMER1_PRESCALER = 0; // 不分频,计数器时钟为 120MHz +/** @brief TIMER1_PERIOD 常量定义 */ constexpr int TIMER1_PERIOD = 2999; // 120MHz / (0+1) / (2999+1) = 40kHz计数, 中心对齐实际PWM 20kHz +/** @brief TIMER1_DEFAULT_PULSE 常量定义 */ constexpr int TIMER1_DEFAULT_PULSE = 0; +/** @brief TIMER1_CH3_COMPARE_VALUE 常量定义 */ constexpr int TIMER1_CH3_COMPARE_VALUE = (TIMER1_PERIOD + 1) * 0.41 - 1; // PWM 周期 41% 位置触发ADC采样 // 齿槽转矩补偿 +/** @brief COGGING_TABLE_SIZE 常量定义 */ constexpr u16 COGGING_TABLE_SIZE = 128; // 每电周期采样点数 +/** @brief COGGING_COMP_SCALE 常量定义 */ constexpr float COGGING_COMP_SCALE = 0.005f; // 补偿换算系数 V/mA,40mA × 0.005 = 0.2V // 电压检测参数(基于跌幅检测,不依赖固定额定电压) @@ -244,9 +409,18 @@ constexpr float COGGING_COMP_SCALE = 0.005f; // 补偿换算系数 V/mA,40mA // 慢速管理层(power_manage,~10ms周期): // - 执行Flash保存 // - 状态恢复判断(电压恢复到基准电压的90%以上) +/** @brief VBUS_DROP_THRESHOLD 常量定义 */ constexpr float VBUS_DROP_THRESHOLD = 5.0f; // 电压跌幅阈值 (V) +/** @brief VBUS_ABSOLUTE_MIN 常量定义 */ constexpr float VBUS_ABSOLUTE_MIN = 12.0f; // 绝对最低电压 (V) +/** @brief VBUS_DEBOUNCE_COUNT 常量定义 */ constexpr u32 VBUS_DEBOUNCE_COUNT = 5; // 快速检测:防抖计数 (5次×100us = 500us) +/** @brief VBUS_RECOVERY_RATIO 常量定义 */ constexpr float VBUS_RECOVERY_RATIO = 0.9f; // 恢复比例(基准电压的90%) -#endif \ No newline at end of file + + + + + +#endif diff --git a/Robot_V2/sys/flash.cpp b/Robot_V2/sys/flash.cpp index 88b765e..6e8d867 100644 --- a/Robot_V2/sys/flash.cpp +++ b/Robot_V2/sys/flash.cpp @@ -1,3 +1,9 @@ +/** + * @file sys/flash.cpp + * @brief 系统服务与平台支持源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #include "flash.h" #include "FOC.h" #include "ang_sensor.h" @@ -12,15 +18,19 @@ // EEP 调试宏定义 #if EEP_DEBUG +/** @brief EEP_DEBUG_PRINT 宏定义 */ #define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) #else +/** @brief EEP_DEBUG_PRINT 宏定义 */ #define EEP_DEBUG_PRINT(fmt, ...) ((void)0) #endif // OTA 调试宏定义 #if OTA_DEBUG +/** @brief OTA_DEBUG_PRINT 宏定义 */ #define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) #else +/** @brief OTA_DEBUG_PRINT 宏定义 */ #define OTA_DEBUG_PRINT(fmt, ...) ((void)0) #endif @@ -29,6 +39,12 @@ extern angle_sensor KTH7823; extern CAN_transmiter CAN0_transmiter; extern FOC_Controller FOC; // FOC 控制 +/** + * @brief 写入 write_ADDRESS 相关数据 + * @param[in] address 参数 + * @param[in] data 参数 + * @return fmc_state_enum 返回值 + */ fmc_state_enum write_ADDRESS(u32 address, u32 data) { fmc_unlock(); fmc_flag_clear(FMC_FLAG_PGERR | FMC_FLAG_PGAERR | FMC_FLAG_WPERR); @@ -665,6 +681,7 @@ FlashEepromStatus FlashEEPROM::writeNodeId(u16 node_id) { } // 写入并校验,最多3次 + /** @brief MAX_WRITE_RETRY 宏定义 */ #define MAX_WRITE_RETRY 3 for (u8 retry = 0; retry < MAX_WRITE_RETRY; retry++) { // 写入主存储区 diff --git a/Robot_V2/sys/flash.h b/Robot_V2/sys/flash.h index 18b75c1..a8f7c98 100644 --- a/Robot_V2/sys/flash.h +++ b/Robot_V2/sys/flash.h @@ -1,3 +1,9 @@ +/** + * @file sys/flash.h + * @brief 系统服务与平台支持源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #ifndef __FLASH_H #define __FLASH_H @@ -5,9 +11,13 @@ #include // 修改后 - 强制4字节对齐 +/** @brief ALIGN_4BYTE 宏定义 */ #define ALIGN_4BYTE(addr) ((addr) & 0xFFFFFFFC) // 4字节对齐 // EEPROM操作状态 +/** + * @brief 匿名枚举 枚举定义 + */ typedef enum { FLASH_EEPROM_OK = 0, // 操作成功 FLASH_EEPROM_WRITE_ERROR, // 写入错误 @@ -20,6 +30,9 @@ typedef enum { } FlashEepromStatus; // Flash EEPROM类 +/** + * @brief FlashEEPROM 类或结构体 + */ class FlashEEPROM { public: // EEPROM emulation constants @@ -49,39 +62,118 @@ class FlashEEPROM { FlashEEPROM(); // 初始化Flash EEPROM模拟 + /** + * @brief 初始化对象或模块 + * @return u8 返回值 + */ u8 init(); // 从Flash EEPROM中读取数据 + /** + * @brief 读取数据 + * @param[in] virtualAddr 参数 + * @param[in] data 参数 + * @return FlashEepromStatus 返回值 + */ FlashEepromStatus read(u8 virtualAddr, u16 *data) const; // 向Flash EEPROM写入数据 + /** + * @brief 写入数据 + * @param[in] virtualAddr 参数 + * @param[in] data 参数 + * @return FlashEepromStatus 返回值 + */ FlashEepromStatus write(u8 virtualAddr, u16 data); // Float数据读相关函数 + /** + * @brief 从 Flash EEPROM 读取浮点数据 + * @param[in] virtualAddr 参数 + * @param[in] data 参数 + * @return FlashEepromStatus 返回值 + */ FlashEepromStatus readFloat(u8 virtualAddr, float *data) const; // Float数据存储相关函数 + /** + * @brief 向 Flash EEPROM 写入浮点数据 + * @param[in] virtualAddr 参数 + * @param[in] data 参数 + * @return FlashEepromStatus 返回值 + */ FlashEepromStatus writeFloat(u8 virtualAddr, float data); // 格式化Flash EEPROM页面 + /** + * @brief 格式化存储区域 + * @return FlashEepromStatus 返回值 + */ FlashEepromStatus format(); + /** + * @brief 保存系统配置参数 + * @param[in] saved 参数 + * @return FlashEepromStatus 返回值 + */ FlashEepromStatus save_system_config(bool saved); + /** + * @brief 读取已保存的系统配置参数 + * @return u8 返回值 + */ u8 read_saved_system_config(void); + /** + * @brief 读取保存的角度值 + * @return float 返回值 + */ float read_angle(); // 节点 ID 独立读写函数(使用魔数+双重备份+计数器机制) // 从 Flash 读取节点 ID(带魔数验证和双重备份回退) + /** + * @brief 读取节点 ID 配置 + * @param[in] node_id 参数 + * @return FlashEepromStatus 返回值 + */ FlashEepromStatus readNodeId(u16 *node_id) const; // 保存节点 ID 到 Flash(写入主备份和备用备份) + /** + * @brief 写入节点 ID 配置 + * @param[in] node_id 参数 + * @return FlashEepromStatus 返回值 + */ FlashEepromStatus writeNodeId(u16 node_id); // 擦除节点 ID 存储区(恢复默认值) + /** + * @brief 擦除节点 ID 配置 + * @return FlashEepromStatus 返回值 + */ FlashEepromStatus eraseNodeId(); private: + /** + * @brief 写入 writeCRC 相关数据 + * @param[in] CRC_NUM 参数 + * @param[in] saved 参数 + * @return FlashEepromStatus 返回值 + */ FlashEepromStatus writeCRC(u32 CRC_NUM, bool saved); }; +/** + * @brief flash_eeprom_example_main 函数 + * @return void + */ void flash_eeprom_example_main(void); u8 OTA_SET(u32 addr, u32 data); +/** + * @brief move_app_data 函数 + * @return fmc_state_enum 返回值 + */ fmc_state_enum move_app_data(void); +/** + * @brief 写入 write_ADDRESS 相关数据 + * @param[in] address 参数 + * @param[in] data 参数 + * @return fmc_state_enum 返回值 + */ fmc_state_enum write_ADDRESS(u32 address, u32 data); #endif /* __FLASH_H */ \ No newline at end of file diff --git a/Robot_V2/sys/health.cpp b/Robot_V2/sys/health.cpp index 6a799a3..cfb93cc 100644 --- a/Robot_V2/sys/health.cpp +++ b/Robot_V2/sys/health.cpp @@ -1,3 +1,9 @@ +/** + * @file sys/health.cpp + * @brief 系统服务与平台支持源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #include "health.h" #include "config.h" #include "Can.h" @@ -12,8 +18,10 @@ extern FOC_Controller FOC; extern FlashEEPROM flashEEP; 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 // 电压管理状态机 diff --git a/Robot_V2/sys/health.h b/Robot_V2/sys/health.h index 3c3cc00..5497f1f 100644 --- a/Robot_V2/sys/health.h +++ b/Robot_V2/sys/health.h @@ -1,22 +1,39 @@ +/** + * @file sys/health.h + * @brief 系统服务与平台支持源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #ifndef _HEALTH_H #define _HEALTH_H #include typedef int32_t q16_16_t; // Q16.16格式 // 定点数运算宏 +/** @brief Q16_16_ONE 宏定义 */ #define Q16_16_ONE 65536 // 1.0 in Q16.16 +/** @brief FLOAT_TO_Q16_16 宏定义 */ #define FLOAT_TO_Q16_16(x) ((q16_16_t)((x) * Q16_16_ONE)) +/** @brief Q16_16_TO_FLOAT 宏定义 */ #define Q16_16_TO_FLOAT(x) ((float)(x) / Q16_16_ONE) +/** @brief Q16_16_MUL 宏定义 */ #define Q16_16_MUL(a, b) ((q16_16_t)(((int64_t)(a) * (b)) >> 16)) +/** @brief Q16_16_SQUARE 宏定义 */ #define Q16_16_SQUARE(x) Q16_16_MUL((x), (x)) // 电压监测状态机状态 +/** + * @brief VoltageState 枚举定义 + */ enum class VoltageState : uint8_t { NORMAL, // 正常运行 VOLTAGE_DROP, // 电压跌落检测中(防抖等待) SHUTDOWN_SAVE // 已关机,等待保存 }; +/** + * @brief ThermalController 类或结构体 + */ class ThermalController { private: u8 temperature; @@ -34,14 +51,30 @@ class ThermalController { ThermalController() : thermalRate(FLOAT_TO_Q16_16(0.995f)), recoveryRate(FLOAT_TO_Q16_16(0.33f)) {} + /** + * @brief 更新对象内部状态或采样数据 + * @return u32 返回值 + */ u32 update(); + /** + * @brief 复位对象内部状态 + * @return void + */ void reset() { thermal_value = 0; remainingTime10Ms = 0; } }; +/** + * @brief angsens_MG_check 函数 + * @return void + */ void angsens_MG_check(void); +/** + * @brief power_manage 函数 + * @return void + */ void power_manage(void); #endif diff --git a/Robot_V2/sys/initial.cpp b/Robot_V2/sys/initial.cpp index 0c80294..7237407 100644 --- a/Robot_V2/sys/initial.cpp +++ b/Robot_V2/sys/initial.cpp @@ -1,3 +1,9 @@ +/** + * @file sys/initial.cpp + * @brief 系统服务与平台支持源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #include "initial.h" #include "Can.h" #include "config.h" @@ -13,15 +19,19 @@ // OTA 调试宏定义 #if OTA_DEBUG +/** @brief OTA_DEBUG_PRINT 宏定义 */ #define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) #else +/** @brief OTA_DEBUG_PRINT 宏定义 */ #define OTA_DEBUG_PRINT(fmt, ...) ((void)0) #endif // EEP 调试宏定义 #if EEP_DEBUG +/** @brief EEP_DEBUG_PRINT 宏定义 */ #define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) #else +/** @brief EEP_DEBUG_PRINT 宏定义 */ #define EEP_DEBUG_PRINT(fmt, ...) ((void)0) #endif @@ -38,18 +48,38 @@ VersionManager::VersionManager() { BOOT_VERSION_BUILD); } +/** + * @brief 获取 getSoftwareVersion 对应的数据或状态 + * @return VersionManager::VersionInfo 返回值 + */ VersionManager::VersionInfo VersionManager::getSoftwareVersion() const { return softwareVersion; } +/** + * @brief 获取 getHardwareVersion 对应的数据或状态 + * @return VersionManager::VersionInfo 返回值 + */ VersionManager::VersionInfo VersionManager::getHardwareVersion() const { return hardwareVersion; } +/** + * @brief 获取 getBootVersion 对应的数据或状态 + * @return VersionManager::VersionInfo 返回值 + */ VersionManager::VersionInfo VersionManager::getBootVersion() const { return bootVersion; } +/** + * @brief 设置 setSoftwareVersion 对应的参数或状态 + * @param[in] major 参数 + * @param[in] minor 参数 + * @param[in] patch 参数 + * @param[in] build 参数 + * @return void + */ void VersionManager::setSoftwareVersion(u16 major, u16 minor, u16 patch, u16 build) { softwareVersion.major = major; @@ -58,6 +88,14 @@ void VersionManager::setSoftwareVersion(u16 major, u16 minor, u16 patch, softwareVersion.build = build; } +/** + * @brief 设置 setHardwareVersion 对应的参数或状态 + * @param[in] major 参数 + * @param[in] minor 参数 + * @param[in] patch 参数 + * @param[in] build 参数 + * @return void + */ void VersionManager::setHardwareVersion(u16 major, u16 minor, u16 patch, u16 build) { hardwareVersion.major = major; @@ -66,6 +104,14 @@ void VersionManager::setHardwareVersion(u16 major, u16 minor, u16 patch, hardwareVersion.build = build; } +/** + * @brief 设置 setBootVersion 对应的参数或状态 + * @param[in] major 参数 + * @param[in] minor 参数 + * @param[in] patch 参数 + * @param[in] build 参数 + * @return void + */ void VersionManager::setBootVersion(u16 major, u16 minor, u16 patch, u16 build) { bootVersion.major = major; @@ -86,6 +132,10 @@ char *VersionManager::versionToString(const VersionInfo &version, char *buffer, return buffer; } +/** + * @brief sendVersionInfoViaCan 函数 + * @return void + */ void VersionManager::sendVersionInfoViaCan() const { // 准备发送版本信息 (ID: CANFD_VERSION_ID) // 只使用必要的字节数(24 字节)来传输三个版本的信息(每个版本 6 字节) @@ -128,6 +178,10 @@ void VersionManager::sendVersionInfoViaCan() const { CAN0_transmiter.build_can_id(CANFD_VERSION_ID), 24, versionData); } +/** + * @brief printVersions 函数 + * @return void + */ void VersionManager::printVersions() const { char versionStr[32]; @@ -143,6 +197,10 @@ void VersionManager::printVersions() const { } /* retarget the C library printf function to the USART */ +/** + * @brief 初始化 USART0 调试串口 + * @return u8 返回值 + */ u8 USART0_init() { gd_eval_com_init(EVAL_COM0); return 1; @@ -170,6 +228,10 @@ int fputc(int ch, FILE *f) throw() { return ch; } +/** + * @brief 初始化未使用引脚状态 + * @return void + */ void unused_pin_init() { rcu_periph_clock_enable(RCU_GPIOA); // 使能 GPIOA 时钟 rcu_periph_clock_enable(RCU_GPIOB); // 使能 GPIOB 时钟 @@ -227,6 +289,10 @@ u16 get_reset_cause(void) { return cause; } +/** + * @brief 初始化 OTA 与 A/B 分区状态 + * @return void + */ void OTA_initial(void) { #if OTA_DEBUG u32 temp_val[6]; diff --git a/Robot_V2/sys/initial.h b/Robot_V2/sys/initial.h index 088ab54..bd597e0 100644 --- a/Robot_V2/sys/initial.h +++ b/Robot_V2/sys/initial.h @@ -1,3 +1,9 @@ +/** + * @file sys/initial.h + * @brief 系统服务与平台支持源文件 + * @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。 + */ + #ifndef _INITIAL_H #define _INITIAL_H @@ -11,6 +17,9 @@ extern "C" { #include // 任务标志定义 +/** + * @brief 匿名枚举 枚举定义 + */ typedef enum { TASK_MOTOR_CONTROL = 0, TASK_CURRENT_UPDATE, @@ -25,14 +34,45 @@ typedef enum { TASK_COUNT } SystemTask; +/** + * @brief rcu_config 函数 + * @return void + */ void rcu_config(void); static volatile uint32_t timer_delay_count = 0; // volatile 很重要! +/** + * @brief fputc 函数 + * @param[in] ch 参数 + * @param[in] f 参数 + * @return int 返回值 + */ int fputc(int ch, FILE *f); // 声明fputc函数以重载标准库实现 +/** + * @brief 初始化 USART0 调试串口 + * @return u8 返回值 + */ u8 USART0_init(void); +/** + * @brief 初始化独立看门狗 + * @param[in] time 参数 + * @return u8 返回值 + */ u8 watchdog_init(u32 time); +/** + * @brief 获取复位原因 + * @return u16 返回值 + */ u16 get_reset_cause(void); +/** + * @brief 初始化未使用引脚状态 + * @return void + */ void unused_pin_init(); +/** + * @brief 初始化 OTA 与 A/B 分区状态 + * @return void + */ void OTA_initial(void); // 任务管理结构 @@ -41,6 +81,9 @@ typedef struct { } TaskScheduler; // 版本管理类 +/** + * @brief VersionManager 类或结构体 + */ class VersionManager { public: // 版本信息结构体 @@ -55,21 +98,57 @@ class VersionManager { VersionManager(); // 获取软件版本 + /** + * @brief 获取 getSoftwareVersion 对应的数据或状态 + * @return VersionInfo 返回值 + */ VersionInfo getSoftwareVersion() const; // 获取硬件版本 + /** + * @brief 获取 getHardwareVersion 对应的数据或状态 + * @return VersionInfo 返回值 + */ VersionInfo getHardwareVersion() const; // 获取BOOT版本 + /** + * @brief 获取 getBootVersion 对应的数据或状态 + * @return VersionInfo 返回值 + */ VersionInfo getBootVersion() const; // 设置软件版本 + /** + * @brief 设置 setSoftwareVersion 对应的参数或状态 + * @param[in] major 参数 + * @param[in] minor 参数 + * @param[in] patch 参数 + * @param[in] build 参数 + * @return void + */ void setSoftwareVersion(u16 major, u16 minor, u16 patch, u16 build); // 设置硬件版本 + /** + * @brief 设置 setHardwareVersion 对应的参数或状态 + * @param[in] major 参数 + * @param[in] minor 参数 + * @param[in] patch 参数 + * @param[in] build 参数 + * @return void + */ void setHardwareVersion(u16 major, u16 minor, u16 patch, u16 build); // 设置BOOT版本 + /** + * @brief 设置 setBootVersion 对应的参数或状态 + * @param[in] major 参数 + * @param[in] minor 参数 + * @param[in] patch 参数 + * @param[in] build 参数 + * @return void + */ void setBootVersion(u16 major, u16 minor, u16 patch, u16 build); // 将版本信息转换为字符串 @@ -77,9 +156,17 @@ class VersionManager { size_t bufSize) const; // 打印所有版本信息 + /** + * @brief printVersions 函数 + * @return void + */ void printVersions() const; // 通过CAN发送版本信息 + /** + * @brief sendVersionInfoViaCan 函数 + * @return void + */ void sendVersionInfoViaCan() const; private: diff --git a/Robot_V2/sys/systick.cpp b/Robot_V2/sys/systick.cpp index 789e041..386f41b 100644 --- a/Robot_V2/sys/systick.cpp +++ b/Robot_V2/sys/systick.cpp @@ -43,8 +43,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SLEEP 调试宏定义 #if SLEEP_DEBUG +/** @brief SLEEP_DEBUG_PRINT 宏定义 */ #define SLEEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) #else +/** @brief SLEEP_DEBUG_PRINT 宏定义 */ #define SLEEP_DEBUG_PRINT(fmt, ...) ((void)0) #endif @@ -208,6 +210,10 @@ void busy_task_exit(void) { } } +/** + * @brief 获取 CPU 使用率 + * @return uint8_t 返回值 + */ uint8_t get_cpu_usage(void) { return cpu_usage; } /*! diff --git a/Robot_V2/sys/systick.h b/Robot_V2/sys/systick.h index 64b4c81..b473044 100644 --- a/Robot_V2/sys/systick.h +++ b/Robot_V2/sys/systick.h @@ -41,28 +41,79 @@ extern "C" { #include /* configure systick */ +/** + * @brief 配置 SysTick 定时器 + * @return void + */ void systick_config(void); /* get system tick time in milliseconds */ +/** + * @brief 获取系统毫秒计数 + * @return uint32_t 返回值 + */ uint32_t get_systick_ms(void); /* delay a time in milliseconds */ +/** + * @brief 毫秒级阻塞延时 + * @param[in] count 参数 + * @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 递减延时计数器 + * @return void + */ void delay_decrement(void); /* 空闲任务计数(兼容接口,DWT 版本无需操作) */ +/** + * @brief 记录空闲任务计数 + * @return void + */ void idle_task_count(void); /* do_task 入口调用,记录忙碌起始周期 */ +/** + * @brief 记录忙碌任务开始周期 + * @return void + */ void busy_task_enter(void); /* do_task 出口调用,累加忙碌周期 */ +/** + * @brief 记录忙碌任务结束并累加周期 + * @return void + */ void busy_task_exit(void); /* 获取CPU使用率 */ +/** + * @brief 获取 CPU 使用率 + * @return uint8_t 返回值 + */ uint8_t get_cpu_usage(void); /* 系统软复位 */ +/** + * @brief 执行系统软复位 + * @return void + */ void system_soft_reset(void); /* 准备进入低功耗模式 */ +/** + * @brief 准备进入应用低功耗模式 + * @param[in] save_data 参数 + * @return void + */ void app_prepare_deep_sleep(bool save_data); /* 中断唤醒 */ +/** + * @brief EXTI5_9 中断处理函数 + * @return void + */ void EXTI5_9_IRQHandler(void); #ifdef __cplusplus diff --git a/static_test_automotive_business_20260523/files.csv b/static_test_automotive_business_20260523/files.csv new file mode 100644 index 0000000..2470e8f --- /dev/null +++ b/static_test_automotive_business_20260523/files.csv @@ -0,0 +1,30 @@ +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 diff --git a/static_test_automotive_business_20260523/findings.csv b/static_test_automotive_business_20260523/findings.csv new file mode 100644 index 0000000..d7f1ba5 --- /dev/null +++ b/static_test_automotive_business_20260523/findings.csv @@ -0,0 +1,554 @@ +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,人工确认是否符合项目编码规范;如合理则记录偏离说明。 diff --git a/static_test_automotive_business_20260523/metrics.csv b/static_test_automotive_business_20260523/metrics.csv new file mode 100644 index 0000000..0491fcd --- /dev/null +++ b/static_test_automotive_business_20260523/metrics.csv @@ -0,0 +1,200 @@ +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 diff --git a/static_test_automotive_business_20260523/priority_review_list.md b/static_test_automotive_business_20260523/priority_review_list.md new file mode 100644 index 0000000..2989f86 --- /dev/null +++ b/static_test_automotive_business_20260523/priority_review_list.md @@ -0,0 +1,46 @@ +# 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/汇编;确认临界区长度和安全机制。 diff --git a/static_test_automotive_business_20260523/report.html b/static_test_automotive_business_20260523/report.html new file mode 100644 index 0000000..3519bb1 --- /dev/null +++ b/static_test_automotive_business_20260523/report.html @@ -0,0 +1,2781 @@ +ROBOT_V2 APP 汽车电子静态测试报告 +
+

ROBOT_V2 APP 汽车电子静态测试报告

范围:业务代码 Algorithm/、device/、sys/、main.cpp、main.h;排除第三方 GD32 RTE。
本版本已加入补充筛查:Doxygen 覆盖、全局状态、switch default、无限循环、关中断成对性、ISR、magic number、浮点比较等。只生成报告,不修改源码逻辑。
未发现 Error 级硬性高风险项
+
扫描文件数
29
非空代码行估算
4272
主规则 Warning
40
补充 Warning
207
+

主规则命中分布

AUTO-ARRAY-001251
AUTO-CAST-001223
AUTO-FUNC-00231
AUTO-MACRO-00129
AUTO-ASM-00110
AUTO-CTRL-0026
AUTO-MET-0013

补充规则命中分布

SUP-MAG-001439
SUP-GLB-001189
SUP-GLB-00247
SUP-ISR-00118
SUP-CMP-00114
SUP-DOC-00112
SUP-LOOP-0014
SUP-IRQ-0013
SUP-SW-0011
+

高优先级结论

  • 主规则仍未发现动态内存、goto、高风险 C 字符串/输入函数等硬性高风险项。
  • 补充筛查发现:全局可变状态较多、1 处 switch 缺少 default 候选、3 处关中断成对性需人工确认、14 处浮点阈值比较需确认语义。
  • 裸数字常量命中较多,不建议机械全改,应优先处理安全阈值、时间常数、比例系数。
+ + +
+

可保存修复确认清单

+
+ 每条审查项都可以打勾。勾选状态会自动保存到当前浏览器的 localStorage。Chromium 浏览器还可以点“绑定进度 JSON 文件”,授权后每次勾选都会同步写入该 JSON;每次打开可点“读取绑定文件”恢复。为防止换电脑或清缓存丢失,也可以用“导出/导入进度 JSON”。 +
+
+
0 / 254
+ + + + + + + + + + 文件同步:未绑定 +
+
本清单共 254 项:error 0,warning 250,info 4。保存键:robot_v2_app_static_report_checklist_v1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
确认级别分组规则位置说明证据建议
warning主规则AUTO-CTRL-002device/Can.cpp:1124continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-CTRL-002device/Can.cpp:1194continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-CTRL-002device/Can.cpp:1199continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-CTRL-002main.cpp:80continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-CTRL-002sys/flash.cpp:693continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-CTRL-002sys/systick.cpp:264continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:100printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:161printf/格式化输出需确认调试隔离和实时性影响printf("",人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:195printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:198printf/格式化输出需确认调试隔离和实时性影响printf("", angle_deg, cogging_table[i]);人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:203printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:206printf/格式化输出需确认调试隔离和实时性影响printf("", angle_deg, cogging_table_rev[i]);人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:211printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:212printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:214printf/格式化输出需确认调试隔离和实时性影响if (i % 8 == 0) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:215printf/格式化输出需确认调试隔离和实时性影响printf("", cogging_table[i]);人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:216printf/格式化输出需确认调试隔离和实时性影响if (i < COGGING_TABLE_SIZE - 1) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:217printf/格式化输出需确认调试隔离和实时性影响if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:220printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:223printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:224printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:226printf/格式化输出需确认调试隔离和实时性影响if (i % 8 == 0) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:227printf/格式化输出需确认调试隔离和实时性影响printf("", cogging_table_rev[i]);人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:228printf/格式化输出需确认调试隔离和实时性影响if (i < COGGING_TABLE_SIZE - 1) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:229printf/格式化输出需确认调试隔离和实时性影响if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:232printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:234printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002device/Can.cpp:30printf/格式化输出需确认调试隔离和实时性影响#define CAN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002device/ang_sensor.cpp:22printf/格式化输出需确认调试隔离和实时性影响#define ANG_SENS_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002device/motor.cpp:38printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002main.cpp:22printf/格式化输出需确认调试隔离和实时性影响#define MAIN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002sys/flash.cpp:22printf/格式化输出需确认调试隔离和实时性影响#define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002sys/flash.cpp:31printf/格式化输出需确认调试隔离和实时性影响#define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002sys/initial.cpp:23printf/格式化输出需确认调试隔离和实时性影响#define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002sys/initial.cpp:32printf/格式化输出需确认调试隔离和实时性影响#define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002sys/initial.cpp:129printf/格式化输出需确认调试隔离和实时性影响snprintf(buffer, bufSize, "", version.major, version.minor,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002sys/systick.cpp:47printf/格式化输出需确认调试隔离和实时性影响#define SLEEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-MET-001Algorithm/FOC.cpp:75圈复杂度 33 超过建议阈值 15FOC_Controller::calibrate_cogging_tick建议人工评审分支完整性;后续允许时再考虑拆分或增加单元测试覆盖。
warning主规则AUTO-MET-001device/Can.cpp:1076圈复杂度 27 超过建议阈值 15CAN_transmiter::communication_check建议人工评审分支完整性;后续允许时再考虑拆分或增加单元测试覆盖。
warning主规则AUTO-MET-001main.cpp:120圈复杂度 17 超过建议阈值 15do_task建议人工评审分支完整性;后续允许时再考虑拆分或增加单元测试覆盖。
warning补充筛查SUP-CMP-001Algorithm/FOC.cpp:53浮点变量比较需确认容差或离散状态含义if (rt_velocity < -0.5f) last_table = cogging_table_rev;建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001Algorithm/FOC.cpp:54浮点变量比较需确认容差或离散状态含义else if (rt_velocity > 0.5f) last_table = cogging_table;建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001Algorithm/FOC.cpp:404浮点变量比较需确认容差或离散状态含义u8 sector_code = (X > 0.0f ? 1u : 0u)建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001Algorithm/FOC.cpp:405浮点变量比较需确认容差或离散状态含义+ (Y > 0.0f ? 2u : 0u)建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001Algorithm/FOC.cpp:406浮点变量比较需确认容差或离散状态含义+ (Z > 0.0f ? 4u : 0u);建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001Algorithm/FOC.cpp:534浮点变量比较需确认容差或离散状态含义if (HOLD_PWM_DUTY > 0.95f) {建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001Algorithm/FOC.cpp:536浮点变量比较需确认容差或离散状态含义} else if (HOLD_PWM_DUTY < 0.0f) {建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001Algorithm/FOC.cpp:569浮点变量比较需确认容差或离散状态含义if (voltage < 36.0f and voltage > 8.0f) {建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001Algorithm/FOC.cpp:763浮点变量比较需确认容差或离散状态含义if (target_velocity < -120.0f) {建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001Algorithm/FOC.cpp:765浮点变量比较需确认容差或离散状态含义} else if (target_velocity < -30.0f) {建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001Algorithm/Filter.cpp:190浮点变量比较需确认容差或离散状态含义if (error > 180.0f) error -= 360.0f;建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001Algorithm/Filter.cpp:191浮点变量比较需确认容差或离散状态含义else if (error < -180.0f) error += 360.0f;建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001sys/config.h:427浮点变量比较需确认容差或离散状态含义while (angle >= 360.0f) angle -= 360.0f;建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001sys/config.h:428浮点变量比较需确认容差或离散状态含义while (angle < 0.0f) angle += 360.0f;建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-GLB-001Algorithm/FOC.cpp:23文件作用域可变全局对象,需确认封装、并发访问和初始化顺序FOC_Controller FOC;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/ADC.cpp:20文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ADC_SCALE = 3.3f / 4096.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/ADC.cpp:22文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float TEMP_FACTOR = 1000.0f / 4.3f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/ADC.cpp:24文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VCC_FACTOR = 11.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/ADC.cpp:26文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_FACTOR =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/ADC.cpp:30文件作用域可变全局对象,需确认封装、并发访问和初始化顺序sampler sampler;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/ADC.cpp:33文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 adc_current_frame_ready = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Can.cpp:37文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANX = CAN0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Can.cpp:48文件作用域可变全局对象,需确认封装、并发访问和初始化顺序dma_parameter_struct dma_rx_parameter;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Can.cpp:51文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile bool can_rx_dma_busy = false;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Can.cpp:52文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static can_receive_message_struct can_rx_dma_message;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Can.cpp:72文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 rx_queue_head = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Can.cpp:73文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 rx_queue_tail = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Can.cpp:74文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 rx_queue_count = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Can.cpp:77文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 tx_queue_head = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Can.cpp:78文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 tx_queue_tail = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Can.cpp:79文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 tx_queue_count = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Can.cpp:84文件作用域可变全局对象,需确认封装、并发访问和初始化顺序CAN_transmiter CAN0_transmiter;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Timer.cpp:18文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile u32 total_us100_counter = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/ang_sensor.cpp:38文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile bool spi_dma_tx_complete = false;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/ang_sensor.cpp:39文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile bool spi_dma_rx_complete = false;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/ang_sensor.cpp:41文件作用域可变全局对象,需确认封装、并发访问和初始化顺序angle_sensor KTH7823;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001main.cpp:39文件作用域可变全局对象,需确认封装、并发访问和初始化顺序TaskScheduler scheduler = {0};建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001main.cpp:40文件作用域可变全局对象,需确认封装、并发访问和初始化顺序u32 motor_runtime_50us = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001main.cpp:41文件作用域可变全局对象,需确认封装、并发访问和初始化顺序u32 cnt_test = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:32文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 SOFTWARE_VERSION_MAJOR = 26;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:34文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 SOFTWARE_VERSION_MINOR = 5;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:36文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 SOFTWARE_VERSION_PATCH = 19;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:38文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 SOFTWARE_VERSION_BUILD = 2;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:41文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 HARDWARE_VERSION_MAJOR = 25;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:43文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 HARDWARE_VERSION_MINOR = 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:45文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 HARDWARE_VERSION_PATCH = 01;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:47文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 HARDWARE_VERSION_BUILD = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:50文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 BOOT_VERSION_MAJOR = 26;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:52文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 BOOT_VERSION_MINOR = 1;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:54文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 BOOT_VERSION_PATCH = 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:56文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 BOOT_VERSION_BUILD = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:60文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 BOOTLOADER_SIZE = 0x6000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:62文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 BOOTLOADER_START_ADDR = 0x08000000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:64文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 APPLATEST_START_ADDR = 0x08012000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:66文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 APPBACK_START_ADDR = 0x08006000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:68文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 APP_MAX_SIZE = 0xC000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:70文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 FMC_PAGE_SIZE = 0x400;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:72文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 SLEEP_CONFIG_START = 0x0801E400;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:74文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 SLEEP_CONFIG_END = 0x0801E800;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:76文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 FLASH_EMPTY = 0xFFFFFFFF;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:78文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 SLEEP_ENABLE = 0x11111111;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:80文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 SLEEP_DISABLE = 0x00000000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:92文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 NODE_ID_PAGE_ADDR = 0x0801E800;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:94文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 NODE_ID_PRIMARY_ADDR = 0x0801E800;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:96文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 NODE_ID_BACKUP_ADDR = 0x0801E840;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:98文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 NODE_ID_MAGIC = 0x4E4F4445;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:100文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 DEFAULT_NODE_ID = 1;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:102文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 BROADCAST_NODE_ID = 0x1FFF;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:104文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 MAX_NODE_ID = 0x1FFE;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:113文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 NODE_ID_STRUCT_SIZE = 0x10;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:115文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 NODE_ID_MAGIC_OFFSET = 0x00;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:117文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 NODE_ID_VALUE_OFFSET = 0x04;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:119文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 NODE_ID_COUNTER_OFFSET = 0x08;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:121文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 NODE_ID_CRC_OFFSET = 0x0C;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:125文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 OTA_CONFIG_NUM = 6;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:127文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_LATEST_AVAL_ADDR = 0x0801E000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:129文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_BACKUP_AVAL_ADDR = 0x0801E004;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:131文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_LATEST_EN_ADDR = 0x0801E008;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:133文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_BACKUP_EN_ADDR = 0x0801E00C;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:135文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_LATEST_CHECK_ADDR = 0x0801E010;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:137文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_BACKUP_CHECK_ADDR = 0x0801E014;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:139文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 OTA_NOT_AVAL = 0xFFFFFFFF;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:141文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 OTA_AVAL = 0x00000000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:145文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 PP = 11;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:147文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DIR = 1.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:149文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 REDUCTION_RATIO = 25;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:151文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_OFFSET = -3.31f / 2.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:153文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float HOLD_PWM_DUTY = 0.1f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:155文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 ANGLESENS_OFFSET = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:157文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLESENS_CALIBRATION_ANGLE = 83.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:159文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float KE_FACTOR = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:163文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_KALMAN_INITIAL_STATE = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:165文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_KALMAN_INITIAL_COVARIANCE = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:167文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_KALMAN_PROCESS_NOISE_Q = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:169文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_KALMAN_MEASUREMENT_NOISE_R = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:171文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_OBSERVER_ALPHA = 0.75f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:173文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_OBSERVER_BETA = 0.002f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:177文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VELOCITY_KALMAN_INITIAL_STATE = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:179文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VELOCITY_KALMAN_INITIAL_COVARIANCE = 1e-3f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:181文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VELOCITY_KALMAN_PROCESS_NOISE_Q =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:184文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VELOCITY_KALMAN_MEASUREMENT_NOISE_R =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:189文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_KALMAN_INITIAL_STATE = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:191文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_KALMAN_INITIAL_COVARIANCE = 100.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:193文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_KALMAN_PROCESS_NOISE_Q = 10.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:195文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_KALMAN_MEASUREMENT_NOISE_R = 5e-5f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:199文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_current_loop_p = 0.1f / 100 * 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:201文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float current_loop_Ki = 0.55f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:203文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float current_loop_Kd = 3e-4f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:206文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_vel_loop_p = 0.018f / 100 * 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:208文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_loop_Ku = 3.600000e-03 * 0.7 * 100 / 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:210文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_loop_Tu = 17.0f * 1e-3f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:212文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_loop_Ki = 1.2 * vel_loop_Ku / vel_loop_Tu;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:214文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_loop_Kd = 0.075 * vel_loop_Ku * vel_loop_Tu * 2;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:217文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_vel_angloop_p = 0.4f / 100;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:219文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_angloop_Ki = 5.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:221文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_angloop_Kd = 5e-05f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:224文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_angle_angloop_p =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:227文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ang_angloop_Ki = 0.00f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:229文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ang_angloop_Kd = 8e-04f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:232文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_angle_loop_p = 60.0f / 100 * 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:235文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_angle_MIT_p = 100.0f / 100 * 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:237文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float angle_MIT_Ki = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:239文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float angle_MIT_Kd = 8e-04f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:242文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_vel_MIT_p = 5.0f / 100;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:244文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_MIT_Ki = 15.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:246文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_MIT_Kd = 1e-04f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:249文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_current_MIT_p = 0.2f / 100 * 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:251文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float current_MIT_Ki = 0.1f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:253文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float current_MIT_Kd = 3e-4f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:260文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ADC_MAX = 65536.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:262文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float PI = 3.14159265358979323846f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:264文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float INV_PI_3 = 3.0f / PI;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:266文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float PI_3 = PI / 3.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:268文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float _1_SQRT3 = 0.57735026919f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:270文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float _3PI_2 = 4.71238898038f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:272文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float SQRT3 = 1.7320508075688772f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:274文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float SQRT3DV2 = 0.8660254037844386f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:276文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float COS_PI_3 = 0.5f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:278文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_FACTOR = 25.0f / 180.0f * PI;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:280文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEG2RAD = 1.0f / 180.0f * PI;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:282文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float RAD2DEG = 180.0f / PI;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:284文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 DEFAULT_VALUE = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:286文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 CONFIG_SAVED_NUM = 6;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:290文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 LUT_SIZE = 1024;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:301文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 DEV_CAN0_ID = 0x0000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:303文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 DEV_CAN0_MASK = 0x0000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:305文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 DEV_CAN_LOOPBACK_ID = 0x0000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:308文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_STATUS_ID = 0x0100;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:310文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_CONFIG_ID = 0x0101;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:312文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_VERSION_ID = 0x00FF;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:315文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_CMD_ID = 0x0200;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:317文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_RESET_ID = 0x0301;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:320文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_SET_NODE_ID = 0x0400;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:322文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_GET_NODE_ID = 0x0401;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:326文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_BOOT_ID = 0x0000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:328文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_OTA_REQ_ID = 0x0100;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:330文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_OTA_DATA_ID = 0x0101;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:332文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_OTA_ACK_ID = 0x0102;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:334文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_OTA_WAIT_ID = 0x0103;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:338文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 ADC_FILTER_SIZE = 6;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:340文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 BLOCK_SIZE = ADC_FILTER_SIZE * SIZE_FLOAT;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:342文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ERROR_ADC_VAL = 255.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:344文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MAX_TEMP = 150.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:346文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MIN_TEMP = -40.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:348文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MAX_CURRENT = 40.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:350文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MIN_CURRENT = -40.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:352文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MAX_VCC = 65.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:354文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MIN_VCC = -0.1f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:358文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 VEL_FILTER_SIZE = 4;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:360文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 DEFAULT_COMMAND = 0x0000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:362文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 FAULT_RECEIVE = 0xFFFF;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:364文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_WRAP_THRESHOLD = 300.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:366文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_WRAP_VALUE = 360.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:368文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float RAD_FACTOR = 1.0f / ADC_MAX * 2.0f * PI;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:370文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLESENS_FACTOR = 1.0f / ADC_MAX * 360.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:374文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER2_PRESCALER = 119;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:376文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER2_PERIOD = 49;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:378文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int MOTOR_PERIOD = 1;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:380文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float TIME_SLICE =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:383文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float TIMER2_FREQUENCY = 1 / TIME_SLICE;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:385文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MOTOR_FREQUENCY = 1 / TIME_SLICE / MOTOR_PERIOD;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:389文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER1_PRESCALER = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:391文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER1_PERIOD = 2999;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:393文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER1_DEFAULT_PULSE = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:395文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER1_CH3_COMPARE_VALUE =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:400文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 COGGING_TABLE_SIZE = 128;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:402文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float COGGING_COMP_SCALE = 0.005f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:413文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VBUS_DROP_THRESHOLD = 5.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:415文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VBUS_ABSOLUTE_MIN = 12.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:417文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 VBUS_DEBOUNCE_COUNT = 5;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:419文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VBUS_RECOVERY_RATIO = 0.9f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/health.cpp:19文件作用域可变全局对象,需确认封装、并发访问和初始化顺序ThermalController thermalController;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/health.cpp:25文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 PROTECT_TIME = 6000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/health.cpp:28文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static VoltageState voltage_state = VoltageState::NORMAL;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/health.cpp:29文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static float last_vbus_slow = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/initial.cpp:39文件作用域可变全局对象,需确认封装、并发访问和初始化顺序VersionManager Version;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/systick.cpp:53文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint32_t delay;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/systick.cpp:54文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint32_t systick_ms = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/systick.cpp:70文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint32_t task_enter_cyccnt = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/systick.cpp:71文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint32_t busy_cycles_accum = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/systick.cpp:72文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint16_t sample_seconds = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/systick.cpp:73文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint8_t cpu_usage = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/systick.cpp:74文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint8_t dwt_initialized = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-IRQ-001device/Can.cpp:709关中断后未在短窗口内看到开中断,需人工确认成对性__disable_irq();确认所有路径均恢复中断;避免临界区过长。
warning补充筛查SUP-IRQ-001sys/flash.cpp:888关中断后未在短窗口内看到开中断,需人工确认成对性__disable_irq();确认所有路径均恢复中断;避免临界区过长。
warning补充筛查SUP-IRQ-001sys/systick.cpp:256关中断后未在短窗口内看到开中断,需人工确认成对性__disable_irq();确认所有路径均恢复中断;避免临界区过长。
warning补充筛查SUP-SW-001Algorithm/FOC.cpp:89switch 语句疑似缺少 default 分支switch (cog_calib_state) {MISRA 通常要求 default;如枚举已全覆盖也建议显式说明。
warning复杂度评审METRIC-CCAlgorithm/FOC.cpp:75FOC_Controller::calibrate_cogging_tick 圈复杂度 33,risk=highAlgorithm/FOC.cpp:75-238 FOC_Controller::calibrate_cogging_tick人工评审分支完整性;必要时补单元测试或后续拆分。
warning复杂度评审METRIC-CCdevice/Can.cpp:1076CAN_transmiter::communication_check 圈复杂度 27,risk=highdevice/Can.cpp:1076-1300 CAN_transmiter::communication_check人工评审分支完整性;必要时补单元测试或后续拆分。
warning复杂度评审METRIC-CCmain.cpp:120do_task 圈复杂度 17,risk=highmain.cpp:120-205 do_task人工评审分支完整性;必要时补单元测试或后续拆分。
info复杂度评审METRIC-CCAlgorithm/FOC.cpp:392FOC_Controller::setSVPWM_PhaseVoltage 圈复杂度 15,risk=mediumAlgorithm/FOC.cpp:392-490 FOC_Controller::setSVPWM_PhaseVoltage人工评审分支完整性;必要时补单元测试或后续拆分。
info复杂度评审METRIC-CCsys/flash.cpp:308FlashEEPROM::writeFloat 圈复杂度 12,risk=mediumsys/flash.cpp:308-383 FlashEEPROM::writeFloat人工评审分支完整性;必要时补单元测试或后续拆分。
info复杂度评审METRIC-CCsys/health.cpp:35ThermalController::update 圈复杂度 12,risk=mediumsys/health.cpp:35-94 ThermalController::update人工评审分支完整性;必要时补单元测试或后续拆分。
info复杂度评审METRIC-CCdevice/Can.cpp:597can_loopback_test 圈复杂度 11,risk=mediumdevice/Can.cpp:597-665 can_loopback_test人工评审分支完整性;必要时补单元测试或后续拆分。
+
+
+ +

Top 圈复杂度

风险复杂度位置函数
high33Algorithm/FOC.cpp:75-238FOC_Controller::calibrate_cogging_tick
high27device/Can.cpp:1076-1300CAN_transmiter::communication_check
high17main.cpp:120-205do_task
medium15Algorithm/FOC.cpp:392-490FOC_Controller::setSVPWM_PhaseVoltage
medium12sys/flash.cpp:308-383FlashEEPROM::writeFloat
medium12sys/health.cpp:35-94ThermalController::update
medium11device/Can.cpp:597-665can_loopback_test
low10device/Can.cpp:1448-1504CAN_transmiter::CANFD_AsyncSend
low10sys/flash.cpp:90-161FlashEEPROM::read_saved_system_config
low10sys/flash.cpp:237-300FlashEEPROM::write
low10sys/flash.cpp:657-717FlashEEPROM::writeNodeId
low10sys/flash.cpp:928-1030move_app_data
low9device/Can.cpp:534-589canfd_loopback_test
low9sys/flash.cpp:413-482FlashEEPROM::save_system_config
low9sys/flash.cpp:792-879OTA_SET
low9sys/health.cpp:113-149power_manage
low8device/ADC.cpp:194-219sampler::get_current
low8sys/flash.cpp:724-776FlashEEPROM::writeCRC
low8sys/systick.cpp:244-298app_prepare_deep_sleep
low7device/Timer.cpp:134-184TIMER2_IRQHandler
low7sys/initial.cpp:256-290get_reset_cause
low6Algorithm/FOC.cpp:603-642FOC_Controller::fast_voltage_check
low6device/Can.cpp:1399-1440CAN_transmiter::CAN_AsyncSend
low6sys/flash.cpp:521-558read_node_id_struct
low6sys/initial.cpp:296-351OTA_initial
low5Algorithm/Filter.cpp:162-200EncoderAngleKalman::update
low5device/Can.cpp:800-824CAN_RX_ReadMetadata
low5device/Can.cpp:1355-1383DMA0_Channel4_IRQHandler
low5sys/flash.cpp:169-192FlashEEPROM::read
low5sys/flash.cpp:200-229FlashEEPROM::readFloat
+

优先级评审清单

**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/汇编;确认临界区长度和安全机制。
+

主规则清单

级别规则数量说明参考
infoAUTO-ARRAY-001251数组下标访问需审查边界保护MISRA C:2012 Rule 18.x
infoAUTO-ASM-00110关中断/低功耗/内联汇编等平台相关指令需审查MISRA C:2012 Dir 4.3 / project safety rule
infoAUTO-CAST-001223C 风格强制类型转换需审查必要性和范围MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x
warningAUTO-CTRL-0026continue 需避免或说明偏离MISRA C:2012 Rule 15.5 advisory / structured control flow
warningAUTO-FUNC-00231printf/格式化输出需确认调试隔离和实时性影响MISRA Dir 4.12 / project safety rule
infoAUTO-MACRO-00129函数式宏需审查括号、副作用和类型安全MISRA C:2012 Rule 20.x
warningAUTO-MET-0013圈复杂度 33 超过建议阈值 15Project metric threshold CC <= 15
+

补充规则清单

级别规则数量说明建议
warningSUP-CMP-00114浮点变量比较需确认容差或离散状态含义建议确认是否应使用阈值/容差比较。
infoSUP-DOC-00112接口/函数缺少紧邻 Doxygen 注释建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
warningSUP-GLB-001189文件作用域可变全局对象,需确认封装、并发访问和初始化顺序建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
infoSUP-GLB-00247extern 全局对象引用,需确认单一定义和共享访问保护确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
warningSUP-IRQ-0013关中断后未在短窗口内看到开中断,需人工确认成对性确认所有路径均恢复中断;避免临界区过长。
infoSUP-ISR-00118中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
infoSUP-LOOP-0014无限循环需确认退出策略、看门狗喂狗和低功耗策略确认循环内任务调度、异常退出/复位策略和看门狗策略。
infoSUP-MAG-001439业务代码中存在裸数字常量,需确认是否应命名化安全相关阈值/时间/比例建议用具名常量或配置宏。
warningSUP-SW-0011switch 语句疑似缺少 default 分支MISRA 通常要求 default;如枚举已全覆盖也建议显式说明。
+

主规则 Warning 明细

规则位置说明证据建议
AUTO-CTRL-002device/Can.cpp:1124continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-CTRL-002device/Can.cpp:1194continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-CTRL-002device/Can.cpp:1199continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-CTRL-002main.cpp:80continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-CTRL-002sys/flash.cpp:693continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-CTRL-002sys/systick.cpp:264continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:100printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:161printf/格式化输出需确认调试隔离和实时性影响printf("",人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:195printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:198printf/格式化输出需确认调试隔离和实时性影响printf("", angle_deg, cogging_table[i]);人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:203printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:206printf/格式化输出需确认调试隔离和实时性影响printf("", angle_deg, cogging_table_rev[i]);人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:211printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:212printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:214printf/格式化输出需确认调试隔离和实时性影响if (i % 8 == 0) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:215printf/格式化输出需确认调试隔离和实时性影响printf("", cogging_table[i]);人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:216printf/格式化输出需确认调试隔离和实时性影响if (i < COGGING_TABLE_SIZE - 1) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:217printf/格式化输出需确认调试隔离和实时性影响if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:220printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:223printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:224printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:226printf/格式化输出需确认调试隔离和实时性影响if (i % 8 == 0) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:227printf/格式化输出需确认调试隔离和实时性影响printf("", cogging_table_rev[i]);人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:228printf/格式化输出需确认调试隔离和实时性影响if (i < COGGING_TABLE_SIZE - 1) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:229printf/格式化输出需确认调试隔离和实时性影响if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:232printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:234printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002device/Can.cpp:30printf/格式化输出需确认调试隔离和实时性影响#define CAN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002device/ang_sensor.cpp:22printf/格式化输出需确认调试隔离和实时性影响#define ANG_SENS_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002device/motor.cpp:38printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002main.cpp:22printf/格式化输出需确认调试隔离和实时性影响#define MAIN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002sys/flash.cpp:22printf/格式化输出需确认调试隔离和实时性影响#define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002sys/flash.cpp:31printf/格式化输出需确认调试隔离和实时性影响#define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002sys/initial.cpp:23printf/格式化输出需确认调试隔离和实时性影响#define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002sys/initial.cpp:32printf/格式化输出需确认调试隔离和实时性影响#define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002sys/initial.cpp:129printf/格式化输出需确认调试隔离和实时性影响snprintf(buffer, bufSize, "", version.major, version.minor,人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002sys/systick.cpp:47printf/格式化输出需确认调试隔离和实时性影响#define SLEEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-MET-001Algorithm/FOC.cpp:75圈复杂度 33 超过建议阈值 15FOC_Controller::calibrate_cogging_tick建议人工评审分支完整性;后续允许时再考虑拆分或增加单元测试覆盖。
AUTO-MET-001device/Can.cpp:1076圈复杂度 27 超过建议阈值 15CAN_transmiter::communication_check建议人工评审分支完整性;后续允许时再考虑拆分或增加单元测试覆盖。
AUTO-MET-001main.cpp:120圈复杂度 17 超过建议阈值 15do_task建议人工评审分支完整性;后续允许时再考虑拆分或增加单元测试覆盖。
+

补充筛查 Warning 明细

规则位置说明证据建议
SUP-CMP-001Algorithm/FOC.cpp:53浮点变量比较需确认容差或离散状态含义if (rt_velocity < -0.5f) last_table = cogging_table_rev;建议确认是否应使用阈值/容差比较。
SUP-CMP-001Algorithm/FOC.cpp:54浮点变量比较需确认容差或离散状态含义else if (rt_velocity > 0.5f) last_table = cogging_table;建议确认是否应使用阈值/容差比较。
SUP-CMP-001Algorithm/FOC.cpp:404浮点变量比较需确认容差或离散状态含义u8 sector_code = (X > 0.0f ? 1u : 0u)建议确认是否应使用阈值/容差比较。
SUP-CMP-001Algorithm/FOC.cpp:405浮点变量比较需确认容差或离散状态含义+ (Y > 0.0f ? 2u : 0u)建议确认是否应使用阈值/容差比较。
SUP-CMP-001Algorithm/FOC.cpp:406浮点变量比较需确认容差或离散状态含义+ (Z > 0.0f ? 4u : 0u);建议确认是否应使用阈值/容差比较。
SUP-CMP-001Algorithm/FOC.cpp:534浮点变量比较需确认容差或离散状态含义if (HOLD_PWM_DUTY > 0.95f) {建议确认是否应使用阈值/容差比较。
SUP-CMP-001Algorithm/FOC.cpp:536浮点变量比较需确认容差或离散状态含义} else if (HOLD_PWM_DUTY < 0.0f) {建议确认是否应使用阈值/容差比较。
SUP-CMP-001Algorithm/FOC.cpp:569浮点变量比较需确认容差或离散状态含义if (voltage < 36.0f and voltage > 8.0f) {建议确认是否应使用阈值/容差比较。
SUP-CMP-001Algorithm/FOC.cpp:763浮点变量比较需确认容差或离散状态含义if (target_velocity < -120.0f) {建议确认是否应使用阈值/容差比较。
SUP-CMP-001Algorithm/FOC.cpp:765浮点变量比较需确认容差或离散状态含义} else if (target_velocity < -30.0f) {建议确认是否应使用阈值/容差比较。
SUP-CMP-001Algorithm/Filter.cpp:190浮点变量比较需确认容差或离散状态含义if (error > 180.0f) error -= 360.0f;建议确认是否应使用阈值/容差比较。
SUP-CMP-001Algorithm/Filter.cpp:191浮点变量比较需确认容差或离散状态含义else if (error < -180.0f) error += 360.0f;建议确认是否应使用阈值/容差比较。
SUP-CMP-001sys/config.h:427浮点变量比较需确认容差或离散状态含义while (angle >= 360.0f) angle -= 360.0f;建议确认是否应使用阈值/容差比较。
SUP-CMP-001sys/config.h:428浮点变量比较需确认容差或离散状态含义while (angle < 0.0f) angle += 360.0f;建议确认是否应使用阈值/容差比较。
SUP-GLB-001Algorithm/FOC.cpp:23文件作用域可变全局对象,需确认封装、并发访问和初始化顺序FOC_Controller FOC;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/ADC.cpp:20文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ADC_SCALE = 3.3f / 4096.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/ADC.cpp:22文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float TEMP_FACTOR = 1000.0f / 4.3f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/ADC.cpp:24文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VCC_FACTOR = 11.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/ADC.cpp:26文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_FACTOR =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/ADC.cpp:30文件作用域可变全局对象,需确认封装、并发访问和初始化顺序sampler sampler;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/ADC.cpp:33文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 adc_current_frame_ready = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Can.cpp:37文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANX = CAN0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Can.cpp:48文件作用域可变全局对象,需确认封装、并发访问和初始化顺序dma_parameter_struct dma_rx_parameter;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Can.cpp:51文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile bool can_rx_dma_busy = false;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Can.cpp:52文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static can_receive_message_struct can_rx_dma_message;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Can.cpp:72文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 rx_queue_head = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Can.cpp:73文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 rx_queue_tail = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Can.cpp:74文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 rx_queue_count = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Can.cpp:77文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 tx_queue_head = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Can.cpp:78文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 tx_queue_tail = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Can.cpp:79文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 tx_queue_count = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Can.cpp:84文件作用域可变全局对象,需确认封装、并发访问和初始化顺序CAN_transmiter CAN0_transmiter;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Timer.cpp:18文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile u32 total_us100_counter = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/ang_sensor.cpp:38文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile bool spi_dma_tx_complete = false;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/ang_sensor.cpp:39文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile bool spi_dma_rx_complete = false;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/ang_sensor.cpp:41文件作用域可变全局对象,需确认封装、并发访问和初始化顺序angle_sensor KTH7823;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001main.cpp:39文件作用域可变全局对象,需确认封装、并发访问和初始化顺序TaskScheduler scheduler = {0};建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001main.cpp:40文件作用域可变全局对象,需确认封装、并发访问和初始化顺序u32 motor_runtime_50us = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001main.cpp:41文件作用域可变全局对象,需确认封装、并发访问和初始化顺序u32 cnt_test = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:32文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 SOFTWARE_VERSION_MAJOR = 26;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:34文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 SOFTWARE_VERSION_MINOR = 5;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:36文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 SOFTWARE_VERSION_PATCH = 19;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:38文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 SOFTWARE_VERSION_BUILD = 2;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:41文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 HARDWARE_VERSION_MAJOR = 25;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:43文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 HARDWARE_VERSION_MINOR = 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:45文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 HARDWARE_VERSION_PATCH = 01;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:47文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 HARDWARE_VERSION_BUILD = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:50文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 BOOT_VERSION_MAJOR = 26;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:52文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 BOOT_VERSION_MINOR = 1;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:54文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 BOOT_VERSION_PATCH = 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:56文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 BOOT_VERSION_BUILD = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:60文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 BOOTLOADER_SIZE = 0x6000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:62文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 BOOTLOADER_START_ADDR = 0x08000000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:64文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 APPLATEST_START_ADDR = 0x08012000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:66文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 APPBACK_START_ADDR = 0x08006000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:68文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 APP_MAX_SIZE = 0xC000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:70文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 FMC_PAGE_SIZE = 0x400;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:72文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 SLEEP_CONFIG_START = 0x0801E400;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:74文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 SLEEP_CONFIG_END = 0x0801E800;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:76文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 FLASH_EMPTY = 0xFFFFFFFF;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:78文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 SLEEP_ENABLE = 0x11111111;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:80文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 SLEEP_DISABLE = 0x00000000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:92文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 NODE_ID_PAGE_ADDR = 0x0801E800;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:94文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 NODE_ID_PRIMARY_ADDR = 0x0801E800;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:96文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 NODE_ID_BACKUP_ADDR = 0x0801E840;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:98文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 NODE_ID_MAGIC = 0x4E4F4445;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:100文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 DEFAULT_NODE_ID = 1;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:102文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 BROADCAST_NODE_ID = 0x1FFF;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:104文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 MAX_NODE_ID = 0x1FFE;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:113文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 NODE_ID_STRUCT_SIZE = 0x10;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:115文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 NODE_ID_MAGIC_OFFSET = 0x00;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:117文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 NODE_ID_VALUE_OFFSET = 0x04;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:119文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 NODE_ID_COUNTER_OFFSET = 0x08;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:121文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 NODE_ID_CRC_OFFSET = 0x0C;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:125文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 OTA_CONFIG_NUM = 6;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:127文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_LATEST_AVAL_ADDR = 0x0801E000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:129文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_BACKUP_AVAL_ADDR = 0x0801E004;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:131文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_LATEST_EN_ADDR = 0x0801E008;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:133文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_BACKUP_EN_ADDR = 0x0801E00C;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:135文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_LATEST_CHECK_ADDR = 0x0801E010;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:137文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_BACKUP_CHECK_ADDR = 0x0801E014;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:139文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 OTA_NOT_AVAL = 0xFFFFFFFF;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:141文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 OTA_AVAL = 0x00000000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:145文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 PP = 11;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:147文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DIR = 1.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:149文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 REDUCTION_RATIO = 25;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:151文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_OFFSET = -3.31f / 2.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:153文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float HOLD_PWM_DUTY = 0.1f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:155文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 ANGLESENS_OFFSET = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:157文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLESENS_CALIBRATION_ANGLE = 83.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:159文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float KE_FACTOR = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:163文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_KALMAN_INITIAL_STATE = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:165文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_KALMAN_INITIAL_COVARIANCE = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:167文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_KALMAN_PROCESS_NOISE_Q = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:169文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_KALMAN_MEASUREMENT_NOISE_R = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:171文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_OBSERVER_ALPHA = 0.75f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:173文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_OBSERVER_BETA = 0.002f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:177文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VELOCITY_KALMAN_INITIAL_STATE = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:179文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VELOCITY_KALMAN_INITIAL_COVARIANCE = 1e-3f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:181文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VELOCITY_KALMAN_PROCESS_NOISE_Q =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:184文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VELOCITY_KALMAN_MEASUREMENT_NOISE_R =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:189文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_KALMAN_INITIAL_STATE = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:191文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_KALMAN_INITIAL_COVARIANCE = 100.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:193文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_KALMAN_PROCESS_NOISE_Q = 10.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:195文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_KALMAN_MEASUREMENT_NOISE_R = 5e-5f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:199文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_current_loop_p = 0.1f / 100 * 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:201文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float current_loop_Ki = 0.55f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:203文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float current_loop_Kd = 3e-4f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:206文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_vel_loop_p = 0.018f / 100 * 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:208文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_loop_Ku = 3.600000e-03 * 0.7 * 100 / 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:210文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_loop_Tu = 17.0f * 1e-3f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:212文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_loop_Ki = 1.2 * vel_loop_Ku / vel_loop_Tu;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:214文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_loop_Kd = 0.075 * vel_loop_Ku * vel_loop_Tu * 2;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:217文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_vel_angloop_p = 0.4f / 100;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:219文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_angloop_Ki = 5.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:221文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_angloop_Kd = 5e-05f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:224文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_angle_angloop_p =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:227文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ang_angloop_Ki = 0.00f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:229文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ang_angloop_Kd = 8e-04f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:232文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_angle_loop_p = 60.0f / 100 * 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:235文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_angle_MIT_p = 100.0f / 100 * 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:237文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float angle_MIT_Ki = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:239文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float angle_MIT_Kd = 8e-04f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:242文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_vel_MIT_p = 5.0f / 100;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:244文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_MIT_Ki = 15.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:246文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_MIT_Kd = 1e-04f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:249文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_current_MIT_p = 0.2f / 100 * 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:251文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float current_MIT_Ki = 0.1f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:253文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float current_MIT_Kd = 3e-4f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:260文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ADC_MAX = 65536.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:262文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float PI = 3.14159265358979323846f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:264文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float INV_PI_3 = 3.0f / PI;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:266文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float PI_3 = PI / 3.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:268文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float _1_SQRT3 = 0.57735026919f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:270文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float _3PI_2 = 4.71238898038f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:272文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float SQRT3 = 1.7320508075688772f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:274文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float SQRT3DV2 = 0.8660254037844386f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:276文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float COS_PI_3 = 0.5f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:278文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_FACTOR = 25.0f / 180.0f * PI;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:280文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEG2RAD = 1.0f / 180.0f * PI;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:282文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float RAD2DEG = 180.0f / PI;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:284文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 DEFAULT_VALUE = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:286文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 CONFIG_SAVED_NUM = 6;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:290文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 LUT_SIZE = 1024;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:301文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 DEV_CAN0_ID = 0x0000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:303文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 DEV_CAN0_MASK = 0x0000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:305文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 DEV_CAN_LOOPBACK_ID = 0x0000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:308文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_STATUS_ID = 0x0100;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:310文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_CONFIG_ID = 0x0101;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:312文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_VERSION_ID = 0x00FF;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:315文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_CMD_ID = 0x0200;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:317文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_RESET_ID = 0x0301;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:320文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_SET_NODE_ID = 0x0400;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:322文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_GET_NODE_ID = 0x0401;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:326文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_BOOT_ID = 0x0000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:328文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_OTA_REQ_ID = 0x0100;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:330文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_OTA_DATA_ID = 0x0101;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:332文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_OTA_ACK_ID = 0x0102;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:334文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_OTA_WAIT_ID = 0x0103;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:338文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 ADC_FILTER_SIZE = 6;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:340文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 BLOCK_SIZE = ADC_FILTER_SIZE * SIZE_FLOAT;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:342文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ERROR_ADC_VAL = 255.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:344文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MAX_TEMP = 150.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:346文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MIN_TEMP = -40.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:348文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MAX_CURRENT = 40.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:350文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MIN_CURRENT = -40.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:352文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MAX_VCC = 65.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:354文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MIN_VCC = -0.1f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:358文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 VEL_FILTER_SIZE = 4;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:360文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 DEFAULT_COMMAND = 0x0000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:362文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 FAULT_RECEIVE = 0xFFFF;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:364文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_WRAP_THRESHOLD = 300.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:366文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_WRAP_VALUE = 360.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:368文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float RAD_FACTOR = 1.0f / ADC_MAX * 2.0f * PI;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:370文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLESENS_FACTOR = 1.0f / ADC_MAX * 360.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:374文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER2_PRESCALER = 119;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:376文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER2_PERIOD = 49;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:378文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int MOTOR_PERIOD = 1;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:380文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float TIME_SLICE =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:383文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float TIMER2_FREQUENCY = 1 / TIME_SLICE;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:385文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MOTOR_FREQUENCY = 1 / TIME_SLICE / MOTOR_PERIOD;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:389文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER1_PRESCALER = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:391文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER1_PERIOD = 2999;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:393文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER1_DEFAULT_PULSE = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:395文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER1_CH3_COMPARE_VALUE =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:400文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 COGGING_TABLE_SIZE = 128;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:402文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float COGGING_COMP_SCALE = 0.005f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:413文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VBUS_DROP_THRESHOLD = 5.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:415文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VBUS_ABSOLUTE_MIN = 12.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:417文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 VBUS_DEBOUNCE_COUNT = 5;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:419文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VBUS_RECOVERY_RATIO = 0.9f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/health.cpp:19文件作用域可变全局对象,需确认封装、并发访问和初始化顺序ThermalController thermalController;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/health.cpp:25文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 PROTECT_TIME = 6000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/health.cpp:28文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static VoltageState voltage_state = VoltageState::NORMAL;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/health.cpp:29文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static float last_vbus_slow = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/initial.cpp:39文件作用域可变全局对象,需确认封装、并发访问和初始化顺序VersionManager Version;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/systick.cpp:53文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint32_t delay;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/systick.cpp:54文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint32_t systick_ms = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/systick.cpp:70文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint32_t task_enter_cyccnt = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/systick.cpp:71文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint32_t busy_cycles_accum = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/systick.cpp:72文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint16_t sample_seconds = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/systick.cpp:73文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint8_t cpu_usage = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/systick.cpp:74文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint8_t dwt_initialized = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-IRQ-001device/Can.cpp:709关中断后未在短窗口内看到开中断,需人工确认成对性__disable_irq();确认所有路径均恢复中断;避免临界区过长。
SUP-IRQ-001sys/flash.cpp:888关中断后未在短窗口内看到开中断,需人工确认成对性__disable_irq();确认所有路径均恢复中断;避免临界区过长。
SUP-IRQ-001sys/systick.cpp:256关中断后未在短窗口内看到开中断,需人工确认成对性__disable_irq();确认所有路径均恢复中断;避免临界区过长。
SUP-SW-001Algorithm/FOC.cpp:89switch 语句疑似缺少 default 分支switch (cog_calib_state) {MISRA 通常要求 default;如枚举已全覆盖也建议显式说明。
+

输出文件

  • report.html:合并后的 HTML 报告
  • findings.csv:主规则命中明细
  • supplement_findings.csv:补充筛查明细
  • metrics.csv:函数复杂度
  • files.csv:文件范围、行数和 hash
  • supplement_report.md:补充筛查 Markdown 摘要
+ + + + \ No newline at end of file diff --git a/static_test_automotive_business_20260523/report.md b/static_test_automotive_business_20260523/report.md new file mode 100644 index 0000000..febe4e6 --- /dev/null +++ b/static_test_automotive_business_20260523/report.md @@ -0,0 +1,143 @@ +# 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 diff --git a/static_test_automotive_business_20260523/report_checklist.html b/static_test_automotive_business_20260523/report_checklist.html new file mode 100644 index 0000000..3519bb1 --- /dev/null +++ b/static_test_automotive_business_20260523/report_checklist.html @@ -0,0 +1,2781 @@ +ROBOT_V2 APP 汽车电子静态测试报告 +
+

ROBOT_V2 APP 汽车电子静态测试报告

范围:业务代码 Algorithm/、device/、sys/、main.cpp、main.h;排除第三方 GD32 RTE。
本版本已加入补充筛查:Doxygen 覆盖、全局状态、switch default、无限循环、关中断成对性、ISR、magic number、浮点比较等。只生成报告,不修改源码逻辑。
未发现 Error 级硬性高风险项
+
扫描文件数
29
非空代码行估算
4272
主规则 Warning
40
补充 Warning
207
+

主规则命中分布

AUTO-ARRAY-001251
AUTO-CAST-001223
AUTO-FUNC-00231
AUTO-MACRO-00129
AUTO-ASM-00110
AUTO-CTRL-0026
AUTO-MET-0013

补充规则命中分布

SUP-MAG-001439
SUP-GLB-001189
SUP-GLB-00247
SUP-ISR-00118
SUP-CMP-00114
SUP-DOC-00112
SUP-LOOP-0014
SUP-IRQ-0013
SUP-SW-0011
+

高优先级结论

  • 主规则仍未发现动态内存、goto、高风险 C 字符串/输入函数等硬性高风险项。
  • 补充筛查发现:全局可变状态较多、1 处 switch 缺少 default 候选、3 处关中断成对性需人工确认、14 处浮点阈值比较需确认语义。
  • 裸数字常量命中较多,不建议机械全改,应优先处理安全阈值、时间常数、比例系数。
+ + +
+

可保存修复确认清单

+
+ 每条审查项都可以打勾。勾选状态会自动保存到当前浏览器的 localStorage。Chromium 浏览器还可以点“绑定进度 JSON 文件”,授权后每次勾选都会同步写入该 JSON;每次打开可点“读取绑定文件”恢复。为防止换电脑或清缓存丢失,也可以用“导出/导入进度 JSON”。 +
+
+
0 / 254
+ + + + + + + + + + 文件同步:未绑定 +
+
本清单共 254 项:error 0,warning 250,info 4。保存键:robot_v2_app_static_report_checklist_v1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
确认级别分组规则位置说明证据建议
warning主规则AUTO-CTRL-002device/Can.cpp:1124continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-CTRL-002device/Can.cpp:1194continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-CTRL-002device/Can.cpp:1199continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-CTRL-002main.cpp:80continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-CTRL-002sys/flash.cpp:693continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-CTRL-002sys/systick.cpp:264continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:100printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:161printf/格式化输出需确认调试隔离和实时性影响printf("",人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:195printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:198printf/格式化输出需确认调试隔离和实时性影响printf("", angle_deg, cogging_table[i]);人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:203printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:206printf/格式化输出需确认调试隔离和实时性影响printf("", angle_deg, cogging_table_rev[i]);人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:211printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:212printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:214printf/格式化输出需确认调试隔离和实时性影响if (i % 8 == 0) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:215printf/格式化输出需确认调试隔离和实时性影响printf("", cogging_table[i]);人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:216printf/格式化输出需确认调试隔离和实时性影响if (i < COGGING_TABLE_SIZE - 1) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:217printf/格式化输出需确认调试隔离和实时性影响if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:220printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:223printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:224printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:226printf/格式化输出需确认调试隔离和实时性影响if (i % 8 == 0) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:227printf/格式化输出需确认调试隔离和实时性影响printf("", cogging_table_rev[i]);人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:228printf/格式化输出需确认调试隔离和实时性影响if (i < COGGING_TABLE_SIZE - 1) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:229printf/格式化输出需确认调试隔离和实时性影响if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:232printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002Algorithm/FOC.cpp:234printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002device/Can.cpp:30printf/格式化输出需确认调试隔离和实时性影响#define CAN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002device/ang_sensor.cpp:22printf/格式化输出需确认调试隔离和实时性影响#define ANG_SENS_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002device/motor.cpp:38printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002main.cpp:22printf/格式化输出需确认调试隔离和实时性影响#define MAIN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002sys/flash.cpp:22printf/格式化输出需确认调试隔离和实时性影响#define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002sys/flash.cpp:31printf/格式化输出需确认调试隔离和实时性影响#define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002sys/initial.cpp:23printf/格式化输出需确认调试隔离和实时性影响#define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002sys/initial.cpp:32printf/格式化输出需确认调试隔离和实时性影响#define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002sys/initial.cpp:129printf/格式化输出需确认调试隔离和实时性影响snprintf(buffer, bufSize, "", version.major, version.minor,人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-FUNC-002sys/systick.cpp:47printf/格式化输出需确认调试隔离和实时性影响#define SLEEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
warning主规则AUTO-MET-001Algorithm/FOC.cpp:75圈复杂度 33 超过建议阈值 15FOC_Controller::calibrate_cogging_tick建议人工评审分支完整性;后续允许时再考虑拆分或增加单元测试覆盖。
warning主规则AUTO-MET-001device/Can.cpp:1076圈复杂度 27 超过建议阈值 15CAN_transmiter::communication_check建议人工评审分支完整性;后续允许时再考虑拆分或增加单元测试覆盖。
warning主规则AUTO-MET-001main.cpp:120圈复杂度 17 超过建议阈值 15do_task建议人工评审分支完整性;后续允许时再考虑拆分或增加单元测试覆盖。
warning补充筛查SUP-CMP-001Algorithm/FOC.cpp:53浮点变量比较需确认容差或离散状态含义if (rt_velocity < -0.5f) last_table = cogging_table_rev;建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001Algorithm/FOC.cpp:54浮点变量比较需确认容差或离散状态含义else if (rt_velocity > 0.5f) last_table = cogging_table;建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001Algorithm/FOC.cpp:404浮点变量比较需确认容差或离散状态含义u8 sector_code = (X > 0.0f ? 1u : 0u)建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001Algorithm/FOC.cpp:405浮点变量比较需确认容差或离散状态含义+ (Y > 0.0f ? 2u : 0u)建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001Algorithm/FOC.cpp:406浮点变量比较需确认容差或离散状态含义+ (Z > 0.0f ? 4u : 0u);建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001Algorithm/FOC.cpp:534浮点变量比较需确认容差或离散状态含义if (HOLD_PWM_DUTY > 0.95f) {建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001Algorithm/FOC.cpp:536浮点变量比较需确认容差或离散状态含义} else if (HOLD_PWM_DUTY < 0.0f) {建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001Algorithm/FOC.cpp:569浮点变量比较需确认容差或离散状态含义if (voltage < 36.0f and voltage > 8.0f) {建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001Algorithm/FOC.cpp:763浮点变量比较需确认容差或离散状态含义if (target_velocity < -120.0f) {建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001Algorithm/FOC.cpp:765浮点变量比较需确认容差或离散状态含义} else if (target_velocity < -30.0f) {建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001Algorithm/Filter.cpp:190浮点变量比较需确认容差或离散状态含义if (error > 180.0f) error -= 360.0f;建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001Algorithm/Filter.cpp:191浮点变量比较需确认容差或离散状态含义else if (error < -180.0f) error += 360.0f;建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001sys/config.h:427浮点变量比较需确认容差或离散状态含义while (angle >= 360.0f) angle -= 360.0f;建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-CMP-001sys/config.h:428浮点变量比较需确认容差或离散状态含义while (angle < 0.0f) angle += 360.0f;建议确认是否应使用阈值/容差比较。
warning补充筛查SUP-GLB-001Algorithm/FOC.cpp:23文件作用域可变全局对象,需确认封装、并发访问和初始化顺序FOC_Controller FOC;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/ADC.cpp:20文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ADC_SCALE = 3.3f / 4096.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/ADC.cpp:22文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float TEMP_FACTOR = 1000.0f / 4.3f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/ADC.cpp:24文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VCC_FACTOR = 11.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/ADC.cpp:26文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_FACTOR =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/ADC.cpp:30文件作用域可变全局对象,需确认封装、并发访问和初始化顺序sampler sampler;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/ADC.cpp:33文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 adc_current_frame_ready = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Can.cpp:37文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANX = CAN0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Can.cpp:48文件作用域可变全局对象,需确认封装、并发访问和初始化顺序dma_parameter_struct dma_rx_parameter;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Can.cpp:51文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile bool can_rx_dma_busy = false;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Can.cpp:52文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static can_receive_message_struct can_rx_dma_message;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Can.cpp:72文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 rx_queue_head = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Can.cpp:73文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 rx_queue_tail = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Can.cpp:74文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 rx_queue_count = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Can.cpp:77文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 tx_queue_head = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Can.cpp:78文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 tx_queue_tail = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Can.cpp:79文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 tx_queue_count = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Can.cpp:84文件作用域可变全局对象,需确认封装、并发访问和初始化顺序CAN_transmiter CAN0_transmiter;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/Timer.cpp:18文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile u32 total_us100_counter = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/ang_sensor.cpp:38文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile bool spi_dma_tx_complete = false;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/ang_sensor.cpp:39文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile bool spi_dma_rx_complete = false;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001device/ang_sensor.cpp:41文件作用域可变全局对象,需确认封装、并发访问和初始化顺序angle_sensor KTH7823;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001main.cpp:39文件作用域可变全局对象,需确认封装、并发访问和初始化顺序TaskScheduler scheduler = {0};建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001main.cpp:40文件作用域可变全局对象,需确认封装、并发访问和初始化顺序u32 motor_runtime_50us = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001main.cpp:41文件作用域可变全局对象,需确认封装、并发访问和初始化顺序u32 cnt_test = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:32文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 SOFTWARE_VERSION_MAJOR = 26;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:34文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 SOFTWARE_VERSION_MINOR = 5;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:36文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 SOFTWARE_VERSION_PATCH = 19;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:38文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 SOFTWARE_VERSION_BUILD = 2;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:41文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 HARDWARE_VERSION_MAJOR = 25;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:43文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 HARDWARE_VERSION_MINOR = 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:45文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 HARDWARE_VERSION_PATCH = 01;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:47文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 HARDWARE_VERSION_BUILD = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:50文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 BOOT_VERSION_MAJOR = 26;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:52文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 BOOT_VERSION_MINOR = 1;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:54文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 BOOT_VERSION_PATCH = 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:56文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 BOOT_VERSION_BUILD = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:60文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 BOOTLOADER_SIZE = 0x6000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:62文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 BOOTLOADER_START_ADDR = 0x08000000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:64文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 APPLATEST_START_ADDR = 0x08012000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:66文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 APPBACK_START_ADDR = 0x08006000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:68文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 APP_MAX_SIZE = 0xC000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:70文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 FMC_PAGE_SIZE = 0x400;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:72文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 SLEEP_CONFIG_START = 0x0801E400;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:74文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 SLEEP_CONFIG_END = 0x0801E800;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:76文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 FLASH_EMPTY = 0xFFFFFFFF;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:78文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 SLEEP_ENABLE = 0x11111111;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:80文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 SLEEP_DISABLE = 0x00000000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:92文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 NODE_ID_PAGE_ADDR = 0x0801E800;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:94文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 NODE_ID_PRIMARY_ADDR = 0x0801E800;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:96文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 NODE_ID_BACKUP_ADDR = 0x0801E840;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:98文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 NODE_ID_MAGIC = 0x4E4F4445;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:100文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 DEFAULT_NODE_ID = 1;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:102文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 BROADCAST_NODE_ID = 0x1FFF;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:104文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 MAX_NODE_ID = 0x1FFE;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:113文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 NODE_ID_STRUCT_SIZE = 0x10;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:115文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 NODE_ID_MAGIC_OFFSET = 0x00;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:117文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 NODE_ID_VALUE_OFFSET = 0x04;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:119文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 NODE_ID_COUNTER_OFFSET = 0x08;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:121文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 NODE_ID_CRC_OFFSET = 0x0C;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:125文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 OTA_CONFIG_NUM = 6;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:127文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_LATEST_AVAL_ADDR = 0x0801E000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:129文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_BACKUP_AVAL_ADDR = 0x0801E004;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:131文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_LATEST_EN_ADDR = 0x0801E008;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:133文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_BACKUP_EN_ADDR = 0x0801E00C;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:135文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_LATEST_CHECK_ADDR = 0x0801E010;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:137文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_BACKUP_CHECK_ADDR = 0x0801E014;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:139文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 OTA_NOT_AVAL = 0xFFFFFFFF;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:141文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 OTA_AVAL = 0x00000000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:145文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 PP = 11;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:147文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DIR = 1.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:149文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 REDUCTION_RATIO = 25;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:151文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_OFFSET = -3.31f / 2.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:153文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float HOLD_PWM_DUTY = 0.1f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:155文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 ANGLESENS_OFFSET = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:157文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLESENS_CALIBRATION_ANGLE = 83.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:159文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float KE_FACTOR = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:163文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_KALMAN_INITIAL_STATE = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:165文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_KALMAN_INITIAL_COVARIANCE = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:167文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_KALMAN_PROCESS_NOISE_Q = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:169文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_KALMAN_MEASUREMENT_NOISE_R = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:171文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_OBSERVER_ALPHA = 0.75f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:173文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_OBSERVER_BETA = 0.002f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:177文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VELOCITY_KALMAN_INITIAL_STATE = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:179文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VELOCITY_KALMAN_INITIAL_COVARIANCE = 1e-3f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:181文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VELOCITY_KALMAN_PROCESS_NOISE_Q =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:184文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VELOCITY_KALMAN_MEASUREMENT_NOISE_R =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:189文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_KALMAN_INITIAL_STATE = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:191文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_KALMAN_INITIAL_COVARIANCE = 100.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:193文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_KALMAN_PROCESS_NOISE_Q = 10.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:195文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_KALMAN_MEASUREMENT_NOISE_R = 5e-5f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:199文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_current_loop_p = 0.1f / 100 * 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:201文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float current_loop_Ki = 0.55f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:203文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float current_loop_Kd = 3e-4f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:206文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_vel_loop_p = 0.018f / 100 * 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:208文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_loop_Ku = 3.600000e-03 * 0.7 * 100 / 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:210文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_loop_Tu = 17.0f * 1e-3f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:212文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_loop_Ki = 1.2 * vel_loop_Ku / vel_loop_Tu;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:214文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_loop_Kd = 0.075 * vel_loop_Ku * vel_loop_Tu * 2;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:217文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_vel_angloop_p = 0.4f / 100;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:219文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_angloop_Ki = 5.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:221文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_angloop_Kd = 5e-05f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:224文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_angle_angloop_p =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:227文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ang_angloop_Ki = 0.00f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:229文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ang_angloop_Kd = 8e-04f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:232文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_angle_loop_p = 60.0f / 100 * 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:235文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_angle_MIT_p = 100.0f / 100 * 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:237文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float angle_MIT_Ki = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:239文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float angle_MIT_Kd = 8e-04f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:242文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_vel_MIT_p = 5.0f / 100;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:244文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_MIT_Ki = 15.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:246文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_MIT_Kd = 1e-04f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:249文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_current_MIT_p = 0.2f / 100 * 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:251文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float current_MIT_Ki = 0.1f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:253文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float current_MIT_Kd = 3e-4f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:260文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ADC_MAX = 65536.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:262文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float PI = 3.14159265358979323846f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:264文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float INV_PI_3 = 3.0f / PI;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:266文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float PI_3 = PI / 3.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:268文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float _1_SQRT3 = 0.57735026919f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:270文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float _3PI_2 = 4.71238898038f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:272文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float SQRT3 = 1.7320508075688772f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:274文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float SQRT3DV2 = 0.8660254037844386f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:276文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float COS_PI_3 = 0.5f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:278文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_FACTOR = 25.0f / 180.0f * PI;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:280文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEG2RAD = 1.0f / 180.0f * PI;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:282文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float RAD2DEG = 180.0f / PI;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:284文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 DEFAULT_VALUE = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:286文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 CONFIG_SAVED_NUM = 6;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:290文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 LUT_SIZE = 1024;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:301文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 DEV_CAN0_ID = 0x0000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:303文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 DEV_CAN0_MASK = 0x0000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:305文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 DEV_CAN_LOOPBACK_ID = 0x0000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:308文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_STATUS_ID = 0x0100;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:310文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_CONFIG_ID = 0x0101;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:312文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_VERSION_ID = 0x00FF;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:315文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_CMD_ID = 0x0200;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:317文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_RESET_ID = 0x0301;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:320文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_SET_NODE_ID = 0x0400;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:322文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_GET_NODE_ID = 0x0401;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:326文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_BOOT_ID = 0x0000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:328文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_OTA_REQ_ID = 0x0100;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:330文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_OTA_DATA_ID = 0x0101;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:332文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_OTA_ACK_ID = 0x0102;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:334文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_OTA_WAIT_ID = 0x0103;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:338文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 ADC_FILTER_SIZE = 6;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:340文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 BLOCK_SIZE = ADC_FILTER_SIZE * SIZE_FLOAT;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:342文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ERROR_ADC_VAL = 255.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:344文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MAX_TEMP = 150.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:346文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MIN_TEMP = -40.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:348文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MAX_CURRENT = 40.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:350文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MIN_CURRENT = -40.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:352文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MAX_VCC = 65.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:354文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MIN_VCC = -0.1f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:358文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 VEL_FILTER_SIZE = 4;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:360文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 DEFAULT_COMMAND = 0x0000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:362文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 FAULT_RECEIVE = 0xFFFF;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:364文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_WRAP_THRESHOLD = 300.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:366文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_WRAP_VALUE = 360.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:368文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float RAD_FACTOR = 1.0f / ADC_MAX * 2.0f * PI;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:370文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLESENS_FACTOR = 1.0f / ADC_MAX * 360.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:374文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER2_PRESCALER = 119;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:376文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER2_PERIOD = 49;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:378文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int MOTOR_PERIOD = 1;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:380文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float TIME_SLICE =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:383文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float TIMER2_FREQUENCY = 1 / TIME_SLICE;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:385文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MOTOR_FREQUENCY = 1 / TIME_SLICE / MOTOR_PERIOD;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:389文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER1_PRESCALER = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:391文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER1_PERIOD = 2999;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:393文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER1_DEFAULT_PULSE = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:395文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER1_CH3_COMPARE_VALUE =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:400文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 COGGING_TABLE_SIZE = 128;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:402文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float COGGING_COMP_SCALE = 0.005f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:413文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VBUS_DROP_THRESHOLD = 5.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:415文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VBUS_ABSOLUTE_MIN = 12.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:417文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 VBUS_DEBOUNCE_COUNT = 5;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/config.h:419文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VBUS_RECOVERY_RATIO = 0.9f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/health.cpp:19文件作用域可变全局对象,需确认封装、并发访问和初始化顺序ThermalController thermalController;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/health.cpp:25文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 PROTECT_TIME = 6000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/health.cpp:28文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static VoltageState voltage_state = VoltageState::NORMAL;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/health.cpp:29文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static float last_vbus_slow = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/initial.cpp:39文件作用域可变全局对象,需确认封装、并发访问和初始化顺序VersionManager Version;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/systick.cpp:53文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint32_t delay;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/systick.cpp:54文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint32_t systick_ms = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/systick.cpp:70文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint32_t task_enter_cyccnt = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/systick.cpp:71文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint32_t busy_cycles_accum = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/systick.cpp:72文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint16_t sample_seconds = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/systick.cpp:73文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint8_t cpu_usage = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-GLB-001sys/systick.cpp:74文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint8_t dwt_initialized = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
warning补充筛查SUP-IRQ-001device/Can.cpp:709关中断后未在短窗口内看到开中断,需人工确认成对性__disable_irq();确认所有路径均恢复中断;避免临界区过长。
warning补充筛查SUP-IRQ-001sys/flash.cpp:888关中断后未在短窗口内看到开中断,需人工确认成对性__disable_irq();确认所有路径均恢复中断;避免临界区过长。
warning补充筛查SUP-IRQ-001sys/systick.cpp:256关中断后未在短窗口内看到开中断,需人工确认成对性__disable_irq();确认所有路径均恢复中断;避免临界区过长。
warning补充筛查SUP-SW-001Algorithm/FOC.cpp:89switch 语句疑似缺少 default 分支switch (cog_calib_state) {MISRA 通常要求 default;如枚举已全覆盖也建议显式说明。
warning复杂度评审METRIC-CCAlgorithm/FOC.cpp:75FOC_Controller::calibrate_cogging_tick 圈复杂度 33,risk=highAlgorithm/FOC.cpp:75-238 FOC_Controller::calibrate_cogging_tick人工评审分支完整性;必要时补单元测试或后续拆分。
warning复杂度评审METRIC-CCdevice/Can.cpp:1076CAN_transmiter::communication_check 圈复杂度 27,risk=highdevice/Can.cpp:1076-1300 CAN_transmiter::communication_check人工评审分支完整性;必要时补单元测试或后续拆分。
warning复杂度评审METRIC-CCmain.cpp:120do_task 圈复杂度 17,risk=highmain.cpp:120-205 do_task人工评审分支完整性;必要时补单元测试或后续拆分。
info复杂度评审METRIC-CCAlgorithm/FOC.cpp:392FOC_Controller::setSVPWM_PhaseVoltage 圈复杂度 15,risk=mediumAlgorithm/FOC.cpp:392-490 FOC_Controller::setSVPWM_PhaseVoltage人工评审分支完整性;必要时补单元测试或后续拆分。
info复杂度评审METRIC-CCsys/flash.cpp:308FlashEEPROM::writeFloat 圈复杂度 12,risk=mediumsys/flash.cpp:308-383 FlashEEPROM::writeFloat人工评审分支完整性;必要时补单元测试或后续拆分。
info复杂度评审METRIC-CCsys/health.cpp:35ThermalController::update 圈复杂度 12,risk=mediumsys/health.cpp:35-94 ThermalController::update人工评审分支完整性;必要时补单元测试或后续拆分。
info复杂度评审METRIC-CCdevice/Can.cpp:597can_loopback_test 圈复杂度 11,risk=mediumdevice/Can.cpp:597-665 can_loopback_test人工评审分支完整性;必要时补单元测试或后续拆分。
+
+
+ +

Top 圈复杂度

风险复杂度位置函数
high33Algorithm/FOC.cpp:75-238FOC_Controller::calibrate_cogging_tick
high27device/Can.cpp:1076-1300CAN_transmiter::communication_check
high17main.cpp:120-205do_task
medium15Algorithm/FOC.cpp:392-490FOC_Controller::setSVPWM_PhaseVoltage
medium12sys/flash.cpp:308-383FlashEEPROM::writeFloat
medium12sys/health.cpp:35-94ThermalController::update
medium11device/Can.cpp:597-665can_loopback_test
low10device/Can.cpp:1448-1504CAN_transmiter::CANFD_AsyncSend
low10sys/flash.cpp:90-161FlashEEPROM::read_saved_system_config
low10sys/flash.cpp:237-300FlashEEPROM::write
low10sys/flash.cpp:657-717FlashEEPROM::writeNodeId
low10sys/flash.cpp:928-1030move_app_data
low9device/Can.cpp:534-589canfd_loopback_test
low9sys/flash.cpp:413-482FlashEEPROM::save_system_config
low9sys/flash.cpp:792-879OTA_SET
low9sys/health.cpp:113-149power_manage
low8device/ADC.cpp:194-219sampler::get_current
low8sys/flash.cpp:724-776FlashEEPROM::writeCRC
low8sys/systick.cpp:244-298app_prepare_deep_sleep
low7device/Timer.cpp:134-184TIMER2_IRQHandler
low7sys/initial.cpp:256-290get_reset_cause
low6Algorithm/FOC.cpp:603-642FOC_Controller::fast_voltage_check
low6device/Can.cpp:1399-1440CAN_transmiter::CAN_AsyncSend
low6sys/flash.cpp:521-558read_node_id_struct
low6sys/initial.cpp:296-351OTA_initial
low5Algorithm/Filter.cpp:162-200EncoderAngleKalman::update
low5device/Can.cpp:800-824CAN_RX_ReadMetadata
low5device/Can.cpp:1355-1383DMA0_Channel4_IRQHandler
low5sys/flash.cpp:169-192FlashEEPROM::read
low5sys/flash.cpp:200-229FlashEEPROM::readFloat
+

优先级评审清单

**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/汇编;确认临界区长度和安全机制。
+

主规则清单

级别规则数量说明参考
infoAUTO-ARRAY-001251数组下标访问需审查边界保护MISRA C:2012 Rule 18.x
infoAUTO-ASM-00110关中断/低功耗/内联汇编等平台相关指令需审查MISRA C:2012 Dir 4.3 / project safety rule
infoAUTO-CAST-001223C 风格强制类型转换需审查必要性和范围MISRA C:2012 Rule 10.x / MISRA C++ 5-2-x
warningAUTO-CTRL-0026continue 需避免或说明偏离MISRA C:2012 Rule 15.5 advisory / structured control flow
warningAUTO-FUNC-00231printf/格式化输出需确认调试隔离和实时性影响MISRA Dir 4.12 / project safety rule
infoAUTO-MACRO-00129函数式宏需审查括号、副作用和类型安全MISRA C:2012 Rule 20.x
warningAUTO-MET-0013圈复杂度 33 超过建议阈值 15Project metric threshold CC <= 15
+

补充规则清单

级别规则数量说明建议
warningSUP-CMP-00114浮点变量比较需确认容差或离散状态含义建议确认是否应使用阈值/容差比较。
infoSUP-DOC-00112接口/函数缺少紧邻 Doxygen 注释建议补充 @brief/@param/@return;内部小函数可按项目规范豁免。
warningSUP-GLB-001189文件作用域可变全局对象,需确认封装、并发访问和初始化顺序建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
infoSUP-GLB-00247extern 全局对象引用,需确认单一定义和共享访问保护确认是否跨 ISR/主循环共享;共享变量建议 volatile 或临界区保护。
warningSUP-IRQ-0013关中断后未在短窗口内看到开中断,需人工确认成对性确认所有路径均恢复中断;避免临界区过长。
infoSUP-ISR-00118中断处理函数需确认执行时间、共享数据保护和禁止阻塞调用人工确认 ISR 内无阻塞、无长耗时,并检查共享变量 volatile/临界区。
infoSUP-LOOP-0014无限循环需确认退出策略、看门狗喂狗和低功耗策略确认循环内任务调度、异常退出/复位策略和看门狗策略。
infoSUP-MAG-001439业务代码中存在裸数字常量,需确认是否应命名化安全相关阈值/时间/比例建议用具名常量或配置宏。
warningSUP-SW-0011switch 语句疑似缺少 default 分支MISRA 通常要求 default;如枚举已全覆盖也建议显式说明。
+

主规则 Warning 明细

规则位置说明证据建议
AUTO-CTRL-002device/Can.cpp:1124continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-CTRL-002device/Can.cpp:1194continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-CTRL-002device/Can.cpp:1199continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-CTRL-002main.cpp:80continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-CTRL-002sys/flash.cpp:693continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-CTRL-002sys/systick.cpp:264continue 需避免或说明偏离continue;人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:100printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:161printf/格式化输出需确认调试隔离和实时性影响printf("",人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:195printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:198printf/格式化输出需确认调试隔离和实时性影响printf("", angle_deg, cogging_table[i]);人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:203printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:206printf/格式化输出需确认调试隔离和实时性影响printf("", angle_deg, cogging_table_rev[i]);人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:211printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:212printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:214printf/格式化输出需确认调试隔离和实时性影响if (i % 8 == 0) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:215printf/格式化输出需确认调试隔离和实时性影响printf("", cogging_table[i]);人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:216printf/格式化输出需确认调试隔离和实时性影响if (i < COGGING_TABLE_SIZE - 1) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:217printf/格式化输出需确认调试隔离和实时性影响if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:220printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:223printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:224printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:226printf/格式化输出需确认调试隔离和实时性影响if (i % 8 == 0) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:227printf/格式化输出需确认调试隔离和实时性影响printf("", cogging_table_rev[i]);人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:228printf/格式化输出需确认调试隔离和实时性影响if (i < COGGING_TABLE_SIZE - 1) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:229printf/格式化输出需确认调试隔离和实时性影响if (i % 8 == 7 || i == COGGING_TABLE_SIZE - 1) printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:232printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002Algorithm/FOC.cpp:234printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002device/Can.cpp:30printf/格式化输出需确认调试隔离和实时性影响#define CAN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002device/ang_sensor.cpp:22printf/格式化输出需确认调试隔离和实时性影响#define ANG_SENS_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002device/motor.cpp:38printf/格式化输出需确认调试隔离和实时性影响printf("");人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002main.cpp:22printf/格式化输出需确认调试隔离和实时性影响#define MAIN_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002sys/flash.cpp:22printf/格式化输出需确认调试隔离和实时性影响#define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002sys/flash.cpp:31printf/格式化输出需确认调试隔离和实时性影响#define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002sys/initial.cpp:23printf/格式化输出需确认调试隔离和实时性影响#define OTA_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002sys/initial.cpp:32printf/格式化输出需确认调试隔离和实时性影响#define EEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002sys/initial.cpp:129printf/格式化输出需确认调试隔离和实时性影响snprintf(buffer, bufSize, "", version.major, version.minor,人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-FUNC-002sys/systick.cpp:47printf/格式化输出需确认调试隔离和实时性影响#define SLEEP_DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)人工确认是否符合项目编码规范;如合理则记录偏离说明。
AUTO-MET-001Algorithm/FOC.cpp:75圈复杂度 33 超过建议阈值 15FOC_Controller::calibrate_cogging_tick建议人工评审分支完整性;后续允许时再考虑拆分或增加单元测试覆盖。
AUTO-MET-001device/Can.cpp:1076圈复杂度 27 超过建议阈值 15CAN_transmiter::communication_check建议人工评审分支完整性;后续允许时再考虑拆分或增加单元测试覆盖。
AUTO-MET-001main.cpp:120圈复杂度 17 超过建议阈值 15do_task建议人工评审分支完整性;后续允许时再考虑拆分或增加单元测试覆盖。
+

补充筛查 Warning 明细

规则位置说明证据建议
SUP-CMP-001Algorithm/FOC.cpp:53浮点变量比较需确认容差或离散状态含义if (rt_velocity < -0.5f) last_table = cogging_table_rev;建议确认是否应使用阈值/容差比较。
SUP-CMP-001Algorithm/FOC.cpp:54浮点变量比较需确认容差或离散状态含义else if (rt_velocity > 0.5f) last_table = cogging_table;建议确认是否应使用阈值/容差比较。
SUP-CMP-001Algorithm/FOC.cpp:404浮点变量比较需确认容差或离散状态含义u8 sector_code = (X > 0.0f ? 1u : 0u)建议确认是否应使用阈值/容差比较。
SUP-CMP-001Algorithm/FOC.cpp:405浮点变量比较需确认容差或离散状态含义+ (Y > 0.0f ? 2u : 0u)建议确认是否应使用阈值/容差比较。
SUP-CMP-001Algorithm/FOC.cpp:406浮点变量比较需确认容差或离散状态含义+ (Z > 0.0f ? 4u : 0u);建议确认是否应使用阈值/容差比较。
SUP-CMP-001Algorithm/FOC.cpp:534浮点变量比较需确认容差或离散状态含义if (HOLD_PWM_DUTY > 0.95f) {建议确认是否应使用阈值/容差比较。
SUP-CMP-001Algorithm/FOC.cpp:536浮点变量比较需确认容差或离散状态含义} else if (HOLD_PWM_DUTY < 0.0f) {建议确认是否应使用阈值/容差比较。
SUP-CMP-001Algorithm/FOC.cpp:569浮点变量比较需确认容差或离散状态含义if (voltage < 36.0f and voltage > 8.0f) {建议确认是否应使用阈值/容差比较。
SUP-CMP-001Algorithm/FOC.cpp:763浮点变量比较需确认容差或离散状态含义if (target_velocity < -120.0f) {建议确认是否应使用阈值/容差比较。
SUP-CMP-001Algorithm/FOC.cpp:765浮点变量比较需确认容差或离散状态含义} else if (target_velocity < -30.0f) {建议确认是否应使用阈值/容差比较。
SUP-CMP-001Algorithm/Filter.cpp:190浮点变量比较需确认容差或离散状态含义if (error > 180.0f) error -= 360.0f;建议确认是否应使用阈值/容差比较。
SUP-CMP-001Algorithm/Filter.cpp:191浮点变量比较需确认容差或离散状态含义else if (error < -180.0f) error += 360.0f;建议确认是否应使用阈值/容差比较。
SUP-CMP-001sys/config.h:427浮点变量比较需确认容差或离散状态含义while (angle >= 360.0f) angle -= 360.0f;建议确认是否应使用阈值/容差比较。
SUP-CMP-001sys/config.h:428浮点变量比较需确认容差或离散状态含义while (angle < 0.0f) angle += 360.0f;建议确认是否应使用阈值/容差比较。
SUP-GLB-001Algorithm/FOC.cpp:23文件作用域可变全局对象,需确认封装、并发访问和初始化顺序FOC_Controller FOC;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/ADC.cpp:20文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ADC_SCALE = 3.3f / 4096.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/ADC.cpp:22文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float TEMP_FACTOR = 1000.0f / 4.3f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/ADC.cpp:24文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VCC_FACTOR = 11.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/ADC.cpp:26文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_FACTOR =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/ADC.cpp:30文件作用域可变全局对象,需确认封装、并发访问和初始化顺序sampler sampler;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/ADC.cpp:33文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 adc_current_frame_ready = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Can.cpp:37文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANX = CAN0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Can.cpp:48文件作用域可变全局对象,需确认封装、并发访问和初始化顺序dma_parameter_struct dma_rx_parameter;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Can.cpp:51文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile bool can_rx_dma_busy = false;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Can.cpp:52文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static can_receive_message_struct can_rx_dma_message;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Can.cpp:72文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 rx_queue_head = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Can.cpp:73文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 rx_queue_tail = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Can.cpp:74文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 rx_queue_count = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Can.cpp:77文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 tx_queue_head = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Can.cpp:78文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 tx_queue_tail = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Can.cpp:79文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static volatile u8 tx_queue_count = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Can.cpp:84文件作用域可变全局对象,需确认封装、并发访问和初始化顺序CAN_transmiter CAN0_transmiter;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/Timer.cpp:18文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile u32 total_us100_counter = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/ang_sensor.cpp:38文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile bool spi_dma_tx_complete = false;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/ang_sensor.cpp:39文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile bool spi_dma_rx_complete = false;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001device/ang_sensor.cpp:41文件作用域可变全局对象,需确认封装、并发访问和初始化顺序angle_sensor KTH7823;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001main.cpp:39文件作用域可变全局对象,需确认封装、并发访问和初始化顺序TaskScheduler scheduler = {0};建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001main.cpp:40文件作用域可变全局对象,需确认封装、并发访问和初始化顺序u32 motor_runtime_50us = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001main.cpp:41文件作用域可变全局对象,需确认封装、并发访问和初始化顺序u32 cnt_test = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:32文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 SOFTWARE_VERSION_MAJOR = 26;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:34文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 SOFTWARE_VERSION_MINOR = 5;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:36文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 SOFTWARE_VERSION_PATCH = 19;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:38文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 SOFTWARE_VERSION_BUILD = 2;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:41文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 HARDWARE_VERSION_MAJOR = 25;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:43文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 HARDWARE_VERSION_MINOR = 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:45文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 HARDWARE_VERSION_PATCH = 01;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:47文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 HARDWARE_VERSION_BUILD = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:50文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 BOOT_VERSION_MAJOR = 26;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:52文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 BOOT_VERSION_MINOR = 1;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:54文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 BOOT_VERSION_PATCH = 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:56文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 BOOT_VERSION_BUILD = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:60文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 BOOTLOADER_SIZE = 0x6000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:62文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 BOOTLOADER_START_ADDR = 0x08000000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:64文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 APPLATEST_START_ADDR = 0x08012000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:66文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 APPBACK_START_ADDR = 0x08006000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:68文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 APP_MAX_SIZE = 0xC000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:70文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 FMC_PAGE_SIZE = 0x400;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:72文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 SLEEP_CONFIG_START = 0x0801E400;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:74文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 SLEEP_CONFIG_END = 0x0801E800;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:76文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 FLASH_EMPTY = 0xFFFFFFFF;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:78文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 SLEEP_ENABLE = 0x11111111;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:80文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 SLEEP_DISABLE = 0x00000000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:92文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 NODE_ID_PAGE_ADDR = 0x0801E800;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:94文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 NODE_ID_PRIMARY_ADDR = 0x0801E800;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:96文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 NODE_ID_BACKUP_ADDR = 0x0801E840;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:98文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 NODE_ID_MAGIC = 0x4E4F4445;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:100文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 DEFAULT_NODE_ID = 1;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:102文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 BROADCAST_NODE_ID = 0x1FFF;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:104文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 MAX_NODE_ID = 0x1FFE;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:113文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 NODE_ID_STRUCT_SIZE = 0x10;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:115文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 NODE_ID_MAGIC_OFFSET = 0x00;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:117文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 NODE_ID_VALUE_OFFSET = 0x04;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:119文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 NODE_ID_COUNTER_OFFSET = 0x08;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:121文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 NODE_ID_CRC_OFFSET = 0x0C;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:125文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 OTA_CONFIG_NUM = 6;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:127文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_LATEST_AVAL_ADDR = 0x0801E000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:129文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_BACKUP_AVAL_ADDR = 0x0801E004;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:131文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_LATEST_EN_ADDR = 0x0801E008;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:133文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_BACKUP_EN_ADDR = 0x0801E00C;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:135文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_LATEST_CHECK_ADDR = 0x0801E010;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:137文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 n_APP_BACKUP_CHECK_ADDR = 0x0801E014;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:139文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 OTA_NOT_AVAL = 0xFFFFFFFF;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:141文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 OTA_AVAL = 0x00000000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:145文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 PP = 11;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:147文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DIR = 1.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:149文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 REDUCTION_RATIO = 25;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:151文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_OFFSET = -3.31f / 2.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:153文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float HOLD_PWM_DUTY = 0.1f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:155文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 ANGLESENS_OFFSET = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:157文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLESENS_CALIBRATION_ANGLE = 83.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:159文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float KE_FACTOR = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:163文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_KALMAN_INITIAL_STATE = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:165文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_KALMAN_INITIAL_COVARIANCE = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:167文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_KALMAN_PROCESS_NOISE_Q = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:169文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_KALMAN_MEASUREMENT_NOISE_R = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:171文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_OBSERVER_ALPHA = 0.75f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:173文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_OBSERVER_BETA = 0.002f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:177文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VELOCITY_KALMAN_INITIAL_STATE = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:179文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VELOCITY_KALMAN_INITIAL_COVARIANCE = 1e-3f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:181文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VELOCITY_KALMAN_PROCESS_NOISE_Q =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:184文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VELOCITY_KALMAN_MEASUREMENT_NOISE_R =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:189文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_KALMAN_INITIAL_STATE = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:191文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_KALMAN_INITIAL_COVARIANCE = 100.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:193文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_KALMAN_PROCESS_NOISE_Q = 10.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:195文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float CURRENT_KALMAN_MEASUREMENT_NOISE_R = 5e-5f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:199文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_current_loop_p = 0.1f / 100 * 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:201文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float current_loop_Ki = 0.55f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:203文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float current_loop_Kd = 3e-4f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:206文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_vel_loop_p = 0.018f / 100 * 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:208文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_loop_Ku = 3.600000e-03 * 0.7 * 100 / 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:210文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_loop_Tu = 17.0f * 1e-3f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:212文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_loop_Ki = 1.2 * vel_loop_Ku / vel_loop_Tu;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:214文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_loop_Kd = 0.075 * vel_loop_Ku * vel_loop_Tu * 2;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:217文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_vel_angloop_p = 0.4f / 100;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:219文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_angloop_Ki = 5.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:221文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_angloop_Kd = 5e-05f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:224文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_angle_angloop_p =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:227文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ang_angloop_Ki = 0.00f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:229文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ang_angloop_Kd = 8e-04f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:232文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_angle_loop_p = 60.0f / 100 * 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:235文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_angle_MIT_p = 100.0f / 100 * 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:237文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float angle_MIT_Ki = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:239文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float angle_MIT_Kd = 8e-04f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:242文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_vel_MIT_p = 5.0f / 100;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:244文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_MIT_Ki = 15.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:246文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float vel_MIT_Kd = 1e-04f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:249文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEFAULT_current_MIT_p = 0.2f / 100 * 12;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:251文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float current_MIT_Ki = 0.1f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:253文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float current_MIT_Kd = 3e-4f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:260文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ADC_MAX = 65536.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:262文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float PI = 3.14159265358979323846f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:264文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float INV_PI_3 = 3.0f / PI;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:266文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float PI_3 = PI / 3.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:268文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float _1_SQRT3 = 0.57735026919f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:270文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float _3PI_2 = 4.71238898038f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:272文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float SQRT3 = 1.7320508075688772f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:274文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float SQRT3DV2 = 0.8660254037844386f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:276文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float COS_PI_3 = 0.5f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:278文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_FACTOR = 25.0f / 180.0f * PI;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:280文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float DEG2RAD = 1.0f / 180.0f * PI;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:282文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float RAD2DEG = 180.0f / PI;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:284文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 DEFAULT_VALUE = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:286文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 CONFIG_SAVED_NUM = 6;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:290文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 LUT_SIZE = 1024;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:301文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 DEV_CAN0_ID = 0x0000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:303文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 DEV_CAN0_MASK = 0x0000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:305文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 DEV_CAN_LOOPBACK_ID = 0x0000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:308文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_STATUS_ID = 0x0100;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:310文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_CONFIG_ID = 0x0101;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:312文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_VERSION_ID = 0x00FF;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:315文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_CMD_ID = 0x0200;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:317文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_RESET_ID = 0x0301;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:320文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_SET_NODE_ID = 0x0400;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:322文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_GET_NODE_ID = 0x0401;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:326文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_BOOT_ID = 0x0000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:328文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_OTA_REQ_ID = 0x0100;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:330文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_OTA_DATA_ID = 0x0101;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:332文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_OTA_ACK_ID = 0x0102;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:334文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 CANFD_OTA_WAIT_ID = 0x0103;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:338文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 ADC_FILTER_SIZE = 6;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:340文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u8 BLOCK_SIZE = ADC_FILTER_SIZE * SIZE_FLOAT;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:342文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ERROR_ADC_VAL = 255.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:344文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MAX_TEMP = 150.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:346文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MIN_TEMP = -40.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:348文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MAX_CURRENT = 40.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:350文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MIN_CURRENT = -40.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:352文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MAX_VCC = 65.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:354文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MIN_VCC = -0.1f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:358文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 VEL_FILTER_SIZE = 4;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:360文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 DEFAULT_COMMAND = 0x0000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:362文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 FAULT_RECEIVE = 0xFFFF;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:364文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_WRAP_THRESHOLD = 300.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:366文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLE_WRAP_VALUE = 360.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:368文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float RAD_FACTOR = 1.0f / ADC_MAX * 2.0f * PI;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:370文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float ANGLESENS_FACTOR = 1.0f / ADC_MAX * 360.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:374文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER2_PRESCALER = 119;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:376文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER2_PERIOD = 49;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:378文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int MOTOR_PERIOD = 1;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:380文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float TIME_SLICE =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:383文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float TIMER2_FREQUENCY = 1 / TIME_SLICE;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:385文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float MOTOR_FREQUENCY = 1 / TIME_SLICE / MOTOR_PERIOD;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:389文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER1_PRESCALER = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:391文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER1_PERIOD = 2999;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:393文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER1_DEFAULT_PULSE = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:395文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr int TIMER1_CH3_COMPARE_VALUE =建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:400文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 COGGING_TABLE_SIZE = 128;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:402文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float COGGING_COMP_SCALE = 0.005f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:413文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VBUS_DROP_THRESHOLD = 5.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:415文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VBUS_ABSOLUTE_MIN = 12.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:417文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u32 VBUS_DEBOUNCE_COUNT = 5;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/config.h:419文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr float VBUS_RECOVERY_RATIO = 0.9f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/health.cpp:19文件作用域可变全局对象,需确认封装、并发访问和初始化顺序ThermalController thermalController;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/health.cpp:25文件作用域可变全局对象,需确认封装、并发访问和初始化顺序constexpr u16 PROTECT_TIME = 6000;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/health.cpp:28文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static VoltageState voltage_state = VoltageState::NORMAL;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/health.cpp:29文件作用域可变全局对象,需确认封装、并发访问和初始化顺序static float last_vbus_slow = 0.0f;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/initial.cpp:39文件作用域可变全局对象,需确认封装、并发访问和初始化顺序VersionManager Version;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/systick.cpp:53文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint32_t delay;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/systick.cpp:54文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint32_t systick_ms = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/systick.cpp:70文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint32_t task_enter_cyccnt = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/systick.cpp:71文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint32_t busy_cycles_accum = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/systick.cpp:72文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint16_t sample_seconds = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/systick.cpp:73文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint8_t cpu_usage = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-GLB-001sys/systick.cpp:74文件作用域可变全局对象,需确认封装、并发访问和初始化顺序volatile static uint8_t dwt_initialized = 0;建议确认初始化顺序、访问边界;必要时封装或添加偏离说明。
SUP-IRQ-001device/Can.cpp:709关中断后未在短窗口内看到开中断,需人工确认成对性__disable_irq();确认所有路径均恢复中断;避免临界区过长。
SUP-IRQ-001sys/flash.cpp:888关中断后未在短窗口内看到开中断,需人工确认成对性__disable_irq();确认所有路径均恢复中断;避免临界区过长。
SUP-IRQ-001sys/systick.cpp:256关中断后未在短窗口内看到开中断,需人工确认成对性__disable_irq();确认所有路径均恢复中断;避免临界区过长。
SUP-SW-001Algorithm/FOC.cpp:89switch 语句疑似缺少 default 分支switch (cog_calib_state) {MISRA 通常要求 default;如枚举已全覆盖也建议显式说明。
+

输出文件

  • report.html:合并后的 HTML 报告
  • findings.csv:主规则命中明细
  • supplement_findings.csv:补充筛查明细
  • metrics.csv:函数复杂度
  • files.csv:文件范围、行数和 hash
  • supplement_report.md:补充筛查 Markdown 摘要
+ + + + \ No newline at end of file diff --git a/static_test_automotive_business_20260523/robot_v2_app_static_report_check_progress.json b/static_test_automotive_business_20260523/robot_v2_app_static_report_check_progress.json new file mode 100644 index 0000000..28f03db --- /dev/null +++ b/static_test_automotive_business_20260523/robot_v2_app_static_report_check_progress.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "storageKey": "robot_v2_app_static_report_checklist_v1", + "report": "ROBOT_V2_APP_static_test_automotive_business_20260523", + "updatedAt": "2026-05-23T14:41:51.724Z", + "checked": { + "main-3117cb79205a": true, + "main-527272d22f5f": true + } +} \ No newline at end of file diff --git a/static_test_automotive_business_20260523/supplement_findings.csv b/static_test_automotive_business_20260523/supplement_findings.csv new file mode 100644 index 0000000..b666e2f --- /dev/null +++ b/static_test_automotive_business_20260523/supplement_findings.csv @@ -0,0 +1,728 @@ +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(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((-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 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));,安全相关阈值/时间/比例建议用具名常量或配置宏。 diff --git a/static_test_automotive_business_20260523/supplement_report.md b/static_test_automotive_business_20260523/supplement_report.md new file mode 100644 index 0000000..a0d1e4a --- /dev/null +++ b/static_test_automotive_business_20260523/supplement_report.md @@ -0,0 +1,509 @@ +# 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 的接口;多行声明、构造函数可能需要人工复核。