ESP32 отправляет UDP-пакеты с обоих ядер

Я использую AsyncUDP в проекте ESP32, где я инициализирую AsyncUDP udpSender и вызываю udpSender.write(sendbuffer, sendbuffer_size) из обоих ядер с разными буферами на каждом ядре.

Одно ядро постоянно собирает данные датчика GY-91 (акселерометр/гироскоп/магнит) много раз в секунду и отправляет их через UDP несколько раз в секунду (после каждого сбора), а другое собирает некоторые другие данные, такие как температура, один раз в секунду, а также отвечает на команды, отправляемые сервером.

Поэтому я в основном использую одного отправителя на обоих ядрах и задаюсь вопросом, является ли это "потокобезопасным", если эта терминология вообще применима к этому сценарию.

Может ли это вызвать проблемы? Есть ли конкретный способ, которым это должно быть сделано? Нравится использовать семафоры?

, 👍1


1 ответ


2

Я не знаю, безопасно ли это для потоков или нет. Однако я был бы склонен играть в нее мудро и использовать очередь и уведомления.

  1. Создайте очередь
  2. Создайте поток "отправитель", который ожидает уведомления, а затем отправляет все, что находится в очереди, через UDP
  3. Создайте любое количество потоков "датчиков", которые помещают элементы в очередь, а затем уведомляют поток отправителя.
,