Fix comm-cpu and cpu-comm communication problems

COMM-CPU
1. Expand read method for any data types
2. Change intrnal counter behaviour

CPU-COMM
1. Add check for address existance in table before message
processing
2. Change getting table register method for get_register_address().
Now it's slow but works
fix/firstTestErrors
Oleg 10 hours ago
parent cece91acba
commit da91f4010b

@ -169,24 +169,43 @@ void Periphery::processDigitalOutput(){
#pragma CODE_SECTION("ramfuncs");
void Periphery::sendModbusDataToCPU(){
_message.mdl.all = 0; // TODO delete maybe?
_message.mdh.all = 0;
WEINBUS::WeinbusTableRegister reg;
reg = modbusRTU.dataHandler.outputRegisters.get_register_cursor(_modbusRegCounter);
if(modbusRTU.dataHandler.outputRegisters.address_range(reg.get_address())){
_message.mdl.all = reg.get_address();
reg.read(_message.mdh.all);
_message.mdl.all = reg.get_address();
switch(reg.get_type()){
case WEINBUS::DATA_UINT16:
{
reg.read(reinterpret_cast<uint16_t&>(_message.mdh.all));
break;
}
case WEINBUS::DATA_INT16:
{
reg.read(reinterpret_cast<int16_t&>(_message.mdh.all));
break;
}
case WEINBUS::DATA_UINT32:
{
reg.read(reinterpret_cast<uint32_t&>(_message.mdh.all));
break;
}
case WEINBUS::DATA_INT32:
{
reg.read(reinterpret_cast<int32_t&>(_message.mdh.all));
break;
}
case WEINBUS::DATA_FLOAT:
{
reg.read(reinterpret_cast<float&>(_message.mdh.all));
break;
}
default:{}
}
else {
_modbusRegCounter = 0;
reg = modbusRTU.dataHandler.outputRegisters.get_register_cursor(_modbusRegCounter);
_message.mdl.all = reg.get_address();
reg.read(_message.mdh.all);
}
_modbusRegCounter++;
if (_modbusRegCounter >= modbusRTU.dataHandler.outputRegisters.get_quantity()){
_modbusRegCounter = 0;
}
_cana.transmitMsg(can_space::MODBUS_DATA_COMM_TO_CPU_MBOX, _message);
}
@ -200,7 +219,8 @@ void Periphery::receiveCpuModbusData(){
WEINBUS::WeinbusTableRegister reg;
uint32_t addr = _message.mdl.all;
reg = modbusRTU.dataHandler.inputRegisters.get_register_cursor(addr - modbusRTU.dataHandler.inputRegisters.get_start_address());
if(modbusRTU.dataHandler.inputRegisters.is_address_exists(addr)) return;
reg = modbusRTU.dataHandler.inputRegisters.get_register_address(addr);
reg.write_data(_message.mdh.all);
}
}

@ -22,7 +22,6 @@ enum CAN_VARIANT{
};
enum configFlags{
NONE = 0,
MSB_ENABLE = 1u << 0,
STM_ENABLE = 1u << 1
};

Loading…
Cancel
Save