Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 21.01.2015
Сообщений: 3

Переписываю библиотеку DHT sensor (arduino). Непонятки по структуре

24.09.2015, 12:27. Показов 2363. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть вот такая вот библиотека на гетхабе https://github.com/adafruit/DH... er/DHT.cpp

непонятно только вот что:

uint32_t cycles[80];
{
InterruptLock lock;
//код...
}

Как это понять что после объявления массива идут фигурные скобки???
И что это за такой интересный код InterruptLock lock. Как его написать на джаве?

Переписываю его на процессинг. В ардуино загнан скетч фирматы.

Буду рад любому ответу и критике по вопросу. я дилетант
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.09.2015, 12:27
Ответы с готовыми решениями:

Как подключать датчики Arduino Sensor Kit к Nucleo
Имеется набор Arduino Sensor Kit, использоватьсобираюсь совместно с Nucleo STM32F072RB. Вопрос такой, эти датчики просто подключать к...

Непонятки с сортировкой данных в структуре (Осторожно, увиденного не развидеть.)
Доброго времени суток каждому из вас. Попытался осуществить сортировку данных в структуре, посредством ужасных конструкций и нагромождений...

Питание Arduino GSM Shield SIM900 – непонятки.
Шилд вот такой https://ru.otyexpress.som/item/SIM900-G ... 0.0.d84tBj Проблемка такая. При питании через штатный разъём на плате от блока...

3
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
24.09.2015, 12:56
фигурные скобки обосабливают блок кода. Т.е. стековые переменные объявленные внутри этих скобок не будут существовать за ними
0
0 / 0 / 0
Регистрация: 21.01.2015
Сообщений: 3
24.09.2015, 13:10  [ТС]
А разве на джаве можно так писать? Можно какую нибудь информацию по этому поводу?
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
24.09.2015, 13:47
Лучший ответ Сообщение было отмечено rogabob как решение

Решение

Цитата Сообщение от rogabob Посмотреть сообщение
Как это понять что после объявления массива идут фигурные скобки???
Вложенная область видимости (scope). В данном случае существует исключительно ради того, чтобы обеспечить своевременный вызов деструктора InterruptLock.
InterruptLock - то lock guard. В основе - идиома RAII. В конструкторе захватывается некий ресурс, в деструкторе освобождается.
PS. ключевые слова гуглятся.

Лично я Java знаю плохо, но могу сказать две вещи в общем ключе:
1) Не всегда концепции одного языка программирования так просто ложатся на другой. Нужно хорошо понимать что делается на исходном языке, очень хорошо подумать и переписать на требуемом языке в принятом и естественном для него стиле. А переброс 1 в 1 работает только в очень простых случаях. Для эффективного портирования требуются хорошие знания обоих языков, да.
2) Конкретно вышеупомянутую конструкцию можно заменить на С-шный манер на следующие вызовы
C++
1
2
3
4
5
interruptLock(); // временно "выключает" прерывания
// код
// ...
// код
interruptUnlock(); // включает обратно
Если в треде будут хорошо знающие Java, то возможно подскажут более естественный способ воссоздания этой семантики.

Добавлено через 12 минут
rogabob, да, забыл пояснить зачем это там надо.
Деструктор вызывается автоматически по выходу из области видимости. В том участке кода таких выходов три.
Если реализовывать вариант с функциями. то пришлось бы делать так:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// Turn off interrupts temporarily because the next sections are timing critical
// and we don't want any interruptions.
interruptLock();
// End the start signal by setting data line high for 40 microseconds.
digitalWrite(_pin, HIGH);
delayMicroseconds(40);
// Now start reading the data line to get the value from the DHT sensor.
pinMode(_pin, INPUT_PULLUP);
delayMicroseconds(10); // Delay a bit to let sensor pull data line low.
// First expect a low signal for ~80 microseconds followed by a high signal
// for ~80 microseconds again.
if (expectPulse(LOW) == 0) {
    DEBUG_PRINTLN(F("Timeout waiting for start signal low pulse."));
    _lastresult = false;
    interruptUnlock();
    return _lastresult;
}
if (expectPulse(HIGH) == 0) {
    DEBUG_PRINTLN(F("Timeout waiting for start signal high pulse."));
    _lastresult = false;
    interruptUnlock();
    return _lastresult;
}
// Now read the 40 bits sent by the sensor. Each bit is sent as a 50
// microsecond low pulse followed by a variable length high pulse. If the
// high pulse is ~28 microseconds then it's a 0 and if it's ~70 microseconds
// then it's a 1. We measure the cycle count of the initial 50us low pulse
// and use that to compare to the cycle count of the high pulse to determine
// if the bit is a 0 (high state cycle count < low state cycle count), or a
// 1 (high state cycle count > low state cycle count). Note that for speed all
// the pulses are read into a array and then examined in a later step.
for (int i=0; i<80; i+=2) {
    cycles[i] = expectPulse(LOW);
    cycles[i+1] = expectPulse(HIGH);
}
interruptUnlock();
// Timing critical code is now complete.

Это несколько трудоемко. И если например нужно будет добавить еще одно условие с выходом, то легко забыть написать там Unlock еще раз.

Добавлено через 11 минут
UPD:
Ссылочка по реализации аналогичного механизма на Java: http://prog-xp.blogspot.ru/201... guard.html
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.09.2015, 13:47
Помогаю со студенческими работами здесь

Возможно ли засунуть в Code Vision библиотеку из Arduino IDE
Всем привет. В программировании я НОЛЬ - для отображения температуры необходимо подключить 7-ми сегментник из 4-х разрядов - он собран...

Переписываю код с C# на C++
На C# написал простенькую программу, теперь её необходимо переписать на C++ с коим знаком только по гуглу, часть функционала переписал, но...

Переписываю программу с Delphi на С++
Всем привет. Есть исходный код проект на Delphi Дали задачу переписать в С++, в качестве практики, но никто не поинтересовался знаю ли я...

Сложности с DHT-22
Добрый день. Пытаюсь подключить датчик влажности и температуры DHT-22 (он же AM2301) к STM32F103RB. Использую вот эту библиотеку:...

Переписываю программу из пдф в маткад. Что это?
Переписываю программу из пдф в маткад. Задан масив, но какой-то двойной. Вроде не умножение. Тогда что???


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru