Доработал программу, а именно библиотеку сборки проектов для AVR контроллеров "EvAVRbuilder.dll". При сборки проекта создаются всего два файла это ассемблерный файл полученной программы и непосредственна сама прошивка.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Скажите, как у вас добавляются новые кристаллы в систему: путем перекомпиляции пакета, путем добалвения DLL или путем добавления какого-то файла описания кристалла в текстовом или другом человеко-читаемом формате?
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Ядро программы, кода всех FBDблоков и описание кристалла представлены текстовыми файлами. Во время сборки программа формирует файл конфигурации, далее соответствующая dll собирает из всех файлов единый исходный файл, затем он компилируется.
Если добавлять кристалл семейства AVR, то необходимо корректировать только текстовые файлы, а если другого типа, то создавать новую библиотеку сборки проекта.
В следующем видео я подробней расскажу как собирается проект и обрисую идею оптимизации.
Имеетя 7 блоков, причем кода PinD4 и PinD7, а ткже PinB6 и PinB7- идентичны.
В результате сборки программа вложит 5 исполнительных подпрограмм:
FBD0_run (для PinD4 и PinD7) FBD1_run (для RS триггер) FBD2_run (для NOT) FBD3_run (для AND) FBD4_run (для PinB6 и PinB7)
Подпрограммы завершаются командой ret. Подпрограммы используют указатели X на оперативную память и Y- на флеш память.
В цикле программы необходимо вызвать семь функций: rcall FBD0_run (для PinD4) rcall FBD0_run (для PinD7) rcall FBD1_run (для RS) rcall FBD2_run (для NOT) rcall FBD3_run (для AND) rcall FBD4_run (для PinB6) rcall FBD4_run (для PinB7)
При этом, у каждого блока имеется свои данные оперативной и флэш памяти, эти адресазаведомо известны. Для флеш: FBD0_flash: db 00, 00, .. (данные PinD4) FBD1_flash: db 00, 00, .. (данные PinD7) FBD2_flash: db 00, 00, .. (данные RS) FBD3_flash: db 00, 00, .. (данные NOT) FBD4_flash: db 00, 00, .. (данные AND) FBD5_flash: db 00, 00, .. (данные PinB6) FBD6_flash: db 00, 00, .. (данные PinB7) Для оперативной: FBD0_ram (адрес на данные в оперативной памяти для PinD4) FBD1_ram (адрес на данные в оперативной памяти для PinD7) FBD2_ram (адрес на данные в оперативной памяти для RS) FBD3_ram (адрес на данные в оперативной памяти для NOT) FBD4_ram (адрес на данные в оперативной памяти для AND) FBD5_ram (адрес на данные в оперативной памяти для PinB6) FBD6_ram (адрес на данные в оперативной памяти для PinB7)
По факту не все блоки используют оперативную память, в приведенном примере только RS триггер использует 1 байт.
С учетом предварительной установки адреса, получаю: ldi xl, low(FBD0_ram) ldi xh, high(FBD0_ram) ldi yl, low(FBD0_flash*2) ldi yh, high(FBD0_flash*2) rcall FBD0_run (для PinD4) ldi xl, low(FBD1_ram) ldi xh, high(FBD1_ram) ldi yl, low(FBD1_flash*2) ldi yh, high(FBD1_flash*2) rcall FBD0_run (для PinD7) ...
В итоге расходую по 5 комнд (10 байт памяти) для исполнения одного блока.
Программу напишу, по сути еще на этапе компиляции известны все адреса.
Может как то поможет чередование: FBD0_flash: db 00, 00, .. (данные PinD4) rcall FBD0_run (для PinD4) FBD1_flash: db 00, 00, .. (данные PinD7) rcall FBD0_run (для PinD7) ...
или rcall FBD0_run (для PinD4) FBD0_flash: db 00, 00, .. (данные PinD4) rcall FBD0_run (для PinD7) FBD1_flash: db 00, 00, .. (данные PinD7)
тогда в стеке уже хранится указатель на данные, опять же необходимы ресурсы для излечения?
Ребят кто то знает как реализовать в этой программе простую логику!? При нажатии тактовой кнопки включается нагрузка, при повторном нажатии выключается. Ведь ТТ триггера нету, как реализовать?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения