avr-gcc doesn't know address space wraps?
Georg-Johann Lay
avr@gjlay.de
Sun Jan 3 17:22:00 GMT 2016
Ralph Doncaster schrieb:
> avr-gcc 4.9.2 doesn't seem to know that the address space wraps, so
> that an rjmp in the last 2KB of the address space can reach code in
> the first 2KB. The following code works fine with a jmp, but if I
> change the jmp ResetVector to rjmp, I get:
> (.bootloader+0x4): relocation truncated to fit: R_AVR_13_PCREL against
> `no symbol'
>
> I'm compiling with:
> avr-gcc -mmcu=atmega328p -nostartfiles
> -Wl,-section-start=.bootloader=0x7E00 picobootSTK500.S -o
> picobootSTK500
I don't quite get what your question has to do with the compiler proper.
As you are programming in assembly, the only thing that avr-gcc does
is calling the assembler and the linker for you.
> .text
> ; this will be address 0x0000 which is the reset vector
> ; user application will over-write blink code
> ; dimly lights LED (using internal pullup) with a 1.5 s cycle time
> ResetVector:
> Blink:
> sbi PINB, LEDPIN
> ldi ZH, 60
> DelayLoop:
> ; 11.8M cycles =~ .74s @ 16Mhz
> rcall Delay3Cycle ; 256 * 3 cycles
> sbiw ZL, 1
> brne DelayLoop
> rjmp Blink
>
> ; delay 3 cycles * r24 + 4 cycles (ret instruction)
> Delay3Cycle:
> dec r24
> brne Delay3Cycle
> ret
>
>
> .section .bootloader,"ax",@progbits
> ; use -WL,--section-start=.bootloader=0xXf00
>
> Boot:
> in Temp, MCUSR
> sbrs Temp, EXTRF
> JmpReset:
> jmp ResetVector ; jump to application code
>
More information about the Gcc
mailing list