Общие вопросы по 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

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

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

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

rv9Yw

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

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

rv9Yw

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

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

pvvx

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

pvvx

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