реклама на сайте
подробности

 
 
> Как проще/правильнее сделать смену режимов встроенных OP усилителей?, компактный код
Make_Pic
сообщение Jun 23 2018, 05:16
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Есть микроконтроллер - MSP430F2274, у него есть встроенные операционные усилители - Вопрос: Как компактнее и проще написать код на С для смены режимов работы этих OP, переключение входов и выходов, изменение включения внутренних резисторов?

Просится оформить в виде структур, но как лучше сделать переключение/программирование режимов OP в зависимости от состояний программы?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Forger
сообщение Jun 23 2018, 12:05
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(Make_Pic @ Jun 23 2018, 08:16) *
Просится оформить в виде структур

Поскольку в этой Вашей теме нет запрета на C++, то тут напрашивается использование не структур, а классов, наделенных соотв. функционалом.
Вот конкретный пример из моей библиотеки, в данном случае - аппаратных таймеров.
"Лишнее" вырезано с целью упрощения понимания.

Timer.hpp:
CODE


#pragma once

.....

#include "Include/stm32l1xx.h"
#include "Interrupt.hpp"

.....

namespace stm32l1
{
class TimerBase
{
public:
explicit TimerBase(TIM_TypeDef * registers, Interrupt::Index irqIndex);
virtual ~TimerBase();

void installVector(stm32l1::Interrupt::Vector& vector);

void run();
void stop();

void setPrescaler(uint16_t value);
void setBaseFrequencyHz(uint32_t frequencyHz);

.............

private:
volatile TIM_TypeDef * timer;
uint32_t baseFrequencyHz;
Interrupt interrupt;

.............


};


#ifdef TIM2
class TimerTIM2 : public TimerBase
{
public:
TimerTIM2() : TimerBase(TIM2, TIM2_IRQn) { }
Irq<TIM2_BASE, TIM_DIER_UIE, TIM_SR_UIF> irqUpdate;
...................
};
#endif


#ifdef TIM3
class TimerTIM3 : public TimerBase
{
public:
TimerTIM3() : TimerBase(TIM3, TIM3_IRQn) { }

...................

};
#endif

// и так далее



Если вырезать вообще все лишнее, то вот суть:

Код
class TimerBase
{
public:
    TimerBase(TIM_TypeDef * registers); // Вся реализация TimerBase в соотв. cpp файле
}

......

class TimerTIM2 : public TimerBase
{
public:
    TimerTIM2() : TimerBase(TIM2)  {}
}



На структурах в голом C это тоже возможно, но получится несколько колхозно что ли, но вполне реализуемо )))


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 09:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01357 секунд с 7
ELECTRONIX ©2004-2016