From: Theblond <the...@fr...> - 2008-10-22 19:24:45
|
Dear All, I define an array inside a function. Unfortunately, all the elements of the array initialized by 0x30, instead of the given values. The array can placed in __code, but has the same behaviour. Alex SDCC : pic16/pic14 2.8.4 #5250 (Oct 12 2008) (UNIX) The function: //---------------------------------------------------- unsigned char conversion_by_table(unsigned char index) { unsigned char conversion_table[4] ={'0x01','0x02','0x03','0x04'}; return conversion_table[index & 0x03]; } //---------------------------------------------------- The generated code: ;---------------------------------------------------- S_main__conversion_by_table code _conversion_by_table: ; .line 42; main.c unsigned char conversion_by_table(unsigned char index) MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 ; .line 44; main.c unsigned char conversion_table[4] ={'0x01','0x02','0x03','0x04'}; MOVLW 0x30 BANKSEL _conversion_by_table_conversion_table_1_1 MOVWF _conversion_by_table_conversion_table_1_1, B MOVLW 0x30 BANKSEL (_conversion_by_table_conversion_table_1_1 + 1) MOVWF (_conversion_by_table_conversion_table_1_1 + 1), B MOVLW 0x30 BANKSEL (_conversion_by_table_conversion_table_1_1 + 2) MOVWF (_conversion_by_table_conversion_table_1_1 + 2), B MOVLW 0x30 BANKSEL (_conversion_by_table_conversion_table_1_1 + 3) MOVWF (_conversion_by_table_conversion_table_1_1 + 3), B ; .line 45; main.c return conversion_table[index & 0x03]; MOVLW 0x03 ANDWF r0x00, F CLRF r0x01 MOVLW LOW(_conversion_by_table_conversion_table_1_1) ADDWF r0x00, F MOVLW HIGH(_conversion_by_table_conversion_table_1_1) ADDWFC r0x01, F MOVFF r0x00, FSR0L MOVFF r0x01, FSR0H MOVFF INDF0, r0x00 MOVF r0x00, W MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ;---------------------------------------------------- |