Problemen met bouwen van firewire driver

Pagina: 1
Acties:

  • captain007
  • Registratie: Maart 2004
  • Laatst online: 16-01 22:22
Momenteel ben ik bezig met het ombouwen van een bestaande 32 bits driver naar 64 bit. De driver is geheel in c geschreven met een belangrijke timing functie in assembly.

Nu is het probleem dat je in 64-bit niet meer van inline assembly gebruik mag maken, dus wil ik nu een intrinsic functie gaan gebruiken. Nou is het geen alledaagse functie die ik wil gebruiken, namelijk de _rdtsc functie. Die timestamp in clockcycles is essentieel voor de timing. De functie heeft de .h file met de naam intrin.h nodig, maar het probleem is dat ik die niet heb.
Ik gebruik Microsoft Visual Studio .NET 2003 en de laatste Driver Development Kit (DDK) en in de documentatie staat de functie er zelfs bij, maar de .h file kan de compiler nergens vinden.
Hoe kan ik dit probleem oplossen?

  • cenix
  • Registratie: September 2001
  • Laatst online: 12:56
Volgens MSDN (
http://msdn2.microsoft.com/en-US/library/26td21ds.aspx):
Some intrinsics are available only as intrinsics, and some are available both in function and intrinsic implementations. You can instruct the compiler to use the intrinsic implementation in one of two ways, depending on whether you want to enable only specific functions or you want to enable all intrinsics. The first way is to use #pragma intrinsic(intrinsic-function-name-list). The pragma can be used to specify a single intrinsic or multiple intrinsics separated by commas. The second is to use the /Oi (Generate Intrinsic Functions) compiler option, which makes all intrinsics on a given platform available. Under /Oi, use #pragma function(intrinsic-function-name-list) to force a function call to be used instead of an intrinsic. If the documentation for a specific intrinsic notes that the routine is only available as an intrinsic, then the intrinsic implementation is used regardless of whether /Oi or #pragma intrinsic is specified. In all cases, /Oi or #pragma intrinsic allows, but does not force, the optimizer to use the intrinsic. The optimizer can still call the function.
volgens (http://msdn2.microsoft.com/en-US/library/twchhe95.aspx) kun je dan het volgende doen:
C:
1
2
3
4
5
6
7
8
#include <intrin.h>

#pragma intrinsic(__rdtsc)

int main()
{
  return 0;
}



ps. ik heb dit even snel op MSDN bekeken: of het werkelijk zo is, zul je moeten proberen.

  • captain007
  • Registratie: Maart 2004
  • Laatst online: 16-01 22:22
nou ja, het probleem is dus dat ze die intrin.h niet met de build tools hebben meegeleverd. Dus je hebt er nog niets aan.

  • cenix
  • Registratie: September 2001
  • Laatst online: 12:56
Tja, das vreemd. Als de eerste link doorlees, zou je zeggen dat alles wat je hoeft te doen is een compiler optie gebruiken en een pragma zetten (lijkt me wel ok voor een intrinsic). In de andere link staat weer dat je de header file nodig hebt. Ik heb hem ook niet op mijn systeem staan (maar ik heb dan ook geen DDK).

  • captain007
  • Registratie: Maart 2004
  • Laatst online: 16-01 22:22
Hmm, op http://msdn2.microsoft.com/en-us/library/ms253923.aspx lees ik net dat mijn functie niet door device compilers wordt ondersteund. Dat wordt dan toch maar Visual Studio .net 2005 ergens downloaden ofzo.