1

Тема: Что такое маска?

Поясните на пальцах что такое маска. я раз 150 прочитал описание этого термина и в какие то моменты я даже думал, что уловил смысл, но он каждый раз от меня ускользал как белый кролик.

настраиваю фильтр на базе canny 7 duo.

0x0405 - отбор-значение CAN IDL ( задал что из шлюза забираются все пакеты с ID 405 для дальнейших манипуляций)

0xFFFF - отбор-маска CAN IDL (вот что делает эта маска и что получиться если я в ней поменяю на 0x0000, 0x1234 или так далее?)

дальше пошла конкретика, мне нужно байт D2, при условии что там 41 сменить на 53, все остальное в пакете оставить как есть. как я дальше правильно задаю сочлененный параметр D3:D2?

0х0041 - отбор-значение CAN D3:D2 (как правильно писать что бы он внимание не обращал на D3, а смотрел только D2)

и далее опять маску надо задать. как мне подсказывает логика, именно в ней я задаю что проходит дальше для изменения, а что стопориться, если я не продолжу ввод условий, например для замены.

0xFFFF - отбор-маска CAN D3:D2 (вот опять эта маска, что дает изменение символов FFFF, какой ее смысл?)


P.s. Вам огромное уважение что развиваете такой проект, очень нужная вещь с современным машинами, но не критики ради, а как пожелание - сделайте инструкции не только технически грамотным языком, что бы перед людьми не стыдно было, но и для дураков на пальцах, которые зарядку кроны проверяют языком. Все же их много и наверное на них рассчитан проект...
а если в программе при наведении на элементы диаграммы будет выскакивать не та же информация, которую сократили в названии элемента, а простое объяснение этого элемента: "Читаем ID сообщения CAN1" вместо "Регистр принятого сообщения CAN IDL", то цены ей не будет.

P.s.s если не сложно, так же на пальцах объясните зачем вы упаковали (возможно технически по другому нельзя) все манипуляции с данными в пакетах по парам, это настолько усложняет конструкцию работы с вашими отличными устройствами.

Спасибо.

2

Re: Что такое маска?

Битовые маски используются для побитовых манипуляций со значениями. Таким образом, на начальном этапе их освоения, следует пользоваться двоичным представлением чисел.

0x0405 = 0b0000010000000101
0xFFFF = 0b1111111111111111

Если в соответствующем разряде битовой маски отбора установлено значение "1" это значит, что пришедшее сообщение будет сравниваться со значением отбора по этому биту, если установлено значение "0", то не будет.

Если маска 0xFFFF, это значит что будут сравниваться каждый бит значения, и в отбор попадут сообщения, у которых CAN IDL строго равен 0x0405

Если бы маска была, скажем 0xFFF0

0x0405 = 0b0000010000000101
0xFFF0 = 0b1111111111110000
     ^                 ^^^^

То в отбор попали бы сообщения c CAN IDL равным 0x040x где x = любое число, например 0x0400, 0x0401, 0x0402 ..., 0x040F. Так как сравнение происходило бы лишь по старшим 12и разрядам двоичного представления числа (или по старшим трем разрядам шестнадцатеричного)

Подробнее о битовых масках можно узнать в учебных материалах по различным направлениям вычислительной техники и программированию.

Примеры работы с драйвером шлюза CAN есть в документации: https://canny.ru/docs/c72duo/cangateway … ay-primery

И на форуме, например здесь: https://forum.canny.ru/viewtopic.php?id=1020

Вам огромное уважение что развиваете такой проект, очень нужная вещь с современным машинами, но не критики ради, а как пожелание

Спасибо за лестный отзыв! Мы постоянно совершенствуем наши продукты и стремимся учитывать пожелания пользователей по мере сил.

если не сложно, так же на пальцах объясните зачем вы упаковали (возможно технически по другому нельзя) все манипуляции с данными в пакетах по парам

Упаковка пары 8-битных значений в одно 16-битное является обычной практикой на 16-битных машинах, особенно при ограниченном объеме памяти.

Благо, что как объединение так и разделение таких значений на байты довольно тривиально:

https://forum.canny.ru/viewtopic.php?id=745

https://forum.canny.ru/viewtopic.php?id=726

https://forum.canny.ru/viewtopic.php?pid=10197#p10197