reg[0][0]=0xFF;// overwrite first byte in wr_bat_volt
14
reg[2][7]=0xAA;// overwrite last byte in wr_soc
15
}
Tipp: Benutze die Qt Creator IDE. Sie zeigt neben den fehlerhaften Zeilen nützliche Hilfestellungen an. Sie hilft auch, Fehler zu vermeiden, die der Compiler nicht melden würde.
Du solltest vielleicht wissen, dass die Namen der Arrays (hier: wr_bat_volt, wr_bat_pow, wr_soc) bereits Zeiger sind. Deswegen sind die beiden folgenden Funktionen praktisch identisch:
Das ist zwar hier O.T., aber bei Deinen Pointer-Kenntnissen solltest Du erwägen, sie gleich lang zu machen und am Ende "leer" zu lassen. Alternativ die einzelnen Arrays mit Endekennung oder Längeninfo versehen und nur sequentiell abarbeiten (nicht 2D-indiziert).
Wie Harald geschrieben hat. Du benötigst sehr wahrscheinlich die Länge der Befehlsfolge.
Also mach dir lieber für eine Befehlsfolge ein Struct mit einem sprechenden Namen z.B. "command" mit einer Variable für die Länge und einem Byte array für die eigentliche Folge.
Bzw. mach dir gleich ein typedef dafür.
Ja, ganz toll. Und woher weiß das, was auf "u8* reg[]" zugreift, nun,
wie lang eines der Elemente darin sind?
Bislang gibt es nur 8- und 11-Byte-Befehle. Alle Befehle zum Messen haben 8Byte, alle Befehle zum Regeln haben 11Byte. Ein Problem, die Länge zu unterscheiden, stellte sich bislang nicht. Falls es auftreten sollte müsste die Länge ergänzt werden.
Ja, ganz toll. Und woher weiß das, was auf "u8* reg[]" zugreift, nun,
wie lang eines der Elemente darin sind?
Bislang gibt es nur 8- und 11-Byte-Befehle. Alle Befehle zum Messen
haben 8Byte, alle Befehle zum Regeln haben 11Byte. Ein Problem, die
Länge zu unterscheiden, stellte sich bislang nicht. Falls es auftreten
sollte müsste die Länge ergänzt werden.
Warum dann indiziert? der naive Ansatz wäre:
bat_volt = sub_wr_tx_rx(wr_bat_volt, sizeof(wr_bat_volt));
bat_kw = sub_wr_tx_rx(wr_bat_pow , sizeof(wr_bat_pow ));
guter Vorschlag. Das Programm ist in der Entwicklung - werde ich vielleicht einbauen.
Frage:
Mein c#-programm ist ja nun in der Lage, gcc-code zu generieren. Wahrscheinlich kann man auch make über c# aufrufen. Dann hätte man irgendwo eine Datei main.hex in Maschinensprache für den avr. Es besteht eine serielle Verbindung zwischen avr und PC über RS485.
Kann man über diese Verbindung main.hex mittels Bootlader auf den avr schreiben?
GCC ist eine Sammlung von Compilern, inklusive einem C-Compiler, der ebenfalls "GCC" genannt wird
Der GCC C Compiler hat wie alle anderen Compiler auch diverse spezifische Erweiterungen, d.h. Code der diese nutzt ist GCC-spezifisch, aber es ist dennoch C-Code
Die GCC-Compiler können Code für viele verschiedene Plattformen generieren, insbesondere x86/amd64 (PC), ARM, und auch AVR. Die Variante der GCC-Compiler-Sammlung für AVR wird AVR-GCC genannt
Du generierst also C-Code. Den kannst du auch auf dem PC ausführen, solange du keine AVR-spezifischen Dinge nutzt. Dein Problem in diesem Thread ist ein gewöhnliches C-Problem, kein GCC-Problem, daher ist sogar der Threadtitel verkehrt.
Arrays beginnen in C mit dem Index 0 und nicht 1. Außerdem läuft bei Dir der Index i durch die Prüfung i<7 nur bis 6. Damit wird dann nicht nur das erste Element, sondern auch noch das letzte (achte Element) ignoriert.