python zu mächtig !

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

so ich hab es geschafft in C compiliert sind das dann 17kB
komfortabel auch mit lesefunktion !!

für die anwendungen die ich benötige sollte ich doch besser nach c wechseln
komme ja von basic (BASCOM)
und arbeite auch hauptsächlich damit nur halt die PC GUI schreibe ich in Python da pygame und Blender sehr interesant sind
und ich mit pointern seit dem studium
4 anläufe für C semester1schein
und 3 anläufe für java semester2schein
AUF KRIEGSFUSS STEHE

wie das beispiel zeigt diees hier dauerte locker 10std suche im netz und mindestens 50 eher 100 compilierungsfehler bis zum run!!!

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
/* Definitions in the build of inpout32.dll are:            */
/*   short _stdcall Inp32(short PortAddress);               */
/*   void _stdcall Out32(short PortAddress, short data);    */
/* prototype (function typedef) for DLL function Inp32: */
     typedef short (_stdcall *inpfuncPtr)(short portaddr);
     typedef void (_stdcall *oupfuncPtr)(short portaddr, short datum);
#define PPORT_BASE 0x378
void test_write(void);
void test_read_control(void);
/* After successful initialization, these 2 variables
   will contain function pointers.
 */
     inpfuncPtr inp32fp;
     oupfuncPtr oup32fp;
/* Wrapper functions for the function pointers
    - call these functions to perform I/O.
 */
     short  Inp32 (short portaddr)
     {
          return (inp32fp)(portaddr);
     }

     void  Out32 (short portaddr, short datum)
     {
          (oup32fp)(portaddr,datum);
     } 


int main(void)
{
     HINSTANCE hLib;

     short x;
     int i;


     /* Load the library */
     hLib = LoadLibrary("inpout32.dll");

     if (hLib == NULL) {
          fprintf(stderr,"LoadLibrary Failed.\n");
          return -1;
     }

     /* get the address of the function */

     inp32fp = (inpfuncPtr) GetProcAddress(hLib, "Inp32");

     if (inp32fp == NULL) {
          fprintf(stderr,"GetProcAddress for Inp32 Failed.\n");
          return -1;
     }


     oup32fp = (oupfuncPtr) GetProcAddress(hLib, "Out32");

     if (oup32fp == NULL) {
          fprintf(stderr,"GetProcAddress for Oup32 Failed.\n");
          return -1;
     }


/*******************************************************/
/** IF WE REACHED HERE, INITIALIZED SUCCESSFUL    ******/
/*******************************************************/
     //test_read_control();
     test_write();
     //test_read_control();
     /* finished - unload library and exit */
     FreeLibrary(hLib);
     //system("pause");
     return 0;
}

//   TEST:  Write constant to Control register)
void test_write(void) {
     short x;
     int i;
     Out32(0x37A,0xCA);     // Set Output-only again
}
//   TEST:  READ data from control
void test_read_control(void) {
     short x;
     int i;
     i=0x37A;
     x = 12;
     x = Inp32(i);
     printf("Port read (%04X)= %04X\n",i,x);
}
Edit by Gerold: Code-Tag von "Python" nach "C" geändert
BlackJack

Das sieht aber ziemlich zusammegewürfelt aus. Wozu die Wrapperfunktionen gut sein sollten, verstehe ich zum Beispiel nicht!?

Die Einrückung ist inkonsistent, es werden Funktionen sowohl vor als auch nach der `main()` definiert. Konstanten und Variablen definiert, die dann gar nicht verwendet werden.
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Bedenke bitte, dass bei py2exe immer der ganze Interpreter mitgeliefert wird. Ein Hello-World-Programm ist dann dadurch natürlich etwa 2MB groß. Ein weit kompllexeres Programm wäre aber auch nich größer! Überleg dir mal was du in 100kb Python-Code alles anstellen kannst. Die resultierende Exe wäre dann auch nur 2,1MB. Mit 2 MB mehr könntest du etwa 100.000 Zeilen (!) Python-Code unterbringen. Ich stell mal die (sehr) kühne Behauptung auf, dass das prinzipiell reichen würde, um eine Anwendung wirklich große Anwendung wie MS Word nachzubilden. Das Problem wird also mit größerer Komplexität geringer.

Hier findest du was wie du die Größe von py2exe erzeugten exen veringern kannst: http://www.py2exe.org/index.cgi/OptimizingSize
Zudem wärs vieleicht ne Idee ne ältere Version von Python zu nehmen, wenn du auf so nen alten Rechner arbeitest.

MFG HerrHageb
abgdf

so ich hab es geschafft in C compiliert sind das dann 17kB
Ok, wenn ich gewußt hätte, daß Du da einen C-Compiler am Start hast (ist bei Win-Systemen ja nicht selbstverständlich, daß jeder mit gcc/MinGW umgehen kann), hätte ich wohl auch C empfohlen:

http://logix4u.net/Legacy_Ports/Paralle ... acing.html

Aber Du hast es ja jetzt schon ...

Gruß
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

HerrHagen hat geschrieben:Die resultierende Exe wäre dann auch nur 2,1MB. Mit 2 MB mehr könntest du etwa 100.000 Zeilen (!) Python-Code unterbringen. Ich stell mal die (sehr) kühne Behauptung auf, dass das prinzipiell reichen würde, um eine Anwendung wirklich große Anwendung wie MS Word nachzubilden. Das Problem wird also mit größerer Komplexität geringer.
Da liegst du sicherlich sehr weit daneben ;-) :

http://www.ohloh.net/p/openoffice/analyses/latest
http://blogs.msdn.com/macmojo/archive/2 ... mbers.aspx
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Danke das alle die Profie progger des python forums sich meiner angenommen haben

wie blackjack schon sagt gestückelt
ich weis nicht wirklich was in dem prog oben passiert
ich hab mir den lpt mit python in den modus bzw zustand versetzt den ich haben will beim start

dann dasc programm gestartet den wert ausgelesen CA und schreibe nun beim rechnerstart jeweils zu verschiedenen zeitpunkten den wert in dieses register zurück !

verhindern das kurtzzeitig die maschine anläuft ca 1sec kann ich das leider auch nicht
ich werde vermutlich den PC beim start trennen müssen.

der LPT port wechselt ja beim hochfahren mehrmals mit led getestet diue controll pins
da damit warscheinlich ein gerät erkannt werden soll!

es klappt und das ist bei meinen ansprüchen das nonplusultra!
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

@sea-live: Ich dachte, Du verwendest Win98. Dann sollte es aber auch ohne die inpout32.dll gehen. Hast du meinen 10-Zeiler denn einmal ausprobiert? Ich arbeite mit XP, deshalb kann ich ihn leider nicht selbst testen.
MfG
HWK
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

es läuft hervorragend sowol unter python als auch unter C bzw die compilierte version von c
in der autostart

bei win98 geht das ohne die lib

ich bin halt gerade am umbauen wollte mir ne 10GB in den rechner P233
reinbauen und mal richtig updaten so mit 256MB ram zur zeit 16
beim hochfahren von win98 wird die lpt auch nicht angefasst jedenfals reagiert die angeschlossene maschine nicht
nur bei XP da macht sie halt zuckungen und motoren bleiben auf power on stehen
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

@EyDu: Ich glaub so weit weg dürfte es dann doch nicht sein. Bei http://www.ohloh.net/p/openoffice/analyses/latest ist die gesamte OO-Suite enthalten. Da ist auch noch Calc, Impres,... dabei. Zudem nehm ich mal an, dass das ganze HTML der Hilfe geschuldet ist. Für eine isolierte Betrachtung des OO-Writers (was natürlich nicht geht) kommst du vieleicht auf 1.000.000 Zeilen C++ Code. In Python wäre equivalenter Code natürlich nochmal ein wenig kürzer. Die Ratio ist dann natürlich wieder ein Streitpunkt.
Schau dir mal die Stats von Abiword an. Klar ist das Projekt nich ganz so umfangreich aber vom Prinzip...
Zudem denke ich das gerade bei MS Office und OO (welches ja aus Star-Office hervorgegangen ist) so einiges an überflüssigen Altlasten dabei sein dürfe. Word wurde 1983 veröffentlicht!

MFG HerrHagen
Antworten