Hi, spent a better part of the evening trying to figure out why my code does not work.
In the early hours of the morning I came up with this test code (in "main.c"): void testxxx() { hid_tx_buffer.uint8[33] = g_stepper_state[1].position.uint8[1]; hid_tx_buffer.uint8[34] = g_stepper_state[1].position.uint8[2]; } The first assignment works but the second one fails (based on observing the results in actual hardware, PIC18F45K50). Looking at the compiled code it looks to me that there is a missing BANKSEL at line 01021? Also I don't see the point of the MOVFF instructions at 01013 and 01019, what is the purpose? 000000 01008 _testxxx: 01009 ; .line 59; main.c hid_tx_buffer.uint8[34] = g_stepper_state[1].position.uint8[2]; 000000 CFD9 FFE5 01010 MOVFF FSR2L, POSTDEC1 000004 CFE1 FFD9 01011 MOVFF FSR1L, FSR2L 01012 ; .line 60; main.c } 000008 C??? F??? 01013 MOVFF (_g_stepper_state + 5), (_g_stepper_state + 5) 00000C ???? 01014 BANKSEL (_g_stepper_state + 5) 00000E 51?? 01015 MOVF (_g_stepper_state + 5), W, B 000010 ???? 01016 BANKSEL (_hid_tx_buffer + 33) 000012 6F?? 01017 MOVWF (_hid_tx_buffer + 33), B 01018 ; .line 61; main.c 000014 C??? F??? 01019 MOVFF (_g_stepper_state + 6), (_g_stepper_state + 6) 000018 51?? 01020 MOVF (_g_stepper_state + 6), W, B 01021 ; removed redundant BANKSEL 00001A 6F?? 01022 MOVWF (_hid_tx_buffer + 34), B 00001C CFE4 FFD9 01023 MOVFF PREINC1, FSR2L 000020 0012 01024 RETURN The declarations for the data structures are as follows. In a header file included in "main.c" //------------------------------------ typedef union { uint8_t uint8[4]; uint16_t uint16[2]; uint32_t uint32; } uint32_t_multi_view; typedef struct { uint32_t_multi_view position; } stepper_status_t; extern volatile __at(0x300) stepper_status_t g_stepper_state[]; //------------------------------------ and in an other header file, also included in "main.c" //------------------------------------ typedef struct { union { uint8_t uint8[64]; uint16_t uint16[32]; uint32_t uint32[16]; int8_t int8[64]; int16_t int16[32]; int32_t int32[16]; }; } hid_buffer_t; extern volatile hid_buffer_t hid_tx_buffer; //------------------------------------ and oh yeah, this is my SDCC on Mac OS X Yosemite: //------------------------------------ /Users/nyholku/sdcc-3.4.0/bin/sdcc -v SDCC : mcs51/z80/z180/r2k/r3ka/gbz80/tlcs90/ds390/pic16/pic14/TININative/ds400/hc08/s08/stm8 3.4.0 #8981 (Apr 5 2014) (Mac OS X i386) published under GNU General Public License (GPL) //------------------------------------ wbr Kusti This e-mail may contain confidential or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and destroy this e-mail. Any unauthorized copying, disclosure or distribution of the material in this e-mail is strictly forbidden. We will not be liable for direct, indirect, special or consequential damages arising from alteration of the contents of this message by a third party or as a result of any virus being passed on or as of transmission of this e-mail in general. ------------------------------------------------------------------------------ _______________________________________________ Sdcc-user mailing list Sdcc-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sdcc-user