Ich habe ein kleines Problem, nur weiß ich nicht wie man das nennt.(?)
Bei Kommunikation zweier ATmegas über SPI möchte ich direkt in der ISR
auf die Variablen(8,16,32Bit) direkt zugreifen. Kurz gesagt, ich möchte
gerne die globalen Variablen, die an irgend einer anderen Stelle im
Programm verwendet werden, nur in der ISR verändern, so dass die anderen
Programmteile nichts davon "mitbekommen".
Ideal wäre natürlich wenn man die Variablen als ein mehrdemensionales
Array organisieren könnte.
etwa so:
1 | #define varAdr 5 //Speicherstellen für max 5 Variablen, 8-,16- oder 32-Bit
|
2 |
|
3 | unsigned char varArray[varAdr][4];
|
4 |
|
5 | ISR(SPI_STC_vect){
|
6 |
|
7 | if(!isr_count){
|
8 | isr_count++;
|
9 | cmdByte= SPDR;
|
10 | varAdr= cmdByte & 0x0F;
|
11 | }
|
12 |
|
13 | if(cmdByte & 0x80){//Schreiben
|
14 | varArray[varAdr][i++]= SPDR;
|
15 | }
|
16 | else{//sonst lesen
|
17 | SPDR= varArray[varAdr][i++];
|
18 | }
|
19 | }
|
somit wären dann alle 5 Variablen linksbündig im Array angeordnet, also
in etwa so:
var0: Byte3,Byte2,Byte1,Byte0 //32Bit Variable
var1: Byte1,Byte0 //16Bit Variable
var2: Byte0 //8Bit Variable
var3: ...
Wie kann man auf diese Daten als "richtige" Variablen zugreifen, ohne
dass man diese erst "zusammen bauen" muss?
wie unsigned int myVar= (varArray[1][0]<<8)|(varArray[1][1]);
Oder gibt es bessere (elegantere) möglichkeiten?