Das Elektor-Forum schließt seine Pforten (siehe auch http://www.elektormagazine.de/forum). Ab Freitag, den 01. März, ist es nicht mehr möglich, sich im Forum einzuloggen. Alle Inhalte des Forums bleiben jedoch bis Ende März noch sichtbar. Am 01. April wird das Forum schließlich komplett geschlossen.

Pin/Port-Zuweisungen in einem Array

Postby quake » Sat Jul 18, 2009 12:00 am

Hallo,

@elektor Moderator: Warum kann man in einem Forum, in dem es auch um C geht in einem Code-Abschnitt keine geschweiften Klammern verwenden?

So nun zu meinem Problem. Um mein Programm flexiebel zu halten, möchte ich ein const array definieren, in dem ich Port zuweisungen ablegen kann. Wie müsste diese Zuweisung aussehen?

// Definition  (Die Klammern hinten sollen geschweifte Klammern sein)
const char mypinarray[3] = (p0_3,p2_6,p1_2);

// Pinpegel ändern (irgendwo im Programm)
mypinarray[1] = 1;


Dies funktioniert aber so nicht.

ciao
Martin
quake
 
Posts: 65
Joined: Fri Jan 03, 2014 1:50 pm

Postby wollekr » Tue Jul 21, 2009 12:00 am

Hallo,

mypinarray[1] = 1;

versucht mypinarray[1] zu ändern. Da es aber wegen const im Programmspeicher abgelegt sein sollte, geht das natürlich nicht (und ist auch nicht das Gewünschte).

mypinarray enhält die Addressen der Ports, daher versuche mal:
*(mypinarray[1]) = 1;

MfG
Wolfgang
wollekr
 
Posts: 31
Joined: Fri Jan 03, 2014 1:48 pm

Postby quake » Wed Jul 22, 2009 12:00 am

Das Array kann schon im Programmspeicher liegen aber es müsste Zeiger auf ein Bit (Portpin) enthalten.
quake
 
Posts: 65
Joined: Fri Jan 03, 2014 1:50 pm

Postby frankl » Mon Jul 27, 2009 12:00 am

Sorry, aber Zeiger auf Bits funktionieren in C nicht. Zeiger können nur mit absoluten Adressen arbeiten, aber an dieser Adresse kann man nicht mehr auf Bits referenzieren. Du könntest höchstens mit Maken auf das Port zugreifen.
#define BIT0 0x01
#define BIT1 0x02
#define BIT2 0x04
#define BIT3 0x08
#define BIT4 0x10
#define BIT5 0x20
#define BIT6 0x40
#define BIT7 0x80
unsigned char PortArray[]=(0x3C0, 0x3C1, 0x3C4, 0x3C5, 0x3C8, 0x3C9, 0x3CC, 0x3CD, 0x3D0, 0x3D1, 0x3D4, 0x3D5, 0x3D8, 0x3D9, 0x3DC, 0x3DD); // runde klammer durch geschweifte ersetzen
*PortArray[0] = *PortArray[0] | BIT0; //setzt bit 0 in Port 0 auf "1"
frankl
 
Posts: 125
Joined: Thu Jan 02, 2014 10:42 am

Postby quake » Mon Jul 27, 2009 12:00 am

Das ist nicht das was ich suche. Aber trotzdem Danke für den Mühen, ich habe es jetzt anders gelöst.

ciao
Martin
quake
 
Posts: 65
Joined: Fri Jan 03, 2014 1:50 pm


Return to Das R8C-Projekt

Who is online

Users browsing this forum: No registered users and 1 guest