Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi C Programm nach Pascal (https://www.delphipraxis.net/128665-c-programm-nach-pascal.html)

SvB 3. Feb 2009 19:12


C Programm nach Pascal
 
Hi, ich habe ein kleines C Programm, dass ich nach Pascal übersetzen möchte. Leider habe ich von C nicht viel Ahnung und weiß nicht, wie ich das ein oder andere übersetzen soll. Wäre nett, wenn mir jemand helfen könnte. Ich schreibe einfach mal die Zeilen untereinander, mit denen ich Probleme habe.
Code:
#define PIO_A27 ((unsigned long) 1 << 27)

void *map_base;         <- definiert glaube ich eine Variable für einen Pointer

map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, PIOA_BASE & ~MAP_MASK);         <<-- Das ist kein Problem

*((unsigned long *) (map_base + (PIOA_PER & MAP_MASK))) = PIO_A26 | PIO_A25 | PIO_A24 | PIO_A11 | PIO_A14;
Bin für jede Hilfe dankbar.

Grüße Sven

[edit=SirThornberry]Delphi-Tags durch C-Tags ersetzt - Mfg, SirThornberry[/edit]

3_of_8 3. Feb 2009 19:43

Re: C Programm nach Pascal
 
So würde ich jetzt sagen:

Delphi-Quellcode:
const PIO_A27: LongWord = 1 shl 27;

var
  map_base: Pointer;

//Das sagtest du ja ist kein Problem

PLongWord(Cardinal(map_base+(PIOA_PER and MAP_MASK)))^ := PIO_A26 or PIO_A25 or PIO_A24 or PIO_All or PIO_A14;

Neutral General 3. Feb 2009 21:01

Re: C Programm nach Pascal
 
Hi 3_of_8,

Den map_base Pointer musst du vorher noch nach Cardinal casten. Sonst gibts nen Compilerfehler:

Zitat:

Zitat von 3_of_8
So würde ich jetzt sagen:

Delphi-Quellcode:
const PIO_A27: LongWord = 1 shl 27;

var
  map_base: Pointer;

//Das sagtest du ja ist kein Problem

PLongWord(Cardinal(map_base)+ (PIOA_PER and MAP_MASK))^ := PIO_A26 or PIO_A25 or PIO_A24 or PIO_All or PIO_A14;


SvB 4. Feb 2009 07:10

Re: C Programm nach Pascal
 
Danke, ich kann es mal ohne Fehler kompilieren. Da wäre ich ja nie drauf gekommen. Ob es dann funktioniert werde ich dann noch berichten.

Grüße Sven

SvB 4. Feb 2009 08:25

Re: C Programm nach Pascal
 
Es gibt doch noch ein kleines Problem und zwar habe ich noch folgende Zeilen, die ich wohl nicht richtig übersetzt habe. Könnt Ihr mir noch mal helfen:
Code:
#define MAP_SIZE 4096UL
#define MAP_MASK (MAP_SIZE -1)

#define PIOA_BASE 0xfffff400UL
#define PIOB_BASE 0xfffff600UL
.
.
.
//man beachte die ~ hinten vor MAP_MASK
map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, PIOA_BASE & ~MAP_MASK);
Ich habe folgendes draus gemacht:
Delphi-Quellcode:
const
MAP_SIZE = 4096;
MAP_MASK = (MAP_SIZE -1);

PIOA_BASE = $fffff400;
PIOB_BASE = $fffff600;
.
.
.
map_base := fpmmap(nil, MAP_SIZE, PROT_READ or PROT_WRITE, MAP_SHARED, fd, PIOA_BASE and MAP_MASK);
Danke Sven

silver-moon-2000 4. Feb 2009 09:37

Re: C Programm nach Pascal
 
Zitat:

Zitat von SvB
Code:
//man beachte die ~ hinten vor MAP_MASK
map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, PIOA_BASE & ~MAP_MASK);

Bei diesem Operator (~) handelt es sich um bitweises NOT, sollte also etwa so funktionieren

Delphi-Quellcode:
map_base := fpmmap(nil, MAP_SIZE, PROT_READ or PROT_WRITE, MAP_SHARED, fd, PIOA_BASE and not MAP_MASK);
HkagUezh*
*(hoffe, keinen allzu großen Unsinn erzählt zu haben)

SvB 4. Feb 2009 10:17

Re: C Programm nach Pascal
 
Super danke, das wars. Das Testprogramm läuft jetzt auch ohne Probleme.
Jetzt habe ich mein erstes Programm mit Freepascal für LINUX/ARM geschrieben und die Hardware kann ich auch ansteueren. :thumb: :dancer:

Grüße Sven


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz