Например TDA7294

Форум РадиоКот • Просмотр темы - Константные экземпляры классов в STM32
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 23, 2024 12:58:05

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


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



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Константные экземпляры классов в STM32
СообщениеДобавлено: Вс авг 05, 2018 21:18:08 
Первый раз сказал Мяу!

Зарегистрирован: Вт июн 04, 2013 20:25:13
Сообщений: 27
Рейтинг сообщения: 0
Описываем гипотетическую структуру:
Код:
struct TestStruct
{
    GPIO_TypeDef *_gpio [7];
    uint32_t     _pinMask [7];
};
Создаём экземпляр этой структуры:
Код:
TestStruct A = {{GPIOC, GPIOC, GPIOC, GPIOA, GPIOA, GPIOA, GPIOC},
                {1<<7,  1<<6,  1<<9,  1<<8,  1<<12, 1<<11, 1<<8 }};
Компилируем, получаем Program Size: Code=4192 RO-data=432 RW-data=124 ZI-data=8444
Добавляем экземпляру структуры атрибут const:
Код:
const TestStruct A = {{GPIOC, GPIOC, GPIOC, GPIOA, GPIOA, GPIOA, GPIOC},
                      {1<<7,  1<<6,  1<<9,  1<<8,  1<<12, 1<<11, 1<<8 }};
Копмилируем, получаем Program Size: Code=4192 RO-data=488 RW-data=68 ZI-data=8444
Очевидно, структура успешно переместилась из RAM в ROM.

Теперь проведём аналогичный эксперимент с классом, описываем гипотетический класс:
Код:
class TestClass
{
public:
    TestClass (GPIO_TypeDef *gpio, uint32_t pinMask, uint8_t pinMode) {_gpio=gpio; _pinMask=pinMask; _pinMode=pinMode;};
private:
    GPIO_TypeDef *_gpio;
    uint32_t     _pinMask;
    uint8_t      _pinMode;
};
Создаём экземпляр этого класса:
Код:
TestClass B (GPIOC, 1<<7, Pull_Up_Inp); // PS: Pull_Up_Inp это дефайн
Копмилируем, получаем Program Size: Code=4176 RO-data=432 RW-data=68 ZI-data=8420
Добавляем экземпляру класса атрибут const:
Код:
const TestClass B (GPIOC, 1<<7, Pull_Up_Inp);
Копмилируем, получаем Program Size: Code=4176 RO-data=432 RW-data=68 ZI-data=8420
Ничего не изменилось, очевидно экземпляр класса как был в RAM памяти, так там и остался.

Вопрос: как заставить компилятор располагать константные экземпляры классов в ROM?

Гуглом смог найти только это:
https://toster.ru/q/377806
Примерно понял что делает атрибут constexpr, однако не понял как его использовать, к тому же моя IDE'ха на него ругается "unknown type name 'constexpr'" (пишу в uVision Keil 5.21a)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Константные экземпляры классов в STM32
СообщениеДобавлено: Вс авг 05, 2018 22:10:20 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 253
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2090
Рейтинг сообщения: 4
Почитай про POD, твой класс не может находится во флеше, т.к. имеет конструктор и приватные поля. А вообще это все должно делаться через шаблоны, тогда полей не будет вообще, одни статические методы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Константные экземпляры классов в STM32
СообщениеДобавлено: Пн авг 06, 2018 05:32:51 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 4
А судя по RW-data=68 как без класса, так и с классом, то оптимизатор его чики-чики.


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

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

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Константные экземпляры классов в STM32
СообщениеДобавлено: Пн авг 06, 2018 10:56:08 
Первый раз сказал Мяу!

Зарегистрирован: Вт июн 04, 2013 20:25:13
Сообщений: 27
Рейтинг сообщения: 0
А судя по RW-data=68 как без класса, так и с классом, то оптимизатор его чики-чики.
Оптимизация выставлена на 0.
+ для однозначности я добавил классу ещё 2 функции и мигал светодиодом.
Код:
class TestClass
{
public:
    TestClass (GPIO_TypeDef *gpio, uint32_t pinMask, uint8_t pinMode) {_gpio=gpio; _pinMask=pinMask; _pinMode=pinMode;};
    void set () const {_gpio->BSRR = _pinMask;};
    void clr () const {_gpio->BRR = _pinMask;};
private:
    GPIO_TypeDef *_gpio;
    uint32_t     _pinMask;
    uint8_t      _pinMode;
};
Оба эксперимента проводились в разных условиях и сравнивать размеры программ не имеет смысла.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Константные экземпляры классов в STM32
СообщениеДобавлено: Сб ноя 03, 2018 18:09:48 
Открыл глаза

Карма: 1
Рейтинг сообщений: 19
Зарегистрирован: Чт сен 27, 2018 23:50:01
Сообщений: 52
Рейтинг сообщения: 0
Конструктор не пустой, следовательно его нужно вызвать, следовательно экземпляр нельзя разместить в rom, он размещается в ram и генерируется вызов конструктора на этапе инициализации. Замените присвоение в конструкторе на список инициализации.


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

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

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

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


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

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


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

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


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