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