Как сравнить две переменных типа struct
- Войдите на сайт для отправки комментариев
Втр, 14/06/2022 - 19:46
Здравствуйте принимаю данные из can шины сохраняю их в struct can_frame canMsg , жду сообщения с конкретными известными мне данными эталонный фрейм сохранен в переменной struct can_frame canMsg3;
canMsg3.can_id = 0x7E1;
canMsg3.can_dlc = 8;
canMsg3.data[0] = 0x2;
canMsg3.data[1] = 0x21;
canMsg3.data[2] = 0xA0;
canMsg3.data[3] = 0x00;
canMsg3.data[4] = 0x00;
canMsg3.data[5] = 0x00;
canMsg3.data[6] = 0x00;
canMsg3.data[7] = 0x00;
Принимаю данные пытаюсь сравнить два фрейма и при совпадении передать сообщение &canMsg в can шину.
if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) {
for (int i = 0; i<canMsg.can_dlc; i++) {
if (&canMsg == &canMsg3){
mcp2515.sendMessage(&canMsg1);
Контролирую произходящее в шине канхакером Действия не выполняются хотя нужный мне фрейм точно приходит.
Как выполнить действие при получении нужного мне фрейма?
Ты адреса пакетов в памяти сравниваешь, а не содержимое.
Ты адреса пакетов в памяти сравниваешь, а не содержимое.
Ты адреса пакетов в памяти сравниваешь, а не содержимое.
сказали же, АДРЕСА, они не могут быть одинаковыми, даже при одинаковых полях Id и остальных.
копать те надо в сторону memcmp.
Надо было читать учебник, а не думать. memcmp не пойдет, потому что пакеты бывают разной длины, и в хвосте структуры может быть мусор.
Надо было читать учебник, а не думать. memcmp не пойдет, потому что пакеты бывают разной длины, и в хвосте структуры может быть мусор.
про сравнить пакеты по наименьшей длине, в учебниках не сказано?
Что эта конструкция делает?
if (n == 0){
1 - нахера ты это делаешь в цикле
2 - у тя n совсем не та n после скобок
3 - будешь писать код не как положено, забанят.
https://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
Спасибо за помощь все заработало нужно было явно указать количество байт для сравнения, ну и убрать функцию из цикла .
ой господя, исправь size_t(7) на просто 7 и иди с богом...
Не проще ли добавить к struct оператор сравнения и спокойно сравнивать через обычные == или там > / < ?
Тут нужно сравнивать не всю структуру, а только нагрузку, на самом деле.
Не проще ли добавить к struct оператор сравнения и спокойно сравнивать через обычные == или там > / < ?
Так ка вы паписали оно не работает, даже компилятор ругается на то что нелзя сравнивать структуры.
Тут нужно сравнивать не всю структуру, а только нагрузку, на самом деле.
В 10-м посте правильный кусок кода?
нет.
как минимум ошибка, про которую сказали в #11
да и вообще код бредятина... зачем там цикл For? что делает первое if ?
Похоже, код вы пишете методом тыка, не подошло одно слово - меняете на другое...
не спорьте, вы даже не поняли. о чем речь...
Слушайте. зачем вы в КАН полезли. если ни черта не понимаете в программировании?
не спорьте, вы даже не поняли. о чем речь...
Слушайте. зачем вы в КАН полезли. если ни черта не понимаете в программировании?
Может есть желающие помочь на коммерческой основе. frolov.pavel.64@mail.ru
Пиши в Ищу исполнителя тогда.
Не проще ли добавить к struct оператор сравнения и спокойно сравнивать через обычные == или там > / < ?
Нет, как раз так, как я написал работает.
Вы начало фразы не прочитали.