được kiểm lỗi và chạy thử trước khi được cài đặt trên điện thoại Symbian. Chương trình Emulator và các phần liên quan được lưu trữ trong thư mục Epoc32.
- Các file header và thư viện phục vụ cho phát triển ứng dụng chứa trong thư mục con Epoc32\include.
- Một trình biên dịch dựa trên GCC để biên dịch ứng dụng cho điện thoại Symbian chứa trong thư mục con Epoc32\gcc.
- Các công cụ bổ sung dùng cho quá trình phát triển, biên dịch và triển khai ứng dụng nằm trong thư mục Epoc32\tool.
- Tài liệu tham khảo và các ví dụ tham khảo cho các lập trình viên nằm trong thư mục con Documentation và Example.
Trong khi đó, IDE (Integrated Development Environment) là môi trường phát triển tích hợp cho một hoặc một số ngôn ngữ lập trình nhất định, nó thường tích hợp: môi trường soạn thảo, trình biên dịch hoặc thông dịch. Các IDE choC/C++ trên Symbian thường không chứa các SDK mà nó làm việc với một số SDK nhất định. Một số IDE cho Symbian phổ biến: MS Visual C++ 6.0 hay .NET, Borland C++ Builer 6.0, BuilderX và Metrowerks Code Warrior, … trong đó mới nhất và được dùng phổ biến là Carbide C/C++ do Nokia phát triển [14].
3.2.3.3. Các bước xây dựng ứng dụng trên Series 60 với Carbide C/C++ C/C++
Trong phần này trình bày các sử dụng IDE Carbide C/C++ để phát triển ứng dụng. Thiết lập môi trường này cần cài đặt thêm SDK: S60-SDK-200634-3.1-Cpp- f.1090b và cài đặt ActivePerl-5.6.1.638-MSWin32-x86.msi. Các bước xây dựng một chương trình đơn giản được trình bày như sau [15]:
nhúng cho các thiết bị di động
- Tạo một dự án Symbian mới như Hình 3.4 và Hình 3.5:
Hình 3.4. Mở một dự dán Symbian mới
nhúng cho các thiết bị di động
- Xây dựng mã nguồn ứng dụng như Hình 3.6:
Hình 3.6. Xây dựng mã nguồn ứng dụng
- Biên dịch và chạy mô phỏng: một số giao diện ứng dụng như Hình 3.7, 3.8:
nhúng cho các thiết bị di động
nhúng cho các thiết bị di động 3.3. Môi trường .NET Compact Framework trong Windows Mobile
3.3.1. Hệ điều hành Windows Mobile
Windows Mobile có nguồn gốc từ Windows CE. Windows CE 1.0 được dùng trong Palm-Size PC từ năm 1998, nhưng trước đó nó đã được dùng trong các Handheld PC từ năm 1996. Handheld PC có dạng như một laptop thu nhỏ với đầy đủ bàn phím, chuột,… và chưa có màn hình cảm ứng như trên Pocket PC [22].
Máy Handheld PC Pegasus sản xuất năm 1996 của hãng HP, sử dụng Windows CE 1.0, màn hình đơn sắc Monochrome và bán được hơn nửa triệu thiết bị trong năm đầu tiên. Giao diện Windows CE 1.0 được thiết kế theo giao diện của Windows 95.
Năm 1997, Handheld PC Mercury ra đời với HĐH Windows CE 2.0, màn hình VGA 256 màu tích hợp ứng dụng Office và vẫn giữ giao diện của Windows 95.
Cuối năm 1999 và đầu 2000, Rapier, thiết bị cầm tay với HĐH Windows CE lần đầu tiên được gọi là Pocket PC hay Pocket PC 2000. Một tên gọi khác của thiết bị này lúc đó là Handheld PC – Galileo. Hệ điều hành Windows CE được nâng cấp lên phiên bản 3.0 với màn hình cảm ứng [22].
Năm 2003, Windows CE được nâng cấp lên phiên bản 4.x khá hoàn thiện và đủ sức cạnh tranh với hệ điều hành Symbian nhờ vào các tính năng Bluetooth, công nghệ .NET Compact Framework, không dây và chương trình Windows Media Player 9.0. Windows CE 4.x được đổi tên thành Windows Mobile. Cũng giống như Windows trên PC, Windows Mobile cũng dùng năm ra đời để đánh dấu các phiên bản khác nhau như: Windows Mobile 2003, Windows Mobile 2003 Second Edition (2004), Windows Mobile 5.0 (2005) [22].
Hiện nay, hệ điều hành Windows Mobile 5.0 tích hợp sẵn .NET Compact Framework đã cung cấp môi trường nền tảng và tiện lợi cho việc tích hợp các ứng dụng nhúng trên Pocket PC hoặc các thiết bị cầm tay thông minh.
3.3.2. .NET Compact Framework
3.3.2.1. Kiến trúc tổng quan .NET Compact Framework
a) Kiến trúc
.Net Compact Framework kế thừa từ nền tảng .Net Framework đầy đủ của ngôn ngữ chung thời gian chạy (common runtime language - CRL), nền tảng này được tích hợp sẵn trong môi trường phát triển tích hợp Visual Studio.net. .Net
nhúng cho các thiết bị di động
Compact Framework cung cấp các khả năng làm việc tốt với hệ điều hành Window CE bằng cách sử dụng các dịch vụ hệ điều hành cung cấp.
Kiến trúc của .Net Compact Framework được chỉ rõ trong Hình 3.9 [16]:
Hình 3.9. Kiến trúc .NET Compact Framework
Windows CE làm việc với phần cứng của một vài loại thiết bị cầm tay và cung cấp thư viện API cho các chương trình ứng dụng làm việc độc lập phần cứng. Thành phần CLR của .NET Compact Framework sử dụng thư viện của Windows CE để giao tiếp với thiết bị đồng thời quản lý và thực thi các ứng dụng đã được biên dịch sang CLR.
So với .NET Framework, tầng CRL của .NET Compact Framework cũng được xây dựng lại cho phù hợp với những hạn chế về bộ nhớ, vi xử lý của thiết bị cầm tay cũng như vấn đề tiết kiệm năng lượng. Giữa tầng CRL và Windows CE có một phần nhỏ của .NET Compact đóng vai trò tầng tương thích nền tảng cho phép ánh xạ các dịch vụ và giao diện thiết bị của .NET Compact Framework sang dịch vụ và giao diện thiết bị của Windows CE.
Tầng Framework là một phần của nền tảng .NET đầy đủ, cung cấp thư viện các lớp để phát triển ứng dụng chạy trên .NET Compact Framework. Tầng này cũng chứa các đặc tính cho phép thiết kế các lớp dễ dàng bằng giao diện đồ hoạ, cũng như việc chuyển đổi linh động giữa ứng dụng trên desktop sang thiết bị cầm tay.
b) Tiến trình (Miền ứng dụng)
Tiến trình .NET Compact Framework là một quá trình thực hiện của một ứng dụng .NET Compact Framework. Khi thực hiện tiến trình, .NET Compact
nhúng cho các thiết bị di động
Framework cho phép quản lý tài nguyên chặt chẽ, đảm bảo khi tiến trinh kết thúc các tài nguyên nó sử dụng phải được giải phóng hoặc trả về cho hệ điều hành quản lý.
Một tiến trình có thể gồm nhiều luồng, .Net Compact Framework cung cấp nhiều tính năng nâng cao về luồng mà không cần sự hỗ trợ của hệ điều hành như: cô lập lỗi, cải tiến hiệu năng, an toàn. Tiến trình thực hiện thông qua một thể hiện của CRL và các dịch vụ hệ điều hành mà ứng dụng sử dụng. CRL có thể được liên kết tĩnh hoặc động với tiến trình [16].
c) Yêu cầu bộ nhớ thiết bị
Kích thước lưu trữ .Net Compact Framework: - 1.55MB (ROM) on Pocket PC 2000/2002
- 1.35MB (ROM) on Windows Mobile 2003 for Pocket PC and Windows Mobile 2003 for Smartphone.
Dung lượng RAM yêu cầu để chạy ứng dụng: - .5 MB+ (kích thước ứng dụng)
- Kích thước điển hình của ứng dụng: - 5 - 100 KB
d) Sử dụng bộ nhớ:
.NET Compact Framework được thiết kế để hoạt động trên hệ thống với các đặc điểm sau:
- Tiết kiệm năng lượng
- Khoảng 5-10 lần, .NET Compact Framework và ứng dụng đang chạy sẽ được tái lưu trữ vào DRAM
- Không gian làm việc nhỏ: từ 128 KB đến 1 MB trong DRAM - Không cần thiết ổ cứng
Sử dụng RAM:
- RAM được sử dụng để lưu trữ các cấu trúc dữ liệu động và các mã đã dịch sang JIT (Just-In-Time) . JIT là mã được thông dịch từ mã CRL bởi bộ phận thích nghi nền tảng của .NET Compact Framework. Các mã đã sinh và các cấu trúc dữ liệu được .NET Compact Framework lưu trữ đệm trong vùng nhớ riêng của ứng dụng với kích thước được giảm tới tối thiểu.
nhúng cho các thiết bị di động
- CRL cũng sử dụng kỹ thuật code-pitching (ném mã) để giải phóng các khối mã JIT trong vùng đệm khi dung lượng bộ nhớ giảm thấp. Kỹ thuật này cho phép chương trình có kích thước lớn chạy được trong RAM nhưng cũng làm giảm hiệu năng.
Sử dụng ROM:
Các mã cốt yếu của CRL được lưu trữ trong ROM hoặc các file hệ thống trong RAM. .NET Compact Framework sử dụng ROM, flash hoặc bộ nhớ ngoài để cho phép ứng dụng chạy khi dung lượng nhớ thấp. Các file chứa các chỉ thị ngôn ngữ trung gian (IL – Intermediate Language) và các dữ liệu meta cho các lớp cũng được lưu trữ trong ROM.
3.3.2.2. Môi trường lập trình trong .NET Compact Framework
.NET Compact Framework chỉ chạy trên các thiết bị phần cứng sử dụng hệ điều hành Windows CE nên phạm vi ứng dụng của nó trong các thiết bị di động không phổ biến như C/C++ với Symbian và J2ME. Tuy nhiên .NET Compact Framework là môi trường mạnh cho phát triển các ứng dụng GUI, các ứng dụng cơ sở dữ liệu, ứng dụng mạng. Với sự phát triển của công nghệ phần cứng hiện nay, các thiết bị cầm tay có khả năng xử lý mạnh và hỗ trợ nhiều công nghệ mới đang trở lên phổ biến và yêu cầu tham gia môi trường internet của điện thoại di động thì .NET Compact Framework đang chiếm ưu thế nhờ khả năng làm việc mạnh mẽ với môi trường mạng và các tính năng hỗ trợ lập trình trực quan. Môi trường .NET Compact Framework hỗ trợ nổi bật các lĩnh vực lập trình sau [16]:
- Xây dựng các ứng dụng GUI: So với các môi trường lập trình trên thiết bị di động khác thì .NET Compact Framework vượt trội về việc phát triển các ứng dụng GUI. Sử dụng Visual Studio.Net 2005 có thể thiết kế giao diện ứng dụng trên thiết bị di động như thiết kế giao diện windows form trong giao diện đồ hoạ trực quan.
- Truy xuất dữ liệu: Trên các thiết bị chạy Microsoft Windows CE .NET hoặc Windows Mobile đều hỗ trợ việc tạo và quản lý các cơ sở dữ liệu quan hệ bằng công cụ Microsoft SQL Server 2005 Mobile Edition. .NET Compact Frame cung cấp các lớp cho phép tạo và quản lý các cơ sở dữ liệu trong không gian tên System.Data.SqlServerCe. Ngoài khả năng làm việc mạnh mẽ với dạng cơ sở dữ liệu này, .NET Compact Framework cũng cho phép truy xuất trực tiếp với cơ sở dữ liệu trên Microsoft SQL Server phiên bản 7.0 hoặc mới hơn trong không gian tên System.Data.SqlClient.
nhúng cho các thiết bị di động
- Hỗ trợ XML: Môi trường .NET Compact Framework cung cấp các lớp cơ bản để thao tác với dữ liệu XML theo mô hình DOM (Document Object Model)
- Lập trình đồ hoạ 3D: Việc xây dựng các ứng dụng đồ hoạ 3D chỉ được thực hiện trên Windows Mobile phiên bản 5.0. Hai không gian tên được sử dụng để lập trình 3D là:
o Microsoft.WindowsMobile.DirectX.
o Microsoft.WindowsMobile.DirectX.Direct3D
- Mạng và kết nối môi trường: .NET Compact Framework có khả năng làm việc tốt trong môi trường internet và các môi trường kết nối thiết bị khác. Các khía cạnh điển hình trong lĩnh vực này như sau [19]:
o Lập trình socket với giao thức TCP hoặc UDP. o Lập trình web với giao thức Http.
o Hỗ trợ Webservice với XML theo một số giao thức: giao thức dựa http, giao thức SOAP.
o Kết nối hồng ngoại. o Kết nối Bluetooth.
nhúng cho các thiết bị di động
3.3.2.3. Các bước xây dựng ứng dụng .NET Compact Framework với Visual Studio.net Visual Studio.net
- Bước 1: Tạo một project cho thiết bị di động với Visual Studio.net 2005 như Hình 3.10:
Hình 3.10. Tạo project cho thiết bị di động - Bước 2: Xây dựng ứng dụng đơn giản
o Thiết kế ứng dụng bằng giao diện đồ hoạ GUI như ví dụ trong Hình 3.11:
nhúng cho các thiết bị di động o Viết mã cho các chức năng: ví dụ viết mã cho nút nạp ảnh: /// <summary>
/// Nap anh ky tu /// </summary>
/// <param name="sender"></param> /// <param name="e"></param>
private void btnLoadImg_Click(object sender, EventArgs e) {
openImgFile.Filter = "Bitmap Image (*.bmp)|*.bmp"; if (openImgFile.ShowDialog() == DialogResult.OK) {
input_image = new Bitmap(openImgFile.FileName); imgRegChars.Image = input_image;
//kich thuoc anh thuc lon hon khung anh -> co lai
imgRegChars.SizeMode = PictureBoxSizeMode.StretchImage; }
}
- Bước 3: Biên dịch và chạy mô phỏng
o Biên dịch ứng dụng: chọn Build như Hình 3.12:
nhúng cho các thiết bị di động o Chạy mô phỏng ứng dụng: chọn Debug và chọn thiết bị mô
phỏng như Hình 3.13:
nhúng cho các thiết bị di động 3.4. J2ME
3.4.1. Kiến trúc J2ME
J2ME (Java To Micro Edition) là nền tảng công nghệ Java của SUN sử dụng để phát triển các ứng dụng trên điện thoại di động hay các thiết bị cầm tay nhỏ gọn khác [26].
Ban đầu, J2ME được phát triển từ kiến trúc Java Card, Embeded Java và Personal Java của phiên bản Java 1.1. Khi Java 2 ra đời thì Sun quyết định thay thế Personal Java và được gọi với tên mới là Java 2 Micro Edition, viết tắt là J2ME. Đúng với tên gọi, J2ME là nền tảng cho các thiết bị có tính chất nhỏ gọn.
Mục tiêu của J2ME là cho phép người lập trình viết các ứng dụng độc lập với thiết bị di động, không cần quan tâm đến phần cứng thật sự. Để đạt được mục tiêu này, J2ME được xây dựng bằng các tầng (layer) khác nhau để che giấu các chức năng giao tiếp phức tạp với phần cứng khỏi nhà phát triển. Hình 3.14. sau đây là các tầng của J2ME được xây dựng trên CLDC [28]:
Hình 3.14. Kiến trúc J2ME
- Tầng máy ảo Java (Java Virtual Machine Layer): Khi mã nguồn Java được biên dịch, nó được chuyển đổi thành mã bytecode. Mã bytecode này sẽ được chuyển thành mã ngôn ngữ máy của thiết bị di động. Tầng máy ảo Java bao gồm KVM (K Virtual Machine) là bộ
nhúng cho các thiết bị di động
biên dịch mã bytecode có nhiệm vụ chuyển mã bytecode của chương trình Java thành ngôn ngữ máy để chạy trên thiết bị di động. Tầng này cung cấp một sự chuẩn hóa cho các thiết bị di động để ứng dụng J2ME sau khi đã biên dịch có thể hoạt động trên bất kỳ thiết bị di động nào có máy ảo Java.
- Tầng cấu hình (Configuration Layer): Tầng cấu hình của CLDC định nghĩa giao diện ngôn ngữ Java (Java language interface) cho phép chương trình Java chạy trên thiết bị di động. Tầng này bao gồm một tập các API định nghĩa lõi của ngôn ngữ J2ME. Lập trình viên có thể sử dụng các lớp và phương thức của các API này tuy nhiên tập các API hữu dụng hơn được chứa trong tầng hiện trạng (profile layer).
- Tầng hiện trạng (Profile Layer): Tầng hiện trạng hay MIDP (Mobile Information Device Profile: Hiện trạng thiết bị thông tin di động). Tầng hiện trạng xây dựng bên trên tầng ứng dụng, cung cấp tập các lớp đa dạng nhằm hỗ trợ tốt hơn cho việc phát triển ứng dụng J2ME. Như vậy tầng hiện trạng đóng vai trò trung gian giao tiếp với tầng cấu hình và cung cấp các lớp cho phát triển ứng dụng.
nhúng cho các thiết bị di động
3.4.1.1. Máy ảo Java (KVM)
Vai trò của máy ảo Java hay KVM là dịch mã bytecode được sinh ra từ chương trình Java đã biên dịch sang ngôn ngữ máy. Chính KVM sẽ chuẩn hóa output của các chương trình Java cho các thiết bị di động khác nhau có thể có bộ vi xử lý và tập lệnh khác nhau. Không có KVM, các chương trình Java phải được biên dịch thành tập lệnh cho mỗi thiết bị di động. Như vậy lập trình viên phải xây dựng nhiều đích cho mỗi loại thiết bị di động [21].
Quá trình xây dựng ứng dụng MIDlet được chỉ ra trong Hình 3.15:
Hình 3.15. Tiến trình xây dựng ứng dụng
- Tạo ứng dụng trên desktop: Tạo các tệp tin nguồn Java: các tệp tin có phần mở rộng .java
- Biên dịch mã nguồn thành mã bytecode: Bộ biên dịch Java sẽ biên dịch mã nguồn thành mã bytecode. Mã bytecode này sẽ được KVM dịch thành mã máy. Mã bytecode đã biên dịch sẽ được lưu trong các tệp tin *.class và sẽ có một tệp tin *.class sinh ra cho mỗi lớp Java. - Tạo tệp tin JAR chứa:
o Tất cả các tệp tin *.class
o Các hình ảnh của ứng dụng: hiện tại chỉ hỗ trợ tệp tin *.png o Các tệp tin dữ liệu có thể được yêu cầu bởi ứng dụng
Trên máy Desktop
File nguồn *.java Trình