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

Мой сборщик и флешер

Тема в разделе "Realtek - SDK, прошивки и утилиты", создана пользователем Neov, 18 мар 2017.

  1. pvvx

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

    Сообщения:
    9.097
    Симпатии:
    1.303
    200 файлов в #include "html.h" с именами и атрибутами?
    Как тогда происходит распределение на необходимую отсылку контекста в web и вложения в них других "файлов" при нескольких одновременных HTTP потоках ? :)
     
  2. pvvx

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

    Сообщения:
    9.097
    Симпатии:
    1.303
    У вас инструкция к датчику на сервере?
    Настройки WiFi и прочего только в ремонтной мастерской?
    Собранная статистика храниться на платном сервисе с пожеланием хозяина сервиса в формате вывода графиков?
    Возможно ли включение к датчику сторонних программ на компах с анализом производимых им замеров (запрос в обычном xml формате)?
    Возможно ли управление датчиком со смартфона на системах win/андороид/яблоко и прочих?
    На все ответы у вас получаем - нет. По этому ваше предложение не есть вариант.
    Предложенного вами достаточно в Arduino для игры на вечер с платкой, но не для построения IoT.
     
    Последнее редактирование: 1 май 2017
  3. pvvx

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

    Сообщения:
    9.097
    Симпатии:
    1.303
    Это не позволяет сделать нормальный роутер. Вы работаете не по стандарту WiFi - про это уже много раз вам говорилось.
    По вашему варианту нестандартного использования WiFi достаточно и 30..50 мс от старта SoC.
    Если описывать ваш вариант, не оптимизируя, базовыми функциями SDK RTL, тогда выходит 293 ms, что уже менее вашего при уже переданных 3..10 пакетов:
    Снимок1443.gif
    СИ (раскрыть)
    Код (C):
    1.  
    2. /*
    3.  * raw_wifi_tst.c
    4.  *  Created on: 04/04/2017
    5.  */
    6. #include <autoconf.h>
    7. #include "FreeRTOS.h"
    8. #include "drv_types.h"
    9. #include "diag.h"
    10. #include "wifi_api.h"
    11. #include "wifi_conf.h"
    12. #include "rtl8195a/rtl_libc.h"
    13. #include "hal_platform.h"
    14. #include "lwip/netif.h"
    15.  
    16. #if (!defined(CONFIG_ENABLE_P2P)) || (!CONFIG_ENABLE_P2P)
    17. #error "Set CONFIG_ENABLE_P2P!"
    18. #endif
    19.  
    20. //------------------------------------------------------------------------------
    21. extern struct netif xnetif[NET_IF_NUM];
    22. extern Rltk_wlan_t rltk_wlan_info[2]; // in wrapper.h
    23.  
    24. LOCAL int wifi_up(void) {
    25.     int ret = 0;
    26.     info_printf("Initializing WIFI...\n");
    27.  
    28.     ret = rltk_wlan_init(0, 1); // rtw_mode_t
    29.  
    30.     netif_set_up(&xnetif[0]);
    31.     if (ret < 0) return ret;
    32.     uint32 timeout = xTaskGetTickCount();
    33.     rltk_wlan_start(0);
    34.     while (1) {
    35.         if (rltk_wlan_running(0)) {
    36.             printf("WIFI initialized (%d ms)\n", xTaskGetTickCount() - timeout);
    37.             break;
    38.         }
    39.         if(xTaskGetTickCount() - timeout > 2000) {
    40.             error_printf("WIFI init timeout!\n");
    41.             break;
    42.         }
    43.         vTaskDelay(20);
    44.     }
    45.     return ret;
    46. }
    47.  
    48. //------------------------------------------------------------------------------
    49. u8 RandSK(u8 max) {
    50.     u8 buf;
    51.     do {
    52.         rtw_get_random_bytes(&buf, 1);
    53.     } while (buf>max);
    54.     return buf;
    55. }
    56.  
    57. //------------------------------------------------------------------------------
    58. LOCAL void fATRT(int argc, char *argv[])
    59. {
    60.     char wlan0[10] = "wlan0";
    61.     u8 alfa[65] = "1234567890qwertyuiopasdfghjklzxcvbnm QWERTYUIOPASDFGHJKLZXCVBNM_.";
    62.     u8 packet[128] = { 0x80, 0x00, 0x00, 0x00,
    63.         /*4*/   0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    64.         /*10*/  0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
    65.         /*16*/  0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
    66.         /*22*/  0xc0, 0x6c,
    67.         /*24*/  0x83, 0x51, 0xf7, 0x8f, 0x0f, 0x00, 0x00, 0x00,
    68.         /*32*/  0x64, 0x00,
    69.         /*34*/  0x01, 0x04,
    70.         /* SSID */
    71.         /*36*/  0x00, 0x06, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72,
    72.                 0x01, 0x08, 0x82, 0x84,
    73.                 0x8b, 0x96, 0x24, 0x30, 0x48, 0x6c, 0x03, 0x01,
    74.         /*56*/  0x04};
    75.     u8 channel = 1;
    76.     //_adapter *ad0 = rltk_wlan_info[0].dev;
    77.     if(argc > 1) {
    78.         channel = atoi(argv[1]);
    79.     }
    80.     if((!channel) || channel > 14)  channel = 1;
    81.     // Source MAC Address
    82.     packet[10] = packet[16] = 1;//RandSK256();
    83.     packet[11] = packet[17] = 1;//RandSK256();
    84.     packet[12] = packet[18] = 1;//RandSK256();
    85.     packet[13] = packet[19] = 1;//RandSK256();
    86.     packet[14] = packet[20] = 1;//RandSK256();
    87.     packet[15] = packet[21] = 1;//RandSK256();
    88.     // Randomize SSID (Fixed size 6. Lazy right?)
    89.     packet[38] = alfa[RandSK(65)];
    90.     packet[39] = alfa[RandSK(65)];
    91.     packet[40] = alfa[RandSK(65)];
    92.     packet[41] = alfa[RandSK(65)];
    93.     packet[42] = alfa[RandSK(65)];
    94.     packet[43] = alfa[RandSK(65)];
    95.  
    96.     packet[56] = channel;
    97.     uint32 timeout = xTaskGetTickCount();
    98.     wifi_up();
    99. //    for(int i=0; i<10000; i++) {  
    100.     for(int i=0; i<3; i++) {
    101.         wext_send_mgnt(wlan0, &packet, 57, NULL);
    102.         vTaskDelay(2); // + WDT
    103.     }
    104. //    printf("prep C\n");
    105.     printf("WIFI start && send 3 packet (%d ms)\n", xTaskGetTickCount() - timeout);
    106. }
    107.  
    108. //------------------------------------------------------------------------------
    109. MON_RAM_TAB_SECTION COMMAND_TABLE console_commands_rwt[] = {
    110.         {"ATRT", 0, fATRT, ": Raw WiFi Test"}
    111. };

    Т.е. что-то у вас не доделано, т.к. выход из глубоких sleep (без инициализации WiFi, используя старую конфигурацию и полное отключение всего, кроме таймера просыпания или ADC для рестарта по уровню) у данного SoC со встроенным PMU не более пары мс с соображением и вставкой новых данных с датчика. Датчики обычно тормознее.

    А тут лепят для более качественных вариантов, а не упражнения в Arduino.
    Тем более где пример с исходниками? Тут принимаются заявки только с исходниками и рекомендации по имеющимся, желательно с показом строки или примера поправки :)
    Автор темы вам тогда сможет помочь или сделать сборщик вашего проекта.
    PS: Да, и поправьте ошибки - у нас пока самый быстрый web из всех обсуждаемых на форуме.
     
    Последнее редактирование: 1 май 2017
  4. pvvx

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

    Сообщения:
    9.097
    Симпатии:
    1.303
    Пока кукарекания и небылицы идут от вас. У нас всё подтверждено и доступно для повторения любым.
    Скачайте проект автора - он собирает проекты с использованием SDK. Но нужны мелкие доделки, такие как более развитый программатор и сборщик webfs на Питоне.
    Короткий пример с встроенным в си текстом index.hml c конфигуратором WiFi имеется изначально в SDK.
    Так-же там имеются примеры работы с несколькими внешними сервисами-серверами.
    То, что вы предлагаете и пытаетесь сделать уже изначально есть и такой проект собирается данным сборщиком.
     
    Последнее редактирование: 1 май 2017
  5. Neov

    Neov Читатель

    Сообщения:
    209
    Симпатии:
    7
    обновил сборку MP3 и веб свалки,
    для последней теперь появилась команда waf webfs - генерация образа webfs
     
  6. pvvx

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

    Сообщения:
    9.097
    Симпатии:
    1.303
    Сборку SDK 4.0a для двух вариантов процов сделали?
    Я уже собирал свои проекты с SDK 4.0a для "RTL A" серии. Глобальных изменений там нет, кроме увеличения объема кода...
    Возможно позже, если вырежу ненужное и состыкую со своими частями, но только с WEB-свалкой, то скину.
    Но это будет не SDK4.0a c оф. примерами "AT", а вариант исключительно для Web-свалки (урезанный по разным причинам*), а народ везде ищет сборщик для оф. SDK4.0a под GCC. Вам выпала возможность стать первым :)

    * там повязаны stdlib/libc, всякие eabi функции к закрытым либам (включая драйвер WiFi), а мне они не нужны.
    Допиханы функции таймера в структуру процедур rtx_service.c...
    переименованы процедуры управления PMU (типа release_wakelock() -> pmu_release_wakelock())...
    перенесены некоторые файлы в component\soc\realtek\8195a\misc\os ...
    Удален osdep_api.c (вызовы из его процедур переименованы в базовые по всем примерам)...
    Переиначены freertos.
    В итого ничего более, кроме перестановок и добавки ненужного кода в lib_wlan.a. Ошибки из SDK3.5a не исправлены. Но накидали больше примеров (MQTT и типа)...
    Всё это сделано для совместимости с RTL серии "B".
     
    Последнее редактирование: 27 май 2017
  7. Neov

    Neov Читатель

    Сообщения:
    209
    Симпатии:
    7
    Зачем? если это уже сделали вы:)
    а с ваф-ваф все просто, поправьте списки компиляции и укажите путь до нужного ld и дело в шляпе :)
     
    Последнее редактирование: 30 май 2017
  8. pvvx

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

    Сообщения:
    9.097
    Симпатии:
    1.303
    Не делал для всех вариантов. Написал же, что стандартного их варианта SDK у меня нет и мне не нужен, а кому-то может быть нужен.
     
  9. pvvx

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

    Сообщения:
    9.097
    Симпатии:
    1.303
    @Neov - как дела с SDK4.0 и серией "B" (Ameba-Z)?
    На маке всё уже собирается. Даже на моем альтернативном предварительном варианте, под последний GCC и частично совместимый со старыми SDK3.5 и серией "A"... Полного варианта совместимости для сразу двух серий в Eclipse (с переключением на ходу) пока не видится. Приложил кусок makefiles для сборки только серии "B".
     

    Вложения:

    • sdk40b_at.zip
      Размер файла:
      27,9 КБ
      Просмотров:
      11
    Последнее редактирование: 5 авг 2017
  10. Neov

    Neov Читатель

    Сообщения:
    209
    Симпатии:
    7
    да никак,
    мне А серии пока что хватает, может потом добавлю B.
     
  11. osnwt

    osnwt Новичок

    Сообщения:
    14
    Симпатии:
    1
    Спасибо, после небольшой доработки он заработал, как надо, у меня на маке (который Apple, а не который make). Доработка нужна для корректной генерации образа.

    Саму систему сборки даже не пробовал - терпеть не могу python за его форматирование. Я сам перфекционист в плане строгости форматирования текста. Но вот как бы объяснить еще это разным писателям, кто вперемешку использует где пробелы, где табы, не говоря уже о веяниях задавать размер tab в 4, а то и 3 пробела вместо его стандартного толкования (очередная позиция, кратная 8).

    Кого интересует чисто кроссплатформенный webfs - надо взять из системы сборки webfs_tool.py и применить к нему следующий патч. Он фиксит проверку расширений файлов (убирает лишние пробелы после split, что приводило к ошибкам match), а также не компрессирует файлы, сжатый размер которых больше исходного (как и оригинальная версия WebFS). Результат компактнее, чем у WebFS.

    патч (раскрыть)
    Код (Text):
    1. --- webfs_tool.py-      2017-09-13 01:01:28.000000000 +0300
    2. +++ webfs_tool.py       2017-09-13 05:07:04.000000000 +0300
    3. @@ -19,7 +19,7 @@
    4.  
    5. __version__='0.9'
    6.  
    7. -import os, struct, re, zlib, gzip, fnmatch, argparse, posixpath, collections
    8. +import os, struct, re, zlib, gzip, StringIO, fnmatch, argparse, posixpath, collections
    9.  
    10. def webfs_hash(filename):
    11.      r = 0;
    12. @@ -31,7 +31,7 @@
    13.  
    14. def check_match(filename, extensions=[]):
    15.      for extension in extensions:
    16. -        if fnmatch.fnmatch(filename, extension): return True
    17. +        if fnmatch.fnmatch(filename, extension.strip()): return True
    18.      return False
    19.  
    20. def write_image(files_dict, output, dynamic_files=['*.htm', '*.html', '*.cgi', '*.xml', '*.bin', '*.txt', '*.wav'], nozip_files=['*.inc', 'snmp.bib']):
    21. @@ -50,16 +50,20 @@
    22.                  if check_match(file_name, dynamic_files) and idx.findall(cnt):
    23.                      flags = flags | 0x2
    24.                  elif not check_match(file_name, nozip_files):
    25. -                    flags = flags | 0x1
    26. +                    zf = StringIO.StringIO();
    27. +                    with gzip.GzipFile(fileobj=zf, mode='w') as g:
    28. +                        g.write(cnt)
    29. +                        g.close()
    30. +                        zcnt = zf.getvalue()
    31. +                        if len(zcnt) < len(cnt):
    32. +                            cnt = zcnt
    33. +                            flags = flags | 0x1
    34.  
    35.                  f.write(struct.pack('<1H', flags))
    36.                  f.write(file_name)
    37.                  f.write('\x00')
    38. -                if flags & 0x1:
    39. -                    with gzip.GzipFile(fileobj=f, mode='w') as g:
    40. -                        g.write(cnt)
    41. -                else:
    42. -                    f.write(cnt)
    43. +                f.write(cnt)
    44. +
    45.          img_len = f.tell()
    46.          f.seek(0)
    47.          f.write('FWEB\x01\x00')

    Параметры задаются немного иначе, чем в WebFS.exe, что связано с использованием стандартного парсера, понимающего -h как help. Но в целом похоже, хотя я бы унифицировал код утилит для большей кроссплатформенности.
     
  12. pvvx

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

    Сообщения:
    9.097
    Симпатии:
    1.303
    Там не полный алгоритм - надо ещё проверку на включение в файлы переменных, а если их там нет то сжимать. Так-же, в оригинале, есть ещё список исключения для файлов которые не сжимать, кроме указания "сжимаемых". Это часто связано с include файлами, т.к. они требуют несжатой версии, есть и другие варианты...
    Если в проекте будет web-диск побольше, то это сразу скажется. По этой причине использовать текущий вариант не получилось - итоговый вариант диска получается сильно больше, чем у "оригинала".
     
    Последнее редактирование: 13 сен 2017
  13. osnwt

    osnwt Новичок

    Сообщения:
    14
    Симпатии:
    1
  14. pvvx

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

    Сообщения:
    9.097
    Симпатии:
    1.303
  15. Neov

    Neov Читатель

    Сообщения:
    209
    Симпатии:
    7
    это правда? есть файлы которые после gzip становятся ощутимо тяжелее оригинала?
     
  16. osnwt

    osnwt Новичок

    Сообщения:
    14
    Симпатии:
    1
    Как минимум, это небольшие файлы, которые после добавления gzip хедера становятся больше. В этом случае их лучше вообще не сжимать. Также это может проявляться на файлах с содержимым, близким к случайному. Например, на графических файлах, которые, практически, несжимаемы. Проверить просто: положить 1 большой jpg/gif и собрать webfs. После чего прописать -n "*" и повторить операцию.
     
  17. Neov

    Neov Читатель

    Сообщения:
    209
    Симпатии:
    7
    понятно, спасибо, поправлю.
    P.S. уж простите мои !8 отступы)
     
  18. osnwt

    osnwt Новичок

    Сообщения:
    14
    Симпатии:
    1
    Можно использовать приложенную версию (в теме по ссылке выше) - там все поправлено.

    А насчет отступов я имел в виду не конкретный проект, а вообще то, насколько вольно нынче обращаются с табуляцией вообще и символами табуляции, в частности. Мне даже в бреду не пришло бы в голову переопределить TAB в 3 символа, как делают некоторые любители прописать собственные форматные строки в редакторах. Я могу еще понять отступ в 3 пробела в индентах. Но отступы в 3 пробела, представленные символом табуляции... жуть. Особенно приятно выглядят такие файлы потом в других редакторах типа Far или mcedit, которые не понимают настроек разных сред и показывают TAB в стандартном виде. Ёлка бывает еще та.

    Поэтому я в целом разделяю негодование Линуса Торвальдса по этому поводу. Но вполне спокойно переношу инденты в 4 пробела, к примеру, если это именно пробелы, а не каша из пробелов и табов.
     
  19. pvvx

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

    Сообщения:
    9.097
    Симпатии:
    1.303
    Потом не наступило? Есть задачка перекинуть на Питона RTL871xBx ROM Bootloader Utility - загрузку/выгрузку в Flash и RAM через UART по переключению пином типа загрузки из ROM...
    А то Ameba жидит свой ImageTool для серии "B". Я давно раскопал весь протокол (все команды), подобный xmodem, из дизасма их ROM... Есть пока только полу-рабочий тестовый вариант на Pas Delphi 7 - не для выкладываний "начинающим" (утомили они), на нем ковыряясь проверял :) а далее лень одолела. Огрызок от него кинул по ссылке, но там только одна команда чтения Flash. Вся остальная инфа только через личку/почту и т.д.
     
    Последнее редактирование: 3 окт 2017
  20. Neov

    Neov Читатель

    Сообщения:
    209
    Симпатии:
    7
    Я может чего-то пропустил, есть такая опция для А серии?

    Киньте исходник по ссылке выше, гляну на досуге

    Так B серия - годнота?
     

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