Заголовок сообщения: Re: Массив во флеш памяти, const, ф-ция hal
Добавлено: Вт мар 23, 2021 21:00:59
Открыл глаза
Зарегистрирован: Вс мар 21, 2021 11:06:04 Сообщений: 41
Рейтинг сообщения:0
Dimon456 писал(а):
вопрос возникает - можно ли еще уменьшить размер функции если использовать так
Вы тут кода написали - прямо сборник антипаттернов проектирования. Вредные советы, как не надо делать. Даже если какие-то трюки позволят вам сократить размер функции на несколько байт, вреда от такого подхода в долгосрочной перспективе будет больше. Функции, использующие глобальные переменные, совершенно не гибкие и имеют побочные эффекты, о которых ничего неизвестно из их объявления (прототипа). Никогда не используйте глобальных переменных в функциях. Если надо - передавайте их в функцию через параметры (как именно - по значению или по указателю/ссылке - это уже другой вопрос). А статические локальные переменные - они на то и локальные, что за пределами функции не видны. Вы сами специально делаете их локальными именно для этого. Так что не надо окольными путями пытаться получить доступ к ним извне функции, где они определены. Если они нужны вам ещё где-то (в других функциях) - делайте их глобальными и передавайте в функции через параметры.
Dimon456, уберите volatile тогда уж из 1го примера. И разницы не будет. Какая разница, какой "размер функции", когда общий размер когда не уменьшится?
Добавлено after 3 minutes 1 second:
Цитата:
Функции, использующие глобальные переменные, совершенно не гибкие и имеют побочные эффекты, о которых ничего неизвестно из их объявления (прототипа). Никогда не используйте глобальных переменных в функциях. Если надо - передавайте их в функцию через параметры (как именно - по значению или по указателю/ссылке - это уже другой вопрос).
Соглашусь, но в embedded иногда имеет место использование глобальных переменных из функций именно из-за экономии ресурсов. Тут иногда приходится жертвовать гибкостью и изящностью кода в угоду лишним байтам и тактам.
Заголовок сообщения: Re: Массив во флеш памяти, const, ф-ция hal
Добавлено: Ср мар 24, 2021 06:59:59
Открыл глаза
Зарегистрирован: Вс мар 21, 2021 11:06:04 Сообщений: 41
Рейтинг сообщения:1
NStorm писал(а):
в embedded иногда имеет место использование глобальных переменных из функций именно из-за экономии ресурсов. Тут иногда приходится жертвовать гибкостью и изящностью кода в угоду лишним байтам и тактам.
Пусть каждый для себя решает, в каждом конкретном случае. Замечу лишь, что ситуация, когда без глобальных переменных не обойтись никак - это обработчики прерываний. Чтобы изменить в функци-обработчике значение какой-либо переменной (флага события, например), а потом прочитать её в основном цикле, необходимо, чтобы переменная эта была глобальной. Передать её по указателю/ссылке в обработчик не получится, т.к. прототип любого обработчика - void Handler(void) - не имеет параметров.
Для меня сократить размер функции на несколько байт, пусть даже через костыли и не правильно, - это большой плюс. Если вкратце, вот те переменные и та функцияСпойлер
n = DDS_NDMA / 2; do { myBByte.byte += Omega; *dp = myBByte.bit.b15; dp += 1; } while (--n != 0); }
Это dds-синтез, просто эксперимент, не цепляйтесь. На выходе меандр. На myBByte.byte += Omega построен сумматор. Omega задается в не функции, в функции она не меняется. myBByte.bit.b15 - бит переполнения. Все что мне удалось выжить на stm32f030 72МГц это 3МГц, а надо больше. NCO модуль в PIC качается частотой 16МГц, хотя бы 8МГц вытянуть. Обидно что такой высокопроизводительный stm32, обвешанный с ног до головы таймерами и дма, не имеет в своем составе NCO модуля, или хотя бы что бы таймер работал в режиме сумматора, а не в режиме счетчика.
Какие будут предложения по уменьшению размера кода?
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Заголовок сообщения: Re: Массив во флеш памяти, const, ф-ция hal
Добавлено: Ср мар 24, 2021 22:36:26
Открыл глаза
Зарегистрирован: Вс мар 21, 2021 11:06:04 Сообщений: 41
Рейтинг сообщения:0
Dimon456 писал(а):
вот те переменные и та функция
В рамках этой темы обсуждать это бессмысленно. Доступ к любым статическим данным (адреса которых известны при сборке программы и неизменны все время её работы) осуществляется одинаково, по их адресу, независимо от их вида: глобальные, глобальные статические или локальные статические. Хотите попросить советов по оптимизации своего кода - лучше создать для этого отдельную тему. Искать надо где-то в других направлениях.
позвольте маленький вопрос (не по теме): еще не имел дело с бит.полями, в приведенном коде, здесь: *dp = myBByte.bit.b15; будет записываться 0х0000 либо 0х0001, так ? или что ...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 33
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения