• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Общие вопросы по Arduino IDE для ESP8266

Victor

Administrator
Команда форума
c использованием Stino -> тут подробнее хттп://robotosha.ru/arduino/sublime-text-as-ide-arduino.html
у нас тут ссылки на бесплатные профильные ресурсы не запрещены, так что вставляйте не опасаясь.
Stino требует Arduino не старше 1.6.1, а это слишком старая версия, поэтому придется потанцевать с бубном.
Попробуйте PlatformIO: An open source ecosystem for IoT development - там Atom, но вполне сопоставим с ST3
 

combasoft

New member
Подскажите, есть ли где реализация TreeMap для Wiring?
Задача такая: есть словарик объектов типа String, которые с чем-то соотнесены. Что-то вроде "Word 1" - 1, "Word 2" - 2, "abc" - n и так далее. Их много, штук 40.
Есть некоторая функция, которая принимает String на вход. Мне нужно
а) определить есть ли это слово в словарике - если нет - отдать соотвествующий этой ситуации код
б) если есть - отдать код, соответсвующий этому слову.
Первым видится решение пробежаться циклом по элементам словаря, это довольно затратный вариант, поэтому хотелось бы воспользоваться бинарным деревом. А так как элементы словаря еще и соотнесены с чем-то - то как раз TreeMap сюда подходит.
 

Юрий Ботов

Moderator
Команда форума
Подскажите, есть ли где реализация TreeMap для Wiring?
Моё ИМХО на тему: Полноценный TreeMap - для этой задачи - перебор. Мне кажется надо поступить так как обычно поступают в простых интерпретаторах: внутрь словарика добавить поле hash, этот хэш (1-2 байта) вычислить по некому простому закону на основании ключей словарика. А при проверке наличия вычислять по тому-же закону хэш искомого слова, а потом сравнивать не слова а хэши - числа. Да, в результате получится до 40 однотактовых цифровых сравнений, плюс одно проверочное по словам (хэши теоретически могут у нескольких слов совпасть и лучше убедиться что действительно нашел то что нужно, при грамотном выборе закона создания хэша это не понадобится). Конечно от сказанного до настоящего TreeMap только 1 шаг - массив индекса, но вот как раз он мне кажется излишним для системы с весьма скромной памятью.
 

combasoft

New member
Вот кстати с предложенного ArduinoJSON я и собирался добывать множество ключей.
Если я верно понимаю, то для решения моей задачи мне потребуется создать JSON словарик и отдавать ему стрингу:

Код:
char json[] = "{\"word 1\":1,\"word 2\":123, ..., \"word n\":12345678}";
JsonObject& dictionary = jsonBuffer.parseObject(json);
...
...
byte key = dictionary[inputStrung];
Оставлю как запасной вариант, т.к .это решение требовательно к оперативке и не оптимальное по производительности.

За идею с хешем спасибо! Она выглядит интересно и как с точки зрения производительности так и с точки зрения занимаемого объема в памяти -
достаточно держать массив предвычесленных хешей, а хэш вычислять только для пришедшей на вход функции строки.
Мне нужно будет придумать/подобрать хэш-функцию ("недорогую" и "чувствительную") и полином.
 

Юрий Ботов

Moderator
Команда форума
Попробуйте вот эту для примера, это из интерпретатора вымершего языка "Trac"

Код:
uint16_t Trac::hash(litera* s) {
  uint16_t a = 0;
  uint16_t len = strlen(s);
  for (int i = 0; i < len; i++) {
    a = ((a << 3) ^ i) + (uint16_t) s[i];
  }
  return a;
}
 

combasoft

New member
У меня очередной вопрос.. Есть структура, в которой объявлено, что одно из полей - массив других структур:
Код:
struct transition
{
  byte input_word;
  byte new_state_number;
  transition_handler handler;
};

struct state
{
  transition availableTransitions[];
};
Хочу объявить и тут же проинициализировать массив объектов такого типа, примерно так:
Код:
state states[] = {
  // initial state
  { // available transitions for state
    {0, 0, NULL}, // stub transition
    {257, 1, NULL},
    {74, 1, myFn},
    {35, 1, myFn},
  },
  // state 1
  { // available transitions for state
    {0, 0, NULL}, // stub transition
    {1, 1, NULL},
    {2, 1, myFn},
    {3, 1, myFn},
  }
};
только таким образом сделать не получается, компилятор отказывается "это" компилировать. Судя по его сообщению, он не ожидает, что будет проинициализирован массив внутри элемента массива:
too many initializers for 'transition [0]'
Подскажите, как все же можно сделать инициализацию? На всякий случай, я прикрепил файл с исходным кодом.
 

Вложения

combasoft

New member
Пересмотрел - были мелкие ошибки вроде 257 в массиве байт, лишней запятой после элемента массива. Их устранение особо не влияет..
 

Юрий Ботов

Moderator
Команда форума
Код:
state states[] = {
  // initial state
  { // available transitions for state
    0, 0, NULL, // stub transition
    257, 1, NULL,
    74, 1, myFn,
    35, 1, myFn
  },
  // state 1
  { // available transitions for state
    0, 0, NULL, // stub transition
    1, 1, NULL,
    2, 1, myFn,
    3, 1, myFn
  }
};
Попробуйте убрать скобки вокруг "структур". То что вы написали с точки зрения С это инициализация двумерного массива. И не забывайте убирать запятые перед скобками...
 
Последнее редактирование:

combasoft

New member
@pvvx , возможно подойдет FreeRTOS: FreeRTOS для чайников. Краткое описание. | Электроника для всех
Попробуйте убрать скобки вокруг "структур". То что вы написали с точки зрения С это инициализация двумерного массива. И не забывайте убирать запятые перед скобками...
Точно! Спасибо! Компилируется, и даже работает как задумал, правда периодически перегружается по WDT - вероятно, я где-то допустил ошибку и в какой-то момент переполняется стек.
 

Юрий Ботов

Moderator
Команда форума
А вы wdt то "кормите" - feed ? Если нет - оно и будет перезагружаться безо всякой ошибки. Или просто выключите wdt пока для ясности.
 

pvvx

Активный участник сообщества
Дурина в модулях на RTL на ней и крутиться. Но вот токо Дурина не имеет средств управления и поддержки RTOS и прочих более взрослых мультизадачек, а контроллеры растут по ресурсам. Сиё значит, что Дурина помирает.
Или вы предложите на десятке ядер крутить один Loop() :)
 

Atom

Member
Дурина в модулях на RTL на ней и крутиться. Но вот токо Дурина не имеет средств управления и поддержки RTOS и прочих более взрослых мультизадачек, а контроллеры растут по ресурсам. Сиё значит, что Дурина помирает.
Или вы предложите на десятке ядер крутить один Loop() :)

Изначально Дурина и была в смысле возможности отказа от фреймворка сильна: хочешь на чистом C или C++ писать - пишы, pаботать будет. То есть в теории и во всех других платах такая независимость осталась, вопрос только в героях, реализующих эту концепцию.

Сам не сторонник Дуины был - слишком много ресурсов для элементарного кода требовала и практически не имела возможности отладки. Но после ковыряния СДК от ЕСП и попробовав Дурину, очень ощутил преимущества.
 

rv9Yw

New member
Изначально Дурина и была в смысле возможности отказа от фреймворка сильна: хочешь на чистом C или C++ писать - пишы, pаботать будет. То есть в теории и во всех других платах такая независимость осталась, вопрос только в героях, реализующих эту концепцию.

Сам не сторонник Дуины был - слишком много ресурсов для элементарного кода требовала и практически не имела возможности отладки. Но после ковыряния СДК от ЕСП и попробовав Дурину, очень ощутил преимущества.
А что за Дурина? Вы про Arduino???
 

rv9Yw

New member
Упс... Именно про нее. А вы о чем?
Упс ) ну мало ли)))
Я вот точно также, как и вы, долгое время писал на асме... Блин, все хорошо, но библиотек мало и захочешь что-нибудь добавить приходилось самому все с нуля...

А с пол года назад приобрел всяких дуринок и модулей к ним для сына, так теперь сам играюсь)))
Да, процессоры растут, и требовательность к размеру программы и быстродействию падают, а удобство какое... короче усиленно осваиваю С++ и фреймворк дурины
 
Последнее редактирование:

pvvx

Активный участник сообщества
Да, процессоры растут, и требовательность к размеру программы и быстродействию падают, а удобство какое... короче усиленно осваиваю С++ и фреймворк дурины
У меня такое впечатление, что он очень похож на mbed, но не поддерживает RTOS. Есть ещё беда - ESP не ARM :)
 

pvvx

Активный участник сообщества
Последнее редактирование:
Сверху Снизу