fatal error, cannot create VMC Kategorie: Programmierung (von Peda, http://members.fortunecity.de/obstsammelmaschine - 1.07.2003 21:31) | |
| |
Hallo Leute! Kann mir jemand helfen? Seit einiger Zeit probiere ich nun mein Programm, dass auf mehrere Module aufgeteilt ist zu kompilieren. Dabei bekomme ich immer folgende Fehlermeldung: fatal error, cannot create VMC Ein Syntax-Fehler wird mir bei keinem Modul angezeigt. Kannst du dir bitte meinen Programmcode kontrollieren und mir weiterhelfen? Danke! Grü�e Peter Modul: abfrage.c2 //Variable für Touchpanel-Portausgabe type var { byte switch; byte wert; } var t[32]; // t...Touchpanelport //Variable zur Bargraphdefinitionn für EA KIT 320-8 type bgraph { byte wert; } bgraph bar[255]; //Konstanten const ESC = 27; const Schalter = 2; const Bargraph = 3; const Menueeintrag = 4; const TB_ein = 5; //*********** thread abfrag //*********** { run 32; //Empfangsvariablendefinition byte pos1; byte pos2; hwcom.init(); hwcom.setspeed (hwcom.SPEED_9600); wait hwcom.rxd(); pos1=hwcom.get(); //Logikteil if pos1 == ESC { wait hwcom.rxd(); pos2=hwcom.get(); if pos2 == Schalter { func.Schalter(); } if pos2 == Bargraph { func.Bargraph(); } if pos2 == Menueeintrag { func.Menueeintrag(); } if pos2 == TB_ein { func.TB_ein(); } } run digports.output; } Modul: digports /* Peter Schmidthaler Diplomarbeit: Steuergerät für Obstsammelmaschine Datum: 12.08.2002 Geändert am: 22.06.2003 ***Mit diesem Modul werden die Eingangsports abgefragt und je nach Signaleingang werden die Ausgangsports geschaltet.*** Funktionen im Modul: -------------------- 1. Variablendefinition 2. Richtung der Digitalports einstellen 3. Eingangsports einlesen 4. Ausgabeports setzen 5. TB-Schalter setzen p(x) ... Inputvariablen y(x) ... Outputvariablen Variablenerklärung: Input########### p[1] ... p[2] ... p[3] ... p[4] ... p[5] ... p[6] ... p[7] ... p[8] ... p[9] ... p[10] ... p[11] ... p[12] ... p[13] ... p[14] ... p[15] ... p[16] ... Output########## y[1] ... y[2] ... y[3] ... y[4] ... y[5] ... y[6] ... y[7] ... y[8] ... y[9] ... y[10] ... y[11] ... y[12] ... y[13] ... y[14] ... y[15] ... y[16] ... y[17] ... y[18] ... y[19] ... y[20] ... y[21] ... y[22] ... y[23] ... y[24] ... y[25] ... y[26] ... y[27] ... y[28] ... y[29] ... y[30] ... y[31] ... y[32] ... Touchpanel##### t[1] ... t[2] ... t[3] ... t[4] ... t[5] ... t[6] ... t[7] ... t[8] ... t[9] ... t[10] ... t[11] ... t[12] ... t[13] ... t[14] ... t[15] ... t[16] ... t[17] ... t[18] ... t[19] ... t[20] ... t[21] ... t[22] ... t[23] ... t[24] ... t[25] ... t[26] ... t[27] ... t[28] ... t[29] ... t[30] ... t[31] ... t[32] ... */ //Ausgaberichtung des Parallelbuses const dirPH_out = 0; const dirPH_in = 1; const dirPL_out = 1; const dirPL_in = 0; //Aktivierungskonstanten für Adresse und Daten const takeadress = 12; // Adressuebernahme mittels Port P1H.4 const takedata = 13; // Datenuebernahme mittels Port P1H.5 const nulladresse = 100; int TB; //--------------- thread output //--------------- { run 32; //+++++++++++++++++++++++++++++++++++++++++++++ // 1. Variablendefinition //+++++++++++++++++++++++++++++++++++++++++++++ int portabfrage; int nulladresse; int byteport; int PLport[8]; int turn; int schleifein; //Schleifenvariable beim Input int schleifeout; //Schleifenvariable beim Output //+++++++++++++++++++++++++++++++++++++++++++++ // 2. Richtung der Digitalports einstellen //+++++++++++++++++++++++++++++++++++++++++++++ ports.set(14, dirPH_out); //Output der P.H. Ports ports.set(15, dirPL_out); //Output der P.L. Ports //+++++++++++++++++++++++++++++++++++++++++++++ //3. Eingangsports einlesen //+++++++++++++++++++++++++++++++++++++++++++++ byteport = 0; //Adress- und Datensendeport for turn = 0 ... 1 { for schleifein = 0 ... 15 { ports.setb(byteport, init.p[schleifein].adresse); //Adresse der Input-Platine setzen ports.pulse(takeadress); //Adresse in die Input-Platine übernehmen ports.deactb(byteport); //Digitalport PL der CC2-Unit deaktivieren ports.set(15, dirPL_in); // Input der P.L. Ports init.p[schleifein].zustand[turn] = ports.get(init.p[schleifein].port); init.p[schleifein].wert = init.p[schleifein].zustand[0] + init.p[schleifein].zustand[1]; if init.p[schleifein].wert+2 { init.p[schleifein].wert = 255; // Wenn beide Werte high dann ist auch // der Ausgabewert high } else init.p[schleifein].wert = 0; // Sonst ist der Ausgabewert low ports.deactb(byteport); //Digitalports der CC2-Unit deaktivieren /* möglicherweise sind Pullup-Widerstände erforderlich, da sich sonst der Pufferbaustein des Digital-Input-Moduls sich nicht im high-impedance Zustand befindet */ } } //+++++++++++++++++++++++++++++++++++++++++++++ //4. Ausgabeports setzen //+++++++++++++++++++++++++++++++++++++++++++++ ports.setb(byteport, nulladresse); //Nulladresse ports.pulse(takeadress); //Adresse in die Input-Platine übernehmen for schleifeout = 0 ... 15 { ports.setb(byteport, init.y[schleifeout].adresse); //Adresse der Output-Platine setzen ports.pulse(takeadress); //Adresse in die Output-Platine übernehmen ports.deactb(byteport); //Digitalport PL der CC2-Unit deaktivieren ports.set(15, dirPL_out); // Output der P.L. Ports ports.set(init.y[schleifeout].port, init.y[schleifeout].wert); } ports.deactb(byteport); //Digitalport PL der CC2-Unit deativieren //+++++++++++++++++++++++++++++++++++++++++++++ //5. TB-Schalter setzen //+++++++++++++++++++++++++++++++++++++++++++++ for TB = 1 ... 32 { func.Schalter_setzen(); } run abfrage.abfrag; } Modul: func /* Peter Schmidthaler Diplomarbeit: Steuergerät für Obstsammelmaschine Datum: 24.06.2003 Geändert am: 24.06.2003 ***Mit diesem Modul werden Steuerbefehle in Funktionen verarbeitet.*** Funktionen im Modul: -------------------- 1. Schalter() Touchschalter werden gelesen und der Wert in die entsprechende Variable gespeichert. Die Variablen lauten abfrage.t[x] 2. Bargraph() 3. Menueeintrag() 4. TB_ein() */ byte pos3; byte switch; byte data; //Funktion fertig function Schalter() { wait hwcom.rxd(); pos3=hwcom.get(); wait hwcom.rxd(); switch=hwcom.get(); wait hwcom.rxd(); data=hwcom.get(); if pos3==2 { abfrage.t[switch].wert = data; } } function Schalter_setzen() { hwcom.init(); hwcom.ready(); hwcom.put(27); //ESC hwcom.put(65); //A hwcom.put(80); //P hwcom.put(abfrage.t[digports.TB].switch); //Code (Schalter) hwcom.put(abfrage.t[digports.TB].wert);//Wert (Zustand) } //Funktion noch nicht fertig function Bargraph() { pos3=1; } //Funktion noch nicht fertig function Menueeintrag() { pos3=1; } //Funktion noch nicht fertig function TB_ein() { pos3=1; } Modul: init /* Peter Schmidthaler Diplomarbeit: Steuergerät für Obstsammelmaschine Datum: 30.06.2003 Geändert am: 30.06.2003 ***Mit diesem Modul werden Initialisierungen vorgenommen.*** Funktionen im Modul: -------------------- 1. */ //Globale Variablen //Eingabevariablen definieren type my_in { int adresse; int port; int zustand[2]; int wert; } //Ausgabevariablen definieren type my_out { int adresse; int port; int wert; } my_in p[16]; my_out y[16]; int adress[2]; int adressout[2]; int schleife; //Kartenadressen festlegen /////////////////////////////////// //Adresse muss noch geaendert werden ////////////////////////////////// const inputmodul1 = 16; const inputmodul2 = 17; const outputmodul1 = 18; const outputmodul2 = 19; const outputmodul3 = 3; const outputmodul4 = 4; //--------------- thread init //--------------- { run 32; int begin; ports.deactw(0); //Startbedingungen für Digital-Input p[1].port = 0; // Taster 1 p[2].port = 1; // Taster 2 p[3].port = 2; // Taster 3 p[4].port = 3; // Taster 4 p[5].port = 4; // Taster 5 p[6].port = 5; // Taster 6 p[7].port = 6; // Taster 7 p[8].port = 7; // Taster 8 p[9].port = 0; // Taster 9 p[10].port = 1; // Taster 10 p[11].port = 2; // Taster 11 p[12].port = 3; // Taster 12 p[13].port = 4; // Taster 13 p[14].port = 5; // Taster 14 p[15].port = 6; // Taster 15 p[16].port = 7; // Taster 16 for begin = 1 ... <9 { p[begin].adresse = inputmodul1; p[begin].zustand[0] = 0; p[begin].zustand[1] = 0; } for begin = 9 ... <17 { p[begin].adresse = inputmodul2; p[begin].zustand[0] = 0; p[begin].zustand[1] = 0; } //Startbedingungen für Digital Output y[1].port = 0;// Taster 0 y[2].port = 1; // Taster 1 y[3].port = 2; // Taster 2 y[4].port = 3; // Taster 3 y[5].port = 4; // Taster 4 y[6].port = 5; // Taster 5 y[7].port = 6; // Taster 6 y[8].port = 7; // Taster 7 y[9].port = 0; // Taster 8 y[10].port = 1; // Taster 9 y[11].port = 2; // Taster 10 y[12].port = 3; // Taster 11 y[13].port = 4; // Taster 12 y[14].port = 5; // Taster 13 y[15].port = 6; // Taster 14 y[16].port = 7; // Taster 15 for begin = 1 ... <9 { y[begin].adresse = outputmodul1; y[begin].wert = 0; //Darf während des Programmdurchlaufs nicht erfolgen } for begin = 9 ... <17 { y[begin].adresse = outputmodul2; y[begin].wert = 0; // Darf während des Programmdurchlaufs nicht erfolgen } run abfrage.abfrag; } Modul: mother //############################################################## /* Funktion der einzelnen Module: A) mother... main-Thread Modul b) func... sämtliche Funktionen c) abfrage... Touchpanel-Kommunikation d) input... Einlesen der Unit-Ports e) digports... Ausgabe an die Ports f) init... Start- oder Reset-Modul */ //********* thread main //********* { run init.init; } Meine Seite: http://members.fortunecity.de/obstsammelmaschine | |
Antwort schreiben Antworten: Re: fatal error, cannot create VMC (von Tom - 2.07.2003 8:09) Re: fatal error, cannot create VMC (von André H. - 2.07.2003 7:57) |