Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: Массив во флеш памяти, const, ф-ция hal

Вт мар 23, 2021 21:00:59

Dimon456 писал(а):вопрос возникает - можно ли еще уменьшить размер функции если использовать так

Вы тут кода написали - прямо сборник антипаттернов проектирования. Вредные советы, как не надо делать.
Даже если какие-то трюки позволят вам сократить размер функции на несколько байт, вреда от такого подхода в долгосрочной перспективе будет больше.
Функции, использующие глобальные переменные, совершенно не гибкие и имеют побочные эффекты, о которых ничего неизвестно из их объявления (прототипа). Никогда не используйте глобальных переменных в функциях. Если надо - передавайте их в функцию через параметры (как именно - по значению или по указателю/ссылке - это уже другой вопрос).
А статические локальные переменные - они на то и локальные, что за пределами функции не видны. Вы сами специально делаете их локальными именно для этого. Так что не надо окольными путями пытаться получить доступ к ним извне функции, где они определены. Если они нужны вам ещё где-то (в других функциях) - делайте их глобальными и передавайте в функции через параметры.

Re: Массив во флеш памяти, const, ф-ция hal

Вт мар 23, 2021 21:33:56

Dimon456, уберите volatile тогда уж из 1го примера. И разницы не будет. Какая разница, какой "размер функции", когда общий размер когда не уменьшится?

Добавлено after 3 minutes 1 second:
Функции, использующие глобальные переменные, совершенно не гибкие и имеют побочные эффекты, о которых ничего неизвестно из их объявления (прототипа). Никогда не используйте глобальных переменных в функциях. Если надо - передавайте их в функцию через параметры (как именно - по значению или по указателю/ссылке - это уже другой вопрос).

Соглашусь, но в embedded иногда имеет место использование глобальных переменных из функций именно из-за экономии ресурсов. Тут иногда приходится жертвовать гибкостью и изящностью кода в угоду лишним байтам и тактам.

Re: Массив во флеш памяти, const, ф-ция hal

Ср мар 24, 2021 06:59:59

NStorm писал(а):в embedded иногда имеет место использование глобальных переменных из функций именно из-за экономии ресурсов. Тут иногда приходится жертвовать гибкостью и изящностью кода в угоду лишним байтам и тактам.

Пусть каждый для себя решает, в каждом конкретном случае.
Замечу лишь, что ситуация, когда без глобальных переменных не обойтись никак - это обработчики прерываний. Чтобы изменить в функци-обработчике значение какой-либо переменной (флага события, например), а потом прочитать её в основном цикле, необходимо, чтобы переменная эта была глобальной. Передать её по указателю/ссылке в обработчик не получится, т.к. прототип любого обработчика - void Handler(void) - не имеет параметров.

Re: Массив во флеш памяти, const, ф-ция hal

Ср мар 24, 2021 16:12:39

Для меня сократить размер функции на несколько байт, пусть даже через костыли и не правильно, - это большой плюс.
Если вкратце, вот те переменные и та функция

Re: Массив во флеш памяти, const, ф-ция hal

Ср мар 24, 2021 17:38:36

Dimon456, каким образом по вашему перемещение переменной в локальную сократит объем кода?

Re: Массив во флеш памяти, const, ф-ция hal

Ср мар 24, 2021 22:36:26

Dimon456 писал(а):вот те переменные и та функция

В рамках этой темы обсуждать это бессмысленно. Доступ к любым статическим данным (адреса которых известны при сборке программы и неизменны все время её работы) осуществляется одинаково, по их адресу, независимо от их вида: глобальные, глобальные статические или локальные статические.
Хотите попросить советов по оптимизации своего кода - лучше создать для этого отдельную тему. Искать надо где-то в других направлениях.

Re: Массив во флеш памяти, const, ф-ция hal

Ср мар 24, 2021 22:53:07

позвольте маленький вопрос (не по теме):
еще не имел дело с бит.полями, в приведенном коде, здесь:
*dp = myBByte.bit.b15;
будет записываться 0х0000 либо 0х0001, так ?
или что ...

Re: Массив во флеш памяти, const, ф-ция hal

Ср мар 24, 2021 23:24:28

будет записываться 0х0000 либо 0х0001, так ?

Так. 3го не дано, т.к. 1 бит отведен.
Ответить