Hallo Zusammen,
Ich habe eine bitte an euch ich moechte gern mit dem Programm MPLAB den
Mikrochip PIC18F4550 und den Microchip MPLAB-C18 Compiler eine logische
Funktion Programmiert. Ich habe so versucht aber es klapp nicht . Das
ist mein Programm:
#include <pconfig.h>
#include <stddef.h>
#include <i2c.h>
#include <usart.h>
#include <func1.h>
void main(void) {
\par
OSCCON |=0x80; // 8 MHz
TRISA=1 ; // Port A Input
TRISB=1 ; // Port B Input
LATBbits.LATB0=1;
TRISC=0; // Port C Output
TRISD=1; // Port D Input
LATCbits.LATC1= AND1(LATAbits.LATA1,LATBbits.LATB1);
}
#ifndef FUNC1_H
#define FUNC1_H
extern void AND1(){
bool A=0 ;
if((X=1)&&(Y=1))
{
A=1;
}
return A ;
}
#endif
Executing: "C:\\MCC18\\bin\\mcc18.exe" -p=18F4550 "test.c" -fo="test.o"
-D__DEBUG -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-\par
C:\\Users\\VPI\\Desktop\\DIP\\func1.h:5:Error [1105] symbol 'A' has not
been defined
C:\\Users\\VPI\\Desktop\\DIP\\func1.h:5:Error [1101] lvalue required
C:\\Users\\VPI\\Desktop\\DIP\\func1.h:6:Error [1105] symbol 'X' has not
been defined
C:\\Users\\VPI\\Desktop\\DIP\\func1.h:6:Error [1101] lvalue required
C:\\Users\\VPI\\Desktop\\DIP\\func1.h:6:Error [1105] symbol 'Y' has not
been defined
C:\\Users\\VPI\Desktop\\DIP\\func1.h:6:Error [1101] lvalue required\par
C:\\Users\\Nomgabou\\Desktop\\DIP\\func1.h:8:Error [1105] symbol 'A' has
not been defined
C:\\Users\\VPI\\Desktop\\DIP\\func1.h:8:Error [1101] lvalue required
C:\\Users\\VPI\\Desktop\\DIP\\func1.h:10:Error [1105] symbol 'A' has not
been defined
C:\\Users\\VPI\\Desktop\\DIP\\func1.h:10:Warning [2052] unexpected
return value
C:\\Users\\VPI\\Desktop\\DIP\\test.c:38:Warning [2058] call of function
without prototype
C:\\Users\\VPI\\Desktop\\DIP\\test.c:38:Error [1131] type mismatch in
assignment
Halting build on first failure as requested.
}
Ich habe bestimmt dummen Fehler gemacht. Ich brauche ihre Hilfe
> Ich habe bestimmt dummen Fehler gemacht.
Ja, etwa im Schnitt ein bis zwei Fehler pro Zeile!
> Ich brauche ihre Hilfe
Sehe ich auch so. Kauf Dir ein Grundlagenbuch über C, wenn Du schon kein
Tutorial im Internet suchen und/oder lesen willst.
Alles formale Fehler in der Bedienung der Sprache C. Es fehlen die
Angaben zu Übergabewerten an die Funktion AND1 und die Beachtung des
Rückgabewertes.
Formal könnte man die Sache so verbessern. Das muss aber überprüft
werden, ob die Programmlogik so gewünscht ist:
Datei test.c
In den Header kommt der Prototyp, aber nur wenn Du Die Funktion von
extern aufrufen willst:
extern void AND1(?); den Typ müßtest Du noch angeben
Ins c-file kommt die Funktionsdefinition:
void AND1(?) // TypX?, TypY?
{
bool A=0 ; // bool muß dem Compiler bekannt sein
//if((X=1)&&(Y=1)) // nicht Zuweisung
if((X==1)&&(Y==1)) // sondern Vergleich
{
A=1;
}
return A ; // wenn Du etwas zurückgibst ist es nicht void
}
Vielleicht eher so:
char AND1(char X, char Y)
{
char A=0 ; // char kennt der Compiler au jeden Fall
if((X==1)&&(Y==1))
{
A=1;
}
return A ;
}
Gruß Matthias
die ??? wrote:
> Wieso denn so ein Gefrickel?
Weil der OP offensichtlich Anfänger ist und man ihm zunächst
mal einen Weg zeigt, der ohne die C-typischen Abkürzungen und
Konventionen auskommt.
Für mich kommt es darauf an, wie jemand fragt. Wenn ein Wille und ein
Weg ersichtlich ist, warum nicht. Wenn jemand nach einer c++ Funktion
fragt, die ein Sensorsignal auf eine Motoransteuerung umrechnet, werde
ich auch schnell ironisch.
Gruß Matthias
5€ drauf, dass gerade eh nicht mehr als copy&paste war. Aber ich will
nicht nörgeln, nur so'n Gedanke.
Stefan "stefb" B. wrote:
> Nö, Ab heute ist das immer so!
Man darf gespannt sein.
> Weil der OP offensichtlich Anfänger ist und man ihm zunächst> mal einen Weg zeigt, der ohne die C-typischen Abkürzungen und> Konventionen auskommt.
Ein sauberer Programmierstil ist keine "C-typischen Abkürzung".
Übrigens, die Klammern sind völlig unnötig und sinnlos:
Was ist daran implementierungsabhängig? Allerdings muss noch stdbool.h
eingebunden werden, da dort der Datentyp bool (als _Bool) definiert
ist.
Ich hätte die Funktion bis auf die Großbuchtaben in Funktions- und
Variablennamen, die noch vom OP stammen, genauso wie Unbekannter
geschrieben. Klarer kann man doch eine Und-Verknüpfung nicht
ausdrücken, oder?