Commit 3540cd74f212f5733eecabea84e57da1589e551e

Authored by Stéphane Raimbault
1 parent 9798adc7

Remove one function call overhead (read_reg_response).

Showing 1 changed file with 16 additions and 26 deletions
modbus/modbus.c
... ... @@ -1026,6 +1026,7 @@ static int read_registers(modbus_param_t *mb_param, int slave, int function,
1026 1026 int ret;
1027 1027 int query_length;
1028 1028 uint8_t query[MIN_QUERY_LENGTH];
  1029 + uint8_t response[MAX_MESSAGE_LENGTH];
1029 1030  
1030 1031 if (nb > MAX_REGISTERS) {
1031 1032 printf("EROOR Too many holding registers requested (%d > %d)\n",
... ... @@ -1037,8 +1038,21 @@ static int read_registers(modbus_param_t *mb_param, int slave, int function,
1037 1038 start_addr, nb, query);
1038 1039  
1039 1040 ret = modbus_send(mb_param, query, query_length);
1040   - if (ret > 0)
1041   - ret = read_reg_response(mb_param, data_dest, query);
  1041 + if (ret > 0) {
  1042 + int offset;
  1043 + int i;
  1044 +
  1045 + ret = modbus_check_response(mb_param, query, response);
  1046 +
  1047 + offset = mb_param->header_length;
  1048 +
  1049 + /* If response_ret is negative, the loop is jumped ! */
  1050 + for (i = 0; i < ret; i++) {
  1051 + /* shift reg hi_byte to temp OR with lo_byte */
  1052 + data_dest[i] = response[offset + 3 + (i << 1)] << 8 |
  1053 + response[offset + 4 + (i << 1)];
  1054 + }
  1055 + }
1042 1056  
1043 1057 return ret;
1044 1058 }
... ... @@ -1080,30 +1094,6 @@ int read_input_registers(modbus_param_t *mb_param, int slave,
1080 1094 return status;
1081 1095 }
1082 1096  
1083   -/* Reads the response data from a slave and puts the data into an
1084   - array */
1085   -static int read_reg_response(modbus_param_t *mb_param, uint16_t *data_dest,
1086   - uint8_t *query)
1087   -{
1088   - uint8_t response[MAX_MESSAGE_LENGTH];
1089   - int response_ret;
1090   - int offset;
1091   - int i;
1092   -
1093   - response_ret = modbus_check_response(mb_param, query, response);
1094   -
1095   - offset = mb_param->header_length;
1096   -
1097   - /* If response_ret is negative, the loop is jumped ! */
1098   - for (i = 0; i < response_ret; i++) {
1099   - /* shift reg hi_byte to temp OR with lo_byte */
1100   - data_dest[i] = response[offset + 3 + (i << 1)] << 8 |
1101   - response[offset + 4 + (i << 1)];
1102   - }
1103   -
1104   - return response_ret;
1105   -}
1106   -
1107 1097 /* Gets the raw data from the input stream */
1108 1098 static int preset_response(modbus_param_t *mb_param, uint8_t *query)
1109 1099 {
... ...