Problem med fel när jag bygger C koden [uppdaterad]

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Greensilver
Inlägg: 1305
Blev medlem: 21 januari 2005, 21:24:57
Ort: Sverige
Kontakt:

Problem med fel när jag bygger C koden [uppdaterad]

Inlägg av Greensilver »

Jag får en massa fel där Programmers Notepad säger typ:
PC_COMM.c: 49: error: UDR0 undeclared (first use in this function)

Detta fel får jag på en massa variabelnamn där det enbart är nollan som gör att det felar. Jag har hittat en fil som heter m169def.inc som innehåller precis det jag behöver nämligen ett gäng såna här rader:
.equ UDR0 = UDR
.equ UBRR0H = UBRRH
.equ UBRR0L = UBRRL
.equ UBRR0 = UBRRL
.equ UBRR = UBRRL
.equ UCSR0C = UCSRC
.equ UCSR0B = UCSRB
.equ UCR = UCSRB
.equ UCSR0A = UCSRA
.equ USR = UCSRA

Jag har försökt att includa den men det funkade inte, är det någon som vet hur man löser detta, jag har testat att manuellt ersätta namnen men det är tokmånga och så kul är det ju inte att leka med text. :cry:

Är det någon som vet vad man skall göra åt detta?
Senast redigerad av Greensilver 3 februari 2006, 14:10:50, redigerad totalt 1 gång.
henkebenke
Inlägg: 516
Blev medlem: 31 maj 2003, 10:42:37
Ort: Helsingborg

Inlägg av henkebenke »

Det är en assembler definiton fil du har hittat, leta efter någon som heter typ iom169.h istället.
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Du får nog förklara lite mer ingående vad du använder för uC och kompilator och Makefile?
Förutsatt att du använder gcc så ska du includera <avr/io.h>. Sedan laddar kompilatorn in rätt definitioner till respektive processorn (som anges genom -mmcu=<dev>).

Mvh
speakman
Användarvisningsbild
Greensilver
Inlägg: 1305
Blev medlem: 21 januari 2005, 21:24:57
Ort: Sverige
Kontakt:

Inlägg av Greensilver »

Hej.
Förlåt - fattade inte att GCC var något som inte hörde till Programmers Notepad. Mycket riktigt så står det AVR-GCC i fönstret när den kompilerat. Jag har inkluderat io.h men det vill ändå inte fungera. uC är en butterfly med en ATMega 169. Makefilen ser ut så här:

Kod: Markera allt

# WinAVR Sample makefile written by Eric B. Weddington, Jörg Wunsch, et al.
# Released to the Public Domain
# Please read the make user manual!
#
# Additional material for this makefile was submitted by:
#  Tim Henigan
#  Peter Fleury
#  Reiner Patommel
#  Sander Pool
#  Frederik Rouleau
#  Markus Pfaff
#
# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make coff = Convert ELF to AVR COFF (for use with AVR Studio 3.x or VMLAB).
#
# make extcoff = Convert ELF to AVR Extended COFF (for use with AVR Studio
#                4.07 or greater).
#
# make program = Download the hex file to the device, using avrdude.  Please
#                customize the avrdude settings below first!
#
# make filename.s = Just compile filename.c into the assembler code only
#
# To rebuild project do "make clean" then "make all".
#


# MCU name
MCU = atmega169

# Output format. (can be srec, ihex, binary)
FORMAT = ihex

# Target file name (without extension).
TARGET = PC_Comm

# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c

SRC += Demonstrator.c 


# List Assembler source files here.
# Make them always end in a capital .S.  Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC = 



# Optimization level, can be [0, 1, 2, 3, s]. 
# 0 = turn off optimization. s = optimize for size.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s


# List any extra directories to look for include files here.
#     Each directory must be seperated by a space.
EXTRAINCDIRS = 

(klippt bort resten eftersom den tar sån plats i forumet)
Senast redigerad av Greensilver 3 februari 2006, 14:58:49, redigerad totalt 1 gång.
Användarvisningsbild
Greensilver
Inlägg: 1305
Blev medlem: 21 januari 2005, 21:24:57
Ort: Sverige
Kontakt:

Inlägg av Greensilver »

Nu har jag testat en annan grej. Jag tog en fil som funkade att kompilera och kopierade denna till en ny mapp och gav den ett nytt namn då jag tänkte använd den som grund så att säga. Jag ändrade target i makefilen till det nya filnamnet (utan affix). Och vips så funkar den inte att kompilera längre ! :shock:

Dessa includes har jag:
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>

Vad kan vara fel tro? Det är alltså en butterfly (mega 169) jag grejar med och jag använder Programmers Notepad med AVR-GCC.
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Problemet med Makefilen är väl förmodligen att du klippte bort det som ger nån information om hur filerna verkligen kompileras. :D
Jag gissar att du inte skrivit Makefilen själv?
Men det ser onekligen ut som ett include-fel.
Bifoga (om möjligt, annars lägg på annan server) *hela* Makefile och *hela* outputen vid kompilering.

Mvh
speakman
Användarvisningsbild
Greensilver
Inlägg: 1305
Blev medlem: 21 januari 2005, 21:24:57
Ort: Sverige
Kontakt:

Inlägg av Greensilver »

Hihi! Jag postade hela filen föst men tänkte att då blir nog folk sura när dom får scrolla. Hur som helst, nu har jag manuellt tagit bort nollorna och då funkar det. Så jag kör så här så länge men om någon vill förklara skillnaden mellan dessa så blir jag glad:

Här står includen inom < >
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>

Oh här inom " "
#include "PC_Comm.h"
#include "Demonstrator.h"

(de kommer från olika projekt)
Så vad är skillnaden när man skriver inom "" och <>?
Dessutom undrar jag var jag specar resten av oathen för dessa filer, är det i Progranners Notepad? Om det är det så kan det vara där jag missat nåt...

Tack för alla svar! :)
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

<> laddar filerna utifrån standardbibliotekets katalog, "" laddar filer utifrån projektets egen katalog (samma katalog som .c-filen befinner sig i).
Vill du lägga till fler sökvägar för <>-includes så lägger du till -I/path/to/dir till gcc.

Mvh
speakman
Användarvisningsbild
Greensilver
Inlägg: 1305
Blev medlem: 21 januari 2005, 21:24:57
Ort: Sverige
Kontakt:

Inlägg av Greensilver »

Aha! Nu börjar det klarna, troligtvis är det filepathsen som har strulat till sig lite sedan jag stökat om på hårddisken, det gör att den inte hittar rätt filer att includa. Nu skall jag dyka ner i makefilen och kika vilka paths som är angivna. Tack för hjälpen! :)
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Vissa sökvägar kan även vara hårdkodade i kompilatorn. Jag skulle nog rekommendera en ny fräsh installation av WinAVR, då *ska* inget fela...

Mvh
speakman
Skriv svar