0
А смысл? Ну возьмите freemodbus свежей версии
0
Да. usRegInputStart это откуда начинаются адреса регистров ввода, а usRegInputBuf это регистры
0
Именно так.
  • avatar
  • Yanichar
  • 15 октября 2013, 17:22
0
— наклейка фольги — помогает, но вот фольга зараза отклеивается через пару месяцев;
Нужен клей правильный, БФ-2 подходит. В далёких 90-х фольгой ремонтировал геймпад на консоль, восемь- девять месяцев плотной эксплуатации перед отклеиванием. А там кнопки нажимаются чаще, чем на пульте.
  • avatar
  • Yanichar
  • 15 октября 2013, 10:31
0
Да, но питание и кварц в дипе расположены в центре корпуса.
  • avatar
  • Yanichar
  • 21 октября 2012, 13:34
0
С такой длинной выводов, хотя бы блокировочные конденсаторы и кварц нужно на плате поближе к камню сажать.
  • avatar
  • Yanichar
  • 21 октября 2012, 12:37
0
думаю автор уже сто раз раскаялся что выложил код
В точку.
Еще бы мастера, да еще и под stm32 ))
Можно попробовать.
  • avatar
  • Yanichar
  • 26 сентября 2012, 09:28
0
MB_UART_PARITY_TO_SPL(eParity)==USART_Parity_No? USART_StopBits_2: USART_StopBits_1
Так я ж не спорю. Это можно было сделать. Просто ещё остается номер порта. А кроме самого порта есть ещё лапы, которые надо настроить, и тактирование включить. Все эти определения надо брать откуда то по номеру. Можно было сделать как примерах стандартной библиотеки. А при переезде на другую платформу всё равно править прейдётся, я не верю в лёгкопереносимый код, всегда есть грабли. Вот потому я и постарался выкинуть сущности лишние,
  • avatar
  • Yanichar
  • 25 сентября 2012, 23:18
0
Коллега, Вы продолжаете искать оправдание вместо того, чтобы признать, что лучше так не делать.
Я признал ошибку, ещё до публикации. И написал об этом. Это моя первая статья и я не ожидал что такое допущение вызовет столько негатива.
значение Parity, которое вы можете установить в eMBInit(), однозначно определяет кол-во стоп битов.
Ткните носом в код, который это делает. Может я плохо искал? Я так понял, что однозначное определение отдано на откуп пользователям, и его надо делать в xMBPortSerialInit. Вот я и поддался искушению настраивать уже тут.
  • avatar
  • Yanichar
  • 25 сентября 2012, 22:13
0
Я подозреваю, что Вы просто скопировали исходники и подключили их к своему проекту. И это логично, зачем нужна библиотека, если для ее использования нужно перепроверять каждую строчку в исходном коде.
Да, но я просмотрел коментарии, относящиеся к фронт энду библиотеки.
Угу. Втихую игнорировать полученные параметры не баг. Это просто издевательство.
Мне начинает казаться, что если бы я так не написал, то и вопросов не было бы. Я повторю свой вопрос, почему я не могу задать стоп биты при вызове eMBInit и я все равно должен лезть дальше? Ну так не логично ли все параметры задавать в одном месте?
  • avatar
  • Yanichar
  • 25 сентября 2012, 21:24
0
Полагаю за написанный вами код
Да тут моего кода строк 10. Если под магическими цифрами вы имеет ввиду настройку таймера, то да, что такое 800 сразу непонятно.
слова можно глянуть в словаре
Вы против избыточных комментариев? Я вас понял.
  • avatar
  • Yanichar
  • 25 сентября 2012, 12:53
0
Тогда почему до вызова функции xMBPortSerialInit это не задается? Мы снова приходим к тому, что нужно редактировать параметры тут.
  • avatar
  • Yanichar
  • 25 сентября 2012, 12:37
0
Согласен. Кому мне давать по шее, что отсюда я не могу настроить стоп биты? Я повторю, это основная причина того, что я так сделал.
Какой? Перевод названия метода?
Это очевидно для вас, видимо новичком вы были много лет назад.
  • avatar
  • Yanichar
  • 25 сентября 2012, 12:27
0
Тут у вас в явном виде лишний комментарий
Лишний этот комментарий только для тех, кто знаком со стандартной библиотекой. Для остальных это может иметь какой то смысл.
  • avatar
  • Yanichar
  • 25 сентября 2012, 12:10
0
Да-да, знаем, это фича.
Если программист захочет изменить параметры порта, то наткнувшись на строчку кода eStatus = eMBInit( MB_RTU, 0x0A, 0, 19200, 0 ); имхо он ДОЛЖЕН прочитать комментарий. Кроме того, хорошо я мог сделаю инициализацию отсюда, но почему авторы сделали так, что отсюда я не могу задать стоп биты? Тесть мне все равно нужно лезть в функцию xMBPortSerialInit. Вот потому я и сделал так. И да, холивор на на тему комментариев продолжать не хочется, я коментирую каждый чих. Это моё мнение, и переубедить меня не получится.
  • avatar
  • Yanichar
  • 25 сентября 2012, 12:02
0
По скольку вы явно ввели баг
Не надо придумывать. Багов нет. То, что параметры прописаны глубже по коду не баг.
«это пробная версия, завтра исправлю»
Это не пробная версия. Это демонстрация того, как можно сделать, и получить решение. Я не претендую то, что это правильное решение, у каждого своя голова на плечах.
На комментарии далеко не всегда обращают внимания.
ИМХО это ошибка. Коментарии пишут с какой-то целью.
Я слишкм жадный
Хорошо, а жаба не будет душить, когда для того чтоб настроить ком порт потребуется делать лишние телодвижения? Посмотрите как сделано в примерах в стандартной библиотеки, я лишние сущности не люблю.
  • avatar
  • Yanichar
  • 24 сентября 2012, 23:51
0
1сек = 20 000 * 50мкс. Считаем 6.25 * 20 000 = 125 000 > 65535 (MAX_USHORT). И более того > 255 к которым вы вольно обрезали (uint8_t).
Очевидно что требуется менять предделитель в зависимости от переданного значения.
Да, что-то я погорячился, исправил. Но в случае RTU, переполнения не происходит. Спасибо за подсказку.
P.S.: Комментарии «так лучше не делать» правильнее дополнить строкой
#warning TODO: parity & stops & whatever you want

мало ли спустя сколько лет будете мучаться «и почему не работает», открыв архивный проект.
Ну есть же комментарий.
  • avatar
  • Yanichar
  • 24 сентября 2012, 13:07