ISR and Function, using problem

Hello! I have same code

#define N_command 10
void Shift_query(struct query *spi_command_query);
struct query{unsigned char cmd;
                         unsigned char word;
                         unsigned char rw;
                        }query;
/************************/
struct query spi_command_query[N_command];
void SPI_ISR(void) interrupt 6 using 1
{
//same operation.....
Shift_query(spi_command_query);
}

void Shift_query(struct query *spi_command_query)
{
data unsigned char i = 0;
for(i = 1; i <N_command - 1; i++)
        {
         spi_command_query[i-1] = spi_command_query[i];
         if (!spi_command_query[i-1].cmd){break;}
        }
}
<!pre>
performs an array of structures shift to the left by one position, or rather should perform, but after performing the function of an array of structures remains unchanged, but the other functions produced by the interruption performed correctly.
where I'm wrong??
I suspect that the fault lies in the use of the interruption of another set of registers.
Thanks for the help.


Parents
  • Did the preview look good - didn't you notice that your code section did continue?

    Next thing. You have an array of 10 elements.

    Your look iterates from 1 to < 9.
    1,2,3,4,5,6,7,8 is only 8 elements.
    But when removing the first element, you have up to 9 elements to move.

    Another thing - your interrupt specifies the "using" clause. Why call a function that isn't specifying the same register bank?

Reply
  • Did the preview look good - didn't you notice that your code section did continue?

    Next thing. You have an array of 10 elements.

    Your look iterates from 1 to < 9.
    1,2,3,4,5,6,7,8 is only 8 elements.
    But when removing the first element, you have up to 9 elements to move.

    Another thing - your interrupt specifies the "using" clause. Why call a function that isn't specifying the same register bank?

Children
More questions in this forum