Примечание: это не stricto sensu «ответ», а список замечаний
О Чтение
подпись
int16_t *Read (uint8_t *buffer, const uint16_t length)
но функция никогда не возвращает значение, возможно, вы хотите вернуть количество прочитанных байтов, в этом случае
int16_t Read (uint8_t *buffer, const uint16_t length)
Статическая переменная respNo только увеличивается и никогда не используется, эти две строки могут быть удалены:
static uint32_t respNo = 0;
respNo++;
ТамНет никакой причины иметь totalBytes статическим, потому что вы устанавливаете его значение равным 0, прежде чем печатать буфер, поэтому нет исторического перехода от вызова к следующему.Это должно быть local .
counter бесполезно, поскольку оно всегда имеет значение totalBytes
UartReceive всегда успешно и никогда не возвращает значение, указывающее на ошибку?
- , если да, оно бесполезно Read возвращает значение, потому что оно всегда будет length
- если нет, вы должны принять во внимание ошибку и, вероятно, Read должны вернуть totalBytes значение количества прочитанных байтов
В
printf("\n");
printf("Byte received........");
int16_t adata[9] = {0x09,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30};
for (i=0; i<9;i++)
{
printf("%d ",buffer[i]);
adata[i] = buffer[i];
}
printf("\n");
- Вы делаете цикл от 1 до 9, а не от 0 до 8, так что вы по крайней мере выходите из adata и выне печатайте значение первого байта в буфере
- , вы только устанавливаете adata и никогда не используете его, его можно удалить.
- формат должен быть % u , а не % d
Возможно, цикл должен быть от 0 до totalBytes - 1
, чтобы быть совместимым с кодом выше:
printf("\nByte received : ");
for (i=0; i<totalBytes;i++)
{
printf("%u ",buffer[i]);
}
putchar('\n');
О Сравнить
В
rs485_message_t rs485Msg;
int StP15Vmsg[9] = {0x09,0x31,0x33,0x30,0x30,0x30,0x30,0x30,0x34};
int adata[9] = {0x09,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30};
uint8_t buffer[9];
const uint8_t length;
for (int j=0; j<=9; j++)
{
adata[j] = *Read(buffer, j);
}
rs485Msg и StP15Vmsg бесполезны, удалите их
Я не понимаю, почему вы вызываете Read несколько раз в цикле с длиной, увеличенной на каждуювремя, поэтому вы будете перезаписывать несколько раз в буфер .Я тоже не понимаю, пока вы сохраняете возвращаемое значение Чтение (которые возвращают значение в настоящее время)
Возможно, вы хотите именно это:
uint8_t buffer[9];
uint8_t length = Read(buffer, 9);
In
if(compareArray(FWmsg,arduinodata,7)==0)
{
char res;
uint8_t add, fwcommand, fwaction;
uint16_t fwvalue;
rs485_message_t rs485Msg;
proto485ComposeMsg(&rs485Msg, &add, &fwcommand, &fwaction, &fwvalue);
res = GetABFWversion(&add, &fwcommand, &fwaction, &fwvalue);
}
У меня нет связи с кодом выше, а res установлено, но никогда не используется
Сравнить никогда не делает сравнения, почему оно называется Сравнить ?Он никогда не возвращает значение, какое значение он должен возвращать?