Gast
#342705
Es müssen 2 CAN-Geräte gekoppelt werden, die sich erstmal nicht verstehen. AT90CAN128/16MHz + MCP2515, also 2 getrennte Bussysteme. Compiler CodeVision. Läuft auf beiden Seiten mit 500kbit und die Daten und IDs müssen hübsch durcheinandergewürfelt werden. Im Prinzip funktionierts, allerdings bekomme ich bei hoher Buslast Zeitprobleme. Hauptverursacher ist folgende Routine: void copy_bit_up (uchar s_botschaft, uchar s_byte, uchar s_bit, uchar d_botschaft, uchar d_byte, uchar d_bit) {if (CAN_Matrix1[s_botschaft].data[s_byte] & (1<<s_bit)) CAN_Matrix2[d_botschaft].data[d_byte]|= (1<<d_bit); //Bit setzen else CAN_Matrix2[d_botschaft].data[d_byte]&= ~(1<<d_bit); //Bit löschen } copy_bit_up (6,1,4,4,1,7); //source Botschaft, source byte_nr, source bit_nr, dest_Botschaft, dest_byte_nr, dest_bit_nr Generatorleuchte Das dauert über 200 Takte... Lösung2: if (CAN_Matrix1[Botschaft6].data[byte1] & (0x10)) CAN_Matrix2[Botschaft4].data[byte1]|= (0x80); //Bit setzen else CAN_Matrix2[Botschaft4].data[byte1]&= ~0x80; Im Gegenzug mit absoluten Werten nur ca. 20 Takte Und da ich ca. 150 Bits je Richtung umsortieren muss, gerät das ganze schnell an Grenzen. Codespeicher hätte ich genug, allerdings möchte ich mir es nicht antun, Lösung2 300 mal zu schreiben, das ist zu fehlerträchtig. Und nun die eigentliche Frage: Gibt es eine Möglichkeit, dieses ähnlich guter alter Assembler-Macro-Programmierung zu lösen?