Во встроенном c-проекте у меня есть несколько двигателей разного типа.
Реализация имеет статические и константные переменные и поддерживает подтипы.
Это выглядит примерно так (упрощенно):
// motor.h
// to be global/static
typedef struct
{
int distance;
} motor_instance;
// to be const
typedef const struct motor_hwToken_s
{
motor_instance *self;
void (*setSpeedFunction)(const struct motor_hwToken_s *token, int speed);
int hwPin;
} motor_hwToken_t;
extern motor_hwToken_t motor_A;
void setSpeed(const struct motor_hwToken_s *token, int speed);
// motor.c
void setSpeed(const struct motor_hwToken_s *token, int speed)
{
token -> setSpeedFunction(token, speed);
}
// specialization for DC-motors
void setSpeed_dcMotor(const struct motor_hwToken_s *token, int speed);
// global variable
motor_dc_instance motor_A_instance;
// const variable, known at compile time
motor_hwToken_t motor_A =
{
.self = &motor_A_instance,
.setSpeedFunction = setSpeed_dcMotor,
.hwPin = 0x04 // define an IO-Pin of some sort
};
// main.c
void main(void)
{
setSpeed(&motor_A, 20);
}
Пока код работает, его довольно сложно прочитать.
Я предполагаю, что объектно-ориентированный язык будет иметь больше смысла?
Итак, мой вопрос:
- Как я могу реализовать это в c ++?
- Сможет ли компилятор cpp оптимизировать константные переменные (например, поместить их во флэш-память)?