Gast
#6473418
Hallo, bin vor kurzem auf CCS 10.1.1.00004 umgestiegen und bin auf ein Problem gestoßen, das ich nicht beheben kann. Ich kann es mit einem minimalem von CCS gemanagdes Beispiel reproduzieren. Siehe unten. Nach der zweiten Addition geht die Adresse des Arrays verloren. Die Array Adresse wird hier in einem Register gehalten, das nach Ausführung einen anderen Wert hat. Mein alter Compiler macht es richtig , er benutzt RAM und kein Register an der Stelle. Vielleicht mache ich noch was falsch. Könnte das mal bitte jemand ausprobieren? Die Optimierung ist ganz abgeschaltete, der Compiler ist TI v20.2.3.LTS, die CPU ist MSP430F2274. Vielen Dank. #include <msp430.h> /** * main.c */ static void test_list(unsigned char *data, unsigned int len) { unsigned long ul_id; ul_id = (unsigned long)(data[0]); ul_id += ((unsigned long)(data[1])<<8); //<< danach ist array Adresse von data weg !! ul_id += ((unsigned long)(data[2])<<16); ul_id += ((unsigned long)(data[3])<<24) ; } void Test() { unsigned char buffer[8] = { 0,1,2,3,4,5,6,7}; test_list(buffer,8); } int main(void) { WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer while (1) { Test(); } return 0; }