Hallo, es geht um eine Kommunikation zwischen zwei STM32 über SPI. Es sollen verschiedene Systemparameter ausgelesen und geupdated werden können und es muss nicht superschnell sein. Programmiert wird die Kiste in C++. Ich will eine 'system'-Klasse machen, die Funktionen zur verfügung stellt, von der aus der µController auf diese Variablen von seiner Seite aus zugreifen kann. In der Klasse sitzt dann auch der Code zur SPI abarbeitung, wo von extern aus zugegriffen werden kann. Ein Standardproblem? So in etwa stelle ich mir das vor: system = new c_system() pid_parameter_x = system.get_value(SYS_VAL_PID_PARAMETER_X) regulation_value_x = pid.update() system.set_value(SYS_VAL_REGULATION_VALUE, regulation_value) Die Frage ist, wie programmiert man sowas am besten? Die system-Klasse reserviert ein Array und der entsprechende Wert wird als Pointeroffset definiert? Als #define? Oder sollte man mit Structs oder Enums arbeiten?
Anonymous U. schrieb: > Ich will eine 'system'-Klasse machen, die Funktionen zur > verfügung stellt,... Das ist nebensächlich. Siehe zu allererst mal zu, daß du dir ein Protokoll ausdenkst, also ein festgelegtes procedere, wie die beiden Controller sich miteinander ins Benehmen setzen. Dabei ist eigentlich auch die Art der Übertragungsstrecke egal, ob das nun SPI oder UART oder PS2 oder sonstwas ist. Das sind nur Lowlevel-Dinge, das Protokoll kommt da drauf und ob und warum du da eine C++ Klasse obendrauf setzen willst, kommt später oder gar nicht. Wahrscheinlich gar nicht, denn wenn der eine dem anderen etwas sagen will, ergibt das schlußendlich beim anderen ein irgendo hereinrauschendes Ereignis (event) mit einem Kommando-Inhalt. Und das kann man nicht planen, weil man ja gar nicht weiß, wann der andere µC zu einem spricht. Selbst wenn so ein Event angefordert wird, weiß man nicht, wann der andere tatsächlich dazu kommt, die Antwort zu geben. Aso plane erstmal ein Kommunikations-Protokoll für deine beiden µC zur gegenseitigen Verständigung. W.S.
Guck dir mal das SPI bootloader Protokoll von den STM32 an, dann haste schonmal einen Hinweis wie mans machen kann. Ansonsten hat SPI ziemlich enge Timinganforderungen was die Antworten angeht. Also wie bei einem ADC 3 Byte Befehle reinschieben und dann kommt direkt eine Antwort ist eher schwer möglich. Selbst die Bytes per IRQ abrufen kann zu langsam sein -> DMA ist dein Freund. Daher empfielt sich noch eine Rückleitung "ich habe verdaut". Sowas habe ich vor kurzem auf Arbeit gebaut, ein kleiner Slave STM32 mit 4,1MHz (MSI RC) wird mit 2MHz SPI vom Master getriezt. Anonymous U. schrieb: > Oder sollte man mit Structs oder Enums arbeiten? Also ich mag ja "enum class". Ein enum alleine ist nur eine Aufzählung und das gilt Systemweit und ist nicht typsicher. enum class erzwingt das, ist aber etwas mehr Tipparbeit dann.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.