Could you post the assembler output? IIRC --save-temps or -S should be
added to the gcc command line.

Wouter
Op 3 dec. 2014 22:12 schreef "Andreas Höschler" <ahoe...@smartsoft.de>:

> 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:
>
> #define F_CPU 16000000UL  /* 16 MHz CPU clock */
> #include "Global.h"
> #include <util/delay.h>
> #include <avr/io.h>
> #include <avr/interrupt.h>
> #include <inttypes.h>
>
>
> char String[]  = "Hello world!!";
>
>
> void USARTInit0(uint16_t baud)
> {
>     // Set Baud rate
>     int value = (F_CPU / 16 / baud) - 1;
>     UBRR0H = (uint8_t)(value>>8);
>     UBRR0L = (uint8_t)value;
>
>
>     // 8N1
>     UCSR0C = 0x06; // (3<<UCSZ00);
>
>
>     // Enable receiver and transmitter
>     UCSR0B = (1<<RXEN0) | (1<<TXEN0);
> }
>
>
> void TxByte0 (uint8_t data)
> {
>     // Wait for empty transmit buffer
>     while ( !(UCSR0A & (1 << UDRE0)) );
>    // Putting data into the buffer, forces transmission
>    UDR0 = data;
> }
>
>
> int main (void)
>   {
>    DDRB = 0xff;          // all outputs
>
>
>    USARTInit0(38400);       // 9600 19200 38400
>
>
>    while (1)
>      {
>       TxByte0('A');
>       TxByte0('B');
>       TxByte0('C');
>       TxByte0('\n');
>
>
>       char *s = String;
>       while (*s != 0)
>         {
>          TxByte0(*s);
>          s++;
>         }
>
>
>       _delay_ms(500);
>      }
>    return (0);
>   }
>
>
> 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
>
>
> # 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
>
> $(PROJECT).hex: $(PROJECT).out
> $(OBJCOPY) -j .text -O ihex $(PROJECT).out $(PROJECT).hex
>
>
> $(PROJECT).out: $(SOURCES)
> $(CC) $(CFLAGS) -I./ -o $(PROJECT).out $(SOURCES)
>
>
> program: $(PROJECT).hex
> avrdude  -p $(MMCU) -c avrispmkII -P usb -e -U flash:w:$(PROJECT).hex
> clean:
> rm -f $(PROJECT).out
> rm -f $(PROJECT).hex
>
>
>
> and thus built the program with a gcc from a respected source (avr-gcc
> coming with Arduino.app). But the problem persists!? I already discussed
> this problem on avrfreaks forum. All agree that the above code should work
> but it does not!?? :-()
>
> Could this be a problem of the board/chip? I am using a SainSmart Mega2560
> board (which seems to be a clone of the original Arduino product)! Or am I
> doing anything wrong??
>
>
> Clueless!?? :-( Hints are greatly appreciated!!
>
>
> Thanks a lot,
>
>
>  Andreas
>
>
>
>
>
> _______________________________________________
> AVR-GCC-list mailing list
> AVR-GCC-list@nongnu.org
> https://lists.nongnu.org/mailman/listinfo/avr-gcc-list
>
>
_______________________________________________
AVR-GCC-list mailing list
AVR-GCC-list@nongnu.org
https://lists.nongnu.org/mailman/listinfo/avr-gcc-list

Reply via email to