uff erst mal danke an alle die geantwortet haben!
Wie bekommst Du das TAP kompiliert? urchecks ist nicht deklariert (und übrigens uninitialisiert).
ich hatte bevor ich es hier rein gestellt habe noch eine kleine Änderung gemacht und anscheind ist mir urchecks durch die lappen gegangen ...
statt ursender muss es urchecks heißen ...
hmmm wie kann man sein tap Trogramm denn so abändern das es nicht mehr abstürtzt bzw. sein Programm durch 512 teilbar ist ... das aktuelle Programm ist 10704 byte groß.
Wenn man es durch 512 teil kommt 20,9 raus ...
Ich hab heute schon mal ein wenig im forum gewühlt und da habe ich den Beitrag von Happy gefunden
Klick
Ich habe mir das Programm runtergeladen und habe es nach den Kompilieren aufgerufen.
Aber die TAP Datei ist immer noch 10704 byte groß
Ich ruf das Programm mit dem Befehl "Tapcheck.exe /f" im gleichen Verzeichniss wie die Tap Datei liegt auf.
Code: Alles auswählen
TAPCHECK Version 1.2 by Till Hepke
Projekt.tap 04.12.2007 14:43:34 10.704 bytes OK
Das ist die Ausgabe die ich bekomme wenn ich das Tool wie oben beschrieben ausführe ...
Wofür die Checksummen-Berechnung ist ist mir nicht klar, aber Du könntest ja auch einfach den aktuellen Typ + Number zwischenspeichern und immer mit dem Neuen vergleichen...
Ist schwer zu erklären ... das hat mit dem String zu tun den ich ausgeben will bzw. mit dem Geräte was den String enpfangen soll ... Ich poste einfach mal was in der Anleitung steht
Code: Alles auswählen
Step #1 - Add the HEX value of every byte in the message that precedes the Checksum:
Example - 0xF0 + 0x00 + 0x67 + 0x7C + 0xF1 + 0x0F = 0x02D3
Step #2 - Count the number of bytes which precede the Checksum and convert that value from
DEC to HEX (byte count). Add the byte count in HEX to the previously calculated sum of
bytes:
Example - 0x02D3 + 6 (6 = Decimal value byte count) = 0x02D9
Step #3 - This value is then AND-ed with the HEX value 0x007F (7F is the highest BIN value
for 7 bits = 1111111). The Checksum itself and the End of Message Character are not
included in the calculation. Only the low 7 bits are used so overflow is discarded:
Example - 0x02D9 AND 0x007F = 0x59 = Checksum
Aber den code habe ich im C Builder von Borland vorgeschrieben der sollte Funktionieren
aber hier ist er für intersierte
Code: Alles auswählen
int checksberechnen(char * Sendername)
{
int x , y , Temp ,z;
int bin[13];
//------------------------------------------------------------------
//Umrechnung des Sendernamens in eine Dezimale Zahl
//------------------------------------------------------------------
Temp = 0;
y = 0;
for (x = 0; ( Sendername[x] != 0 ) && ( x < 14 ) ; x=x+1) {};
for(y=0; y-x ; y=y+1)
{
Temp=Temp+(int)Sendername[y];
}
Temp = Temp + x;
//------------------------------------------------------------------
//Umrechnung der Dezimalen Zahl in eine binäre Zahl
//------------------------------------------------------------------
x = 0;
y = 4096;
z = 0;
while ( y > 1 )
{
y = y / 2;
if (Temp >= y)
{
Temp = Temp - y;
bin[z] = 1;
z=z+1;
}
else
{
bin[z] = 0;
z=z+1;
}
}
//------------------------------------------------------------------
//Umrechnung der ersten (von rechts) 7 Stellen der Binären Zahl
//------------------------------------------------------------------
z = 5;
Temp = 0;
y = 128;
while ( z < 12 )
{
y = y/2;
if (bin[z] == 1)
{
Temp = Temp + y;
}
z=z+1;
}
//------------------------------------------------------------------
//Übergabe des errechneten Wertes an die übergeordnete Funktion
//------------------------------------------------------------------
return Temp;
}
Wahrscheinlich schlagen jetzt wieder mehere Leute die Hände über dem Kopf zusammen aber hier ist die Ausgabe des Strings
void SendeHex (int anzahl, char * Sendername, int cheks)
{
int x = 0;
//------------------------------------------------------------
//Ausgabe verschiedener Hex Zahlen. Die Beschreibung der jew. Hex Zahl steht als komentar hinter dem Sendebefehl.
//------------------------------------------------------------
TAP_Print( "%c" , 0xF0 );//Start of Message
TAP_Print( "%c" , 0x23 );//Target Controller Id
TAP_Print( "%c" , 0x23 );//Target Zone Id
TAP_Print( "%c" , 0x23 );//Target keypad Id
TAP_Print( "%c" , 0x23 );//Source Controller Id
TAP_Print( "%c" , 0x23 );//Source Zone Id
TAP_Print( "%c" , 0x23 );//Source Keypad Id
TAP_Print( "%c" , 0x23 );//Message Type
TAP_Print( "%c" , 0x23 );//Target Path, Num Levels
TAP_Print( "%c" , 0x23 );//Target Path, Level 1
TAP_Print( "%c" , 0x23 );//Target Path, Level 2
TAP_Print( "%c" , 0x23 );//Source Path, Num Levels
TAP_Print( "%c" , 0x23 );//Packet Num Lo Byte
TAP_Print( "%c" , 0x23 );//Packet Num Hi Byte
TAP_Print( "%c" , 0x23 );//Num Packets Lo Byte
TAP_Print( "%c" , 0x23 );//Num Packets Hi Byte
TAP_Print( "%c" , 0x23 );//Num Data Bytes Lo Byte
TAP_Print( "%c" , 0x23 );//Num Data Bytes Hi Byte
TAP_Print( "%c" , 0x23 );//Data Byte 1 - alignment
TAP_Print( "%c" , 0x23 );//Data Byte 2 - Flash Time
//The alignment field defines how the message appears on the display. The following values are
//currently supported:
//00 Centered
//01 Left justified
//Flash Time
//Messages can be displayed perminantly or they can be flashed on the display for a brief time. The
//Flash Time field defines how long the string is displayed. The time is measured in 10ms increments
//with a value of 0 being constant display (will be overwritten by normal system activity).
//Low byte of "Flash" time in 10ms
//increments. 0 = constant (3 secs)
//------------------------------------------------------------
//Ausgabe des Sendernamens
//------------------------------------------------------------
TAP_Print( "%s" , Sendername);
//------------------------------------------------------------
//Ausgabe der Checksumme
//------------------------------------------------------------
// TAP_Print( "%i" , checks );
//------------------------------------------------------------
//Ausgabe des Stringendes
//------------------------------------------------------------
TAP_Print( "%c" , 0xF7 );
}
so jetzt habt ihr das ganze Programm
Seid nicht zu hard mit mir ... so lange programier ich auch noch nicht aber ich bin für jeden verbesserungsvorschlag dankbar.
ich hatte erste alle hex Zahlen in einer TAP_Print Funktion ausgeben aber durch die Abstürze hab ich das dann ein wenig auseinander gefriemelt ...
bis dann gruß Thomas