PHỤ LỤC A WindowsEmbedded CE 6.0
A.1. Các hệ điều hành họ Windows CE
A.2.3. Lập trình ứng dụng trên WindowsEmbedded CE 6.0
Với kiến trúc đã đề cập trong phần trước, việc xây dựng ứng dụng trên Windows Embedded CE 6.0 cũng như trên Windows CE tuân theo mô hình trong Hình A.8 [31]:
Hình A.8. Mô hình lời gọi hệ thống trong Windows Embedded CE 6.0 Môi trường lập trình ứng dụng trên Windows Embedded CE 6.0 hỗ trợ các ngôn ngữ C/C++, C#, VB.net. Với kiến trúc đã đề cập trước, việc thay đổi nhân không ảnh hưởng đến các ứng dụng mức trên vì tiến trình người dùng làm việc với nhân thông qua các giao diện chính là các lời gọi hệ thống. Đồng thời nhân Windows Embedded CE 6.0 có tính mô-đun cao, làm việc với nhiều trình điều khiển thiết bị và có khả năng làm việc với các trình điều khiển mới thông qua các giao diện cổng và tuân theo chuẩn của các dịch vụ hệ thống. Do vậy một tính năng chắc chắn sẽ làm cho Windows Embedded CE 6.0 trở lên phổ biến chính là khả năng biên dịch lại và đóng gói ứng dụng tùy biến theo thiết bị. Ý tưởng này cũng giống như việc biên dịch nhân trong Linux hoặc Linux nhúng (Embedded Linux – là nhân Linux được dịch cho một thiết bị nhúng). Thuật ngữ OS Design có ý nghĩa tổng quan nói lên việc biên dịch Windows Embedded CE 6.0 cho một thiết bị cụ thể dựa trên các gói công cụ đưa thêm vào IDE Visual Studio.NET 2005 hoặc mới hơn.
Việc xây dựng ứng dụng trên Visual Studio.NET 2005 có cài thêm các công cụ hỗ trợ Windows Embedded CE 6.0 được thực hiện tương đối trực quan như đã đề cập trong phần môi trường .NET Compact Framework cho Windows Mobile. Dưới đây là ví dụ về mã nguồn đọc/ghi file cho ứng dụng dòng lệnh trên Windows Embedded CE 6.0:
// FileIO.cpp : Defines the entry point for the console application. // FileIO demo program
nhúng cho các thiết bị di động // _T("....") generates a Unicode string
// TCHAR is a Unicode string type #include "stdafx.h"
int _tmain(int argc, TCHAR *argv[], TCHAR *envp[]){ HANDLE hFile;
DWORD cBytes;
char cBuffer[] = "Hello File World\n"; printf("\nCreating CE_Demo.txt file\n"); // Open File for Write
hFile = CreateFile(_T("\\Temp\\CE_Demo.TXT"), GENERIC_WRITE,
FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
// Check for file open errors
if (hFile == INVALID_HANDLE_VALUE){ printf("file write open errors\n"); Sleep(1000);
return 0; }
if (!WriteFile(hFile, cBuffer, strlen(cBuffer), &cBytes, NULL)){ printf("file write errors\n");
Sleep(1000); return 0; }
// Close File
CloseHandle(hFile); // Open File again for read
hFile = CreateFile(TEXT("\\Temp\\CE_Demo.TXT "), GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); // Check for file open errors
if (hFile == INVALID_HANDLE_VALUE){ printf("file read open errors\n"); Sleep(1000);
return 0; }
// Read back data just written to new file
if (!ReadFile(hFile, cBuffer, 79, &cBytes, NULL)){ printf("file read errors\n");
Sleep(1000); return 0; }
// Display Data read back and delay 4 seconds before exiting printf("%s\n",cBuffer,cBytes);
printf("the file data was written and read back OK\n"); Sleep(4000); // Close File CloseHandle(hFile); return 1; }
nhúng cho các thiết bị di động