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

Зачем и boot.py, и main.py?

Тема в разделе "MicroPython", создана пользователем RotaryF, 28 фев 2019.

  1. RotaryF

    RotaryF Новичок

    Сообщения:
    3
    Симпатии:
    0
    Вот и я взглянул в сторону микроПитона, благо под рукой и ESP8266, и ESP32.
    Успел и поиграться малость с лампочками+, даже некое подобие Cron(a) под свои нужды наваял.
    Для более полного понимания "процесса" хочу выяснить нафиг такая 2х-ступенчатая процедура загрузки, зачем этой змейке 2 файла? Какая разница произведу ли я полную инициализацию своей системы только в boot.py или же задействую и boot.py, и main.py?
    Ну да, гибче, а как эту улучшенную (по ср., скажем, с Lua-init) гибкость грамотно использовать?
    Все равно хоть после программной перезагрузки, хоть после глубокого сна процедура одинакова - перезапускаются и boot.py, и main.py :confused:
     
  2. nikolz

    nikolz Гуру

    Сообщения:
    3.444
    Симпатии:
    377
    читайте документацию там все есть про "нафига"
     
  3. __ab__

    __ab__ Новичок

    Сообщения:
    12
    Симпатии:
    2
    чтобы ответ был полезен, а не был просто троллингом, обычно дают ссылки или цитаты,, если упоминают документацию.
    мне известно вот это место в документации 3. The internal filesystem — MicroPython 1.9.3 documentation
    пункт 3.3
    И документация в этом месте врет - main.py не и импортируется самим python - его надо явно импортировать из boot.py
    Если знаете другое упоминание в документации, приведите ссылку пожалуйста.

    Зачем все же это разделение? Чтобы стимулировать программиста не пытаться отъедать ресурсы прикладной логикой в случае, если необходимые системные функции не загрузились.

    Я обычно меняю boot.py на вот такой:
    Код (Text):
    1. import gc, webrepl, esp, network, json, os, time
    2. MAIN=None
    3.  
    4. #В файле config.json держим логин и пароль сети
    5. #{"wlan_pwd": "XXXX", "wlan": "XXXX"}
    6.  
    7. def init():
    8.     global MAIN
    9.     lst = os.listdir()
    10.     if 'config.json' in lst:
    11.         try:
    12.             with open('config.json', 'r') as x:
    13.                 cfg = json.load(x)
    14.         except:
    15.             return
    16.  
    17.     if 'wlan' in cfg:
    18.         wlan = network.WLAN(network.AP_IF)
    19.         wlan.active(False)
    20.  
    21.         wlan = network.WLAN(network.STA_IF)
    22.         wlan.active(True)
    23.         wlan.connect(cfg['wlan'], cfg['wlan_pwd'])
    24.  
    25.         x = 0 # 10 секунд ждем соединения WiFi
    26.         while x < 10:
    27.             if wlan.isconnected():
    28.                 webrepl.start()
    29.                 break
    30.             x += 1
    31.             time.sleep(1)
    32.  
    33.     # если есть main пытаемся запустить
    34.     if 'main.py' in lst:
    35.         MAIN = __import__('main')
    36.         lst = dir(MAIN)
    37.         if 'init' in lst:
    38.             MAIN.init()
    39.  
    40. esp.osdebug(None)
    41. init()
    42. gc.collect()
    ну а в main и прочих модулях - логика, которая просто не сможет работать, ели не отработало то, что есть в boot
     
    fps и RotaryF нравится это.
  4. RotaryF

    RotaryF Новичок

    Сообщения:
    3
    Симпатии:
    0
    Вот, это уже больше похоже на ответ и желание помочь.
    А предыдущее "по документации" смахивает на х.з., но с умным видом :cool:
     

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