refactor(FOC): 添加Doxygen文档注释并优化SVPWM算法性能
添加了完整的Doxygen文档注释到FOC算法模块的所有函数、类和变量,提升了代码可读性和维护性。同时优化了SVPWM算法实现,将atan2f替换为符号法扇区判断,显著提升计算效率(约15周期vs atan2f 300周期),并改进了arm_sin_cos_f32替代sqrtf提高性能。 feat(FOC): 统一电气角度计算避免重复运算 重构代码以统一电气角度计算,在各个控制循环中只计算一次电气角度并传递给需要的函数,避免了多次重复的fmodf运算和角度归一化操作,提升了实时控制性能。 refactor(Filter): 改进α-β观测器角度处理精度 修改角度卡尔曼滤波器在归一化角度空间[0,360)内工作,避免大累积角度的浮点精度损失问题,确保静止状态下不会产生虚假速度,同时保持与下游代码的兼容性。 refactor: 为算法模块添加完整文档注释 为所有算法模块(FOC、Filter、pid、thermal)添加了详细的Doxygen文档注释,包括函数说明、参数描述、返回值说明等,便于代码理解和API文档生成。
This commit is contained in:
+122
-80
@@ -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;
|
||||
}
|
||||
|
||||
+116
-5
@@ -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 <cstdint>
|
||||
|
||||
/**
|
||||
* @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
|
||||
@@ -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<float>(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) {}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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)))
|
||||
|
||||
@@ -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环增益)
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
/**
|
||||
* @file Algorithm/thermal.cpp
|
||||
* @brief 算法模块源文件
|
||||
* @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。
|
||||
*/
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/**
|
||||
* @file Algorithm/thermal.h
|
||||
* @brief 算法模块源文件
|
||||
* @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。
|
||||
*/
|
||||
|
||||
#ifndef THERMAL_H
|
||||
#define THERMAL_H
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
/*!
|
||||
|
||||
@@ -35,6 +35,7 @@ OF SUCH DAMAGE.
|
||||
#include "gd32c10x_can.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
/** @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));
|
||||
|
||||
@@ -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)
|
||||
|
||||
/*!
|
||||
|
||||
@@ -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)){
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -35,9 +35,16 @@ OF SUCH DAMAGE.
|
||||
#include "gd32c10x_dma.h"
|
||||
#include <stdio.h>
|
||||
|
||||
/** @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)){
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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){
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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)
|
||||
|
||||
/*!
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/**
|
||||
* @file RTE/Device/GD32C103CB/regions_GD32C103CB.h
|
||||
* @brief GD32 RTE 外设库或运行时配置源文件
|
||||
* @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。
|
||||
*/
|
||||
|
||||
#ifndef REGIONS_GD32C103CB_H
|
||||
#define REGIONS_GD32C103CB_H
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
+59
-27
@@ -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 <cstring>
|
||||
#include <gd32c10x_dma.h>
|
||||
|
||||
/** @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 时刻 */
|
||||
|
||||
@@ -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<int> 返回值
|
||||
*/
|
||||
std::uniform_int_distribution<int> 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<int> 返回值
|
||||
*/
|
||||
std::uniform_int_distribution<int> 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()) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/**
|
||||
* @file device/Timer.cpp
|
||||
* @brief 底层设备驱动与外设封装源文件
|
||||
* @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。
|
||||
*/
|
||||
|
||||
#include "Timer.h"
|
||||
#include "Can.h"
|
||||
#include "FOC.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 <cstdint>
|
||||
|
||||
/**
|
||||
* @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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 传输完成标志
|
||||
|
||||
@@ -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 <cstring>
|
||||
#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
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/**
|
||||
* @file device/motor.cpp
|
||||
* @brief 底层设备驱动与外设封装源文件
|
||||
* @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。
|
||||
*/
|
||||
|
||||
#include "motor.h"
|
||||
#include "Timer.h"
|
||||
#include "gd32c10x_eval.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
|
||||
+26
-1
@@ -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;
|
||||
|
||||
@@ -37,7 +37,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#include <cstdint>
|
||||
|
||||
|
||||
/**
|
||||
* @brief 根据任务标志调度周期性业务任务
|
||||
* @param[in] currentTasks 参数
|
||||
* @return void
|
||||
*/
|
||||
void do_task(u32 currentTasks);
|
||||
/**
|
||||
* @brief 初始化应用层使用的硬件与软件模块
|
||||
* @return u8 返回值
|
||||
*/
|
||||
u8 hardware_init(void);
|
||||
|
||||
#endif /* MAIN_H */
|
||||
|
||||
+175
-1
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -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++) {
|
||||
// 写入主存储区
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/**
|
||||
* @file sys/flash.h
|
||||
* @brief 系统服务与平台支持源文件
|
||||
* @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。
|
||||
*/
|
||||
|
||||
#ifndef __FLASH_H
|
||||
#define __FLASH_H
|
||||
|
||||
@@ -5,9 +11,13 @@
|
||||
#include <cstdint>
|
||||
|
||||
// 修改后 - 强制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 */
|
||||
@@ -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
|
||||
|
||||
// 电压管理状态机
|
||||
|
||||
@@ -1,22 +1,39 @@
|
||||
/**
|
||||
* @file sys/health.h
|
||||
* @brief 系统服务与平台支持源文件
|
||||
* @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。
|
||||
*/
|
||||
|
||||
#ifndef _HEALTH_H
|
||||
#define _HEALTH_H
|
||||
|
||||
#include <cstdint>
|
||||
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
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/**
|
||||
* @file sys/initial.h
|
||||
* @brief 系统服务与平台支持源文件
|
||||
* @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。
|
||||
*/
|
||||
|
||||
#ifndef _INITIAL_H
|
||||
#define _INITIAL_H
|
||||
|
||||
@@ -11,6 +17,9 @@ extern "C" {
|
||||
#include <cstdio>
|
||||
|
||||
// 任务标志定义
|
||||
/**
|
||||
* @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:
|
||||
|
||||
@@ -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; }
|
||||
|
||||
/*!
|
||||
|
||||
@@ -41,28 +41,79 @@ extern "C" {
|
||||
#include <cstdint>
|
||||
|
||||
/* 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
|
||||
|
||||
@@ -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
|
||||
|
@@ -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,人工确认是否符合项目编码规范;如合理则记录偏离说明。
|
||||
|
@@ -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
|
||||
|
@@ -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/汇编;确认临界区长度和安全机制。
|
||||
File diff suppressed because one or more lines are too long
@@ -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
|
||||
File diff suppressed because one or more lines are too long
+10
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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<T>(1e-6);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,Algorithm/pid.cpp,30,业务代码中存在裸数字常量,需确认是否应命名化,integral_prev + I * TIME_SLICE * 0.5f * (error + error_prev);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,20,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float ADC_SCALE = 3.3f / 4096.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,22,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float TEMP_FACTOR = 1000.0f / 4.3f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,24,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float VCC_FACTOR = 11.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,27,业务代码中存在裸数字常量,需确认是否应命名化,1.0f / 50.0f * 100.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,31,业务代码中存在裸数字常量,需确认是否应命名化,u16 adc_value[3] = {0};,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,32,业务代码中存在裸数字常量,需确认是否应命名化,static volatile u16 adc_current_value[3] = {0};,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,67,业务代码中存在裸数字常量,需确认是否应命名化,dma_data_parameter.number = 3;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,104,业务代码中存在裸数字常量,需确认是否应命名化,"adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 3);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,109,业务代码中存在裸数字常量,需确认是否应命名化,"adc_regular_channel_config(ADC0, 2, ADC_CHANNEL_6, ADC_SAMPLETIME_28POINT5);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,117,业务代码中存在裸数字常量,需确认是否应命名化,"adc_channel_length_config(ADC0, ADC_INSERTED_CHANNEL, 4);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,120,业务代码中存在裸数字常量,需确认是否应命名化,"adc_inserted_channel_config(ADC0, 2, ADC_CHANNEL_4, ADC_SAMPLETIME_55POINT5);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,121,业务代码中存在裸数字常量,需确认是否应命名化,"adc_inserted_channel_config(ADC0, 3, ADC_CHANNEL_5, ADC_SAMPLETIME_55POINT5);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,148,业务代码中存在裸数字常量,需确认是否应命名化,static_cast<u16>((-CURRENT_OFFSET / ADC_SCALE) + 0.5f));,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,152,业务代码中存在裸数字常量,需确认是否应命名化,(1.43f - adc_value[0] * ADC_SCALE) * TEMP_FACTOR + 35.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,158,业务代码中存在裸数字常量,需确认是否应命名化,vbus_samples[i] = adc_value[2] * ADC_SCALE * VCC_FACTOR;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,160,业务代码中存在裸数字常量,需确认是否应命名化,float R_now = (float)adc_value[1] / (4096 - (float)adc_value[1]) * 4700;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,162,业务代码中存在裸数字常量,需确认是否应命名化,1.0f / (0.00335f + 0.00025f * log(R_now / 10000.0f)) - 273.15f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,241,业务代码中存在裸数字常量,需确认是否应命名化,(1.43f - adc_value[0] * ADC_SCALE) * TEMP_FACTOR + 35.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,259,业务代码中存在裸数字常量,需确认是否应命名化,float R_now = (float)adc_value[1] / (4096 - (float)adc_value[1]) * 4700;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,261,业务代码中存在裸数字常量,需确认是否应命名化,1.0f / (0.00335f + 0.00025f * log(R_now / 10000.0f)) - 273.15f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,285,业务代码中存在裸数字常量,需确认是否应命名化,currW_samples[idx] = current_adc_to_ma(adc_current_value[2]);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,299,业务代码中存在裸数字常量,需确认是否应命名化,vbus_samples[temp_vbus_head] = adc_value[2] * ADC_SCALE * VCC_FACTOR;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,305,业务代码中存在裸数字常量,需确认是否应命名化,const u8 mid = ADC_FILTER_SIZE / 2;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ADC.cpp,323,业务代码中存在裸数字常量,需确认是否应命名化,"adc_current_value[2] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_3);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,49,业务代码中存在裸数字常量,需确认是否应命名化,uint8_t can_rx_buffer[64];,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,50,业务代码中存在裸数字常量,需确认是否应命名化,static uint32_t can_rx_dma_words[16];,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,63,业务代码中存在裸数字常量,需确认是否应命名化,u8 data[64];,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,82,业务代码中存在裸数字常量,需确认是否应命名化,"static constexpr u8 CANFD_DLC_LENGTH_TABLE[7] = {12, 16, 20, 24, 32, 48, 64};",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,103,业务代码中存在裸数字常量,需确认是否应命名化,return ((u32)node_id << 16) | (base_id & 0xFFFF);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,116,业务代码中存在裸数字常量,需确认是否应命名化,u16 rx_node_id = (u16)((received_id >> 16) & 0xFFFF);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,323,业务代码中存在裸数字常量,需确认是否应命名化,dma_rx_parameter.number = 16;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,363,业务代码中存在裸数字常量,需确认是否应命名化,can_parameter.prescaler = 6;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,426,业务代码中存在裸数字常量,需确认是否应命名化,can_parameter.prescaler = 6;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,445,业务代码中存在裸数字常量,需确认是否应命名化,can_fd_parameter.data_prescaler = 6;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,499,业务代码中存在裸数字常量,需确认是否应命名化,can_parameter.prescaler = 6;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,501,业务代码中存在裸数字常量,需确认是否应命名化,u16 i = 200;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,503,业务代码中存在裸数字常量,需确认是否应命名化,delay_1ms(10);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,516,业务代码中存在裸数字常量,需确认是否应命名化,((uint16_t)(DEV_CAN_LOOPBACK_ID)) << 3U | (1U << 2);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,545,业务代码中存在裸数字常量,需确认是否应命名化,"std::uniform_int_distribution<int> dis(0, 255);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,552,业务代码中存在裸数字常量,需确认是否应命名化,transmit_message.tx_dlen = 7;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,621,业务代码中存在裸数字常量,需确认是否应命名化,transmit_message.tx_dlen = 7;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,762,业务代码中存在裸数字常量,需确认是否应命名化,if (rx_queue[rx_queue_tail].length > 64) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,763,业务代码中存在裸数字常量,需确认是否应命名化,rx_queue[rx_queue_tail].length = 64;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,815,业务代码中存在裸数字常量,需确认是否应命名化,message->fd_flag = (uint8_t)((CAN_RFIFOMP_FDF & rfifomp) >> 7);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,819,业务代码中存在裸数字常量,需确认是否应命名化,message->fd_brs = (uint8_t)((rfifomp & CAN_RFIFOMP_BRS) >> 5);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,820,业务代码中存在裸数字常量,需确认是否应命名化,message->fd_esi = (uint8_t)((rfifomp & CAN_RFIFOMP_ESI) >> 4);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,833,业务代码中存在裸数字常量,需确认是否应命名化,if (can_rx_dma_message.rx_dlen > 64) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,834,业务代码中存在裸数字常量,需确认是否应命名化,can_rx_dma_message.rx_dlen = 64;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1004,业务代码中存在裸数字常量,需确认是否应命名化,limit_voltage = FOC.limit_voltage * 1000;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1005,业务代码中存在裸数字常量,需确认是否应命名化,mcu_temp = sampler.get_mcu_temp() * 100;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1006,业务代码中存在裸数字常量,需确认是否应命名化,motor_temp = sampler.get_drv_temp() * 100;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1007,业务代码中存在裸数字常量,需确认是否应命名化,Power_Voltage = sampler.get_vbus_voltage() * 1000;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1015,业务代码中存在裸数字常量,需确认是否应命名化,u_current_union.f = sampler.get_current('') * 1000;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1016,业务代码中存在裸数字常量,需确认是否应命名化,w_current_union.f = sampler.get_current('') * 1000;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1017,业务代码中存在裸数字常量,需确认是否应命名化,v_current_union.f = sampler.get_current('') * 1000;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1035,业务代码中存在裸数字常量,需确认是否应命名化,"memset(transmit_data, 0, 32);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1037,业务代码中存在裸数字常量,需确认是否应命名化,"pack_u16_to_bytes(transmit_data, 2, motor_temp);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1038,业务代码中存在裸数字常量,需确认是否应命名化,"pack_u16_to_bytes(transmit_data, 4, u16(u_current_union.f));",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1039,业务代码中存在裸数字常量,需确认是否应命名化,"pack_u16_to_bytes(transmit_data, 6, u16(v_current_union.f));",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1040,业务代码中存在裸数字常量,需确认是否应命名化,"pack_u16_to_bytes(transmit_data, 8, u16(w_current_union.f));",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1041,业务代码中存在裸数字常量,需确认是否应命名化,transmit_data[10] =,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1042,业务代码中存在裸数字常量,需确认是否应命名化,(transmit_data[10] & ~0x07) |,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1044,业务代码中存在裸数字常量,需确认是否应命名化,((ThermalStatus & 0x01) << 2) | ((EEPROMStatus & 0x07) << 3));,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1045,业务代码中存在裸数字常量,需确认是否应命名化,"pack_u16_to_bytes(transmit_data, 11, Power_Voltage);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1046,业务代码中存在裸数字常量,需确认是否应命名化,"pack_float_to_bytes(transmit_data, 13, rt_angle_union);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1047,业务代码中存在裸数字常量,需确认是否应命名化,"pack_float_to_bytes(transmit_data, 17, rt_velocity_union);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1048,业务代码中存在裸数字常量,需确认是否应命名化,"pack_float_to_bytes(transmit_data, 21, rt_current_union);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1049,业务代码中存在裸数字常量,需确认是否应命名化,"pack_float_to_bytes(transmit_data, 25, testfloat_union);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1050,业务代码中存在裸数字常量,需确认是否应命名化,transmit_data[29] = test_u16 & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1051,业务代码中存在裸数字常量,需确认是否应命名化,transmit_data[30] = (test_u16 >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1052,业务代码中存在裸数字常量,需确认是否应命名化,transmit_data[31] = cpu_usage;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1055,业务代码中存在裸数字常量,需确认是否应命名化,"CANFD_AsyncSend(build_can_id(CANFD_STATUS_ID), 32, transmit_data);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1058,业务代码中存在裸数字常量,需确认是否应命名化,"memset(transmit_data, 0, 24);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1061,业务代码中存在裸数字常量,需确认是否应命名化,"pack_float_to_bytes(transmit_data, 3, target_current_union);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1062,业务代码中存在裸数字常量,需确认是否应命名化,"pack_float_to_bytes(transmit_data, 7, target_velocity_union);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1063,业务代码中存在裸数字常量,需确认是否应命名化,"pack_float_to_bytes(transmit_data, 11, target_angle_union);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1066,业务代码中存在裸数字常量,需确认是否应命名化,"CANFD_AsyncSend(build_can_id(CANFD_CONFIG_ID), 24, transmit_data);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1102,业务代码中存在裸数字常量,需确认是否应命名化,u16 sender_node_id = (u16)((current_message.rx_efid >> 16) & 0xFFFF);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1138,业务代码中存在裸数字常量,需确认是否应命名化,if (current_message.rx_dlen >= 2) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1153,业务代码中存在裸数字常量,需确认是否应命名化,transmit_data[2] =,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1154,业务代码中存在裸数字常量,需确认是否应命名化,(u8)((new_node_id >> 8) & 0xFF);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1158,业务代码中存在裸数字常量,需确认是否应命名化,"u8 send_result = CANFD_AsyncSend(build_can_id(CANFD_SET_NODE_ID), 3,",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1179,业务代码中存在裸数字常量,需确认是否应命名化,"CANFD_AsyncSend(build_can_id(CANFD_SET_NODE_ID), 3,",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1188,业务代码中存在裸数字常量,需确认是否应命名化,transmit_data[2] = (u8)((new_node_id >> 8) & 0xFF);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1190,业务代码中存在裸数字常量,需确认是否应命名化,"CANFD_AsyncSend(build_can_id(CANFD_SET_NODE_ID), 3,",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1207,业务代码中存在裸数字常量,需确认是否应命名化,"float(unpack_bytes_to_u16(current_message.rx_data, 1)) / 1000;",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1210,业务代码中存在裸数字常量,需确认是否应命名化,"unpack_bytes_to_float(current_message.rx_data, 3).f;",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1215,业务代码中存在裸数字常量,需确认是否应命名化,"unpack_bytes_to_float(current_message.rx_data, 7).f;",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1220,业务代码中存在裸数字常量,需确认是否应命名化,"unpack_bytes_to_float(current_message.rx_data, 11).f;",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1229,业务代码中存在裸数字常量,需确认是否应命名化,"u16 P_config = unpack_bytes_to_u16(current_message.rx_data, 15);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1233,业务代码中存在裸数字常量,需确认是否应命名化,"P_config = unpack_bytes_to_u16(current_message.rx_data, 17);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1238,业务代码中存在裸数字常量,需确认是否应命名化,"P_config = unpack_bytes_to_u16(current_message.rx_data, 19);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1244,业务代码中存在裸数字常量,需确认是否应命名化,u8 eigth_byte = current_message.rx_data[7];,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1255,业务代码中存在裸数字常量,需确认是否应命名化,if (first_byte >> 2 & 0x01) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1259,业务代码中存在裸数字常量,需确认是否应命名化,if (first_byte >> 3 & 0x01) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1266,业务代码中存在裸数字常量,需确认是否应命名化,if (first_byte >> 4 & 0x01) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1271,业务代码中存在裸数字常量,需确认是否应命名化,if (eigth_byte & 0x80 >> 7) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1287,业务代码中存在裸数字常量,需确认是否应命名化,"CANFD_AsyncSend(build_can_id(CANFD_OTA_ACK_ID), 2,",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1294,业务代码中存在裸数字常量,需确认是否应命名化,"CANFD_AsyncSend(build_can_id(CANFD_GET_NODE_ID), 2, transmit_data);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1401,业务代码中存在裸数字常量,需确认是否应命名化,if (length > 8) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.cpp,1419,业务代码中存在裸数字常量,需确认是否应命名化,for (int i = 0; i < length && i < 8; i++) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.h,25,业务代码中存在裸数字常量,需确认是否应命名化,u8 b[4];,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.h,38,业务代码中存在裸数字常量,需确认是否应命名化,buffer[offset + 1] = (u8)((value >> 8) & 0xFF);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.h,53,业务代码中存在裸数字常量,需确认是否应命名化,buffer[offset + 2] = float_union.b[2];,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.h,54,业务代码中存在裸数字常量,需确认是否应命名化,buffer[offset + 3] = float_union.b[3];,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.h,65,业务代码中存在裸数字常量,需确认是否应命名化,short value = (short)(buffer[offset] | (buffer[offset + 1] << 8));,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.h,77,业务代码中存在裸数字常量,需确认是否应命名化,u16 value = (u16)(buffer[offset] | (buffer[offset + 1] << 8));,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.h,92,业务代码中存在裸数字常量,需确认是否应命名化,float_union.b[2] = buffer[offset + 2];,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.h,93,业务代码中存在裸数字常量,需确认是否应命名化,float_union.b[3] = buffer[offset + 3];,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.h,161,业务代码中存在裸数字常量,需确认是否应命名化,static const uint8_t CAN_RX_BUFFER_SIZE = 8;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.h,162,业务代码中存在裸数字常量,需确认是否应命名化,static const u32 CAN_SILENT_DURATION_MS = 10000;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Can.h,195,业务代码中存在裸数字常量,需确认是否应命名化,u8 transmit_data[64];,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Timer.cpp,19,业务代码中存在裸数字常量,需确认是否应命名化,extern u16 adc_value[3];,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Timer.cpp,27,业务代码中存在裸数字常量,需确认是否应命名化,static const u32 task_schedule_100us[10] = {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Timer.cpp,41,业务代码中存在裸数字常量,需确认是否应命名化,static const u32 task_schedule_1ms[10] = {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Timer.cpp,48,业务代码中存在裸数字常量,需确认是否应命名化,static const u32 task_schedule_10ms[10] = {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Timer.cpp,53,业务代码中存在裸数字常量,需确认是否应命名化,static const u32 task_schedule_100ms[10] = {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Timer.cpp,69,业务代码中存在裸数字常量,需确认是否应命名化,"nvic_irq_enable(TIMER1_IRQn, 0, 2);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/Timer.cpp,299,业务代码中存在裸数字常量,需确认是否应命名化,if (channel <= 3) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ang_sensor.cpp,124,业务代码中存在裸数字常量,需确认是否应命名化,uint32_t timeout = 100;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,device/ang_sensor.cpp,203,业务代码中存在裸数字常量,需确认是否应命名化,spi_init_str.prescale = 24;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,main.cpp,69,业务代码中存在裸数字常量,需确认是否应命名化,watchdog_init(50);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,main.cpp,150,业务代码中存在裸数字常量,需确认是否应命名化,FOC.control_mode < 8) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,32,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 SOFTWARE_VERSION_MAJOR = 26;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,34,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 SOFTWARE_VERSION_MINOR = 5;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,36,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 SOFTWARE_VERSION_PATCH = 19;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,38,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 SOFTWARE_VERSION_BUILD = 2;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,41,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 HARDWARE_VERSION_MAJOR = 25;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,43,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 HARDWARE_VERSION_MINOR = 12;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,50,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 BOOT_VERSION_MAJOR = 26;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,54,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 BOOT_VERSION_PATCH = 12;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,125,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u32 OTA_CONFIG_NUM = 6;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,145,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u8 PP = 11;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,149,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 REDUCTION_RATIO = 25;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,151,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float CURRENT_OFFSET = -3.31f / 2.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,157,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float ANGLESENS_CALIBRATION_ANGLE = 83.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,171,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float ANGLE_OBSERVER_ALPHA = 0.75f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,179,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float VELOCITY_KALMAN_INITIAL_COVARIANCE = 1e-3f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,182,业务代码中存在裸数字常量,需确认是否应命名化,5e-4f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,191,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float CURRENT_KALMAN_INITIAL_COVARIANCE = 100.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,193,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float CURRENT_KALMAN_PROCESS_NOISE_Q = 10.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,195,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float CURRENT_KALMAN_MEASUREMENT_NOISE_R = 5e-5f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,199,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float DEFAULT_current_loop_p = 0.1f / 100 * 12;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,201,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float current_loop_Ki = 0.55f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,203,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float current_loop_Kd = 3e-4f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,206,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float DEFAULT_vel_loop_p = 0.018f / 100 * 12;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,208,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float vel_loop_Ku = 3.600000e-03 * 0.7 * 100 / 12;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,210,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float vel_loop_Tu = 17.0f * 1e-3f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,212,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float vel_loop_Ki = 1.2 * vel_loop_Ku / vel_loop_Tu;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,214,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float vel_loop_Kd = 0.075 * vel_loop_Ku * vel_loop_Tu * 2;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,217,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float DEFAULT_vel_angloop_p = 0.4f / 100;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,219,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float vel_angloop_Ki = 5.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,225,业务代码中存在裸数字常量,需确认是否应命名化,150.0f / 100 * 12;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,232,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float DEFAULT_angle_loop_p = 60.0f / 100 * 12;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,235,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float DEFAULT_angle_MIT_p = 100.0f / 100 * 12;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,242,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float DEFAULT_vel_MIT_p = 5.0f / 100;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,244,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float vel_MIT_Ki = 15.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,249,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float DEFAULT_current_MIT_p = 0.2f / 100 * 12;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,253,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float current_MIT_Kd = 3e-4f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,260,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float ADC_MAX = 65536.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,262,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float PI = 3.14159265358979323846f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,264,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float INV_PI_3 = 3.0f / PI;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,266,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float PI_3 = PI / 3.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,268,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float _1_SQRT3 = 0.57735026919f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,270,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float _3PI_2 = 4.71238898038f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,272,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float SQRT3 = 1.7320508075688772f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,274,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float SQRT3DV2 = 0.8660254037844386f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,276,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float COS_PI_3 = 0.5f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,278,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float ANGLE_FACTOR = 25.0f / 180.0f * PI;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,280,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float DEG2RAD = 1.0f / 180.0f * PI;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,282,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float RAD2DEG = 180.0f / PI;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,286,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u8 CONFIG_SAVED_NUM = 6;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,290,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 LUT_SIZE = 1024;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,294,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 LUT_SCALE = (LUT_SIZE / (2.0f * PI));,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,338,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u8 ADC_FILTER_SIZE = 6;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,342,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float ERROR_ADC_VAL = 255.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,344,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float MAX_TEMP = 150.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,346,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float MIN_TEMP = -40.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,348,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float MAX_CURRENT = 40.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,350,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float MIN_CURRENT = -40.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,352,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float MAX_VCC = 65.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,358,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 VEL_FILTER_SIZE = 4;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,364,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float ANGLE_WRAP_THRESHOLD = 300.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,366,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float ANGLE_WRAP_VALUE = 360.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,368,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float RAD_FACTOR = 1.0f / ADC_MAX * 2.0f * PI;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,370,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float ANGLESENS_FACTOR = 1.0f / ADC_MAX * 360.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,374,业务代码中存在裸数字常量,需确认是否应命名化,constexpr int TIMER2_PRESCALER = 119;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,376,业务代码中存在裸数字常量,需确认是否应命名化,constexpr int TIMER2_PERIOD = 49;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,381,业务代码中存在裸数字常量,需确认是否应命名化,(TIMER2_PERIOD + 1) * (TIMER2_PRESCALER + 1) / 120000000.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,391,业务代码中存在裸数字常量,需确认是否应命名化,constexpr int TIMER1_PERIOD = 2999;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,396,业务代码中存在裸数字常量,需确认是否应命名化,(TIMER1_PERIOD + 1) * 0.41 - 1;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,400,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 COGGING_TABLE_SIZE = 128;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,413,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float VBUS_DROP_THRESHOLD = 5.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,415,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float VBUS_ABSOLUTE_MIN = 12.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,417,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u32 VBUS_DEBOUNCE_COUNT = 5;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,419,业务代码中存在裸数字常量,需确认是否应命名化,constexpr float VBUS_RECOVERY_RATIO = 0.9f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,427,业务代码中存在裸数字常量,需确认是否应命名化,while (angle >= 360.0f) angle -= 360.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/config.h,428,业务代码中存在裸数字常量,需确认是否应命名化,while (angle < 0.0f) angle += 360.0f;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,97,业务代码中存在裸数字常量,需确认是否应命名化,"status_read[2] = readFloat(ADDR_VOLTAGE_LIMIT, &data[1]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,98,业务代码中存在裸数字常量,需确认是否应命名化,"status_read[3] = readFloat(ADDR_VEL_LIMIT, &data[2]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,99,业务代码中存在裸数字常量,需确认是否应命名化,"status_read[4] = readFloat(ADDR_ANGLE, &data[3]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,100,业务代码中存在裸数字常量,需确认是否应命名化,"status_read[5] = readFloat(ADDR_TARGET_ANGLE, &data[4]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,101,业务代码中存在裸数字常量,需确认是否应命名化,"status_read[6] = readFloat(ADDR_TARGET_VEL, &data[5]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,156,业务代码中存在裸数字常量,需确认是否应命名化,FOC.target_current = data[2];,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,157,业务代码中存在裸数字常量,需确认是否应命名化,KTH7823.angle_set(data[3]);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,158,业务代码中存在裸数字常量,需确认是否应命名化,FOC.target_angle = data[4];,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,159,业务代码中存在裸数字常量,需确认是否应命名化,FOC.target_velocity = data[5];,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,185,业务代码中存在裸数字常量,需确认是否应命名化,*data = (u16)((data_word & DATA_U16_MASK) >> 16);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,242,业务代码中存在裸数字常量,需确认是否应命名化,u32 data_word_to_write = ((u32)data << 16) | (u32)virtualAddr;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,441,业务代码中存在裸数字常量,需确认是否应命名化,"status = writeFloat(ADDR_VEL_LIMIT, data[2]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,447,业务代码中存在裸数字常量,需确认是否应命名化,"status = writeFloat(ADDR_ANGLE, data[3]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,453,业务代码中存在裸数字常量,需确认是否应命名化,"status = writeFloat(ADDR_TARGET_ANGLE, data[4]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,459,业务代码中存在裸数字常量,需确认是否应命名化,"status = writeFloat(ADDR_TARGET_VEL, data[5]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,507,业务代码中存在裸数字常量,需确认是否应命名化,u32 crc_data[2];,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,511,业务代码中存在裸数字常量,需确认是否应命名化,"return crc_block_data_calculate(crc_data, 2);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,577,业务代码中存在裸数字常量,需确认是否应命名化,u32 write_data[4];,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,580,业务代码中存在裸数字常量,需确认是否应命名化,write_data[2] = counter;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,581,业务代码中存在裸数字常量,需确认是否应命名化,write_data[3] = crc;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,588,业务代码中存在裸数字常量,需确认是否应命名化,for (u8 i = 0; i < 4; i++) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,820,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[2] = *flash_ptr;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,822,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[3] = *flash_ptr;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,824,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[4] = *flash_ptr;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,826,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[5] = *flash_ptr;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,832,业务代码中存在裸数字常量,需确认是否应命名化,"temp_val[0], temp_val[1], temp_val[2], temp_val[3],",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,833,业务代码中存在裸数字常量,需确认是否应命名化,"temp_val[4], temp_val[5]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,845,业务代码中存在裸数字常量,需确认是否应命名化,u32 current_addr = n_APP_LATEST_AVAL_ADDR + 4 * i;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,864,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[2] = *flash_ptr;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,866,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[3] = *flash_ptr;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,868,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[4] = *flash_ptr;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,870,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[5] = *flash_ptr;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,874,业务代码中存在裸数字常量,需确认是否应命名化,"temp_val[0], temp_val[1], temp_val[2], temp_val[3],",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,875,业务代码中存在裸数字常量,需确认是否应命名化,"temp_val[4], temp_val[5]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,889,业务代码中存在裸数字常量,需确认是否应命名化,for (int i = 0; i < 8; i++) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,912,业务代码中存在裸数字常量,需确认是否应命名化,uint32_t reset_handler = *(__IO uint32_t *)(BOOTLOADER_START_ADDR + 4);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,952,业务代码中存在裸数字常量,需确认是否应命名化,delay_1ms(1000);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,969,业务代码中存在裸数字常量,需确认是否应命名化,"(uint32_t *)APPLATEST_START_ADDR, APP_MAX_SIZE / 4);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,972,业务代码中存在裸数字常量,需确认是否应命名化,uint32_t src_data = src_ptr[offset / 4];,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,989,业务代码中存在裸数字常量,需确认是否应命名化,delay_1ms(1000);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,997,业务代码中存在裸数字常量,需确认是否应命名化,offset += 4;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,1000,业务代码中存在裸数字常量,需确认是否应命名化,if ((offset % 4096) == 0) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/flash.cpp,1013,业务代码中存在裸数字常量,需确认是否应命名化,APP_MAX_SIZE / 4);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/health.cpp,25,业务代码中存在裸数字常量,需确认是否应命名化,constexpr u16 PROTECT_TIME = 6000;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/health.cpp,40,业务代码中存在裸数字常量,需确认是否应命名化,if (drv_temp == 255),安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/health.cpp,42,业务代码中存在裸数字常量,需确认是否应命名化,if (mcu_temp == 255),安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/health.cpp,63,业务代码中存在裸数字常量,需确认是否应命名化,"u32 currents[3] = {(u32)(sampler.get_current('') * 1000),",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/health.cpp,64,业务代码中存在裸数字常量,需确认是否应命名化,"(u32)(sampler.get_current('') * 1000),",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/health.cpp,65,业务代码中存在裸数字常量,需确认是否应命名化,(u32)(sampler.get_current('') * 1000)};,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/health.cpp,68,业务代码中存在裸数字常量,需确认是否应命名化,"current_max = max(currents[0], currents[1], currents[2]);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/health.cpp,69,业务代码中存在裸数字常量,需确认是否应命名化,if (current_max < 2000) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/health.cpp,72,业务代码中存在裸数字常量,需确认是否应命名化,} else if (current_max > 3800) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/health.cpp,75,业务代码中存在裸数字常量,需确认是否应命名化,} else if (current_max > 3400) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/health.cpp,78,业务代码中存在裸数字常量,需确认是否应命名化,} else if (current_max > 3000) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/health.cpp,81,业务代码中存在裸数字常量,需确认是否应命名化,} else if (current_max > 2000) {,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/health.h,46,业务代码中存在裸数字常量,需确认是否应命名化,u32 thermal_capacity = 3600000;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/health.h,48,业务代码中存在裸数字常量,需确认是否应命名化,u16 gapTimeMs = 10;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/health.h,52,业务代码中存在裸数字常量,需确认是否应命名化,": thermalRate(FLOAT_TO_Q16_16(0.995f)),",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/health.h,53,业务代码中存在裸数字常量,需确认是否应命名化,recoveryRate(FLOAT_TO_Q16_16(0.33f)) {},安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,142,业务代码中存在裸数字常量,需确认是否应命名化,u8 versionData[24] = {0};,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,147,业务代码中存在裸数字常量,需确认是否应命名化,versionData[1] = (softwareVersion.major >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,148,业务代码中存在裸数字常量,需确认是否应命名化,versionData[2] = softwareVersion.minor & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,149,业务代码中存在裸数字常量,需确认是否应命名化,versionData[3] = (softwareVersion.minor >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,150,业务代码中存在裸数字常量,需确认是否应命名化,versionData[4] = softwareVersion.patch & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,151,业务代码中存在裸数字常量,需确认是否应命名化,versionData[5] = (softwareVersion.patch >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,152,业务代码中存在裸数字常量,需确认是否应命名化,versionData[6] = softwareVersion.build & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,153,业务代码中存在裸数字常量,需确认是否应命名化,versionData[7] = (softwareVersion.build >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,156,业务代码中存在裸数字常量,需确认是否应命名化,versionData[8] = hardwareVersion.major & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,157,业务代码中存在裸数字常量,需确认是否应命名化,versionData[9] = (hardwareVersion.major >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,158,业务代码中存在裸数字常量,需确认是否应命名化,versionData[10] = hardwareVersion.minor & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,159,业务代码中存在裸数字常量,需确认是否应命名化,versionData[11] = (hardwareVersion.minor >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,160,业务代码中存在裸数字常量,需确认是否应命名化,versionData[12] = hardwareVersion.patch & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,161,业务代码中存在裸数字常量,需确认是否应命名化,versionData[13] = (hardwareVersion.patch >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,162,业务代码中存在裸数字常量,需确认是否应命名化,versionData[14] = hardwareVersion.build & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,163,业务代码中存在裸数字常量,需确认是否应命名化,versionData[15] = (hardwareVersion.build >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,166,业务代码中存在裸数字常量,需确认是否应命名化,versionData[16] = bootVersion.major & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,167,业务代码中存在裸数字常量,需确认是否应命名化,versionData[17] = (bootVersion.major >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,168,业务代码中存在裸数字常量,需确认是否应命名化,versionData[18] = bootVersion.minor & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,169,业务代码中存在裸数字常量,需确认是否应命名化,versionData[19] = (bootVersion.minor >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,170,业务代码中存在裸数字常量,需确认是否应命名化,versionData[20] = bootVersion.patch & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,171,业务代码中存在裸数字常量,需确认是否应命名化,versionData[21] = (bootVersion.patch >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,172,业务代码中存在裸数字常量,需确认是否应命名化,versionData[22] = bootVersion.build & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,173,业务代码中存在裸数字常量,需确认是否应命名化,versionData[23] = (bootVersion.build >> 8) & 0xFF;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,178,业务代码中存在裸数字常量,需确认是否应命名化,"CAN0_transmiter.build_can_id(CANFD_VERSION_ID), 24, versionData);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,186,业务代码中存在裸数字常量,需确认是否应命名化,char versionStr[32];,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,219,业务代码中存在裸数字常量,需确认是否应命名化,"status = fwdgt_config(time * 0.625, FWDGT_PSC_DIV64);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,298,业务代码中存在裸数字常量,需确认是否应命名化,u32 temp_val[6];,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,305,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[2] = *flash_ptr1;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,307,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[3] = *flash_ptr1;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,309,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[4] = *flash_ptr1;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,311,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[5] = *flash_ptr1;,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,316,业务代码中存在裸数字常量,需确认是否应命名化,"temp_val[0], temp_val[1], temp_val[2], temp_val[3], temp_val[4],",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,317,业务代码中存在裸数字常量,需确认是否应命名化,temp_val[5]);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,332,业务代码中存在裸数字常量,需确认是否应命名化,"u8 transmit_data[2] = {0x0A, 0xAC};",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/initial.cpp,334,业务代码中存在裸数字常量,需确认是否应命名化,"CAN0_transmiter.CANFD_AsyncSend(CANFD_OTA_ACK_ID, 2, transmit_data);",安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/systick.cpp,159,业务代码中存在裸数字常量,需确认是否应命名化,delay_1ms(1000);,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
info,SUP-MAG-001,sys/systick.cpp,227,业务代码中存在裸数字常量,需确认是否应命名化,SCB->AIRCR = (0x05FA0000U | (SCB->AIRCR & (0x700U)) | (1U << 2));,安全相关阈值/时间/比例建议用具名常量或配置宏。
|
||||
|
@@ -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 的接口;多行声明、构造函数可能需要人工复核。
|
||||
Reference in New Issue
Block a user