This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Will it erroneous ??

Hi,
I want to know whether below code will perform expected task or not ?

void test(unsigned char const xdata* buffer);

unsigned char magicString[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

void main(void) { unsigned char i;

while(1) { for(i=0; i<8; i++) { magicString[i] += 1; } test(magicString); }
}

void test(unsigned char const xdata* buffer) { unsigned char j;

for (j=8; j>0; j++) { send(*buffer++); // another function }
}

Will test() and send() function works ok ? Will send() will send all 8 byte of data of magicString or not ? is there any logic mistake ?

Thanks in advance ?

Parents
  • Well, my processor if basically a dual core consist of C51 MPU code and DSP Compute Engine core. But i think the problem is independent of processor, and somehow related to the code generated by Keil. There are 2 WD Timers. One is hardware and one is 8051 s/w. I disabled both, so no issue with rebooting by WD timer reset.

    The strange behavior i observed in above code snippet is, when i call the test() function as below, system is misbehaving:

    void main(void) { unsigned char i;
    
       while(1) {
          for(i=0; i<8; i++) {
             magicString[i] += 1;
          }
          test(&magicString);   // Passing address
       }
    }
    
    void test(unsigned char const xdata* buffer) {...}
    


    But if i called the test() as below in above code, the system works fine:

    test((unsigned char xdata *)&magicString); //Casting
    test(magicString); // W/o casting
    


    Its hard time for me to understand whats wrong with passing address of magicString i.e. test(&magicString) ?

    Can anybody explain me why the last 2 test() work fine and not the first.

Reply
  • Well, my processor if basically a dual core consist of C51 MPU code and DSP Compute Engine core. But i think the problem is independent of processor, and somehow related to the code generated by Keil. There are 2 WD Timers. One is hardware and one is 8051 s/w. I disabled both, so no issue with rebooting by WD timer reset.

    The strange behavior i observed in above code snippet is, when i call the test() function as below, system is misbehaving:

    void main(void) { unsigned char i;
    
       while(1) {
          for(i=0; i<8; i++) {
             magicString[i] += 1;
          }
          test(&magicString);   // Passing address
       }
    }
    
    void test(unsigned char const xdata* buffer) {...}
    


    But if i called the test() as below in above code, the system works fine:

    test((unsigned char xdata *)&magicString); //Casting
    test(magicString); // W/o casting
    


    Its hard time for me to understand whats wrong with passing address of magicString i.e. test(&magicString) ?

    Can anybody explain me why the last 2 test() work fine and not the first.

Children