Beschränken der Funktion der port vom Arduino
Bin ich jetzt die Portierung von arduino-code für stm32(c/c++). Bitte helfen Sie mir mit diese Funktion:
constrain(x, a, b)
Gibt
x: wenn x ist zwischen a und b
a: wenn x ist weniger als ein
b: wenn x ist größer als b
Beispiel
sensVal = constrain(sensVal, 10, 150);
//limits range of sensor values to between 10 and 150
Diese Funktion ist trivial - was haben Sie Probleme?
Ist das richtig? pastebin.com/trTi6x3G
Nein, das ist nicht richtig. In C++ müssen Sie einen Typ angeben, der für jede variable, sowie ein Rückgabe-Typ für jede Funktion. Ihre Parameter haben keine Typen und Ihre Funktion Rückgabe-Typ
C++17 eingeführt, eine ähnliche Funktion std::Klammer() - en.cppreference.com/w/cpp/algorithm/clamp Jeder compiler unterstützt C++17 soll es unterstützen
Ist das richtig? pastebin.com/trTi6x3G
Nein, das ist nicht richtig. In C++ müssen Sie einen Typ angeben, der für jede variable, sowie ein Rückgabe-Typ für jede Funktion. Ihre Parameter haben keine Typen und Ihre Funktion Rückgabe-Typ
void
, was bedeutet, dass es nicht einen Wert zurückgeben.C++17 eingeführt, eine ähnliche Funktion std::Klammer() - en.cppreference.com/w/cpp/algorithm/clamp Jeder compiler unterstützt C++17 soll es unterstützen
InformationsquelleAutor SevenDays | 2012-01-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier eine template-version, einschließlich ein komplettes Programm zu zeigen (Sie sollten in der Lage sein, kopieren und einfügen):
Diese können verwendet werden für jede Art, die eine
operator<
(dies umfasst alle integrierten numerischen Typen, wieint
undfloat
).InformationsquelleAutor Björn Pollex
Für Arduino,
constrain
ist keine Funktion, es ist eine #define-makro würde.Definiert Arduino.h innerhalb der Arduino-IDE.
Arduino source code ist veröffentlicht unter einer Open-Source Lizenz, so dass Sie es Lesen können 🙂
Es ' s definition ist:
Denen würde weiter arbeiten in Ihrem port auf stm32.
Natürlich, es ist ein makro, und so ist einfach nur eine Textersetzung. Damit die Parameter angezeigt werden, die in Ihrem Quellcode, so dass Ihr keine neuen Informationen.
Können Sie es vorziehen zu verwenden, Funktionen statt Makros, aber wie Ihr code ist eine Portierung von bestehendem code, kann es einfacher sein, um weiterhin um das makro zu verwenden. Dann, wenn der ursprüngliche code verbessert oder verändert werden, es sollte weniger Arbeit zu produzieren, einen neuen Anschluss.
Einem kleinen Problem, zu versuchen, zu verwenden typisierte Funktionen, oder ein template-Funktionen, anstatt ein makro, es kann zu Verwechslungen führen später. Verwendung von Funktionen, anstatt das makro erstellen können neue Warnungen, Fehler oder bugs eingeführt werden, wenn Sie versuchen, port Arduino-code. Insbesondere wenn der ursprüngliche code verwendet Typen oder Klassen zu
constrain
für die Sie keine passende Funktion gibt es einen Fehler, die eindeutig nicht vorhanden ist in der Arduino-Quelle. Oder noch schlimmer, eine typisierte oder eine Vorlagen-Funktion könnte trigger einige C++ - Typ-Konvertierungen, die nicht passieren in der makro-version. Sie verlassen könnte ein kleines 'Manko', für sich selbst, oder wer auch immer auf den code in der Zukunft.InformationsquelleAutor gbulmer
Suche bei Wikipedia unter Spannen (Grafik), es sieht aus wie Sie haben könnte eine Typ-unabhängige Vorlage?
InformationsquelleAutor Zurcher