Espruino: JavaScript в микроконтроллере

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем ИгорьК, 4 апр 2016.

  1. ИгорьК

    ИгорьК Гуру

    На geektimes тов. @nailxx написал следующее :

    Будут ли тутариалы на тему? Пожалейте крыс, сделайте полезное и безопасное для животных дело!

    Ставил. Такая ерунда: системный таймер тикает раза в три медленнее. В результате какой-нибудь код, что требует общения по 1wire не работает - скорости не совпадают. Да даже простой blink мигает очень неспеша. Не проверите ли на какой-нибудь своей плате Nucleo F401?
     
  2. nailxx

    nailxx Официальный Нерд Администратор

    Да, у нас очень много, чего нужно сказать миру. Надкусываем со всех сторон. Надеюсь, челюсть не сведёт.

    На STM32F4Discovery всё точно хорошо работает. На Nucleo сами не пробовали, верим тому, что видим на espruino.com и в исходниках. Попробуем на этой неделе.
     
  3. ИгорьК

    ИгорьК Гуру

    Ну да. Именно там и есть [LED1, LED2, LED3, LED4]. :)

    Пжжжжжалуйста! Есть у меня в запаснике одна такая... Ваша, кстати. Вот руки, вроде, и дошли. Но...
     
  4. ИгорьК

    ИгорьК Гуру

    От кот:
    Код (Javascript):
    var cl = console.log;
    var ctmr;

    var rotate = function(rt) {
      if(rt) {
        var pr = ['+', '/','X', '+','\\','X'];
        var nw = 0;
        ctmr = setInterval(function(){
            cl(pr[nw]);
            nw++;
            if(nw === 6) nw = 0;
         }, 150);
      }
      else {
        if(ctmr) {
          clearInterval(ctmr);
          ctmr = null;
        }
      }
    };
    А как var ctmr упрятать внутрь функции rotate()? Чтобы красиво было и памяти меньше кушало при вызове rotate() без true внутри.
     
  5. sys

    sys Злобный Буратино Модератор

    как вариант вообще без ctmr... сильно не ругайте... :)
    Код (Javascript):
    var cl = console.log;
    var pr = ['+', '/','X', '+','\\','X'];
    var nw = 0;
    var rt = 0;

    var rotate = (x)=>{
        rt = x;
        if(rt){
          cl(pr[nw]);
          nw++;
          if(nw === 6){ nw = 0;}
          setTimeout(()=>{rotate(rt);},150);
        }else nw = 0;
    };
     
  6. ИгорьК

    ИгорьК Гуру

    Там задача была спрятать все глобальные переменные в функцию.
    Функция печатает на lcd экране подобие вращающегося пропеллера.
    Вызвал функцию с аргументом тру - пропеллер вращается, вызвал без - не вращается.

    Поскольку это малая часть программы - столько переменных в глобале - не годится
    Я в коде, что выше привел, спрятал все, кроме самого таймера. Его, видимо, не спрятать.
    Ваш вариант хорош как отдельностоящий пример, но для кода в 350 строк - не Айс, к сожалению.
     
  7. sys

    sys Злобный Буратино Модератор

    ну раз так... то для красоты наверное стоит упаковать в объекты и методы
     
  8. ИгорьК

    ИгорьК Гуру

    Эмммм...
     
  9. sys

    sys Злобный Буратино Модератор

    Что-то типа такого?
    Код (Javascript):
    var ort = {
      cl : console.log,
      pr : ['+', '/','X', '+','\\','X'],
      nw : 0,
      rt : 0,

      rotate : (x)=>{
        this.rt = x;
        if(this.rt){
          this.cl(this.pr[this.nw]);
          this.nw++;
          if(this.nw === 6){ this.nw = 0;}
          setTimeout(()=>{this.rotate(this.rt);},150);
        }else this.nw = 0;
      }

    };
     
    ort.rotate(x)
     
    ИгорьК нравится это.
  10. ИгорьК

    ИгорьК Гуру

    Ну да :) все просто.