henni schrieb:
> Wann wird nun was ausgeführt?
Wenn config.ctrl_type eines der folgenden ist: case
PPM_CTRL_TYPE_CURRENT_NOREV oder PPM_CTRL_TYPE_DUTY_NOREV oder
PPM_CTRL_TYPE_PID_NOREV, dann wird das hier ausgeführt:
servo_val += 1.0;
servo_val /= 2.0;
das ist äquivalent zu folgendem Code:
1 | if ((config.ctrl_type == PPM_CTRL_TYPE_CURRENT_NOREV) ||
|
2 | (config.ctrl_type == PPM_CTRL_TYPE_DUTY_NOREV) ||
|
3 | (config.ctrl_type == PPM_CTRL_TYPE_PID_NOREV))
|
4 | {
|
5 | servo_val += 1.0;
|
6 | servo_val /= 2.0;
|
7 | }
|
Ist config.ctrl_type keines der drei oben genannten, wird nichts
gemacht.
> Und warum fehlt "break" zwischen den einzelnen case-Anweisungen? Welchen
> Sinn soll das haben?
Eben daß der Programmablauf hindurchfallen kann. Das macht man bei
Statemachines ganz gerne, wenn mehrere Zustände dieselben Befehle
teilen. Typischerweise hätte man dann z.B. nach case
PPM_CTRL_TYPE_CURRENT_NOREV noch ein paar Befehle, dann kein break, und
dann fällt man auf die gemeinsamen weiteren Befehle der Zustände.
Etwa sowas hier:
1 | switch (config.ctrl_type) {
|
2 | case PPM_CTRL_TYPE_CURRENT_NOREV:
|
3 | something_special_current();
|
4 | case PPM_CTRL_TYPE_DUTY_NOREV:
|
5 | something_special_current_and_duty();
|
6 | case PPM_CTRL_TYPE_PID_NOREV:
|
7 | something_for_current_and_duty_and_pid();
|
8 | break;
|
9 |
|
10 | default:
|
11 | break;
|
12 | }
|