Re: avr-gcc and char strings

Georg-Johann Lay <[email protected]>
Newsgroups gmane.comp.hardware.avr.gcc
Message-ID <[email protected]>
Am 12/03/2014 10:11 PM, schrieb Andreas Höschler:
> Hi all,
>
> I am close to tearing my hair out. After having established the avr tool chain I tried out a very simple C-program (see below) on an SainSmart Mega2560 board programmed into the chip by making use of /Applications/Arduino.app//Contents/Resources/Java/hardware/tools/avr/bin/avrdude:
>
> [code using .[ro]data]
>
> This program produces the following output
>
> ...
> ÿÿÿÿÿÿÿÿÿÿÿÿÿÿABC
> ÿÿÿÿÿÿÿÿÿÿÿÿÿÿABC
> ÿÿÿÿÿÿÿÿÿÿÿÿÿÿABC
> ...
>
> telling me that sending single chars works but sending strings fails (does not seem to have anything to do with the serial communication but rather be some kind of memory management problem!??).
>
> To be sure the problem is not caused by my own gcc build I changed my Makefile to

FYI, What counts are the command options that are passed to the compiler in the 
and; just Makefile variables / snippets might not be enough for others to help 
you (except you are having problems with make).

> # AVR-GCC Makefile
> PROJECT=toggle_led
> SOURCES=main.c
> HEADERS=
> CC=/Applications/Arduino.app//Contents/Resources/Java/hardware/tools/avr/bin/avr-gcc
> OBJCOPY=avr-objcopy
> MMCU=atmega2560
>
> CFLAGS=-mmcu=$(MMCU) -Wall -O2 -I /usr/local/avr/include

Adding this include path should never ever be needed.  If you toolchain 
installation does not work without it, that installation is broken and the 
right approach is to get a working distribution of the toolchain.

You can even mess up you builds by specifying include path or library path that 
appear correct to you but actually are not.  The compiler(driver) always knows 
its own paths.  Sometimes tools like Code::Blocks that try to be smarter than 
they actually are and will add such paths.  Make sure you IDE or whatever 
generated this Makefile is sane in this respect.

> $(PROJECT).hex: $(PROJECT).out
> 	$(OBJCOPY) -j .text -O ihex $(PROJECT).out $(PROJECT).hex

You are using data from input section .data* resp. .rodata* (namely by string 
literal "Hello world!!") which in turn is initialized at startup time from 
flash.  Hence you may also include .data when building your executable.


Johann


_______________________________________________
AVR-GCC-list mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/avr-gcc-list
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.