AVR kompilering problem

D

david90

Guest
Jeg prøver å kompilere denne koden
Code:

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

/ / File Name: rprintftest.c

/ /

/ / Tittel: Eksempel på bruk av rprintf biblioteket funksjoner

/ / Gjennomgang: 1.0

/ / Notes:

/ / Målrett MCU: Atmel AVR serierekke

/ / Editor faner: 4

/ /

/ / Revisjonshistorie:

/ / Når Hvem Beskrivelse av endring

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

/ / 10-Sep-2002 pstang Opprettet programmet

//************************************************ *****************************//----- Omfatte filer ----------------------------------------- ----------------

# include <avr/io.h> / / inkluderer I / O definisjoner (port navnene pin navn, osv.)

# include <avr/signal.h> / / include "signal" navn (avbruddsordrelinje navn)

# include <avr/interrupt.h> / / inkluderer avbruddsordrelinje støtte# include "global.h" / / inkludere våre globale innstillingene

# include "uart.h" / / inkluderer UART funksjon biblioteket

# include "rprintf.h" / / inkluderer printf funksjon biblioteket

# include "timer.h" / / inkluderer timer funksjon biblioteket (timing, PWM, etc)

# include "vt100.h" / / inkluderer VT100 terminal supportvoid rprintfTest (void);//----- Begin Code ----------------------------------------- -------------------

int main (void)

(

/ / Initialiserer våre biblioteker

/ / Initialisere UART (seriell port)

uartInit ();

/ / Stille baudhastighet av UART for våre debug / rapportering output

uartSetBaudRate (9600);

/ / Initialiserer tidtaker system

timerInit ();/ / Initialiserer rprintf system

/ / - Bruk uartSendByte som utgang for alle rprintf uttalelser

/ / Dette vil føre alle rprintf biblioteket funksjoner for å dirigere sine

/ / Output til UART

/ / - Rprintf kan gjøres for å sende ut til en enhet som tar tegn.

/ / Du må skrive inn en funksjon som tar en unsigned char som et argument

/ / Og så pass dette til rprintfInit slik: rprintfInit (YOUR_FUNCTION);

rprintfInit (uartSendByte);/ / Initialiserer vt100 biblioteket

vt100Init ();/ / Tømme terminalen skjermen

vt100ClearScreen ();/ / Kjøre test

rprintfTest ();return 0;

)void rprintfTest (void)

(

u16 val;

u08 mydata;

u08 mystring [10];

float b;

u08 small;

u16 medium;

u32 store;/ / Skrive ut en liten intro melding så vi vet ting fungerer

rprintf ( "\ r \ nDette er kult program! \ r \ n");rprintf ( "\ r \ nWelcome til rprintf Test! \ r \ n");/ / Print enkelt tegn

rprintfChar ( 'H');

rprintfChar ( 'e');

rprintfChar ( 'l');

rprintfChar ( 'l');

rprintfChar ( 'o');

/ / Skriver ut en konstant streng lagret i flash

rprintfProgStrM ( "World!");

/ / Print vognretur, linjeskift kombinasjon

rprintfCRLF ();

/ / Oppmerksom på at bruk rprintfCRLF () er mer minne-effektiv enn

/ / Bruker rprintf ( "\ r \ n"), særlig hvis du gjør det flere gangermystring [0] = 'A';

mystring [1] = '';

mystring [2] = 'S';

mystring [3] = 't';

mystring [4] = 'r';

mystring [5] = 'i';

mystring [6] = 'n';

mystring [7] = 'g';

mystring [8] = '!';

mystring [9] = 0; / / null oppsigelse/ / Skriver ut en null-avbrutte strengen fra RAM

rprintfStr (mystring);

rprintfCRLF ();/ / Skriver ut en del av en streng fra RAM

/ / - Starte på indeks 2

/ / - Print 6 tegn

rprintfStrLen (mystring, 2, 6);

rprintfCRLF ();val = 24060;

mydata = 'L';/ / Skriver ut en desimal tall

rprintf ( "Dette er en desimal tall:% d \ r \ n", val);/ / Skriver ut en hex tall

rprintf ( "Dette er en hex nummer:% x \ r \ n", mydata);/ / Skriver ut en bokstav

rprintf ( "Dette er et tegn:% c \ r \ n", mydata);/ / Print heksadesimale tall

liten = 0x12; / / a char

medium = 0x1234; / / kort

store = 0x12345678; / / langrprintf ( "Dette er et 2-sifret heksadesimale tall (char):");

rprintfu08 (små);

rprintfCRLF ();rprintf ( "Dette er en 4-sifrede hex nummer (kort):");

rprintfu16 (medium);

rprintfCRLF ();rprintf ( "Dette er en 8-sifret heksadesimale tall (lang):");

rprintfu32 (stor);

rprintfCRLF ();/ / Skriver ut en formatert desimale tall

/ / - Bruk base 10

/ / - Bruk 8 tegn

/ / - Nummeret er signert [TRUE]

/ / - Puten med "."
perioder

rprintf ( "Dette er en formatert desimale tall:");

rprintfNum (10, 8, TRUE, '.', val);

rprintfCRLF ();b = 1.23456;/ / Skriver ut en flytende poengsummen

/ / Bruk 10-sifret presisjon/ / MERK: Hvis du vil bruke rprintfFloat () Du må aktivere støtte i global.h

/ / Bruk følgende i global.h: # define RPRINTF_FLOAT/ / rprintf ( "Dette er en flytende punkt nummer:");

/ / rprintfFloat (8, b);

/ / rprintfCRLF ();

)
 
david90 wrote:Det vil fungere inntil jeg endre

MCU = atmega163 til MCU = at90s2313
 
her er kompilatoren budskap,
> "Make.exe" alle
AVR-gcc-c-g-Os-Wall-Wstrict-prototyper-Ic: \ avrlib-Wa,-ahlms = rprintftest.lst-mmcu = at90s2313-I.rprintftest.c-o rprintftest.o
I filen inkluderes fra rprintftest.c: 19:
C: / WinAVR / AVR / inkluderer / AVR / signal.h: 36:2: Advarsel: # advarselen "Dette topptekstfilen er foreldet. Bruk <avr/interrupt.h>."
AVR-gcc-c-g-Os-Wall-Wstrict-prototyper-Ic: \ avrlib-Wa,-ahlms = c: \ avrlib / buffer.lst-mmcu = at90s2313-I.c: \ avrlib / buffer.c-OC: \ avrlib / buffer.o
AVR-gcc-c-g-Os-Wall-Wstrict-prototyper-Ic: \ avrlib-Wa,-ahlms = c: \ avrlib / uart.lst-mmcu = at90s2313-I.c: \ avrlib / uart.c-OC: \ avrlib / uart.o
I filen inkluderes fra c: \ avrlib / uart.c: 20:
C: / WinAVR / AVR / inkluderer / AVR / signal.h: 36:2: Advarsel: # advarselen "Dette topptekstfilen er foreldet. Bruk <avr/interrupt.h>."
AVR-gcc-c-g-Os-Wall-Wstrict-prototyper-Ic: \ avrlib-Wa,-ahlms = c: \ avrlib / rprintf.lst-mmcu = at90s2313-I.c: \ avrlib / rprintf.c-OC: \ avrlib / rprintf.o
AVR-gcc-c-g-Os-Wall-Wstrict-prototyper-Ic: \ avrlib-Wa,-ahlms = c: \ avrlib / timer.lst-mmcu = at90s2313-I.c: \ avrlib / timer.c-OC: \ avrlib / timer.o
I filen inkluderes fra c: \ avrlib / timer.c: 20:
C: / WinAVR / AVR / inkluderer / AVR / signal.h: 36:2: Advarsel: # advarselen "Dette topptekstfilen er foreldet. Bruk <avr/interrupt.h>."
c: \ avrlib / timer.c: In function `timer1PWMInit ':
c: \ avrlib / timer.c: 306: error: `OCR1BH 'undeclared (første gangs bruk i denne funksjonen)
c: \ avrlib / timer.c: 306: error: (Hver undeclared identifier rapporteres bare én gang
c: \ avrlib / timer.c: 306: error: for hver funksjon den vises i.)
c: \ avrlib / timer.c: 307: error: `OCR1BL 'undeclared (første gangs bruk i denne funksjonen)
c: \ avrlib / timer.c: In function `timer1PWMBOn ':
c: \ avrlib / timer.c: 354: error: `COM1B1 'undeclared (første gangs bruk i denne funksjonen)
c: \ avrlib / timer.c: 355: error: `COM1B0 'undeclared (første gangs bruk i denne funksjonen)
c: \ avrlib / timer.c: In function `timer1PWMBOff ':
c: \ avrlib / timer.c: 370: error: `COM1B1 'undeclared (første gangs bruk i denne funksjonen)
c: \ avrlib / timer.c: 371: error: `COM1B0 'undeclared (første gangs bruk i denne funksjonen)
c: \ avrlib / timer.c: In function `timer1PWMBSet ':
c: \ avrlib / timer.c: 395: error: `OCR1B 'undeclared (første gangs bruk i denne funksjonen)
c: \ avrlib / timer.c: På øverste nivå:
c: \ avrlib / timer.c: 451: advarsel: `SIG_OUTPUT_COMPARE1B" synes å være et feilstavet signal handler
c: \ avrlib / timer.c: 467: advarsel: `SIG_OUTPUT_COMPARE2" synes å være et feilstavet signal handler
make.exe: *** [c: \ avrlib / timer.o] Error 1
rm c: \ avrlib / uart.oc: \ avrlib / buffer.oc: \ avrlib / rprintf.o

> Last Exit Code: 2
> Time tatt: 00:04

Hvis jeg bruker Atmega stedet for at90s2313, feilene ovenfor ikke ville oppstå.

 
Vel, jeg
er ikke ivrig på WinAVR kompilatoren, men hvis det ikke
er en dum kompilatoren (jeg
er sikker på ikke er) så fall
er det ikke nok å mentione MCU = at90s2313 stedet MCU = atmega163.
Det må være en annen erklæring å informere kompilatoren at innsiden "timerInit ();" som påkaller timer.c fil, OCR1B, COM1B må ikke initialisert eller brukt siden ikke er til stede i AT90S2313.
Den andre advarselen om utdatert header signal.h og bedre hjelp interrupt.h
er det dumt compiler advarsel fordi du nettopp
har brukt den, men erklærte etter signal.h

Dermed går inn c: \ avrlib \ timer.c og kommentere ut referanse til OCR1B, COM1B som brukes, men ikke oppgitt grunn MCU = AT90S2313 som fjerner topptekstfilen inkludert coresponding definisjoner.Dette er ikke en god løsning, men i det minste å prøve og se om feilen er likevel reist av Makefile verktøyet.

 
Årsaken dette ikke kompilere til 2313 er det nødvendig timer ressurser er ikke tilgjengelig i denne delen.Topptekstfilen io.h tar MMCU attributtet, og det inneholder den aktuelle enheten topptekstfil.IO163.h er inkludert når du velger MEGA163.Denne overskriften har ønsket timer variablene definert.Den IO2313.h filen ikke har disse definerer fordi ressursene er ikke tilgjengelig i denne delen.

Å bruke noe av denne koden i 2313, vil du ha omskrive tidtaker ting eller pare ned kravene slik at den kan fjernes.

--- Steve

 
Hei,

Du kan prøve IAR C-kompilator jeg bruker det og det fungerer så bra
og du behøver ikke bry deg om det gjør fil

Brann i The Wire

<img src="http://www.edaboard.com/images/smiles/icon_idea.gif" alt="Ideen" border="0" />
 
banjo høyre registrere navn og perifere av at902313 er ikke det samme som atmega163.Men når du er ferdig å kompilere denne koden kan du ikke passer den til at902313.Jeg foreslår at du bruker atmega8 av mer når du bruker avrlib

 
Den inkluderer filen signal.h og interrupt.h faktisk se det samme som omhandler avbruddsordrelinje vektor for MCU.Prøv å slette linjen #
include <avr/signal.h> og prøv kompilere igjen.

 

Welcome to EDABoard.com

Sponsor

Back
Top