AVR sturio make: *** [test.elf] Error 1

Dobrý den, poraďte mi prosím. Už jsem zkoušela AVR Studio 4 přeinstalovat snad třikrát, ale téhle chyby jsem se nezbavila. Tuto chybu to nahlásí i při nejjednodušším programu. Občas mi to hlásí i chybu make: *** [test.o] Error 1 Zkoušela jsem i vytvořit chybu v programu, ale tu nenajde, jen stále hlásí tuhle jedinou. Díky

Nemáš diakritiku/mezeru v názvu projektu nebo cestě do složky projektu?
Tohle musí fungovat:
C_blikatko_delay.zip (11.2 KB)

Paráda, díky. Tvůj program funguje. Musím najít chybu ve svém.

V programu chybu mít nebudeš a když, tak bude hláška vypadat jinak. Zatím máš problém se spuštěním překladu. Ten můj testovací projekt jsi překládala ve složce, kde se vytvářejí ostatní projekty? Jesli ano, tak je cesta vpořádku.
Na zákládání projektu totiž není co zkazit právě kromě jeho pojmenování. Kdyžtak sem vlož ten nefunkční projekt.

Jo, mám všechny projekty ve stejné složce. Když mám program v pořádku, tak jde zkompilovat, krokovat… ale jak je tam jakákoli chyba napíše: make: *** [main.o] Error 1. Poslední chybu jsem si nedokázala najít.

Program vypadá následovně:

#include <avr/io.h>						// knihovna obsahujici definice regstrů procesoru
#include <avr/interrupt.h>				        // přerušení
#define F_CPU 16000000UL				        // info o frekvenci mcu pro prekladac (16MHz)
#include <util/delay.h>					// knihovna obsahujici funkce pro zpozdeni

//---------------------------------------------------------------------------------------------------

unsigned int pocet_preruseni = 0;				// počítadlo přerušení
unsigned int pocet_sekund = 0;					// počítadlo sekund
char predchozi_cyklus = 4;						// určuje v jakém cyklu je právě křižovatka

#define t_zelena			10					// počet sekund po kreré trvá zelená v 1. směru (červená ve 2. směru)
#define 1ZELENA_2CERVENA 	0b10000100			// maska pro zelenou v 1.směru a červenou ve 2. směru


//---------------------------------------------------------------------------------------------------
/* inicializace portů a přerušení */
/**********************************/

void init() {
	DDRA=0b11111111;							// výstupní portA - semafor křižovatky
	DDRC=0b11111111;							// výstupní portC - železnice
	DDRB=0b11110000;							// výstupní portC7-C4 - přechody

// init přerušení
	sei();										// globální povolení přerušení
	TIMSK=0b00000001;							// masky přerušení, TOIE0 = 1 povolí přerušení při přetečení hodnoty časovače
	TCCR0=0b00000011;							// *64, poslední tři určují předdělící poměr (CS02,CS01,CS00)

}
//---------------------------------------------------------------------------------------------------
/*obsluha přerušení časovačem*/
/*****************************/

ISR (TIMER0_OVF_vect){	
	
	pocet_preruseni = pocet_preruseni + 1;
	if (pocet_preruseni = 1953) {
		pocet_sekund = pocet_sekund + 1;
	}
	if ((pocet_sekund = t_zelena)&(predchozi_cyklus = 4)){
		PORTA = 1ZELENA_2CERVENA;	
		predchozi_cyklus = 1;
	}
}

//---------------------------------------------------------------------------------------------------

int main(void) 
{
	init(); 		
	while (1){

	}
}

Výstup překladače má vypadat takto:

Co máš za verzi avr studia a překladače? Jakým postupem to instaluješ?
Mě vždy bez problému funguje instalace AVR Studia (současná verze je 4.19 nebo 5) s následnou instalací překladače (aktuální avr-toolchain-3.2.3.579).

První chyba: “macro names must be identifiers”. Identifikátor nesmí mimo jiné začínat číslicí (základy C). Tedy makro “1ZELENA_2CERVENA” je nepoužitelné.

Druhá chyba: zmizí s opravou makra.

Varování:“suggest parentheses around assignment used as truth value” se týká mimo jíné řádku: “if (pocet_preruseni = 1953) {”. Výraz v závorce je přiřazení, nikoli porovnání. A přiřazení je vždy vyhodnoceno jako TRUE. Aby to bylo porovnání, jsou potřeba dvě rovnítka “==”.

Další pravděpodobná chyba: "if ((pocet_sekund == t_zelena)&(predchozi_cyklus == 4)){ ".
Zde máš pravděpodobně na mysli logický součin dvou výrazů, nikoli bitový. Tam patří 2x&, tedy “&&”.

Edit: ještě nějaký ten detail. Pojmenované konstanty je zvykem psát velkými písmeny (je pak na první pohled vidět, že to není proměnná).
V přerušení používáš globální proměnnou. Tady ji nevyužíváš nikde jinde, takže to nebude problém, ale kdybys ji chtěla použít mimo přerušení, je nutné ji prefixovat slovem “volatile”.

Sice nejsem moc velky fanda shanet nejnovejsi verzi ale aktualni toolchain je 3.3.0.710. Viz zde atmel.com/dyn/products/tools_card.asp?tool_id=2725
Taky mi nevychazi ta konstanta.
Dle clanku avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=50106
By to melo byt takto
Target Period = ((2 ^ Bits_counter) * (Prescale / Input Frequency)
=( 2^8 ) * ( 64/16000000 ) = 0.001024 => citac pretece jednou za 0.001024 sekundy coz je cca 976,5x za sekundu. Hodnota by tedy mela byt 976

Samozrejme fandim Lide, at ji Atmely chytnou stejne jako nas…

Kurňa, ti jedou… Měsíc stará verze je už stará. Dřív byly rozestupy tak roční :slight_smile:.
Pravda s tou konstantou.

Mali tam chyby, tak budme radi :slight_smile:

Dobrý den,
používám AVR Studio 4 a vždy, když se snažím něco přeložit z .c do .hex, tak mi to napíše následující chybu:

*make: *** No rule to make target Prvni_projekt.elf', needed by elf’. Stop.
Build failed with 1 errors and 0 warnings…
*

Ahoj.
Prosim napis, jaky pouzivas prekladac k AVR studiu, jestli WinAvr, nebo toolchain a jakou verzi.
Predtim uz to fungovalo, nebo to zkousis poprve?
Pro jaky procesor to zkousis prelozit?
Neobsahuje jmeno adresare nejake zvlastni znaky jako mezera, nebo diakritika?
Muzes sem dat svuj projekt na kontrolni preklad?

-Používám WinAVR a verzi WinAVR-20100110 (teda myslím že je to ono…)
-zkouším to poprvé
-zkoušel sem to na ATmega 32 a AT90s2313

[code]#include (avr/io.h)
#include (util/delay.h)

int main (void)
{

DDRB = 0xff

while(1)
{
PORTB = 0x0f
_delay_ms(500)
PORTB = 0xf0
_delay_ms(500)
}
}
[/code]
jmenuje se to Prvni_projekt a cesta by měla být taky v pořádku

Si z nas robis kozy :frowning:
Jak Ta napadlo, ze by ten Tvoj kod bolo mozne vobec na niecom prelozit?

sprane znenie je:

#include <avr/io.h>
#include <util/delay.h>

int main (void)
{

DDRB = 0xff;

while(1)
   {
   PORTB = 0x0f;
   _delay_ms(500);
   PORTB = 0xf0;
   _delay_ms(500);
   }
} 

[code]
avr-objdump -h -S pokus1.elf > pokus1.lss

AVR Memory Usage

Device: atmega32

Program: 162 bytes (0.5% Full)
(.text + .data + .bootloader)

Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)

Build succeeded with 1 Warnings…
[/code] :smiling_imp:

Omlouvám se za chybu :confused: … jde poznat že sem to psal ve dvě v noci… ale díval sem se i na jiný, co jsem zkoušel a tam to mám správně

No ako vidis, mne to funguje (AVR studio 4.19 build 730, avr-toolchain–3.3.0.710) a som presvedceny o tom, ze to bude fungovat aj pod starsim sw. Problem budes mat niekde medzi stolickou a klavesnicou. Tazko takto povedat ze kde.

preco nevyskusas ci sa da prelozit ten najjednoduchsi kod?

// #include <avr/io.h>
// #include <util/delay.h>

int main (void)
{

while(1)
   {
   }
} 

mne to ide. Potom postupne pridavaj prikazy a uvidis na com to zacne blbnut.

Jen tak pro zajimavost uz existuje avr toolchain 3.4.1 1195 ke stazeni zde atmel.com/tools/ATMELAVRTOOLCHAINFORWINDOWS.aspx
Prekopali tam praci (nejen) s <util/pgmspace.h>

A asi nejen tu. Jelikož mi s tím nechodil v 4.19 simulátor, tak jsem se vrátil na 3.3.xxx