Заголовок сообщения: 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, так ? или что ...
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения