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
[email protected]
https://lists.sourceforge.net/lists/listinfo/sdcc-user