Тот анализатор которым я пользуюсь, выдает именно такие предупреждения…
Не разу он мне не выдал такого предупреждения, которое мне удалось исправить.
Хочется понять его логику. Может дело во мне.
Давно хочу спросить… Объясните логику анализатора (не вашего)
Неопределенный порядок выполнения
#pragma pack(push,1)
typedef union
{
struct eeprom_tag
{
signed short D0;
signed short D1;
unsigned char CRC;
};
unsigned char EepromAlignment[((sizeof(struct eeprom_tag)+2)/4)*4];
}
eeprom_t;
#pragma pack(pop)
...
eeprom_t Ep;
...
Ep.CRC=GetCRC((unsigned char*)&Ep, sizeof(struct eeprom_tag)-sizeof(Ep.CRC) );
Откуда предупреждение? В аргументах функции побочных эффектов нет, а sizeof вообще вычисляется на этапе компиляции.
Как писать чтобы предупреждения не было?
В натуре! сейчас проверил на Kepware,
задал мастеру блок чтения дискретных входов 16, а в слейву 8
что возвращаешь слайвом ILLEGAL_DATA_ADDRESS, что ILLEGAL_DATA_VALUE
Kepware пишет
Date Time Level User Name Source Event
05.11.2020 19:39:58 2 Default User Modbus Serial Bad address in block [000002 to 000012] on device 'c1.d1'
Вспомнил почему я не делал обработку ошибок!
Все дело в неоднозначности трактовок функций ошибок 2 (ILLEGAL_DATA_ADDRESS) и 3 (ILLEGAL_DATA_VALUE).
Каждый трактует их как хочет.
Некоторые изучают стили форматирования, правила именования переменных итд. итп. А некоторые просто пишут.
Нельзя же утверждать что Достоевский не писатель, на основании почерка.
ModBus точно не из тех протоколов, для которых надо (и стоит) из главного цикла запускать ModBusRTU/ASCII(). Так как ModBus (почти?) всегда не единственная функция устройства, то времена начинают плавать. А это не здорово.
Я тоже так когда-то думал… Но лет 15 как отпустило…
Сюжет напомнил «4 комнаты». Для пущего эффекта надо было закончить также youtu.be/1qP4bXEDPXU?t=18
Пока остальные персонажи играют в корпоративный квест, главный герой собирает банкноты со стола и скрывается в тумане.
Не разу он мне не выдал такого предупреждения, которое мне удалось исправить.
Хочется понять его логику. Может дело во мне.
Неопределенный порядок выполнения
Откуда предупреждение? В аргументах функции побочных эффектов нет, а sizeof вообще вычисляется на этапе компиляции.
Как писать чтобы предупреждения не было?
cloud.mail.ru/public/3yNa/4rTds4vaR
там еще выше защита для коротких пакетов
задал мастеру блок чтения дискретных входов 16, а в слейву 8
что возвращаешь слайвом ILLEGAL_DATA_ADDRESS, что ILLEGAL_DATA_VALUE
Kepware пишет
Date Time Level User Name Source Event
05.11.2020 19:39:58 2 Default User Modbus Serial Bad address in block [000002 to 000012] on device 'c1.d1'
Все дело в неоднозначности трактовок функций ошибок 2 (ILLEGAL_DATA_ADDRESS) и 3 (ILLEGAL_DATA_VALUE).
Каждый трактует их как хочет.
Нельзя же утверждать что Достоевский не писатель, на основании почерка.
В следующей версии сделаю как опцию.
Я тоже так когда-то думал… Но лет 15 как отпустило…
Используйте «паттерн Синглтон»! В эмбедеде его только и используют, уже лет 40!
Ждем на Хабре публикаций вроде «используйте целочисленную арифметику», или «не используйте printf»!
youtu.be/1qP4bXEDPXU?t=18
Пока остальные персонажи играют в корпоративный квест, главный герой собирает банкноты со стола и скрывается в тумане.
Что я и делаю без этих хлопот…
Коментарии обнадеживающие
forum.cxem.net/index.php?/blogs/entry/541-%D0%BA%D0%B0%D0%BA-%D0%BF%D0%B5%D1%80%D0%B5%D1%81%D1%82%D0%B0%D1%82%D1%8C-%D0%B2%D0%BE%D0%BB%D0%BD%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%D1%81%D1%8F-%D0%B8-%D0%BF%D0%BE%D0%BB%D1%8E%D0%B1%D0%B8%D1%82%D1%8C-rtos
Как найти точку входа в задачу?