CE 6.0 module 2.1 Win32
Transcription
CE 6.0 module 2.1 Win32
® Windows IoT Win32 Temps & I/O Thierry JOUBERT – THEORIS Mars 2015 Gestion du Temps Page 2 Mesure du temps Performance Counter Temps d’exécution Notifications Chiens de garde Multimedia Timer Optimisations 3 Principe Fourniture OEM Branchement direct sur : • Un registre • Une interruption Caractéristiques Associé directement au matériel Valeur du 64bits Utilisable pour des mesures temps réel 4 Précision BOOL QueryPerformanceFrequency( LARGE_INTEGER *lpFrequency // Number of ticks per second ); Mesure BOOL QueryPerformanceCounter( LARGE_INTEGER *lpPerformanceCount); 5 LARGE_INTEGER LARGE_INTEGER time, freq; T1, T2; freq.QuadPart = 0; QueryPerformanceFrequency (&freq); QueryPerformanceCounter (&T1); // Sequence to measure here QueryPerformanceCounter (&T2); time.QuadPart = (1000 * (T2.QuadPart – T1.QuadPart)) / freq.QuadPart; 6 Principe Service rendu par le noyau Temps écoulé depuis : • Le démarrage du système • Le lancement d’un thread Caractéristiques Branchement sur le matériel La Précision dépend de l’OAL 7 Système DWORD GetTickCount(void); // granularity = 1ms Thread BOOL GetThreadTimes( HANDLE hThread, LPFILETIME lpCreationTime, LPFILETIME lpExitTime, LPFILETIME lpKernelTime, LPFILETIME lpUserTime); typedef struct _FILETIME { DWORD dwLowDateTime; DWORD dwHighDateTime; } FILETIME; // granularity = 100 ns 8 Principe Éviter le blocage du système Borner le temps d’exécution (timeout) Rendre paramétrable ces timeout Portée Les Entrées/Sorties La gestion de l’alimentation Le GWES 9 Principe Utilisation d’un pool de threads dédiés Réveil sur « Événement » ou sur « Callback » « Un coup » ou « Périodique » Appel d’une fonction CALLBACK à chaque échéance 10 Création d’une Timer Queue HANDLE CreateTimerQueue(); Création d’un Timer BOOL CreateTimerQueueTimer( PHANDLE phNewTimer, HANDLE TimerQueue, WAITORTIMERCALLBACK Callback, PVOID Parameter, DWORD DueTime, DWORD Period, ULONG Flags ); WT_EXECUTEDEFAULT WT_EXECUTEINTIMERTHREAD WT_EXECUTELONGFUNCTION etc… 11 VOID CALLBACK WaitOrTimerCallback( PVOID lpParameter, BOOLEAN TimerOrWaitFired ); Libération BOOL WINAPI HANDLE HANDLE HANDLE DeleteTimerQueueTimer( TimerQueue, Timer, CompletionEvent ); !! Non disponibles sous WinIoT DeleteTimerQueue DeleteTimerQueueEx 12 Entrées/Sorties Page 13 Fichiers avec Win32 API identique à celle de Windows NT ou Windows 98 CreateFile, ReadFile, WriteFile, CloseHandle … Nom de fichier UNICODE & UNC (Universal Naming Convention) \\DiskName\DirectoryName\FileName Support de la run time C standard fopen, fread, fwrite, fprintf, …sont supportés Pas de support des accès en mode « overlapped » CreateFile Prototype HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDispostion, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); Appels hMyFile = CreateFile(TEXT(“\\MyFile.txt"), …); hMyDisk = CreateFile(TEXT("\\DISK3"), …); hMyPort = CreateFile(TEXT("COM2:"), …); Page 15 ReadFile & WriteFile Prototypes BOOL WriteFile( HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped); BOOL ReadFile( HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped); Page 16 SetFilePointer Prototypes DWORD SetFilePointer( HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod); BOOL SetEndOfFile(HANDLE hFile); Appels Attention au multi threading Protection nécessaire (synchronisation) Page 17