Как вставлять библиотеки внутрь скетча?

std
Offline
Зарегистрирован: 05.01.2012

Хало all, в общем у меня задача сохранить максимум скорости передачи по SPI, потому что от этого зависит актуальность информации на удалённом приёмнике, приёмник критичный (всякие DMX светильники для театра), короче считайте это реализацией MIDI по воздуху. Но это только конкретно этот проект. Думаю, такая необходимость возникнет и для других.

Как мы знаем, функции digitalWrite(), digitalRead() не особенно шевелятся по сравнению с прямой записью в порт, и есть замечательная библиотека cyberlib, она же nanopins, содержащая функции типа d5i(), пишущие в регистр то что надо, по маске.

Но. Чтобы всё это дело применять, надо по меньшей мере знать, какие будут использоваться номера выводов. На этапе сборки девайса они еще выбираются, но на момент написания скетча известны точно, объявлены в начале, дело только за тем чтобы подставить. Для помигать лампочками замечательно. Я для разговорчиков с GPS приёмником, например - а вот хер там, юзайте библиотеку, а в ней опять digitalWrite(), digitalRead(). Переписать библиотеку? Можно, но чото... а, кажется эти б███ские номера выводов в другом проекте будут отличатся! И сх██ли мне писать вторую версию, пятую версию, стопицотую версию? Не проще ли взять окончательный, готовый CPP, открыть в редакторе, зажать Ctrl+F7 (ну или Ctrl+G, кто как любит) и позаменять нах все RxPin на 2, TxPin на 3, RelayPin на 6, а потом все digitalWrite(5) на d5hi(); или как его там. Работы на 5 минут, и нахер не нужно держать все эти версии.

Способа создать такой CPP, видимо, нету. Файл из каталога Temp отличается от исходника только строкой #include "Arduino.h", видимо нужно брать целиком тело библиотеки и вставлять в файл. Объясните пожалуйста, как это делать? Достаточно ли просто найти строку #include и вместо неё воткнуть нужный файл, рекурсивно (чтобы внутри инклудов тоже попавшиеся инклуды проставить, с запоминанием списка чтобы не вставлять дважды). Мне не лень, я и парсер напишу на паскале каком-нибудь, лижбы работало. Схавает ли компилятор ino файл, в котором ваще-ваще-преваще всё-превсё? Или опять на что-нибудь пожалуется?

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Сумбурно как-то - я мало понял. Самое  непонятное - мотивация.

Что мешает править библиотеку?

 

std
Offline
Зарегистрирован: 05.01.2012

Допустим, среда Arduino у меня на SSD, а скетчи на рабочем диске. До тех пор, пока скетчи правятся и система лезет в каталог среды только ради чтения, всё работает как надо, а с того момента как под каждый новый проект в библитеку(и) будут вноситься новые правки, начнётся износ SSD. хотя-бы так.

А вообще, это чтобы не ломать родную библиотеку. Можно конечно делать копию, но когда в каждой библиотеке будут такие копии, каталог среды основательно засрётся т. к. библиотек там уже хорошо если 60. А может и больше, хз.

Суть вопроса:

Допустим у меня есть скетч, использующий LiquidCrystal. Можно ли удалить из него строку

#include <LiquidCrystal.h>

и вставить вместо неё всё что находится в файлах %arduino%\libraries\LiquidCrystal.h, LiquidCrystal.cpp?

Клапауций 123
Offline
Зарегистрирован: 06.12.2015

здесь #4 говорится, что если, вместо <> надо ставить "", тогда файл будет искаться в папке проекта.

попробуй

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

std пишет:

Хало all, в общем у меня задача сохранить максимум скорости передачи по SPI, потому что от этого зависит актуальность информации на удалённом приёмнике, приёмник критичный (всякие DMX светильники для театра), короче считайте это реализацией MIDI по воздуху. Но это только конкретно этот проект. Думаю, такая необходимость возникнет и для других.

Реальный проект (не завершен) использует STM32F050F4P6 (можно заменить на STM32F030F4P6, TSSOP20, 55р. (в России)), без кварца, тактовая 48МГц. Загружает SPI через DMA из буфера в цикле и не на максимальной скорости (по моему 3,2МГц, сейчас точно не помню). На выход подключены 100 штук WS2812b. Никаких перерывов и т.п. никакого гемора с задержками. При этом сам камень свободен для формирования эффектов, потому что прерывания и выполнение кода не нужно для вывода буфера на SPI, трудится DMA. Можно не делать циклический вывод, а старт по запросу, выплевывая один раз весь буфер. Keil, v5+, программатор от платы Nucleo (ST-Link). Памяти (ОЗУ) 4К, флеш, насколько помню 16М. Минимальный обвес - несколько кондеров по питанию, резистор или два.

Разумееется это как вариант, не настаиваю.

Sorry, здесь плата еще не отмыта и паяю я как курица лапой.

К НГ готовлюсь :)

Sindbad
Offline
Зарегистрирован: 08.12.2015

std пишет:

открыть в редакторе, зажать Ctrl+F7 (ну или Ctrl+G, кто как любит) и позаменять нах все RxPin на 2, TxPin на 3, RelayPin на 6, а потом все digitalWrite(5) на d5hi();

Чем не подходит деректива #define  ?

std
Offline
Зарегистрирован: 05.01.2012

Ахринеть, в самом деле. Надо где-нибудь записать на видном месте.

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

kisoft пишет:

Реальный проект (не завершен) использует STM32F050F4P6 (можно заменить на STM32F030F4P6, TSSOP20, 55р. (в России)), без кварца, тактовая 48МГц. Загружает SPI через DMA из буфера в цикле и не на максимальной скорости (по моему 3,2МГц, сейчас точно не помню). На выход подключены 100 штук WS2812b. Никаких перерывов и т.п. никакого гемора с задержками. При этом сам камень свободен для формирования эффектов, потому что прерывания и выполнение кода не нужно для вывода буфера на SPI, трудится DMA. Можно не делать циклический вывод, а старт по запросу, выплевывая один раз весь буфер. Keil, v5+, программатор от платы Nucleo (ST-Link). Памяти (ОЗУ) 4К, флеш, насколько помню 16М. Минимальный обвес - несколько кондеров по питанию, резистор или два.

Круть!
А сколько чипов максимально потянет?

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Gippopotam пишет:

kisoft пишет:

Реальный проект (не завершен) использует STM32F050F4P6 (можно заменить на STM32F030F4P6, TSSOP20, 55р. (в России)), без кварца, тактовая 48МГц. Загружает SPI через DMA из буфера в цикле и не на максимальной скорости (по моему 3,2МГц, сейчас точно не помню). На выход подключены 100 штук WS2812b. Никаких перерывов и т.п. никакого гемора с задержками. При этом сам камень свободен для формирования эффектов, потому что прерывания и выполнение кода не нужно для вывода буфера на SPI, трудится DMA. Можно не делать циклический вывод, а старт по запросу, выплевывая один раз весь буфер. Keil, v5+, программатор от платы Nucleo (ST-Link). Памяти (ОЗУ) 4К, флеш, насколько помню 16М. Минимальный обвес - несколько кондеров по питанию, резистор или два.

Круть!
А сколько чипов максимально потянет?

Если про WS2812b, то ограничивает только объем памяти (ОЗУ) [да я типа Капитан Очевидность], сейчас на два буфера (один выходной, другой для формирования эффектов) уходит почти вся память, т.е. сейчас максимум - это 100 светодиодов WS2812b. К сожалению не успел доделать аппаратную реализацию протокола WS2812b, тогда памяти будет хватать точно на бОльшее кол-во светиков. Схему уже продумал, в Протеусе покрутил, там 3-4 корпуса логики, зато экономия памяти в несколько раз, т.е. 3 байта на светодиод, а не в 4 раза больше. Мне не хватило отсутствующего в закромах банального триггера TM2, заказал уже :) В принципе можно еще подумать и оставить всего один выходной буфер, тогда еще больше можно будет подключить. Мне хватает одной ленты (больше здесь не подключить, ног маловато, потому SPI всего один). Короче проект закончу, тогда и посчитаю. К сожалению к Ардуино вряд ли это всё можно будет прикрутить. Сейчас на большом компе, на Шарпе отлаживаю эффекты, зачем контроллер маять перепрошивкой, там всё уже работает, потом алгоритмы залью и останется окончательное тестирование, вроде к НГ успеваю :)

ТС, извини, я смотрю тема несколько о другом (я только начало выхватил), а я тут со своим железом :)

 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

kisoft, создайте тему и расскажите, если не жалко подробнее.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Gippopotam пишет:

kisoft, создайте тему и расскажите, если не жалко подробнее.

Закончу, статья будет, здесь или на EE (тогда ссылку выложу в отдельной теме). Видео, схема и т.п. Рассказать не жалко. Печатку не делал, хотя сделаю, если аппаратную реализацию протокола добью.