Например TDA7294

Форум РадиоКот • Просмотр темы - Массив во флеш памяти, const, ф-ция hal
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 08:11:20

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 28 ]    , 2
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Массив во флеш памяти, const, ф-ция hal
СообщениеДобавлено: Вт мар 23, 2021 21:00:59 
Открыл глаза

Зарегистрирован: Вс мар 21, 2021 11:06:04
Сообщений: 41
Рейтинг сообщения: 0
Dimon456 писал(а):
вопрос возникает - можно ли еще уменьшить размер функции если использовать так

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Массив во флеш памяти, const, ф-ция hal
СообщениеДобавлено: Вт мар 23, 2021 21:33:56 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
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) - не имеет параметров.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Массив во флеш памяти, const, ф-ция hal
СообщениеДобавлено: Ср мар 24, 2021 16:12:39 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Для меня сократить размер функции на несколько байт, пусть даже через костыли и не правильно, - это большой плюс.
Если вкратце, вот те переменные и та функция
Спойлер
Код:
#define DDS_NDMA   512
static uint16_t DmaBuff[DDS_NDMA] __attribute__ ((aligned(4)));
static uint32_t Omega __attribute__ ((aligned(4)));

union BytByte {
struct {
uint16_t h;
unsigned char b0: 1;
unsigned char b1: 1;
unsigned char b2: 1;
unsigned char b3: 1;
unsigned char b4: 1;
unsigned char b5: 1;
unsigned char b6: 1;
unsigned char b7: 1;
unsigned char b8: 1;
unsigned char b9: 1;
unsigned char b10: 1;
unsigned char b11: 1;
unsigned char b12: 1;
unsigned char b13: 1;
unsigned char b14: 1;
unsigned char b15: 1;
} bit;
volatile uint32_t byte;
}__attribute__ ((aligned(4)));

#define   IRQ_MASK   0x0000F000   //DMA_ISR_TCIF4

void DMA1_Channel4_5_IRQHandler(void)
{
   uint16_t *dp;
   uint32_t irq; uint16_t n;

   static union BytByte myBByte;

   DMA1->IFCR = irq = DMA1->ISR & IRQ_MASK;   
   dp = &DmaBuff[(irq & DMA_ISR_TCIF4) ? DDS_NDMA / 2 : 0];   

   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 модуля, или хотя бы что бы таймер работал в режиме сумматора, а не в режиме счетчика.

Какие будут предложения по уменьшению размера кода?


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Массив во флеш памяти, const, ф-ция hal
СообщениеДобавлено: Ср мар 24, 2021 17:38:36 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
Dimon456, каким образом по вашему перемещение переменной в локальную сократит объем кода?


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Массив во флеш памяти, const, ф-ция hal
СообщениеДобавлено: Ср мар 24, 2021 22:36:26 
Открыл глаза

Зарегистрирован: Вс мар 21, 2021 11:06:04
Сообщений: 41
Рейтинг сообщения: 0
Dimon456 писал(а):
вот те переменные и та функция

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Массив во флеш памяти, const, ф-ция hal
СообщениеДобавлено: Ср мар 24, 2021 22:53:07 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 80
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Сообщений: 445
Откуда: 69.Ржев
Рейтинг сообщения: 0
позвольте маленький вопрос (не по теме):
еще не имел дело с бит.полями, в приведенном коде, здесь:
*dp = myBByte.bit.b15;
будет записываться 0х0000 либо 0х0001, так ?
или что ...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Массив во флеш памяти, const, ф-ция hal
СообщениеДобавлено: Ср мар 24, 2021 23:24:28 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 1
будет записываться 0х0000 либо 0х0001, так ?

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


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 28 ]    , 2

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y