请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F280025C struct data_base buffer[] = {
{.address = 0x100, .value = &MI_L_U_FLT_SAMPLE},
{.address = 0x101, .value = &MI_L_V_FLT_SAMPLE},
{.address = 0x102, .value = &MI_L_W_FLT_SAMPLE},
{.address = 0x103, .value = &MI_TRAC_BATT_FLT_SAMPLE},
{.address = 0x104, .value = &MT_COLD_PLATE_FLT_SAMPLE},
{.address = 0x105, .value = &MU_FUEL_CELL_FLT_SAMPLE},
{.address = 0x106, .value = &MU_FUEL_CELL_PCH_FLT_SAMPLE},
{.address = 0x107, .value = &MU_TRAC_BATT_FLT_SAMPLE},
{.address = 0x108, .value = &MU_TRAC_BATT_PCH_FLT_SAMPLE},
{.address = 0x109, .value = (uint16_t *) &MI_L_U_FLT_AVG},
{.address = 0x10A, .value = (uint16_t *) &MI_L_V_FLT_AVG},
{.address = 0x10B, .value = (uint16_t *) &MI_L_W_FLT_AVG},
{.address = 0x10C, .value = (uint16_t *) &MI_TRAC_BATT_FLT_AVG},
{.address = 0x10D, .value = (uint16_t *) &MT_COLD_PLATE_FLT_AVG},
{.address = 0x10E, .value = (uint16_t *) &MU_FUEL_CELL_FLT_AVG},
{.address = 0x10F, .value = (uint16_t *) &MU_FUEL_CELL_PCH_FLT_AVG},
{.address = 0x110, .value = (uint16_t *) &MU_TRAC_BATT_FLT_AVG},
{.address = 0x111, .value = (uint16_t *) &MU_TRAC_BATT_PCH_FLT_AVG},
{.address = 0x112, .value = &THRESHOLD_MI_L_U_DIGITAL},
{.address = 0x113, .value = &THRESHOLD_MI_L_V_DIGITAL},
{.address = 0x114, .value = &THRESHOLD_MI_L_W_DIGITAL},
{.address = 0x115, .value = &THRESHOLD_MI_TRAC_BATT_DIGITAL},
{.address = 0x116, .value = &THRESHOLD_MU_FUEL_CELL_PCH_DIGITAL},
{.address = 0x117, .value = &THRESHOLD_MU_TRAC_BATT_PCH_DIGITAL},
{.address = 0x118, .value = (uint16_t *) &THRESHOLD_MI_L_U},
{.address = 0x119, .value = (uint16_t *) &THRESHOLD_MI_L_V},
{.address = 0x11A, .value = (uint16_t *) &THRESHOLD_MI_L_W},
{.address = 0x11B, .value = (uint16_t *) &THRESHOLD_MI_TRAC_BATT},
{.address = 0x11C, .value = (uint16_t *) &THRESHOLD_MT_COLD_PLATE},
{.address = 0x11D, .value = (uint16_t *) &THRESHOLD_MU_FUEL_CELL_PCH},
{.address = 0x11E, .value = (uint16_t *) &THRESHOLD_MU_TRAC_BATT_PCH},
{.address = 0x11F, .value = (uint16_t *) &bottomswitch_U_output_current_corrector},
{.address = 0x120, .value = (uint16_t *) &bottomswitch_V_output_current_corrector},
{.address = 0x121, .value = (uint16_t *) &bottomswitch_W_output_current_corrector},
{.address = 0x122, .value = (uint16_t *) &duty_cycle_bottom_switch_U},
{.address = 0x123, .value = (uint16_t *) &duty_cycle_bottom_switch_V},
{.address = 0x124, .value = (uint16_t *) &duty_cycle_bottom_switch_W},
/// Applied duty cycle for open loop mode regulation
{.address = 0x125, .value = &epwm_dutycyle},
{.address = 0x126, .value = (uint16_t *) &EPWM_PHI},
{.address = 0x127, .value = (uint16_t *) &EPWM_TBPRD},
{.address = 0x128, .value = (uint16_t *) &activate_rst},
{.address = 0x129, .value = (uint16_t *) &b_decrease_ramp},
{.address = 0x12A, .value = (uint16_t *) &bPrech_batt_Ok},
{.address = 0x12B, .value = (uint16_t *) &bPrech_fc_Ok},
{.address = 0x12C, .value = (uint16_t *) &bStartConv},
{.address = 0x12D, .value = &loop_type},
{.address = 0x12E, .value = &step_fault},
{.address = 0x12F, .value = &step_global},
{.address = 0x130, .value = &step_shutdown},
//{.adress = 0x131, .value = &GPIO_readPin(27)},
{.address = 0x132, .value = (uint16_t *) &ack_ok},
{.address = 0x133, .value = (uint16_t *) &bStartConv},
{.address = 0x134, .value = (uint16_t *) &cold_plate_state_error},
{.address = 0x135, .value = (uint16_t *) &drv_u_state},
{.address = 0x136, .value = (uint16_t *) &drv_v_state},
{.address = 0x137, .value = (uint16_t *) &drv_w_state},
{.address = 0x138, .value = (uint16_t *) &k_line_batt_state_error},
{.address = 0x139, .value = (uint16_t *) &k_line_fc_state_error},
{.address = 0x13A, .value = (uint16_t *) &k_pl_batt_state_error},
{.address = 0x13B, .value = (uint16_t *) &k_pl_fc_state_error},
{.address = 0x13C, .value = (uint16_t *) &mi_l_u_state},
{.address = 0x13D, .value = (uint16_t *) &mi_l_v_state},
{.address = 0x13E, .value = (uint16_t *) &mi_l_w_state},
{.address = 0x13F, .value = (uint16_t *) &mi_trac_batt_state},
{.address = 0x140, .value = (uint16_t *) &mu_fuel_cell_state},
{.address = 0x141, .value = (uint16_t *) &mu_trac_batt_state},
{.address = 0x142, .value = &battery.state},
{.address = 0x143, .value = &fuel_cell.state},
{.address = 0x144, .value = (uint16_t *) &b_fuel_cell_current_mode},
{.address = 0x145, .value = (uint16_t *) &b_fuel_cell_open_mode},
{.address = 0x146, .value = (uint16_t *) &b_fuel_cell_voltage_mode},
/// Duty cycle to apply
{.address = 0x147, .value = &epwm_dutycyle},
/// Fuel cell current consign
{.address = 0x148, .value = &I_cons_fc},
/// Parameters for voltage loop corrector
{.address = 0x149, .value = (uint16_t *) &(voltage_mode.INTEGER_HIGH)},
{.address = 0x14A, .value = (uint16_t *) &(voltage_mode.INTEGER_LOW)},
{.address = 0x14B, .value = (uint16_t *) &(voltage_mode.KI)},
{.address = 0x14C, .value = (uint16_t *) &(voltage_mode.KP)},
{.address = 0x14D, .value = (uint16_t *) &(voltage_mode.OUT_HIGH)},
{.address = 0x14E, .value = (uint16_t *) &(voltage_mode.OUT_LOW)},
{.address = 0x14F, .value = (uint16_t *) &(voltage_mode.TI)},
/// Parameters for current loop corrector
{.address = 0x150, .value = (uint16_t *) &(current_mode.INTEGER_HIGH)},
{.address = 0x151, .value = (uint16_t *) &(current_mode.INTEGER_LOW)},
{.address = 0x152, .value = (uint16_t *) &(current_mode.KI)},
{.address = 0x153, .value = (uint16_t *) &(current_mode.KP)},
{.address = 0x154, .value = (uint16_t *) &(current_mode.OUT_HIGH)},
{.address = 0x155, .value = (uint16_t *) &(current_mode.OUT_LOW)},
{.address = 0x156, .value = (uint16_t *) &(current_mode.TI)},
/// Fuel cell voltage consign
{.address = 0x157, .value = &V_cons_fc}
};
struct data_base screenshot_data[] =
{
{0, 0},
{0, 0},
{0, 0},
{0, 0},
{0, 0}
};
/*
* copy_data function perform memory manipulation between CAN query
* and current available data to keep a photo of all values to transfer
*
*
* \param[in] source - can_frame contains start address and number of values to copy
* \param[in] table - pointer on global buffer that stores all values
* \param[out] copy_instant_value - pointer on output buffer.
*
* */
uint32_t data_can;
void copy_data(struct can_frame source, struct data_base * table, struct data_base * copy_instant_value)
{
static uint16_t i = 0;
static uint16_t j = 0;
/**
* Search starting element which correspond to address on CAN frame.
*/
for(i=0; i < 87; i++)
{
if(source.address == table[i]->address)
{
// i point to starting element
break;
}
if(i == (sizeof(table)/sizeof(data_base_t) - 1))
{
//printf("WARNING! an error or exit code might be raised, no matches found");
}
}
/**
* Search of the end element to copy
*/
for(j=0; j<source.number_of_registers; j++)
{
copy_instant_value[j]->address = table[i + j]->address;
/// WARNING ERROR TODO SECTION CRITIC
// CRITICAL_SECTION_ENTER
copy_instant_value[j]->value = table[i + j]->value;
//data_can = *(uint32_t *)&MI_L_U_FLT_AVG;
// CRITICAL_SECTION_EXIT
}
}
大家好、
我有一个问题、我想浏览我的结构来检测匹配。 在"复制数据函数"中、我的指针似乎有问题、我传递了我的函数的参数两个关于结构的指针。 如果我找到匹配项、我希望从匹配项+偏移量中复制结构体、并在另一个结构体中。 编译器返回错误:#45表达式必须具有指针类型。
可以帮帮我吗?
谢谢
Damien