2011-04-20 11:33 PM
No workaround for STM8 assembler bug
2011-05-17 06:12 AM
Hello!
In fact, instead of: LDW ({MyVect-MyData},Y),X you have to write LDW ({{MyVect-MyData}+{$ram1_segment_start-$ram0_segment_start}},Y),X ram1_segment_start and ram0_segment_start are defined in mapping.inc. ram1_segment_start is the start address in hexadecimal format of the segment where MyVect is defined. ram0_segment_start is the start address in hexadecimal format of the segment where MyData is defined. It is explained in the release notes (3rd workaround) Robert J2011-05-17 06:12 AM
Robert,
I thank you for your help (and patience...)! EtaPhi2011-05-17 06:12 AM
Hello,
More generally, differences between two labels in two segments don't work if the segment start addresses are defined in another file. To avoid this, compute differences within the same segment and use constants to compute the difference between segment start addresses. For example, in this way: stm8/ #include ''mapping.inc'' segment 'ram0' BYTES ram0_start ram0_data DS $B7 ram0_var DS 1 segment 'ram1' WORDS ram1_start ram1_data DS $AB6 ram1_var DS 1 segment 'rom' main LDW X,#{ram1_var-ram0_var} ; no, doesn't work LDW X,#{{ram1_var-ram1_start}-{ram0_var-ram0_start}+{$ram1_segment_start-$ram0_segment_start}} ; ok JRA * segment 'vectit' dc.l {$82000000+main} ; reset end where ram0_segment_start and ram1_segment_start are constants defined in mapping.inc: #define ram0_segment_start 0 #define ram1_segment_start 100 and where segments 'ram0' and 'ram1' are defined in mapping.asm: BYTES segment byte at ram0_segment_start-ram0_segment_end 'ram0' WORDS segment byte at ram1_segment_start-ram1_segment_end 'ram1' Sorry for the inconvenience. Robert J