Anzeige:
Ergebnis 1 bis 12 von 12

Thema: Adresse über Kommandozeile übergeben

  1. #1
    keinWort
    Gast

    Adresse über Kommandozeile übergeben

    Hallo,

    ich benötige für einen Watchdog ein Programm, das eine Speicheradresse immer wieder überschreibt (sollte die Adresse nicht mehr überschrieben werden wird der Rechner neugestartet).
    Ich wollte also ein Programm schreiben, welches über die Kommandoezile eine Adresse übergeben bekommt. Leider ist der Übergabewert ein char.

    Ich dachte mir das Folgendermaßen. Das Programm bekommt die Adresse über die Kommandozeile und speichert sie in einem Pointer. Über den kann ich dann die Adresse überschreiben.

    Code:
    int main(int argc, char *argv[])int main(int argc, char *argv[])
    {
        int eins[10];
        int i=0;
        char * adress; //Pointer
        if(argc==1) 
        {
                    cout << "zu wenig Parameter" << endl;
        }
        else
        {
                    cout << "Speicheradresse " << argv[1] << "" << endl;
                    adress = argv[1];
                    cout << adress << endl;
                    cout << *adress << endl;
        }
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    Was ist in meinem Code falsch bzw. wie geht sowas.

  2. #2
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    willst dui das haben?
    Code:
    int main(int argc, char *argv[])int main(int argc, char *argv[])
    {
        int eins[10];
        int i=0;
        char * adress; //Pointer
        if(argc==1) 
        {
                    cout << "zu wenig Parameter" << endl;
        }
        else
        {
                    cout << "Speicheradresse " << argv[1] << "" << endl;
                    adress = argv[1];
                    cout << adress << endl;
                    cout << (unsigned int)adress << endl;
    // oder event.:
                    cout << "0x" << hex << (unsigned int)adress << endl;
        }
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  3. #3
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von keinWort
    ich benötige für einen Watchdog ein Programm, das eine Speicheradresse immer wieder überschreibt (sollte die Adresse nicht mehr überschrieben werden wird der Rechner neugestartet).
    Dir ist hoffentlich klar, daß du nur in den Speicherbereich des eigenen Prozesses schreiben kannst.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  4. #4
    keinWort
    Gast

    Erklährung

    Ich muss wohl erklähren wozu ich das brauche.

    Wir habe einen Rechner der über einen Hardware-watchdog gesteuert wird. Will heißen, sobald sich der Wert in einem Speicherbereich nicht mehr ändert wird der Rechner neu gestartet.

    Ich brauche also ein Programm, das sich einen bestimmten Speicherbereich zusichert (Eben den des Watchdog, der ja nicht zu OS gehört) und darin der Wert ständig ändert.

    Kann man das in C++ überhaupt?

  5. #5
    Registrierter Benutzer Avatar von SeeksTheMoon
    Registriert seit
    22.02.2002
    Beiträge
    762
    Du kannst es mit shared memory versuchen:
    http://www.pronix.de/pronix-229.html

    C++ wird Dir da zwar nichts nützen, aber C dürfte ja kein Problem sein.
    I haven't lost my mind - It's somewhere on a backup-disc

  6. #6
    Registrierter Benutzer Avatar von r00t043
    Registriert seit
    11.01.2004
    Beiträge
    38
    Ein Programm bekommt immer einen eigenen virtuellen Adressraum und welche physikalischen Adressen das sind liegt frei in der Hand der MMU (memory managment unit). Und aufgrund der Sicherheit darf auch kein Prozess direkt auf den physikalischen Adressraum zugreifen.
    Deswegen wirst du wohl ein Kernelmodul schreiben muessen, das das macht.

  7. #7
    keinWort
    Gast

    Isch bin Windows

    Ich wollte nur sagen, dass die Kiste unter WindowsXP läuft, ändert das irgengwas an den grundsätzlichen Aussagen?

  8. #8
    Registrierter Benutzer Avatar von SeeksTheMoon
    Registriert seit
    22.02.2002
    Beiträge
    762
    Ja, das bedeutet dass Du nachsehen musst ob Windows irgendwie den Speicherzugriff erlaubt. Wenn Du Pech hast, musst Du einen Treiber schreiben (ka wie das geht).

    Wie ist denn der Watchdog aufgebaut? Ich habe einen der vom Rechner Strom bekommt, welcher einen Kondensator auflädt.
    Wenn der voll ist, wird der Reset ausgelöst, außer der Rechner schickt ein Signal auf die Platine des WD, dass der Kondensator entladen wird und der Reset dadurch verhindert wird.

    So eine Lösung kommt ganz ohne gemeinsame Speicherbereiche usw. aus, man schickt einfach nur regelmäßig Impulse über eine Datenleitung (z.B. serielle Schnittstelle in diesem Fall)

    Worauf ich hinaus will: vielleicht kann Dein WD auch anders angesteuert werden.
    I haven't lost my mind - It's somewhere on a backup-disc

  9. #9
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Es kann sein, daß die Adresse Teil des gemappten IO Bereichs ist, also zwar wie ein Teil des Arbeitsspeichers aussieht, aber in Wirklichkeit in der Zusatzhardware ist.

    Sowas geht üblicherweise schon, sofern man das Programm mit ausreichenden Rechten laufen läßt.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  10. #10
    keinWort
    Gast

    AAAlso

    In der Anleitung zu diesem Rechner steht:

    The watchdog needs to be triggered out of the application software within a specified timeout period. You can only do this in the application software by using low-level programming or with help of the JIDA programmer’s interface.
    Dieses "JIDA programmer’s interface" ist wohl bei diesem Rechner dabei und mit "low-level programming" meinen die wohl Assembler .

  11. #11
    Registrierter Benutzer
    Registriert seit
    22.08.2002
    Ort
    Nürnberg
    Beiträge
    638
    Zitat Zitat von keinWort
    Dieses "JIDA programmer’s interface" ist wohl bei diesem Rechner dabei und mit "low-level programming" meinen die wohl Assembler .
    Der Programmierlevel hat nichts mit der Programmiersprache zu tun. Der Programmierlevel heißt, z. B. Betriebssystemebene vs. Anwendungsebene - bei Linux wäre die Betriebssystemebene ein Kernel-Modul, bei Windows ein Treiber.

    Die Programmiersprache hat damit nichts zu tun. Sicherlich kann man das in Assembler machen, aber auch in C oder C++ oder was auch immer, wenn der entsprechende Compiler und die Bibliotheken zur Verfügung stehen. Meistens trifft dies jedoch nur auf C bzw. ANSI C zu.

    Hier steht was zum JIDA-Interface: http://www.dpie.com/dimmpc/wince.html

    Pingu
    Homepage: www.pingu.info

  12. #12
    keinWort
    Gast

    Habs

    Ich habs schon gefunden.

    Auf der Herstellerseite kann man sich 'ne JIDA32 API runterladen. Ich habe so den Verdacht, dass ich bald mal wieder auf der Matte stehen werde.

    Aber trotzdem danke.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •