<font face="Arial">
Hi,<br>
wer kan mir helfen diese MS C++ Funktion in Delphi5 zu uebersetzen?<br>
<br>
Danke<br>
<br>
Gruß<br>
Harald Binder<br>
<br>
<br>
#define ICB_ADJUSTBUFFER4K(_st_, _st4k_, _si_, _si4k_) \<br>
{ \<br>
..if(((long)_st_ & 0x0FFF) != 0) \<br>
..{ \<br>
....long _sa_ = (long)_st_; \<br>
....long _pd_ = _sa_ & 0x00000FFF; \<br>
...._sa_ &= 0xFFFFF000; \<br>
...._sa_ += 0x00001000; \<br>
...._pd_ = 0x00001000 - _pd_; \<br>
....if(_si4k_ != NULL) \<br>
......*_si4k_ = _si_ - _pd_; \<br>
....if(_st4k_ != NULL) \<br>
......*_st4k_ = (void*)_sa_; \<br>
..} \<br>
..else \<br>
..{ \<br>
....if(_si4k_ != NULL) \<br>
......*_si4k_ = _si_; \<br>
....if(_st4k_ != NULL) \<br>
......*_st4k_ = (void*)_st_; \<br>
..} \<br>
}<br>
<br>
<br>
..- Speicherallokierung für die Aufnahme:<br>
....Die Startadresse der allokierten Speicherblöcke, die für die Aufnahme<br>
....verwendet werden (mit icb_PrepareBuffer()), müssen durch 4096 teilbar<br>
....sein (Page aligned) !!! Ist dies nicht der Fall können durch den<br>
....DMA Chip fremde Speicherbreiche überschrieben werden, was u.U. zu<br>
....Abstürzen bis zum BlueScreen führt. Das Macro ICB_ADJUSTBUFFER4K der<br>
....piranha.h kann zum Korrigieren der Startadresse und Blockgröße<br>
....verwendet werden:<br>
<br>
....Verwendung des Konvertierungsmacros ICB_ADJUSTBUFFER4K<br>
....(definiert in piranha.h):<br>
<br>
....Bsp. 1:<br>
<br>
.....long size = 32768;<br>
.....char* start = 0xE000A960;<br>
<br>
.....ICB_ADJUSTBUFFER4K((void*)start, (void**)&start, size, &size);<br>
<br>
.....Ergebnis: size = 31072;<br>
................start = E000B000;<br>
<br>
....Bsp. 2:<br>
<br>
......long size = 32768;<br>
......char* start = 0xE000A960;<br>
......long size4k;<br>
......char* start4k;<br>
<br>
......ICB_ADJUSTBUFFER4K((void*)start, (void**)&start4k, size, &size4k);<br>
<br>
......Ergebnis: size = 32768;<br>
.................start = 0xE000A960;<br>
.................size4k = 31072;<br>
.................start4k = E000B000;<br>
<br>
<br>
....WICHTIG:<br>
.....Falls die Originalwerte noch benötigt werden (z.B. zum Freigeben<br>
.....des Speicherblocks), so müssen diese gespeichert werden (wie in Bsp. 2)<br>
</font>
Hi,<br>
wer kan mir helfen diese MS C++ Funktion in Delphi5 zu uebersetzen?<br>
<br>
Danke<br>
<br>
Gruß<br>
Harald Binder<br>
<br>
<br>
#define ICB_ADJUSTBUFFER4K(_st_, _st4k_, _si_, _si4k_) \<br>
{ \<br>
..if(((long)_st_ & 0x0FFF) != 0) \<br>
..{ \<br>
....long _sa_ = (long)_st_; \<br>
....long _pd_ = _sa_ & 0x00000FFF; \<br>
...._sa_ &= 0xFFFFF000; \<br>
...._sa_ += 0x00001000; \<br>
...._pd_ = 0x00001000 - _pd_; \<br>
....if(_si4k_ != NULL) \<br>
......*_si4k_ = _si_ - _pd_; \<br>
....if(_st4k_ != NULL) \<br>
......*_st4k_ = (void*)_sa_; \<br>
..} \<br>
..else \<br>
..{ \<br>
....if(_si4k_ != NULL) \<br>
......*_si4k_ = _si_; \<br>
....if(_st4k_ != NULL) \<br>
......*_st4k_ = (void*)_st_; \<br>
..} \<br>
}<br>
<br>
<br>
..- Speicherallokierung für die Aufnahme:<br>
....Die Startadresse der allokierten Speicherblöcke, die für die Aufnahme<br>
....verwendet werden (mit icb_PrepareBuffer()), müssen durch 4096 teilbar<br>
....sein (Page aligned) !!! Ist dies nicht der Fall können durch den<br>
....DMA Chip fremde Speicherbreiche überschrieben werden, was u.U. zu<br>
....Abstürzen bis zum BlueScreen führt. Das Macro ICB_ADJUSTBUFFER4K der<br>
....piranha.h kann zum Korrigieren der Startadresse und Blockgröße<br>
....verwendet werden:<br>
<br>
....Verwendung des Konvertierungsmacros ICB_ADJUSTBUFFER4K<br>
....(definiert in piranha.h):<br>
<br>
....Bsp. 1:<br>
<br>
.....long size = 32768;<br>
.....char* start = 0xE000A960;<br>
<br>
.....ICB_ADJUSTBUFFER4K((void*)start, (void**)&start, size, &size);<br>
<br>
.....Ergebnis: size = 31072;<br>
................start = E000B000;<br>
<br>
....Bsp. 2:<br>
<br>
......long size = 32768;<br>
......char* start = 0xE000A960;<br>
......long size4k;<br>
......char* start4k;<br>
<br>
......ICB_ADJUSTBUFFER4K((void*)start, (void**)&start4k, size, &size4k);<br>
<br>
......Ergebnis: size = 32768;<br>
.................start = 0xE000A960;<br>
.................size4k = 31072;<br>
.................start4k = E000B000;<br>
<br>
<br>
....WICHTIG:<br>
.....Falls die Originalwerte noch benötigt werden (z.B. zum Freigeben<br>
.....des Speicherblocks), so müssen diese gespeichert werden (wie in Bsp. 2)<br>
</font>
Comment