www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

C koda in začetnik:
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
rudiP
Član
Član



Pridružen-a: Tor 07 Avg 2007 15:30
Prispevkov: 1235
Aktiv.: 5.66
Kraj: KOPER

PrispevekObjavljeno: Sre Mar 26, 2008 5:23 pm    Naslov sporočila: icon_important C koda in začetnik: Odgovori s citatom

Spoštovani forumaši

Moj začetki v C_ju so trenutno v slepi ulici. V yVision3 sem pretipkal določen del kode iz primera Šarm. Kljub temu, da sem kodo oklestil na minimum, mi kompajler vztrajno sporoča:

Build target 'Target 1'
assembling Startup.s...
compiling PROJ1.c...
PROJ1.c(11): warning: #223-D: function "LCD_cmd" declared implicitly
PROJ1.c(15): error: #159: declaration is incompatible with previous "LCD_cmd" (declared at line 11)
PROJ1.c(1Cool: warning: #223-D: function "LCD_port" declared implicitly
PROJ1.c(26): error: #159: declaration is incompatible with previous "LCD_port" (declared at line 1Cool
Target not created


KODA:

//------------------------//
// proj1.C //
//------------------------//

#include <LPC21xx.h>



void LCD_init()
{
LCD_cmd(0x28-);
}


void LCD_cmd(int cmd)
{
LCD_port(cmd>>4); // high bits
LCD_port(cmd&0x0f); // LOW BYTE
}


void LCD_port(int port_value)
{
if(port_value > 0x0f )
port_value = 0;
}

int main(void)
{
LCD_init();
}


//

DOBRIM DUŠAM, KATERE MI BODO DALE NAMIG KJE GREŠIM IN KAKO IZ ZAGATE, SE V NAPREJ ZAHVALJUJEM.

Lep pozdrav iz Kopra Rudi
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
alessio
Član
Član



Pridružen-a: Pon 04 Dec 2006 8:39
Prispevkov: 363
Aktiv.: 1.60
Kraj: Ljubljana

PrispevekObjavljeno: Sre Mar 26, 2008 5:58 pm    Naslov sporočila:   Odgovori s citatom

Problem je v tem, da v definiciji funkcije LCD_init() uporabljaš klic
funkcije LCD_cmd(), ki je nisi prej ne deklariral ne definiral.


Za začetek za

#include <LPC21xx.h>

dodaj deklaracije funkcij:

void LCD_init(void);
void LCD_cmd(int cmd);
void LCD_port(int port_value);
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
PC_Master
Član
Član



Pridružen-a: Pon 17 Mar 2008 20:10
Prispevkov: 319
Aktiv.: 1.51
Kraj: Domžale , Blizu Ljubljane , Poštna 1230

PrispevekObjavljeno: Sre Mar 26, 2008 6:17 pm    Naslov sporočila:   Odgovori s citatom

Ta tema bi meni tudi prav prišla.

Kako definirati port?

( Prosim celo kodo ne samo eno linijo Laughing )
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
rudiP
Član
Član



Pridružen-a: Tor 07 Avg 2007 15:30
Prispevkov: 1235
Aktiv.: 5.66
Kraj: KOPER

PrispevekObjavljeno: Sre Mar 26, 2008 8:29 pm    Naslov sporočila:   Odgovori s citatom

Alessio:

Naredil sem tako in sedaj nimam več problemov z kompajlerjem.

Zaenkrat najleša hvala !!!

Se priporočam .

LP Rudi.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Olaf
Član
Član



Pridružen-a: Tor 14 Nov 2006 20:09
Prispevkov: 127
Aktiv.: 0.56
Kraj: Ljubljana

PrispevekObjavljeno: Čet Mar 27, 2008 1:01 pm    Naslov sporočila:   Odgovori s citatom

PC_Master je napisal/a:
Ta tema bi meni tudi prav prišla.
Kako definirati port?
( Prosim celo kodo ne samo eno linijo Laughing )


Celo kodo imaš zapisano v tisti header datotekah (npr. LPC21xx.h ali pa LPC23xx.h itd.).

Drugače pa greš pogledat v datasheet na kateri lokaciji se nahaja željeni register (PIN Connect block). Če želiš definirat port 0, potem moraš definirat registre PINSEL0 (lokacija 0xE002C000), PINSEL1 (0xE002C004), PINMODE0 in PINMODE1 (0xE002C040 in 0xE002C044). Temu sledijo še definicje GPIO registrov: IOPIN0 (0xE0028000), IOSET0 (0xE0028004), IODIR0 (0xE0028008-) in IOCLR0 (0xE002800C).

Programsko pa to zapišeš tako kot je zapisano v headerju, torej z makroji:

Koda:
#define PINSEL0        (*(volatile unsigned long *)(0xE002C000))
#define PINSEL1        (*(volatile unsigned long *)(0xE002C004))
#define PINMODE0       (*(volatile unsigned long *)(0xE002C040))
#define PINMODE1       (*(volatile unsigned long *)(0xE002C044))
#define IOPIN0         (*(volatile unsigned long *)(0xE0028000))
#define IOSET0         (*(volatile unsigned long *)(0xE0028004))
#define IODIR0         (*(volatile unsigned long *)(0xE0028008))
#define IOCLR0         (*(volatile unsigned long *)(0xE002800C))


Zdaj dostopaš do teh registrov kar preko njihovega imena, vrednosti pa se v bistvu zapisujejo na te določene lokacije. Na tak način lahko definiraš tudi vse ostale registre. Si to želel vedeti?

_________________
To mi deli!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
PC_Master
Član
Član



Pridružen-a: Pon 17 Mar 2008 20:10
Prispevkov: 319
Aktiv.: 1.51
Kraj: Domžale , Blizu Ljubljane , Poštna 1230

PrispevekObjavljeno: Čet Mar 27, 2008 1:43 pm    Naslov sporočila:   Odgovori s citatom

No to je že malo preveč Laughing .

Zdele sem videl , da je to za ARM in ne AVR Shocked Shocked Shocked .

Se opravičujem Confused .
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
rudiP
Član
Član



Pridružen-a: Tor 07 Avg 2007 15:30
Prispevkov: 1235
Aktiv.: 5.66
Kraj: KOPER

PrispevekObjavljeno: Čet Mar 27, 2008 6:56 pm    Naslov sporočila: icon_idea Še en biškotek (ARM + C) Odgovori s citatom

Ne znam razvozlati kako dela spodnja procedura !!!
Tudi deklaracije ni v primeru, A mi lahko kdo pomaga?


void LCD_var(var)
{
int a, i, set;
set = 0;
for(i = 9;i >= 0;i --)
{
a=0;
while (var >= desetX(i))
{
var -= desetX(i);
a++;

if (a !=0 )
{
set = 1;
}

if (a !=0 || set)
{
LCD_var (a);
}

if (a == 0 && i == 0 && set == 0)
{
LCD_var (a);
}
}
}

}

int desetX(x)
{
int i = 0;
int rez = 1;
while (i < x)
{
rez *= 10;
i++;
}
return rez;
}


Lep pozdrav iz Kopra Rudi
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
rudiP
Član
Član



Pridružen-a: Tor 07 Avg 2007 15:30
Prispevkov: 1235
Aktiv.: 5.66
Kraj: KOPER

PrispevekObjavljeno: Čet Mar 27, 2008 7:15 pm    Naslov sporočila: icon_idea  Odgovori s citatom

da ne bo pomote , problem je v

while (var >= desetX(i))

_________________
Lep pozdrav iz Kopra Rudi
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
dragoon
Član
Član



Pridružen-a: Čet 03 Maj 2007 21:51
Prispevkov: 452
Aktiv.: 2.04
Kraj: Trojane

PrispevekObjavljeno: Čet Mar 27, 2008 8:16 pm    Naslov sporočila:   Odgovori s citatom

Dokler je var večji ali enak desetX(i) delaj. <--to je direktni prevod tega. desetX(i) je funkcija, ki vrača vrednost rez.

Koda:
Za pisanje kode imamo na forumu značko [ code ]

                ne zbriše zamikov...
         
                          nihče ne bo štel zaklepajev za tabo... OK?

_________________
LP, Mitja
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
rudiP
Član
Član



Pridružen-a: Tor 07 Avg 2007 15:30
Prispevkov: 1235
Aktiv.: 5.66
Kraj: KOPER

PrispevekObjavljeno: Čet Mar 27, 2008 10:43 pm    Naslov sporočila: icon_idea  Odgovori s citatom

razumel sem kako dela, vendar sem imel problem z najavo.

Kot novinec v C-ju pa nisem vedel da je možna tudi taka deklaracija funkcije:

int desetX(int);

V primerih za Šarm, iz katerih se učim, je avtor izpustil deklaracije.
Upoštevam Vaše pripombe Dragoon hvala.

Koda:


void LCD_var(int var)
{
    int a, i, set;
   set = 0;
   for(i = 9;i >= 0;i --)
   {
      a=0;
      while (var >= desetX(i))
      {
         var -= desetX(i);
         a++;

         if (a !=0 )
         {
            set = 1;
         }
         if (a !=0 || set)
         {
            LCD_var (a);
         }
         if (a == 0 && i == 0 && set == 0)
         {
            LCD_var (a);   
         }
      }
   }
}



int desetX(int x)
{
   int i = 0;
   int   rez = 1;
   while (i < x)
   {
      rez *= 10;   
      i++;
   }
   return rez;
}



_________________
Lep pozdrav iz Kopra Rudi
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
dejko1
Član
Član



Pridružen-a: Ned 16 Mar 2008 0:21
Prispevkov: 271
Aktiv.: 1.29
Kraj: Ljubljana

PrispevekObjavljeno: Čet Mar 27, 2008 10:54 pm    Naslov sporočila:   Odgovori s citatom

Vsekakor ne bi rekel, da je taka delkaracija standardna (ne deluje na skoraj nobenem prevajalniku).
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
chaos
Član
Član



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.64
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Čet Mar 27, 2008 11:14 pm    Naslov sporočila:   Odgovori s citatom

int desetX(int);

Mogoče tole ni standarden c, v c++ pa lahko tako deklariraš funkcije ...

Ne da se mi zdajle preizkusit, samo bi rekel, da bi znal tole gcc prebavit samo z warningom ...

LP!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
rudiP
Član
Član



Pridružen-a: Tor 07 Avg 2007 15:30
Prispevkov: 1235
Aktiv.: 5.66
Kraj: KOPER

PrispevekObjavljeno: Pet Mar 28, 2008 7:30 am    Naslov sporočila:   Odgovori s citatom

Avtor te deklaracije (ne drugih) ni napisal, sem sam poskusil več varjant pa je

yVision3 prebavil. Bom še praktično probal, če program dela na plati, in javil.

_________________
Lep pozdrav iz Kopra Rudi
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
rudiP
Član
Član



Pridružen-a: Tor 07 Avg 2007 15:30
Prispevkov: 1235
Aktiv.: 5.66
Kraj: KOPER

PrispevekObjavljeno: Pet Mar 28, 2008 7:19 pm    Naslov sporočila:   Odgovori s citatom

Moj prvi program v C-ju za ARM , katerega sem priredil iz delcev kode Šarma za LCD in Led in malo obrnil po lastni želji , sem uspešno zapekel v KEIL MCB2130. Program inicializira Lcd ter vozi LEDice.

Hvala vsem kateri ste mi pomagali !!!!

_________________
Lep pozdrav iz Kopra Rudi
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
dpavli
Član
Član



Pridružen-a: Čet 25 Jan 2007 9:19
Prispevkov: 121
Aktiv.: 0.54

PrispevekObjavljeno: Sob Mar 29, 2008 1:06 am    Naslov sporočila:   Odgovori s citatom

Ali si uporabil Buermenov LCD driver?

Ti ga je ratalo oklestit na <16kB (zaradi uVisiona)?

LPd
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 7 dni


Powered by phpBB © 2001, 2005 phpBB Group