Hallo Freunde,
bei meiner Anwendung wird irgendwie der Speicher überschrieben...
1 | // Variablen ---------------------------------------------------------------------------------------
|
2 | static int sbufferpos = 0;
|
3 | byte buffer[33];
|
4 |
|
5 | // Prototypen --------------------------------------------------------------------------------------
|
6 | void BefehlsbufferErstellen(int takt);
|
7 | void SendeBuffer(byte b[]);
|
8 |
|
9 | // Main --------------------------------------------------------------------------------------------
|
10 | void main(void) {
|
11 |
|
12 | spi_init();
|
13 | spi_setMode(Master, FallingEdge, LeadingEdge, MSBfirst);
|
14 | spi_selectChip(true);
|
15 | BefehlsbufferErstellen(27);
|
16 | spi_enableInterrupt(true);
|
17 |
|
18 | for(;;)
|
19 | {
|
20 | __RESET_WATCHDOG();
|
21 | }
|
22 | }
|
23 |
|
24 |
|
25 | // Interruptroutinen ---------------------------------------------------------------------------------
|
26 | __interrupt VectorNumber_Vspi1 void ISR_SPI() {
|
27 |
|
28 | if((SPI1S&(SPI1S_SPRF_MASK)) == 0) {
|
29 | }
|
30 | else{
|
31 | SPI1S;
|
32 | SPI1D;
|
33 | }
|
34 | if((SPI1S&(SPI1S_SPTEF_MASK)) == 0){
|
35 | }
|
36 | else{
|
37 |
|
38 | if(sbufferpos>33) {
|
39 | sbufferpos = 0;
|
40 | spi_enableInterrupt(false);
|
41 | } else{
|
42 | spi_enableInterrupt(false);
|
43 | SendeBuffer(buffer);
|
44 | sbufferpos = sbufferpos + 1;
|
45 | spi_enableInterrupt(true);
|
46 | }
|
47 | }
|
48 | }
|
49 | // Funktionen -------------------------------------------------------------------------------------
|
50 | void SendeBuffer(byte b[]) {
|
51 |
|
52 | __RESET_WATCHDOG();
|
53 | spi_sendData(b[sbufferpos]);
|
54 | }
|
Nach dem sbufferpos auf 20 ist, wird er in der Funktion SendeBuffer()
überschrieben und erhält dann den Wert 537.
Diese beiden Fehlermeldungen erhalte ich dazu:
Error: At location 031B -
Error: Attempt to use invalid or uninitialized memory
Jemand eine Idee, wie man das beheben kann?