запуск железного таймера esp8266 (nodemcu) на arduino ide . Вопросов нет!

MacSim
Offline
Зарегистрирован: 28.11.2012

 

началось все с того что попросили меня помочь научиться работать с мк ,чел хотел собрать часы не матрицах max7219 с бегущей строкой. Все юзают и и видимо довольны библиотеками от адафрута?

  Я посмотрев на готовые решения использовал их написал прогу забирающую с моего сайта данные (строку стринг) которую отдает обработчик запросов на php.

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

решил вызывать вывод по таймеру и ... оказывается ардуина иде не поддерживает железные таймеры esp8266! во е.. есть только совтовое ... начил лазить по мануалам референсам, смотреть адреса регистров чтоб добавить, но наткнулся на esp-open-sdk ( NONOS) там это уже есть.

короче решается все закидыванием файла hw_timer.c из sdk в папку ядра esp. я инклюдил файл непосредственно в своей программе, не закидывая в хедер ядра.

пример использования:

#define REG_READ(_r)     (*(volatile uint32 *)(_r))
#define WDEV_NOW()    REG_READ(0x3ff20c00) 

#include <hw_timer.c>

uint32 tick_now2 = 0;
static uint32 j = 0;
void setup() {
  Serial.begin(115200);                                  //Serial connection
  

    delay(500);
    Serial.println("Waiting for connection");

  
  hw_timer_init(FRC1_SOURCE,1);
  hw_timer_set_func(hw_test_timer_cb);
  hw_timer_arm(1000);
  
  Serial.print(" hw_timer_init ");
  
  

 
}

void loop() {
   
} //end loop

void hw_test_timer_cb() {     
  
  j++;
  if( (WDEV_NOW() - tick_now2) >= 800000 )     { 
                                                 static uint32 idx = 1;
                                                 tick_now2 = WDEV_NOW();
                                                 os_printf("b%u:%d\n",idx++,j);
                                                 j = 0;
                                                 Serial.print("idx= ");
                                                 Serial.println(idx);
                                                }
    
    Serial.print("tick_now2 ");
    Serial.println(tick_now2);
    Serial.print("j= ");
    Serial.println(j);
     
    }
    

завелось, но уходит в перезагрузку по вочдогу, может быть из-за работы с сериал, надо сбросывать вочдог в программе (функция в esp работающая дольше 6 сек (кажись столько) вызывает перезагрузку, почему обьяснять думаю не надо).

ЗЫ в который раз убеждаюсь что ардуино иде есть универсальные грабли для любого мк, даже для тех же ардуин 328, меги... вот в очередной раз наступил...

 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

М б вы не умеете их готовить

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Ну так дергайте ватчдог сами, или отключайте в нужные вам периоды. Уж если залезли в сдк то там и про ватчдог все написано :)

А вообще в рекомендациях написато, что код для 8266 в ардуино необходимо разбавлять делеями, для обработки системных функций. Вы что всерьез считаете, что вашему вайфаю в бекграунде ничего не требуется ?  :)

ТС , Вы случайно не в Мытищах живете ?

MacSim
Offline
Зарегистрирован: 28.11.2012

так я все сделал, и дергаю вачдог. поделился с ардуиноманами как готовить на ардуино иде.

для дерганья добавил

#include <user_interface.h>

system_soft_wdt_feed();

 

MacSim
Offline
Зарегистрирован: 28.11.2012

что отдает WDEV_NOW(); ? что лежит тут REG_READ(0x3ff20c00) ?

милисикунды со старта?

 

MacSim
Offline
Зарегистрирован: 28.11.2012

andycat пишет:
М б вы не умеете их готовить

научите ?

MacSim
Offline
Зарегистрирован: 28.11.2012

brokly пишет:

Ну так дергайте ватчдог сами, или отключайте в нужные вам периоды. Уж если залезли в сдк то там и про ватчдог все написано :)

А вообще в рекомендациях написато, что код для 8266 в ардуино необходимо разбавлять делеями, для обработки системных функций. Вы что всерьез считаете, что вашему вайфаю в бекграунде ничего не требуется ?  :)

ТС , Вы случайно не в Мытищах живете ?

где написано про делеи ткните носом. моего вайфая в приведенном выше коде вроде как нет, если только он своей жизнью на уровне системы возится. не не в мытищах, на недалеко от щуки.

зы респект москау

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

MacSim пишет:

где написано про делеи ткните носом. 

https://arduino-esp8266.readthedocs.io/en/latest/reference.html - раздел Timing and delays:

Цитата:

Remember that there is a lot of code that needs to run on the chip besides the sketch when WiFi is connected. WiFi and TCP/IP libraries get a chance to handle any pending events each time the loop() function completes, OR when delay is called. If you have a loop somewhere in your sketch that takes a lot of time (>50ms) without calling delay, you might consider adding a call to delayfunction to keep the WiFi stack running smoothly.