Atmel studio 6.2 problém s kompiláciou

C,C++,C#

Moderátori: psichac, Moderátori

michal56
Okoloidúci
Okoloidúci
Príspevky: 8
Dátum registrácie: 08 Sep 2013, 19:23
Bydlisko: Bojnice
Vek: 31

Atmel studio 6.2 problém s kompiláciou

Príspevok od používateľa michal56 » 04 Sep 2014, 12:14

Zdravím

Prosím Vás, mám taký problém, že mnou napísaný program v C mi neskompiluje tak ako by mal. Ako náhle chcem začať simulovať, program nezačína na začiatku v main, ale najskôr začne skákať po rôznych riadkoch v celom programe (stále tých istých pri každej simulácií) a asi po 5-6 skoku program normálne začne pracovať. Skúšal som zakomentovať dané riadky, ale začalo to po iných riadkoch skákať. Pozeral som sa aj v disassembly, ako to tam krokuje a je to tam poprehadzované. Hľadal som aj po internete, ale žiadne riešenie som nenašiel. Mám operačný systém Windows 8, Atmel Studio 6.2.1153, notebook je tri dni starý, optimalizáciu mám nastavenú na -Os, skúšal som aj iné, ale bez zmeny.

tu je môj program, ešte nedokončený, možno s chybami (som ešte len začiatočník)
je to komunikácia cez UART (atmega16) s displejom ulcd 32ptu

Kód: Vybrať všetko

#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/interrupt.h>

volatile uint8_t nevybrane_UART=0;
volatile uint8_t prijate_data[6];
volatile uint8_t data_odosielanie[6];
uint8_t prijem_dokonceny=0;
uint8_t n=0, m=0, j=0;
uint8_t ziad_hodnota=0;
uint8_t odoslanie=0;

/**********************************************/

void init_UART(void)
{
	UBRRL=105;
	UBRRH=0;
	UCSRB|=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
	UCSRC|=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}

/*******************************************/

void odosielanie_UART(uint8_t DATA)
{
	UDR=DATA;
}

/****************************************/

uint8_t prijem_UART(void)
{
	uint8_t data_UART;
	data_UART=UDR;
	return(data_UART);
}

/****************************************/

void NACK(void)
{
	odosielanie_UART(0x15);
}

/****************************************/

void ACK(void)
{
	odosielanie_UART(0x06);
}

/****************************************/

ISR(USART_RXC_vect)
{
	nevybrane_UART=1;
}


int main(void)
{
	init_UART();
	DDRD|=0b00000100;
	PORTD|=255;
	sei();
	while(1)
	{
		if(nevybrane_UART)
		{
			prijate_data[n]=prijem_UART();
			++n;
			if (n==6)
			{
				n=0;
				
				if (prijate_data[5] == (prijate_data[0] ^ prijate_data[1] ^ prijate_data[2] ^ prijate_data[3] ^ prijate_data[4]) )
				{
					prijem_dokonceny=1;
					ACK();
				}
				else
				{
					prijem_dokonceny=0;
					NACK();
				}
			}
			nevybrane_UART=0;
		}
		if ((prijem_dokonceny==1)&&(prijate_data[1]==0x0D))
		{
			if(m==2)
			{
				ziad_hodnota=0;
				m=0;
			}
			else
			{
				ziad_hodnota=10*ziad_hodnota+(prijate_data[4]-0x30);
				data_odosielanie[0]=0x01;
				data_odosielanie[1]=0x0F;
				data_odosielanie[2]=0x07;
				data_odosielanie[3]=0x00;
				data_odosielanie[4]=ziad_hodnota;
				odoslanie=1;
				++m;
			}
			
		}
		if ((prijate_data[1]==0x06)&&(prijate_data[2]==0x08))
		{
			data_odosielanie[0]=0x01;
			data_odosielanie[1]=0x0F;
			data_odosielanie[2]=0x05;
			data_odosielanie[3]=0x00;
			data_odosielanie[4]=ziad_hodnota;
			odoslanie=1;
		}
		if (odoslanie==1)
		{
			j=0;
			while (j!=6)
			{
				if(UCSRA&=(1<<UDRE))
				{
					data_odosielanie[5]=data_odosielanie[4] ^ data_odosielanie[3] ^ data_odosielanie[2] ^ data_odosielanie[1] ^ data_odosielanie[0];
					odosielanie_UART(data_odosielanie[j]);
					++j;
				}
			}
			odoslanie=0;
		}
	}
}

žltá šipka ukazuje na začiatok programu a postupne ide dole
Prílohy
takto u mňa vyzerá disassembly
takto u mňa vyzerá disassembly
0
Naposledy upravil/-a michal56 v 04 Sep 2014, 12:35, upravené celkom 1 krát.

anonymousCoward
Stály člen
Stály člen
Príspevky: 150
Dátum registrácie: 12 Máj 2013, 11:09
Bydlisko: KE

Re: Atmel studio 6.2 problém s kompiláciou

Príspevok od používateľa anonymousCoward » 04 Sep 2014, 12:25

Aj -Os je optimalizacia, takze sa nemozes cudovat, ze vysledny skompilovany kod je trochu iny, nez zdrojak.
Co s tym ? Dost dobre asi nic, pretoze pri vypnutej optimalizacii (-O0) nebudu niektore kniznicne funkcie fungovat spravne (delay ...). Tento stupen optimalizacie vlastne vobec nie je urceny pre beznych pouzivatelov.

BTW pouzivaj prosim tag code, inak znizujes sancu, ze sa na Tvoj kod niekto pozrie (ja napriklad :) ).
0
War is peace. Freedom is slavery. Ignorance is strength.
There is no such thing as a well-adjusted slave.

Používateľov profilový obrázok
dxr
Ultimate člen
Ultimate člen
Príspevky: 3968
Dátum registrácie: 05 Aug 2013, 20:21
Bydlisko: V strede nicoho
Kontaktovať používateľa:

Re: Atmel studio 6.2 problém s kompiláciou

Príspevok od používateľa dxr » 04 Sep 2014, 12:26

V profile debug nastav -O0 tym zacneme

kolizia - postovali sme naraz .... ale predbehol ma :(

k tomu TAGU tu uz bola hadka :)
0
Mahátma Ghándí: „Nejdřív tě budou ignorovat. Pak se ti budou smát. Pak proti tobě budou bojovat. Potom zvítězíš.“
čo viac dodať som taký a možeš to skúsiť vyhrať aj tak to vzdáš.. Obrázok
Arduino is popular becouse allow complex task with minimum investment

michal56
Okoloidúci
Okoloidúci
Príspevky: 8
Dátum registrácie: 08 Sep 2013, 19:23
Bydlisko: Bojnice
Vek: 31

Re: Atmel studio 6.2 problém s kompiláciou

Príspevok od používateľa michal56 » 04 Sep 2014, 12:42

to anonymousCoward:
myslíš ten Tag code tak, ako som to upravil, že je to odsadené ? :)

to dxr:
takže : Project->Properties->Toolchain->AVR/GNU C compiler -> optimization -> optimization level -> -O0 ?? :) .... wou, čo sa stalo ? doteraz to nešlo na -O0, od teraz to ide :D

Ale aj tak ďakujem, zapisujem si do debilníčka, že máš u mňa pivo :D
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok