Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Разработка ‘библиотеки’ малого webсервера на esp8266.

Тема в разделе "SDK и создание собственных прошивок", создана пользователем pvvx, 3 янв 2015.

  1. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.352
    Симпатии:
    1.320
    Диод, чтобы модуль мог сам себя сбрасывать после deep_cleep. Он выводит нолик в GPIO16 (XPD_DCDC по доку, нога 8 чипа) и сбрасывает RESET (EXT_RSTB, нога 32), если они соединены через резистор.
    [​IMG]
    https://github.com/esp8266/esp8266-wiki/wiki/Pin-definition
     
  2. Algis

    Algis Читатель

    Сообщения:
    36
    Симпатии:
    7
    В модуле ESP-03 для этого резистора есть посадочное место, но он не распаян.
     
  3. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.352
    Симпатии:
    1.320
    Мы не используем espconn. espconn имеет много ошибок и ограничений.
    Прошивка не грузится по HTTP. Это не требуется.
    We do not use espconn. espconn has many bugs and limitations.
    Firmware is not upload by HTTP. This not required. (I cannot write in English language и не хочу :))
     
  4. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.352
    Симпатии:
    1.320
    В свалку добавил тестовый вывод мелкого WAV файла c данными ADC (2.62 килобайта). ADC стандартно, через read_sar_dout() дает 14 бит.
    Скорость полу-программного АПЦ у ESP8266 пока ~20..22ksps.
    1kHz_sq.gif 100Hz_C.gif
    1кГц меандр и 100Гц через конденсатор. :)
     
    Alex, Algis и AlexeyGR нравится это.
  5. folny

    folny Новичок

    Сообщения:
    15
    Симпатии:
    0
    It seemed to me that one time you had the ability to upload your project file one piece 512kb but I guess I was wrong, still try to add your web interface to this project http://www.ulrichradig.de/home/index.php/dmx/wlan-art-net-node but I have a problem with the Makefile, you can probably still advise me what I should do that compilation was carried out right ?.

    00:35:03 **** Build of configuration Default for project Web_base ****
    mingw32-make.exe -f C:/Espressif/examples/Web_base/Makefile all
    mingw32-make[1]: Entering directory 'C:/Espressif/examples/Web_base/app'
    mingw32-make[2]: Entering directory 'C:/Espressif/examples/Web_base/app/user'
    DEPEND: c:/Espressif/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc -M -Os -g -O2 -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -D__ets__ -DICACHE_FLASH -DLWIP_OPEN_SRC -DPBUF_RSV_FOR_WLAN -DEBUF_LWIP -I include -I ./include -I ../include -I ./ -I ../../include -I ../../include/eagle artnet.c
    mingw32-make[2]: Leaving directory 'C:/Espressif/examples/Web_base/app/user'
    mingw32-make[2]: Entering directory 'C:/Espressif/examples/Web_base/app/user'
    c:/Espressif/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc -Os -g -O2 -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -D__ets__ -DICACHE_FLASH -DLWIP_OPEN_SRC -DPBUF_RSV_FOR_WLAN -DEBUF_LWIP -I include -I ./include -I ../include -I ./ -I ../../include -I ../../include/eagle -o .output/eagle/debug/obj/artnet.o -c artnet.c
    artnet.c: In function 'artnet_recv_opoutput':
    artnet.c:245:3: error: 'for' loop initial declarations are only allowed in C99 mode
    for(uint16_t tmp = 0;tmp<513;tmp++)
    ^
    artnet.c:245:3: note: use option -std=c99 or -std=gnu99 to compile your code
    ../../Makefile:159: recipe for target '.output/eagle/debug/obj/artnet.o' failed
    mingw32-make[2]: *** [.output/eagle/debug/obj/artnet.o] Error 1
    mingw32-make[2]: Leaving directory 'C:/Espressif/examples/Web_base/app/user'
    ../Makefile:148: recipe for target '.subdirs' failed
    mingw32-make[1]: *** [.subdirs] Error 2
    mingw32-make[1]: Leaving directory 'C:/Espressif/examples/Web_base/app'
    C:/Espressif/examples/Web_base/Makefile:148: recipe for target '.subdirs' failed
    mingw32-make.exe: *** [.subdirs] Error 2

    00:35:05 Build Finished (took 1s.260ms)
     
  6. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.352
    Симпатии:
    1.320
    Случайно нашел, в своем компе :eek:- сохранил от куда-то в том году... :) :
    Посмотреть (раскрыть)

    Код (Text):
    1.  
    2. /******************************************************************************
    3. * MODULEName : set_sigma MODULE
    4.  
    5. EACH PIN CAN CONNET TO A SIGMA-DELTA , ALL PINS SHEARS THE SAME SIGMA-DELTA SOURCE.
    6.  
    7. THE TARGET DUTY AND FREQUENCY CAN BE MODIFIED VIA THE REG ADDR GPIO_SIGMA_DELTA
    8.  
    9. THE TARGET FREQUENCY IS DEFINED AS:
    10.  
    11. FREQ = 80,000,000/prescale * target /256  HZ,     0<target<128
    12. FREQ = 80,000,000/prescale * (256-target) /256  HZ,     128<target<256
    13. target: duty ,0-255
    14. prescale: clk_div,0-255
    15. so the target and prescale will both affect the freq.
    16.  
    17.  
    18. YOU CAN DO THE TEST LIKE THIS:
    19. 1. INIT :  sigma_delta_setup(PERIPHS_IO_MUX_MTDI_U,12,FUNC_GPIO12);
    20. 2. USE 312K:   set_sigma_duty_312KHz(2);
    21. OR 2. SET VAL:  set_sigma_target(uint8 target) AND  set_sigma_prescale
    22.  
    23. 3. DEINIT AND DISABLE: sigma_delta_close(uint32 GPIO_NUM), eg.sigma_delta_close(2)
    24.  
    25. *******************************************************************************/
    26. #include "osapi.h"
    27. #include "c_types.h"
    28. #include "ets_sys.h"
    29. #include "eagle_soc.h"
    30. #include "gpio.h"
    31.  
    32. #define GPIO_PIN_ADDR(i) (GPIO_PIN0_ADDRESS + i*4)
    33. #define GPIO_SIGMA_DELTA      0x60000368  //defined in gpio register.xls
    34.  
    35. #define GPIO_SIGMA_DELTA_SETTING_MASK  (0x00000001ff)
    36.  
    37. #define GPIO_SIGMA_DELTA_ENABLE  1
    38. #define GPIO_SIGMA_DELTA_DISABLE   (~GPIO_SIGMA_DELTA_ENABLE)
    39. #define GPIO_SIGMA_DELTA_MSB                     16
    40. #define GPIO_SIGMA_DELTA_LSB                      16
    41. #define GPIO_SIGMA_DELTA_MASK                  (0x00000001<<GPIO_SIGMA_DELTA_LSB)
    42. #define GPIO_SIGMA_DELTA_GET(x)                 (((x) & GPIO_SIGMA_DELTA_MASK) >> GPIO_SIGMA_DELTA_LSB)
    43. #define GPIO_SIGMA_DELTA_SET(x)                  (((x) << GPIO_SIGMA_DELTA_LSB) & GPIO_SIGMA_DELTA_MASK)
    44.  
    45.  
    46. #define GPIO_SIGMA_DELTA_TARGET_MSB  7
    47. #define GPIO_SIGMA_DELTA_TARGET_LSB  0
    48. #define GPIO_SIGMA_DELTA_TARGET_MASK                  (0x000000FF<<GPIO_SIGMA_DELTA_TARGET_LSB)
    49. #define GPIO_SIGMA_DELTA_TARGET_GET(x)                 (((x) & GPIO_SIGMA_DELTA_TARGET_MASK) >> GPIO_SIGMA_DELTA_TARGET_LSB)
    50. #define GPIO_SIGMA_DELTA_TARGET_SET(x)                  (((x) << GPIO_SIGMA_DELTA_TARGET_LSB) & GPIO_SIGMA_DELTA_TARGET_MASK)
    51.  
    52.  
    53. #define GPIO_SIGMA_DELTA_PRESCALE_MSB  15
    54. #define GPIO_SIGMA_DELTA_PRESCALE_LSB  8
    55. #define GPIO_SIGMA_DELTA_PRESCALE_MASK  (0x000000FF<<GPIO_SIGMA_DELTA_PRESCALE_LSB)
    56. #define GPIO_SIGMA_DELTA_PRESCALE_GET(x)                 (((x) & GPIO_SIGMA_DELTA_PRESCALE_MASK) >> GPIO_SIGMA_DELTA_PRESCALE_LSB)
    57. #define GPIO_SIGMA_DELTA_PRESCALE_SET(x)                  (((x) << GPIO_SIGMA_DELTA_PRESCALE_LSB) & GPIO_SIGMA_DELTA_PRESCALE_MASK)
    58.  
    59. /******************************************************************************
    60. * FunctionName : sigma_delta_setup
    61. * Description  : Init Pin Config for Sigma_delta , change pin source to sigma-delta
    62. * Parameters   : uint32 GPIO_MUX, GPIO MUX REG ,DEFINED IN EAGLE_SOC.H, e.g.: PERIPHS_IO_MUX_MTCK_U
    63.          uint32 GPIO_NUM, GPIO NUM ACCORDING TO THE MUX NUM , e.g.: 13 for MTCK
    64.          uint32 GPIO_FUNC, GPIO PIN FUNC , DEFINED IN EAGLE_SOC.H , e.g.: FUNC_GPIO13
    65. * Returns      : none
    66. *******************************************************************************/
    67. void ICACHE_FLASH_ATTR
    68. sigma_delta_setup(uint32 GPIO_MUX,uint32 GPIO_NUM,uint32 GPIO_FUNC)
    69. {
    70.     //============================================================================
    71.     //STEP 1: SIGMA-DELTA CONFIG;REG SETUP
    72.     GPIO_REG_WRITE(GPIO_SIGMA_DELTA,
    73.                                                         (GPIO_REG_READ(GPIO_PIN_ADDR(GPIO_ID_PIN(GPIO_SIGMA_DELTA_NUM))) &(~GPIO_SIGMA_DELTA_SETTING_MASK))|
    74.                                                           GPIO_SIGMA_DELTA_SET(GPIO_SIGMA_DELTA_ENABLE)|
    75.                                                           GPIO_SIGMA_DELTA_TARGET_SET(0x00)|
    76.                                                           GPIO_SIGMA_DELTA_PRESCALE_SET(0x00) );
    77.  
    78.     //============================================================================
    79.  
    80.     //STEP 2: PIN FUNC CONFIG :SET PIN TO GPIO MODE AND ENABLE OUTPUT
    81.     PIN_FUNC_SELECT(GPIO_MUX, GPIO_FUNC);
    82.     gpio_output_set(0,0,0x1<<GPIO_NUM,0);
    83.  
    84.     //============================================================================
    85.  
    86.     //STEP 3: CONNECT SIGNAL TO GPIO PAD
    87.     GPIO_REG_WRITE(GPIO_PIN_ADDR(GPIO_ID_PIN(GPIO_NUM)),
    88.                                                             GPIO_REG_READ(GPIO_PIN_ADDR(GPIO_ID_PIN(GPIO_NUM)))|
    89.                                                             GPIO_PIN_SOURCE_SET(  SIGMA_AS_PIN_SOURCE )                     );
    90.     //============================================================================
    91.     //ets_printf("test reg gpio mtdi : 0x%08x \n",GPIO_REG_READ(GPIO_PIN_ADDR(GPIO_ID_PIN(GPIO_NUM))));
    92.  
    93. }
    94. /******************************************************************************
    95. * FunctionName : sigma_delta_close
    96. * Description  : DEinit Pin ,from Sigma_delta mode to GPIO input mode
    97. * Parameters   : uint32 GPIO_NUM, GPIO NUM ACCORDING TO THE MUX NUM , e.g.: 13 for MTCK
    98. * Returns      : none
    99. *******************************************************************************/
    100. void ICACHE_FLASH_ATTR
    101.     sigma_delta_close(uint32 GPIO_NUM)
    102. {
    103.  
    104.     //============================================================================
    105.     //STEP 1: SIGMA-DELTA DEINIT
    106.     GPIO_REG_WRITE(GPIO_SIGMA_DELTA,
    107.                                                         (GPIO_REG_READ(GPIO_PIN_ADDR(GPIO_ID_PIN(GPIO_SIGMA_DELTA_NUM))) &(~GPIO_SIGMA_DELTA_SETTING_MASK))|
    108.                                                           GPIO_SIGMA_DELTA_SET(GPIO_SIGMA_DELTA_DISABLE)|
    109.                                                           GPIO_SIGMA_DELTA_TARGET_SET(0x00)|
    110.                                                           GPIO_SIGMA_DELTA_PRESCALE_SET(0x00) );
    111.  
    112.     //ets_printf("test reg gpio sigma : 0x%08x \n",GPIO_REG_READ(GPIO_PIN_ADDR(GPIO_ID_PIN(GPIO_SIGMA_DELTA_NUM))));
    113.     //============================================================================
    114.  
    115.     //STEP 2: GPIO OUTPUT DISABLE
    116.     gpio_output_set(0,0,0,0x1<<GPIO_NUM);
    117.     //============================================================================
    118.  
    119.     //STEP 3: CONNECT GPIO TO PIN PAD
    120.     GPIO_REG_WRITE(GPIO_PIN_ADDR(GPIO_ID_PIN(GPIO_NUM)),
    121.                                                             GPIO_REG_READ(GPIO_PIN_ADDR(GPIO_ID_PIN(GPIO_NUM)))|
    122.                                                             GPIO_PIN_SOURCE_SET(  GPIO_AS_PIN_SOURCE )                     );
    123.     //============================================================================
    124. }
    125. /******************************************************************************
    126. * FunctionName : set_sigma_target
    127. * Description  : SET TARGET DUTY FOR SIGMA-DELTA
    128. * Parameters   : uint8 target, DUTY NUM , 1BYTE , DUTY RANGE : 0-255
    129. * Returns      : none
    130. *******************************************************************************/
    131. void ICACHE_FLASH_ATTR
    132.     set_sigma_target(uint8 target)
    133. {
    134.     //set sigma signal duty target
    135.         GPIO_REG_WRITE(GPIO_SIGMA_DELTA,
    136.                                                         (GPIO_REG_READ(GPIO_PIN_ADDR(GPIO_ID_PIN(GPIO_SIGMA_DELTA_NUM))) &(~GPIO_SIGMA_DELTA_TARGET_MASK))|
    137.                                                           GPIO_SIGMA_DELTA_TARGET_SET(target));
    138. }
    139. /******************************************************************************
    140. * FunctionName : set_sigma_prescale
    141. * Description  : SET SIGMA-DELTA SIGNAL CLK PRESCALE(CLE_DIV)
    142. * Parameters   : uint8 prescale, CLK_DIV , 0-255
    143. * Returns      : none
    144. *******************************************************************************/
    145. void ICACHE_FLASH_ATTR
    146.     set_sigma_prescale(uint8 prescale)
    147. {
    148.     //set sigma signal clk prescale(clk div)
    149.         GPIO_REG_WRITE(GPIO_SIGMA_DELTA,
    150.                                                         (GPIO_REG_READ(GPIO_PIN_ADDR(GPIO_ID_PIN(GPIO_SIGMA_DELTA_NUM))) &(~GPIO_SIGMA_DELTA_PRESCALE_MASK))|
    151.                                                           GPIO_SIGMA_DELTA_PRESCALE_SET(prescale) );
    152.  
    153. }
    154. /******************************************************************************
    155. * FunctionName : set_sigma_duty_312KHz
    156. * Description  : 312K CONFIG EXAMPLE
    157. * Parameters   : uint8 duty, TARGET DUTY FOR 312K,  0-255
    158. * Returns      : none
    159. *******************************************************************************/
    160. void ICACHE_FLASH_ATTR
    161.     set_sigma_duty_312KHz(uint8 duty)
    162. {
    163.  
    164.     uint8 target = 0,prescale=0;
    165.     target = (duty>128)?(256-duty):duty;
    166.     prescale = (target==0)?0:(target-1);
    167.  
    168.     //freq = 80000 (khz) /256 /duty_target * (prescale+1)
    169.     set_sigma_target(duty);//SET DUTY TARGET
    170.     set_sigma_prescale(prescale);//SET CLK DIV
    171.  
    172. }
    173.  
     
  7. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.352
    Симпатии:
    1.320
    Пополнение "свалки" тестом Sigma Delta OUT.
    /web.cgi?gpio13.sgs=0..0xFF - установить GPIO13 на вывод Sigma Delta и задать отношение
    /web.cgi?gpio13.sgn=0..0xFF - изменить отношение сигнала Sigma Delta
    /web.cgi?gpio13.sgс=0 - установить функции GPIO13 на состояние по умолчанию и выключить Sigma Delta
    + Много изменено с gpio - теперь проще шевелить любым GPIO (хоть оторвать от flash, вызвав глюк)
    sigma_delta.gif
    При выводе сигнала Sigma Delta на выход, если у модуля плохая разводка и кривые длинные провода, то WiFi "глохнет" от возникающих на них помехах... :)
     
  8. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.352
    Симпатии:
    1.320
    Вышла SDK 0.9.6 beta 1 http://bbs.espressif.com/viewtopic.php?f=7&t=205
    В нем новый "document\English\2C-SDK-Espressif IoT SDK Programming Guide_v0.9.6_beta1.pdf"
    Исходники переехали на SDK 0.9.6 b1:
    Simple WEB version: 0.1.0
    SDK version: 0.9.6(b1)
     
    Последнее редактирование: 15 фев 2015
    Algis нравится это.
  9. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.352
    Симпатии:
    1.320
    По памяти в ESP8266 и SDK 0.9.6.

    По умолчанию, если не трогать ld файлы, тогда мы имеем примерно такое распределение System memory:

    data len: 2744
    rodata len: 4692
    bss len: 34064
    heap len: 40408

    Из них, всего, в rodata 2.5 килобайта разных текстовых строк и переменных для Web, т.к. большинство стандартных процедур не могут работать с кешируемой частью данных в секции ICACHE_RODATA_ATTR. В ICACHE_RODATA запихнул туда как можно больше, иначе размер rodata отъедает от heap. Всё нельзя - скорость обращения к таким данным тоже падает.

    Ещё не до конца заполнена iram– там пустого чуть более 6 килобайт.

    После старта модуля, в user_init() уже Current 'heap' size: 40136 bytes.

    После инициализации SDK 0.9.6 и пару дескрипторов соединений в LwIP– уже heapsize: 37152. C SDK 0.9.5 было на килобайт больше (в 0.9.6 наворотили каких-то глупых даныx в rodat-у и новых патчей, отжирающих heap).

    37 килобайт - это как-бы максимум (без espconn(!)), далее, при TCP соединениях память динамически отъедается от этого значения на время обработки HTTP/TCP/UDP запросов. Самый жручий - TCP2UART, т.к. необходим буфер приема к 6 килобайтам (иначе потеря данных TCP стека, если клиент ливанет данными за раз более 5 кило, а UART не успеет передавать) и буфер передачи (динамически выделяется до 4-х килобайт (2xMSS) для передачи принятых символов с UART, если их не успевает принять клиент). А жручих по причине что эти буфера могут быть открыты надолго – UART тормоз. В итоге, когда всё забито, оно отъедает до 10 килобайт.

    При передаче/приеме файлов каждый запрос/ответ сервера может тоже временно отъесть ещё до 10 кило, но это динамически – отъел, обработал, передал, убил буфер, не отдавая управления другим процедурам. Пока одновременно не встречалось таких отъеданий одновременно с общим остатком heap менее 18 килобайт. Но можно организовать до 16, а при обработке может остаться до 8. Если heap менее 16 кило - сервер не будет открывать соединения (обидится, пока heap не превысит эти 16 кило установленные в его настройках).

    Остаток памяти всегда может быть заполнен TIME_WAIT структурами у LwIP.

    Вот и вся память. :) На нормальное исполнение Lua и прочее, типа C++, там нет ни одного лишнего байта. Но их можно организовать, если выключить и не пользоваться коммуникациями по WiFi – использовать чип как микроконтроллер без связи. Что и наблюдается в NodeMCU и прочих проектах - там основная задача настроить WiFi и иногда принять/передать один байт, без гарантии доставки и без сервиса. :)
    Немного увеличить память можно отъев от bss, т.к. пока стек не сильно используется. Но для более сложных проектов, с наличием большего сервиса, надо ставить внешний MCU с памятью поболее и распределять функционирование между ними...
     
    Последнее редактирование: 17 фев 2015
    Algis нравится это.
  10. Andy Korg

    Andy Korg Moderator Команда форума

    Сообщения:
    414
    Симпатии:
    75
    Подскажите пожалуйста - планирую засунуть в ICACHE_FLASH_ATTR структуры описывающие мои web-переменные (типа ~wifi.ap.ssid~) и уже с ними работать. Получается, что это невозможно? Лучше делать так же как у вас в web_callback?
     
  11. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.352
    Симпатии:
    1.320
    Это как данные в ICACHE_FLASH ?
    Из ICACHE_RODATA приходится копировать переменные в обычную память, а потом уже отдавать их другим процедурам.
    Но и при копировании возникает масса условий, чтобы не вызывать "протектед". Копировать должна процедура из ROM или iram + стартовые адреса буфера и источника должны быть кратными 4-м и длина данных не должна превышать определенный размер (иначе кэш не справится). Это как с процедурой чтения flash от Espressif (возможно это на ней и повязано) и очень "намудрено" с механизмом кеширования flash...
    Спросите у jcmvbkbc - он должен досконально знать механизм кеширования у данного проца. Я пока туда сильно не лез и не задавался целью исправить эту кривую ситуацию с данными в flash (на это пока нет времени)...
     
    Последнее редактирование: 17 фев 2015
  12. Andy Korg

    Andy Korg Moderator Команда форума

    Сообщения:
    414
    Симпатии:
    75
    Кажется теперь понял. Думал что имеется возможность работать с данными во внешеней флаш по аналогии с реализацией в avr, если вам это о чем то говорит. А раз так то и фиг с ними с этими структурами во флаш, буду расширять дерево в web_callback
     
  13. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.352
    Симпатии:
    1.320
    Тут возникает ветка: или "мало памяти" или размер кода и низкая производительность.
    Возможно использовать оверлейный механизм в iram. Но для этого надо сделать специальную среду. Я пока не знаю, как для этого конфигурировать транслятор.
    ---
    Кто знает, что за AirM2M esp8266 от www.airm2m.com http://www.google.ru/webhp?q=AirM2M esp8266
    Пример http://wenku.baidu.com/view/0c1ec976b7360b4c2f3f6451?fr=prin
    У них и свои модули...
    http://wenku.baidu.com/view/c2390236312b3169a551a45d.html?re=view
     
    Последнее редактирование: 17 фев 2015
  14. folny

    folny Новичок

    Сообщения:
    15
    Симпатии:
    0
  15. Andy Korg

    Andy Korg Moderator Команда форума

    Сообщения:
    414
    Симпатии:
    75
    Unclear in what a problem.. Declaration variable tmp? If yes, then remove variable "tmp" of the cycle. Like this:
    Код (Text):
    1. uint16_t tmp = 0;
    2. for(;tmp<513;tmp++);
    3.  
     
    Последнее редактирование: 19 фев 2015
  16. folny

    folny Новичок

    Сообщения:
    15
    Симпатии:
    0
    Yes, this was one of the error code no longer works thank you :)
     
  17. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.352
    Симпатии:
    1.320
    Опять дорабатывал TCP2UART.
    Нашел багу. Забыл, что CLEAR_PERI_REG_MASK() это составная команда и между чтением and маской и записью и туда пролазят прерывания и успевают менять ....
    Так всё хорошо:
    Код (Text):
    1.  
    2.     ets_intr_lock(); // Или ETS_UART_INTR_DISABLE(); но оно медленнее - там больше команд.
    3.     CLEAR_PERI_REG_MASK(UART_INT_ENA(UART0), UART_TXFIFO_EMPTY_INT_ENA); // запретить прерывание по передаче fifo tx
    4.     ets_intr_unlock(); // ETS_UART_INTR_ENABLE();
    5.  
    Соединил RTS-CTS и TX-RX и погонял файлы в дцать мегобайт - скорость около 200 кбайт в секунду туда-сюда (в одну сторону 200 и в другую 200 - полный дуплекс - предел ESP8266 со стандартной flash и выключенными отладочными сообщениями, при Winbond flash - выходит ещё быстрее...) при скорости UART oт 3Mbaud и до 10Mbaud включительно. Далее выходы UART халтурят.
    И, к примеру, при ровно 1MBaud скорость падает до 1.5 раза (в зависимости от расчетной к 1Mbaud), т.к. происходит расхождение подтверждения TCP переданных пакетиков принятыми и т.д. из-за разных размеров передающих-принимающих буферов. Без RTS-CTS расходятся больше, т.к. RTS-CTS частично синхронизирует поток и без RST-CTS будут выпадения.
    Заниматься оптимизацией размеров буферов под синхронизацию кратности скорости TCP и UART не собираюсь - нет никакого смысла это делать под тест приема и передачи одного и того-же.

    Закинул поправленную "свалку" web-а.
     
    Последнее редактирование: 22 фев 2015
    Algis нравится это.
  18. mcmega

    mcmega Новичок

    Сообщения:
    93
    Симпатии:
    1
    Ругается при сборке на 147 строку Makefile @set -e; $(foreach d, $(SUBDIRS), $(MAKE) -C $(d);)
    Ещё вопрос, как записать прошивку прямо с Эклипса? ругается на 135 строку Makefile (может настройки COM нужно задать где то)?
     
  19. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.352
    Симпатии:
    1.320
    У меня ошибок нет.
    wbopt.gif
    FlashAll
    А в том-же Makefile: строка 7: ESPOPTION ?= -p COM6 -b 230400

    UDK v1.0.10 (16.02.2015) ещё не ставил. Там по описанию только примеры новые, esptool.py не леченная...
    Счас проверю с 1.0.10 - всё c ней пашет, но опция FlashCode подтирает "web-диск" на малых flash: esptool в той сборке пока не леченная.
     
    Последнее редактирование: 22 фев 2015
  20. mcmega

    mcmega Новичок

    Сообщения:
    93
    Симпатии:
    1
    Да, я установил всё как написано в первом посте http://esp8266.ru/forum/threads/moja-sborka-espressif-devkit.32/
    вчера днём игрался с Вашей дневной версией. Никаких проблем не было. Скачал последнюю и появились эти ошибки при сборке:
    Скрин экрана (раскрыть)
    [​IMG]

    Никаких изменений в проект не вносил. Что делать?
     
    Последнее редактирование: 22 фев 2015

Поделиться этой страницей