www.open-tager.ru

открытый лазертаг форум
Текущее время: 24 ноя 2024, 15:09

Часовой пояс: UTC + 3 часа [ Летнее время ]


Реклама

Правила форума


В разделе запрещены - обсуждение оборудования не поддерживающего открытых протоколов, реклама и ссылки на готовые продукты лазертага, обсуждение политики производителей и самих производителей. Виден всем.



Начать новую тему Ответить на тему  [ Сообщений: 1076 ]  На страницу Пред.  1 ... 100, 101, 102, 103, 104, 105, 106 ... 108  След.
Автор Сообщение
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 05 фев 2017, 12:10 
Не в сети
Старожил

Зарегистрирован: 18 мар 2015, 13:19
Сообщений: 574
Откуда: Нижний Новгород
Pingvin писал(а):
Первым делом проверьте приоритеты прерываний, в которых используются функции FreeRTOS вызываемые из прерываний (названия их начинаются с fromISR...)

С этого я начал, как с самого очевидного варианта :)

Pingvin писал(а):
Цитата:
Поэтому крайне редко, но случается ситуация, когда один поток выполняет, например, операцию new, не успевает её закончить, и управление передается другому потоку, который тоже вызывает new/delete.

А на что даны критические секции?
Входите в критическую секцию, делаете new, выходите.

Критические секции FreeRTOS даны, вообще-то, немного для другого (не путать с критическимим секциями Windows!) :) Для простого предотвращения "гонки данных" есть мьютексы и семафоры. В данном случае правильнее применять мьютекс. Рекомендую на досуге разобраться в этом вопросе, потом кучу времени спасёте.

Да, можно было бы вручную оборачивать вручную каждый new/delete, а заодно все операции со стандартными контейнерами, ведь контейнеры постоянно используют new/delete :) Получился бы совсем плохой код, и всегда оставался бы шанс забыть добавить блокировку. Это - плохой стиль :)

А вот правильное решение такой проблемы я как раз и описал в предыдущем посте. Все происходит автоматически и только при операциях с хипом. Никаких лишних блокировок и изменения кода.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 05 фев 2017, 12:15 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
У меня широко используются и мьютексы, и очереди. ;) :)
Я не спорю, что Вы нашли оптимальное решение - ваш, код, Вам видней.

Кстати - а где в коде "отпускание" мьютекса?

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 06 фев 2017, 00:52 
Не в сети
Старожил

Зарегистрирован: 18 мар 2015, 13:19
Сообщений: 574
Откуда: Нижний Новгород
Pingvin писал(а):
Кстати - а где в коде "отпускание" мьютекса?


В деструкторе объекта ScopedLock. Он полностью эквивалентен std::unique_lock ( http://www.cplusplus.com/reference/mutex/unique_lock/ ).

Зачем это надо? Это называется RAII ( https://ru.wikipedia.org/wiki/%D0%9F%D0 ... 0%B8%D1%8F ) - простой паттерн, позволяющий избегать ошибок при владении какими-либо ресурсами.
Пусть у нас есть класс Mutex с методами lock() и unlock(). Мы, конечно, можем писать код так:
Код:
myMutex.lock()
<некоторые операции>
myMutex.unlock()

Пока все выглядит неплохо. Но представим, что код немного сложнее:
Код:
void myFunc()
{
    myMutex.lock()
    <операции>
    if (<условие1>)
    {
        <операции>
        myMutex.unlock()
        return;
    }
    <что-то ещё>
    if (<условие2>)
    {
        <операции>
        myMutex.unlock()
        return;
    }
    <что-то ещё>
    if (<условие3>)
    {
        <операции>
        myMutex.unlock()
        return;
    }
    <операции>
    myMutex.unlock()
    return;
}

Это некоторая функция с несколькими точками выхода. Перед каждым return нужно не забыть отпустить мьютекс. Кроме того, если речь идет не об микроконтроллере, то код может генерировать исключения, и функция завершится в непредсказуемом месте. Может оказаться, что до unlock() не дойдет. Мы получим мьютекс, который никто не отпустил. Есть и другие аналогичные ситуации. На худой конец, можно просто забыть написать unlock(). Чтобы такого не было, создается специальный объект-обертка ScopedLock. Этот объект забирает мьютекс в конструкторе и отдает автоматически в деструкторе (ну или можно принудительно отдать раньше деструктора). Таким образом гарантируется, что когда закончится время жизни ScopedLock, мьютекс будет отпущен.

В C++ использовать мьютексы напрямую не нужно практически никогда, всегда следует прибегать к RAII-обертке.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 06 фев 2017, 10:12 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Понятно!

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 08 фев 2017, 08:44 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Приветствую!
На данным момент интересует, как настраиваются радиомодули, с какими параметрами?
Я так понял, все устройства равны в сети?
И бандана с тагом общаются по "общей сети"?
У всех устройств один адрес - какой?

Верно ли понимаю, что автодтверждение отключено?
Какой канал используется?
Скорость обмена?
И т.д...

Цитата:
0x02 EN_RXADDR

Выбирает активные каналы приёмника.


То есть активных каналов может быть несколько?
И модуль будет следить за всеми одновременно?

P.S. Может ветку заведём по радиомодулям отдельную?
Чтобы тут не флудить.

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 08 фев 2017, 12:32 
Не в сети
Старожил

Зарегистрирован: 18 мар 2015, 13:19
Сообщений: 574
Откуда: Нижний Новгород
Pingvin писал(а):
Может ветку заведём по радиомодулям отдельную?
Чтобы тут не флудить.

Окей, я завел: viewtopic.php?f=5&t=4959

Вопросы ниже имеют все-таки отношение к использованию NRF в Caustic, поэтому пока отвечу здесь:
Pingvin писал(а):
На данным момент интересует, как настраиваются радиомодули, с какими параметрами?
Я так понял, все устройства равны в сети?
И бандана с тагом общаются по "общей сети"?
У всех устройств один адрес - какой?
Верно ли понимаю, что автодтверждение отключено?
Какой канал используется?
То есть активных каналов может быть несколько?
И модуль будет следить за всеми одновременно?
Скорость обмена?
И т.д...

В моем коде вся инициализация сделана в функции void NRF24L01Manager::init() : https://github.com/DAlexis/caustic-lase ... 1.cpp#L176 . Все вещи, про которые пишу ниже, настраиваются из этой функции.

Все устройства в общей сети по одному хардварному адресу. Я не меняю тот, что стоит по-умолчанию, e7 e7 e7 e7 e7, и использую свою адресацию поверх этой. Бандана с тагом тоже в общей сети.

В модуле NRF24 предусмотрено 5 "каналов приема" с разными nrf-адресами. Но nrf-адреса могут отличаться только последним байтом, и все они все равно на одной частоте. Просто при приеме пакета радиомодуль скажет, какому каналу пакет принадлежит. Функция бесполезная, когда есть своя адресация поверх nrf.

Автоподтверждение средствами NRF24 отключено. Эту функцию я реализую сам, потому что встроенная в NRF слишком примитивна.

Канал, по-моему, везде стоит номер 1. Это последний параметр функции NRF24L01Manager::init(). Помнится, Вы находили документ, из которого вытекает, что в России можно использовать мощные радиомодули nrf, если канал 101-125. Так что в дальнейшем канал изменю на какой-нибудь разрешенный.

Скорость обмена - у меня стоит 1М. Нужно будет понизить до 250к - это умеют новые модули. Мой код пока не поддерживает такой режим, как руки дойдут - добавлю. Скорости 250к хватит на всё, зато дальность заметно возрастет.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 08 фев 2017, 13:00 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Спасибо за оперативный ответ!
Буду пробовать.
Про нормативы тут http://aterlux.ru/index.php?page=article&art=nrf24l01p
Цитата:
Использование радиоэлектронных средств в России регулируется Правилами регистрации радиоэлектронных средств и высокочастотных устройств. Раздел «Изъятия из перечня радиоэлектронных средств и высокочастотных устройств, подлежащих регистрации» определяет перечень радиочастотного оборудования, не подлежащего регистрации. В частности, пункт 24 разрешает использование частот 2400-2483,5 Мгц в устройствах малого радиуса действия, используемых «в сетях беспроводной передачи данных в полосе радиочастот 2400 - 2483,5 МГц, с максимальной эквивалентной изотропно излучаемой мощностью передатчика не более 100 мВт при использовании прямого расширения спектра и других отличных от псевдослучайной перестройки рабочей частоты видов модуляции ... при максимальной спектральной плотности эквивалентной изотропно излучаемой мощности 2 мВт/МГц».

Т.е. допускается использование передатчиков nRF24L01 на каналах 0...83 (2400...2483 МГц) без усилителей мощности сигнала.

Условия использования частот в диапазоне от 2500Мгц изложены в п.13:

«Пользовательское (оконечное) оборудование передающее, включающее в себя приемное устройство, работающее в полосах радиочастот 2300 - 2400 МГц, 2500 - 2690 МГц, 3400 - 3450 МГц и 3500 - 3550 МГц, с допустимой мощностью излучения передатчика не более 1 Вт, в том числе встроенное либо входящее в состав других устройств»

Т.е. допускается использование модулей nRF24L01 на каналах 100...125 (2500...2525 МГц) с усилителем мощности.

Как видно, документ не описывает использование частот в диапазоне 2484 – 2499 МГц. Т.е. использовать каналы 84...99 (2484...2499 МГц) передатчиков nRF24L01 не допускается.


По FIFO ещё есть вопросы, но сначала сам поищу информацию, попробую разобраться.

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 08 фев 2017, 13:37 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 27 ноя 2011, 00:22
Сообщений: 1569
Откуда: Україна
Alexies писал(а):
...В модуле NRF24 предусмотрено 5 "каналов приема" с разными nrf-адресами. Но nrf-адреса могут отличаться только последним байтом, и все они все равно на одной частоте. Просто при приеме пакета радиомодуль скажет, какому каналу пакет принадлежит. Функция бесполезная, когда есть своя адресация поверх nrf..

Немного не так. Есть 6 каналов приёмника. Причём 1-й и 2-й могут иметь уникальный адрес, а вот остальные с 3-го по 6-й привязаны к адресу 2-го канала.
Функция не такая уж и бесполезная. Если допустим есть устройство, которое работает ТОЛЬКО с основной платой ружья (допустим повязка или жилет), то можно задать ему свой уникальный адрес на 2-м канале и кроме платы своего ружья его не услышит никто. А на первом канале уже организовывать сеть с ретрансляцией пакетов для управления ружьями, сбора статистики и т.д.
Я не призываю так делать, это просто пример для чего может быть полезен второй канал.

_________________
Нет предела совершенству, но ресурсы заканчиваются быстро.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 08 фев 2017, 16:10 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Pacifist писал(а):
Alexies писал(а):
...В модуле NRF24 предусмотрено 5 "каналов приема" с разными nrf-адресами. Но nrf-адреса могут отличаться только последним байтом, и все они все равно на одной частоте. Просто при приеме пакета радиомодуль скажет, какому каналу пакет принадлежит. Функция бесполезная, когда есть своя адресация поверх nrf..

Немного не так. Есть 6 каналов приёмника. Причём 1-й и 2-й могут иметь уникальный адрес, а вот остальные с 3-го по 6-й привязаны к адресу 2-го канала.
Функция не такая уж и бесполезная. Если допустим есть устройство, которое работает ТОЛЬКО с основной платой ружья (допустим повязка или жилет), то можно задать ему свой уникальный адрес на 2-м канале и кроме платы своего ружья его не услышит никто. А на первом канале уже организовывать сеть с ретрансляцией пакетов для управления ружьями, сбора статистики и т.д.
Я не призываю так делать, это просто пример для чего может быть полезен второй канал.


Именно это и хотел узнать - возможность находится одновременно в двух или более "независимых" сетях.

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 08 фев 2017, 16:22 
Не в сети
Старожил

Зарегистрирован: 18 мар 2015, 13:19
Сообщений: 574
Откуда: Нижний Новгород
Pingvin писал(а):
По FIFO ещё есть вопросы, но сначала сам поищу информацию, попробую разобраться.

Там ничего особенного, просто очередь на 3 пакета.

Pacifist писал(а):
Немного не так. Есть 6 каналов приёмника. Причём 1-й и 2-й могут иметь уникальный адрес, а вот остальные с 3-го по 6-й привязаны к адресу 2-го канала.

Да, все верно, 6 каналов, я ошибся)

Pingvin писал(а):
Pacifist писал(а):
Если допустим есть устройство, которое работает ТОЛЬКО с основной платой ружья (допустим повязка или жилет), то можно задать ему свой уникальный адрес на 2-м канале и кроме платы своего ружья его не услышит никто. А на первом канале уже организовывать сеть с ретрансляцией пакетов для управления ружьями, сбора статистики и т.д.
Я не призываю так делать, это просто пример для чего может быть полезен второй канал.

А я бы так и сделал.

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


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 1076 ]  На страницу Пред.  1 ... 100, 101, 102, 103, 104, 105, 106 ... 108  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB