ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
19 мая
181038 Топик полностью
koyodza (11.02.2010 19:52 - 20:32, просмотров: 129) ответил Михаил Е. на Честно говоря не понимаю смысл вопроса. Делал управление по ModBus 21 устройством. Для каждого устройства создавал управляющий объект. Объекту давалась команда - сформировать фрейм для ModBus. Объект возвращал указатель на последовательность байт, дальше
гм... Вы видимо невнимательно прочитали вопрос. Попытаюсь объяснить ещё раз речь идёт об одном устройстве, а не о сети устройств. И об внутренней организации данных в этом устройстве, с учётом особенностей МК (LittleEndian) и коммуникационных протоколов (BigEndian). Конкретно - МК STM32, протоколы - модбас и эзернет (TCP+UDP). Это далеко не первый мой девайс с модбасом, но раньше проблема не стояла столь остро потому, что либо количество регистров было относительно небольшим (не более полсотни) и я использовал примерно те же методы, о которых уже говорили коллеги (Скрипач в частности), либо использовались МК с BigEndian. Это также не первое устройство на STM32, но в предыдущих использовались проприетарные протоколы. Правда, это первое моё изделие с эзернет (хотя я немного потренировался на F120+CP2200, но у F120 как раз BigEndian). Сейчас количество регистров будет не менее 200-250, они будут относиться к примерно 10 абсолютно различным функциональным модулям, и контроль за "картой памяти модбас" становится достаточно сложным. Я хочу разбить регистры по группам в соответствии с функциональным назначением, т.е. по сути у каждого функционального модуля будет 2 больших структуры, которые доступны снаружи в виде некоторого количества тех же модбас-регистров. Но эти структуры нужно привязать к конкретным номерам регистров, и вот как раз именно это я и пытаюсь сделать. Вариант с длиннючим if else if мне не нравится