Перейти к содержанию
    

SChe

Новичок
  • Постов

    3
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. stm32 Keil

    На счет конструктора копирования все верно, его стоит объявить явно и копировать значения порта, а не конфигурацию объекта (как по умолчанию), просто руки еще не дошли. Если сделать private конструктор по данному примеру, то выполняются два разных static конструктора указанные явно, это никак не укажет компилятору куда записать класс. И данная запись имеет смысл, только если очень нужно получить одинаковые имена классов (перегрузка конструкторов с одинаковыми входными данными). На мой взгляд, намного лучше с данной задачей справилось бы наследование+полиморфизм, да хотя классы объявлять разные, кода также минимум и более привычная форма объявления.
  2. stm32 Keil

    Это вопрос мой, писал коллега на работе Вообщем идея такая: написать объект GPIO, структура инициализации и методы инициализации, передачи и возвращении состояния. Все реализованно, перегрузка операторов передачи и возвращения работают нормально, при инициализации как структуры в С (с помощью {}) структура пишется в flash (адрес 0x08......). Все методы объявлены как const что говорит, что они не могут изменять поля. Класс лежащий во флеше вполне реально (пример это t_data1). Через "#pragma arm section code="sect"" и "__attribute__((section ("sect")))" пробовал, компилятор выдовал ошибку, что не может записать в RO сектор. Пробовал через __attribute__((constructor)) все хорошо (поставить его для t_data::Init()), но он вызывается только 1 раз (хотя очень удобная вещь, буду использовать))). При добавлении конструктора и инициализации через него структура пишется в RAM. Видимо все из-за того что конструктор не объявляется как const, а __attribute__((const)) в данном случаи не работает. Конечно не так жалко 2 байта на 1 вывод GPIO, но всетаки когда пишешь библиотеки, хочется чтобы все было как можно более оптимизированно. вот собственно сам объект // объект портов ввода-вывода class t_gpio { private : // структура конфигурации t_gpio_config config; // инициализация void Init (void) const; public : // конструктор // полная запись t_gpio (const t_gpio_config config); // значения по умолчанию t_gpio (const t_gpio_port port, const uint8_t digit, const t_gpio_type type, const bool value); // значения по умолчанию t_gpio (const t_gpio_port port, const uint8_t digit, const t_gpio_type type); // установка значения порта inline void SetValue (const bool value) const; bool operator = (const bool value) const; // извлечение значения порта inline bool GetValue (void) const; operator bool (void) const; // инвертирование значения порта bool operator ++ (void) const; bool operator -- (void) const; bool operator ++ (const int) const; bool operator -- (const int) const; }; может тогда посоветуете как можно по другому что реализовать.
  3. Keil и C++

    extern "C" { void EXTI1_IRQHandler(void) { EXTI_Handler_1(); EXTI->PR |= EXTI_PR_PR1; } } код для STM32L1xx, для STM32F4 должно быть аналогично
×
×
  • Создать...