-
- У Nuvoton есть процы с глубокой спячкой и локом GPIO при проходе
через ресет при выходе из спячки. Так что не всегда при переходе на
вектор ресет имеем дефолтное состояние периферии. Деинит играет
новыми красками. И даже сам вопрос необходимости (или нет)
запускать инициализацию может повергнуть в уныние кишки самого кода
инициализации. Особенно если ретеншн есть на совсем небольшую часть
ОЗУ, или нужен более мелкожручий режим без ретеншна, т.е. даже
сохранять стек нет смысла Vit(1 знак., 23.06.2024 09:59)
- Светодиод должен обо всём этом знать? - VladislavS.(23.06.2024 10:08)
- Если будете писать конструктор, то должны будете знать. Светодиод
это рафинированный пример обернутого битового обращения от вас же.
Представьте себе, что это выключатель питания GSM-модуля. Всё тот
же GPIO, но с полной, а не с ограниченной отвественностью:) - Vit(23.06.2024 10:21)
- Ну если это выключатель GSM-модуля, то у него и логика будет не от
светодиода. А метод включения будет всё равно GSM::On(). И дёргать
ногой он будет точно так же через пин (gpio или расширителя -
пофиг) как и светодиод не думая об его портах и битах, ибо это не
его зона абстракции. - VladislavS.(23.06.2024 10:42)
- у него вводные условия появляются - прежде чем собственно поднять
ногу нужно осмотреться, а доступна ли она, а не получится ли вдруг
вступить в кучу:) - Vit(23.06.2024 10:48)
- Всегда есть космический крейсер, кореллийские лучи смерти,
галактическая чума, угрожающая погубить всю планету... И чтобы
обыватели не сошли с ума, они ничего не должны об этом знать! (c)
MiB - VladislavS.(23.06.2024 11:05)
- toggle выполняет действие со скрытым от юзера предыдущим
состоянием. иногда не пофигу результат. ЗЫ. если у класса GSM и
ключ, и светодиод, то и ключу нужен класс GPIO, и классу LED.
вывод: класс LED сам по себе не нужен:) - Vit(23.06.2024 11:38)
- Кто-то запрещает прочитать состояние, если это надо для работы
модуля? Класс LED нужен, иначе вы описываете логику его работы в
классе GSM, тем самым усложняя его и делая менее переносимым. - VladislavS.(23.06.2024 11:54)
- насчет запрещает - не совсем так, но почти, потому как глобальные
разрешения (снятие лока GPIO) это вопрос не одного класса. а насчет
класса LED - он по сути алиас для части GPIO. такое при построении
сверху вниз чаще не нужно как класс, ибо лишний уровень абстракции.
но в отдельной программе-тесте приходится затягивать из кода
приложений, и по сути ручками делается тот же класс. это хоть и
ручками, но не дольше, чем наоборот. - Vit(23.06.2024 13:02)
- Даже одна возможность того что светодиод может включаться 1 или 0
уже отличает его от простой ноги. Вот захардкодите вы дёргание
ноги, а завтра схему поменяют... - VladislavS.(23.06.2024 13:17)
- Не стесняюсь писать Up и Down, а в On и Off указывать вызовы,
соответствующие полярности. Бывало с рулением полярностью, но как
показала практика - скорее правится плата и появляется BSP для неё
в виде набора файлов, чем калечится предыдущий код путём вставок
ветвления. В приложении нужны On и Off, при миграции код приложения
остаётся. - Vit(23.06.2024 17:10)
- Никаких ветвлений в рантайме нет. Инверсия - константный пареметр.
Он на этапе компиляции работает. - VladislavS.(23.06.2024 17:26)
- Щщазз! Инверсия получается после чтения входа этого же gpio. В
качестве примера посмотрите strapping для любого ethernet phy как
там подключаются индикаторные светодиоды. - 3m(25.06.2024 17:49)
- Внимательно следим за руками. Определяю два светодиода - один с прямым включением, второй с инверсным. Делаем LED::On() обоим и смотрим что получается. VladislavS.(119 знак., 26.06.2024 15:31, картинка, картинка)
- даже на Си, если не на макросах, то если полярность указывается
константно, обычно мелкое инлайнится до отсутствия ветвления самим
компилятором - Vit(23.06.2024 17:41)
- Да не даже на С, а это любой компилятор должен константные данные
оптимизировать. Если ему руки всякими "отлаженными модулями" не
выкручивать. - VladislavS.(23.06.2024 18:21)
- насчет "любой" и "должен" я бы не был столь категоричен. хотя да,
это теперь скорее норма. только не говорите это мелкочипам - они
даже GCC так кастрировали, что это обобщение не к ним:) ЗЫ я
уверен, что вам не досталось счастья использовать "компилятор"
MPLAB C16. оно могло один оператор в строке и никаких структур... - Vit(23.06.2024 19:21)
- Возможно мне повезло, но моё мнение по выбору чипов всегда
учитывали. А я в свою очередь всегда учитывал наличие вменяемых
средств разработки. - VladislavS.(23.06.2024 19:39)
- это прям тост. категорически поддерживаю. Vit(396 знак., 23.06.2024 20:04)
- Возможно мне повезло, но моё мнение по выбору чипов всегда
учитывали. А я в свою очередь всегда учитывал наличие вменяемых
средств разработки. - VladislavS.(23.06.2024 19:39)
- За более чем тридцать лет в бизнесе, не припомню ни одного
договора, в котором бы оговаривался размер кода в байтах :) - Cкpипaч(23.06.2024 18:24)
- Зато я помню проекты, где сотни каналов АФАР нужно за микросекунды
перестроить. - VladislavS.(23.06.2024 18:37)
- такое делать без запаса по быстродействию с упором на одно
программирование не комильфо. полагаю, что выбор кремния был не
пальцем в небо. Vit(1032 знак., 23.06.2024 19:57)
- Естественно, программирование лишь часть проекта, без fpga такое не взлетает. А язык даёт выигрыш, опыт это подтверждает. Естественно, руками можно всё то же самое и на С написать. Но когда за тебя это делает компилятор работа быстрее идёт. - VladislavS.(23.06.2024 20:20)
- Ввиду полного отсутствия ограничений по ресурсам на стороне компилятора, какой-либо практической пользы в Си против Плюсов - не вижу.
Когда пишешь на Паскале, какой компилятор вообще похер.- Cкpипaч(23.06.2024 20:15)
- такое делать без запаса по быстродействию с упором на одно
программирование не комильфо. полагаю, что выбор кремния был не
пальцем в небо. Vit(1032 знак., 23.06.2024 19:57)
- Зато я помню проекты, где сотни каналов АФАР нужно за микросекунды
перестроить. - VladislavS.(23.06.2024 18:37)
- насчет "любой" и "должен" я бы не был столь категоричен. хотя да,
это теперь скорее норма. только не говорите это мелкочипам - они
даже GCC так кастрировали, что это обобщение не к ним:) ЗЫ я
уверен, что вам не досталось счастья использовать "компилятор"
MPLAB C16. оно могло один оператор в строке и никаких структур... - Vit(23.06.2024 19:21)
- Да не даже на С, а это любой компилятор должен константные данные
оптимизировать. Если ему руки всякими "отлаженными модулями" не
выкручивать. - VladislavS.(23.06.2024 18:21)
- Щщазз! Инверсия получается после чтения входа этого же gpio. В
качестве примера посмотрите strapping для любого ethernet phy как
там подключаются индикаторные светодиоды. - 3m(25.06.2024 17:49)
- Никаких ветвлений в рантайме нет. Инверсия - константный пареметр.
Он на этапе компиляции работает. - VladislavS.(23.06.2024 17:26)
- Не стесняюсь писать Up и Down, а в On и Off указывать вызовы,
соответствующие полярности. Бывало с рулением полярностью, но как
показала практика - скорее правится плата и появляется BSP для неё
в виде набора файлов, чем калечится предыдущий код путём вставок
ветвления. В приложении нужны On и Off, при миграции код приложения
остаётся. - Vit(23.06.2024 17:10)
- Даже одна возможность того что светодиод может включаться 1 или 0
уже отличает его от простой ноги. Вот захардкодите вы дёргание
ноги, а завтра схему поменяют... - VladislavS.(23.06.2024 13:17)
- насчет запрещает - не совсем так, но почти, потому как глобальные
разрешения (снятие лока GPIO) это вопрос не одного класса. а насчет
класса LED - он по сути алиас для части GPIO. такое при построении
сверху вниз чаще не нужно как класс, ибо лишний уровень абстракции.
но в отдельной программе-тесте приходится затягивать из кода
приложений, и по сути ручками делается тот же класс. это хоть и
ручками, но не дольше, чем наоборот. - Vit(23.06.2024 13:02)
- Кто-то запрещает прочитать состояние, если это надо для работы
модуля? Класс LED нужен, иначе вы описываете логику его работы в
классе GSM, тем самым усложняя его и делая менее переносимым. - VladislavS.(23.06.2024 11:54)
- toggle выполняет действие со скрытым от юзера предыдущим
состоянием. иногда не пофигу результат. ЗЫ. если у класса GSM и
ключ, и светодиод, то и ключу нужен класс GPIO, и классу LED.
вывод: класс LED сам по себе не нужен:) - Vit(23.06.2024 11:38)
- Всегда есть космический крейсер, кореллийские лучи смерти,
галактическая чума, угрожающая погубить всю планету... И чтобы
обыватели не сошли с ума, они ничего не должны об этом знать! (c)
MiB - VladislavS.(23.06.2024 11:05)
- у него вводные условия появляются - прежде чем собственно поднять
ногу нужно осмотреться, а доступна ли она, а не получится ли вдруг
вступить в кучу:) - Vit(23.06.2024 10:48)
- Ну если это выключатель GSM-модуля, то у него и логика будет не от
светодиода. А метод включения будет всё равно GSM::On(). И дёргать
ногой он будет точно так же через пин (gpio или расширителя -
пофиг) как и светодиод не думая об его портах и битах, ибо это не
его зона абстракции. - VladislavS.(23.06.2024 10:42)
- Если будете писать конструктор, то должны будете знать. Светодиод
это рафинированный пример обернутого битового обращения от вас же.
Представьте себе, что это выключатель питания GSM-модуля. Всё тот
же GPIO, но с полной, а не с ограниченной отвественностью:) - Vit(23.06.2024 10:21)
- Светодиод должен обо всём этом знать? - VladislavS.(23.06.2024 10:08)
- Так вы, коллега, "шататель основ"?! 8) Что-ж, не вы один такой,
вырывание из задачи кусков с последующим "к пуговицам претензии
есть?" - очень характерно для плюсовиков, видимо язык накладывает
отпечаток. - Cкpипaч(23.06.2024 09:52)
- Причём тут претензии? В области вашей работы всегда есть сущности,
которые вы используете из проекта в проект. Вполне логично написать
для них качественные классы, которые потом просто и быстро
использовать. В итоге вы просто занимаетесь прикладухой, а не
переписываете раз от раза метод включения светодиода. А ведь у него
ещё и метод выключения есть :) - VladislavS.(23.06.2024 10:15)
- Вообще-то, именно так. Переписываю. Порядка трети тикетов - перенос
уже отработанных прикладных алгоритмов на другой bsp (точнее,
укладка нескольких алгоритмов в один bsp). Он состоит в
переписывании двух десятков функций, большая часть из которых
состоит из одной строки - поднять или опустить где-то какой-то бит. - Cкpипaч(23.06.2024 10:23 - 10:40)
- Итить колотить! Вам больше заняться нечем, как сидеть и
переписывать функции? И эти люди запрещают мне ковырять в носу (с)
:) - VladislavS.(23.06.2024 10:40)
- Лол. Это приносит деньги фирме :) Причем в человеко-часах это
существенно эффективнее чем плодить классы, наследование и
вот-это-вот-всё. - Cкpипaч(23.06.2024 10:41 - 10:43)
- Могло бы приносить больше, если бы вы занимались делом, а не
переписыванием одного и того же. - VladislavS.(23.06.2024 10:43)
- Меньше. И не давите на меня, я - директор, я считал и сравнивал. - Cкpипaч(23.06.2024 10:45)
- та же фигня:) - Vit(23.06.2024 11:05)
- Меньше. И не давите на меня, я - директор, я считал и сравнивал. - Cкpипaч(23.06.2024 10:45)
- Могло бы приносить больше, если бы вы занимались делом, а не
переписыванием одного и того же. - VladislavS.(23.06.2024 10:43)
- Лол. Это приносит деньги фирме :) Причем в человеко-часах это
существенно эффективнее чем плодить классы, наследование и
вот-это-вот-всё. - Cкpипaч(23.06.2024 10:41 - 10:43)
- Итить колотить! Вам больше заняться нечем, как сидеть и
переписывать функции? И эти люди запрещают мне ковырять в носу (с)
:) - VladislavS.(23.06.2024 10:40)
- Вообще-то, именно так. Переписываю. Порядка трети тикетов - перенос
уже отработанных прикладных алгоритмов на другой bsp (точнее,
укладка нескольких алгоритмов в один bsp). Он состоит в
переписывании двух десятков функций, большая часть из которых
состоит из одной строки - поднять или опустить где-то какой-то бит. - Cкpипaч(23.06.2024 10:23 - 10:40)
- Причём тут претензии? В области вашей работы всегда есть сущности,
которые вы используете из проекта в проект. Вполне логично написать
для них качественные классы, которые потом просто и быстро
использовать. В итоге вы просто занимаетесь прикладухой, а не
переписываете раз от раза метод включения светодиода. А ведь у него
ещё и метод выключения есть :) - VladislavS.(23.06.2024 10:15)
- У Nuvoton есть процы с глубокой спячкой и локом GPIO при проходе
через ресет при выходе из спячки. Так что не всегда при переходе на
вектор ресет имеем дефолтное состояние периферии. Деинит играет
новыми красками. И даже сам вопрос необходимости (или нет)
запускать инициализацию может повергнуть в уныние кишки самого кода
инициализации. Особенно если ретеншн есть на совсем небольшую часть
ОЗУ, или нужен более мелкожручий режим без ретеншна, т.е. даже
сохранять стек нет смысла Vit(1 знак., 23.06.2024 09:59)