Giả lập điện thoại Symbian trên PC

Một phần của tài liệu TÌM HIỂU và NGHIÊN cứu kỹ THUẬTPHÁT TRIỂN ỨNG DỤNG TRÊN MÔITRƯỜNG SYMBIAN OS (Trang 129)

2 Hướng nghiên cứu và giới hạn đề tài

6.1Giả lập điện thoại Symbian trên PC

Trong các bộ công cụ phát triển SDK luôn cung cấp một chương trình giả lập môi trường hoạt động của điện thoại Symbian trên môi trường PC với hệđiều hành Windows, thường được gọi là Emulator. Với công cụ này, việc phát triển ứng dụng cho điện thoại Symbian trên PC sẽ dễ dàng hơn đối với lập trình viên. Họ có thể

phát hiện và sửa lỗi, thấy được diện mạo chương trình ứng dụng của mình mà không cần phải đợi đến khi cài đặt chương trình trên điện thoại. Điều này giúp cho việc lập trình cho điện thoại Symbian tránh những rủi ro không đáng có như việc những lỗi nếu không phát hiện mà cài đặt và thực thi trên điện thoại có thể tác động

đến hoạt động trên điện thoại, thậm chí có thể làm hưđiện thoại. Tuy vậy có một số

phần mà Emulator không thể hỗ trợ được, nhất là những phần liên quan đến các chức năng vật lý như việc lập trình các trình điều khiển thiết bị.

Emulator mô phỏng hình dáng của điện thoại Symbian trong một cửa sổ chương trình Windows với đầy đủ màn hình điện thoại, bàn phím hay bản phím số, v.v… Emulator hỗ trợ mặc định 2 ổ đĩa ảo là Z và C ứng với 2 ổ đĩa trên điện thoại Symbian: Z: ổ ROM và C: ổ RAM. Mỗi một SDK sẽ cung cấp một Emulator có hình dáng khác nhau ứng với mô hình tham khảo cho từng dòng Pearl, Quartz hay Crystal. Các Emulator cho các nền hệ thống:

KHOA CNTT –

ĐH KHTN

H6.2 Emulator cho Series 80

KHOA CNTT –

ĐH KHTN

H6.4 Emulator cho Series 60 H6.5 Emulator cho UIQ

• Cấu trúc thư mục Emulator

- Sau khi cài đặt bộ công cụ SDK, trong thư mục của SDK có một thư mục con là Epoc32. Đây chính là thư mục chính chứa đựng các phần cấu hình và thực thi Emulator.

- Các file hệ thống của hệđiều hành Symbian trong Emulator được ánh xạ với các file hệ thống của Windows. Điều này giúp cho việc sử dụng các phần hỗ trợ hệ

thống được thực hiện dễ dàng và gần như là trong suốt với người dùng.

- Các file cấu hình chứa trong thư mục con data dưới các file ini: có thể sửa chữa các file này để cấu hình lại cho Emulator.

- Các công cụ dùng trong biên dịch như AifBuilder hay BmConvert (sẽ nói rõ trong phần biên dịch) được lưu trữ trong thư mục tool.

- Công cụ biên dịch chương trình cho điện thoại Symbian là Cygnus GCC

KHOA CNTT –

ĐH KHTN

- Ổđĩa Z và C trên Emulator được ánh xạ thành các thư mục con của Epoc32 như sau:

+ Với IDE hỗ trợ CodeWarrior: tên thư mục là winscw: - Ổ C (winscw): winscw\c\

- Ổ Z (winscw): release\winscw\urel\z\ hay release\winscw\udeb\z\ + Với IDE hỗ trợ VC++ 6.0/C++ BuilderX: tên thư mục là wins

- Ổ C (wins): wins\c\

- Ổ Z (wins): release\wins\urel\z\ hay release\wins\udeb\z\

• Vị trí file biên dịch và file ứng dụng:

- Các file biên dịch: Với 2 IDE hỗ trợ: CodeWarrior và VC++ 6.0/C++ BuilderX và 2 kiểu biên dịch: debug và release:

+ WINSCW release: release\winscw\urel\ + WINSCW debug: release\winscw\udeb\ + WINS release: release\wins\urel\

+ WINS debug: release\wins\udeb\

- File thực thi Emulator: gồm 4 file epoc.exe lưu trữ trong 4 thư mục trên ứng với các IDE và kiểu biên dịch khác nhau. (adsbygoogle = window.adsbygoogle || []).push({});

- File ứng dụng GUI: được lưu trữ trong thư mục com system\apps của các ổ đĩa tương ứng. Ví dụ với ứng dụng được xây dựng bởi IDE CodeWarrior, kiểu biên dịch release và sẽ lưu trữ trên ổ C: epoc32\winscw\c\system\apps và trên ổ Z: epoc32\release\winscw\urel\z\system\apps. Để hủy các ứng dụng khỏi Emulator ta có thể thực hiện bằng cách xóa thư mục ứng dụng này.

- File dữ liệu ứng dụng: Các file này thường sẽ lưu trữ trên ổ C ảo dựa trên

đúng vị trí ánh xạ quy ước của điện thoại trên Emulator theo cấu hình của chương trình ứng dụng. Chúng sẽ được lưu trữ đúng vị trí ánh xạ từ điện thoại Symbian xuống Emulator chứ không phức tạp như file thực thi ứng dụng.

KHOA CNTT –

ĐH KHTN

- File thư viện: Emulator lưu trữ các file thư viện và sẽ được nạp khi thực thi

ứng dụng theo cách sau:

+ Nếu tên file bao gồm ổđĩa thì nó sẽđược nạp từđúng ổđĩa ảo tương ứng trên Emulator.

+ Nếu tên file không có tên ổ đĩa thì nó sẽ mặc định được nạp từ

release\urel\ ứng với biên dịch release hay release\udeb\ ứng với biên dịch debug. + Nếu file thư viện không tìm thấy, Emulator sẽ thực hiện giống như trên

điện thoại: tìm trên các ổđĩa từ y: tới a: rồi trên z:\system\libs.

- Chương trình .exe: Được lưu trữ trên cùng thư mục như các file .dll mà chúng liên kết.

• Các đặc tính của một Emulator:

- Có thể tái cấu hình cho Emulator với những file hệ thống mới của hệ điều hành Symbian. Các file cấu hình thường có phần mở rộng là .ini.

- Một số phím chức năng của điện thoại Symbian không được ánh xạ chính xác trên Emulator như nút tắt/mởđiện thoại.

- Trên Emulator có thể dùng một số phím nóng đặc biệt dùng trong việc kiểm lỗi (debug) mà trên điện thoại Symbian không có (nhờ sử dụng bàn phím PC).

- Emulator hỗ trợ rất tốt cho debug ứng dụng, khi một tiểu trình bị lỗi, trình debugger sẽ cung cấp đầy đủ thông tin lỗi.

- Hỗ trợ sử dụng các tài nguyên phần cứng cũng như phần mềm của PC như

bàn phím, chuột, cổng giao tiếp, các đặc tính kết nối trong truyền thông của PC như

hồng ngoại (qua cổng COM3), kết nối Internet (dùng RAS) hay âm thanh.

- Emulator chạy trên CPU Intel dùng trên PC chứ không phải ARM như trên

điện thoại Symbian nên không hỗ trợ kiểu nhị phân dùng trên ARM. Chương trình

được biên dịch cho Emulator sẽ có dạng là các Windows DLL với mã thực thi là các chỉ thị nhị phân theo dạng x86 của Intel.

- Xung đồng hồ trên Emulator là 1/10 giây trong khi trên điện thoại Symbian là 1/64 giây.

KHOA CNTT –

ĐH KHTN

- Môi trường trên Emulator là môi trường một tiến trình trong khi trên điện thoại đích hỗ trợđa tiến trình. Tuy nhiên điều này đôi khi không nhận ra nhất là trên các ứng dụng đồ họa do sự kết hợp tốt giữa Emulator và Windows: mỗi tiến trình

ứng dụng sẽ được thực hiện trên một tiểu trình của Windows. Nhưng với các chương trình console hay server thì phải chú ý đặc tính này.

Tuy sự giả lập của Emulator là rất giống nhưng giữa giả lập Emulator và điện thoại Symbian thật vẫn có một khoảng cách. Do vậy, không phải chương trình nào chạy ổn định trên Emulator thì có thể hoạt động tốt trên điện thoại đích. Đây là điều mà các lập trình viên, những người phát triển ứng dụng trên hệđiều hành Symbain phải chú ý.

6.2 Kiểm lỗi (debug) (adsbygoogle = window.adsbygoogle || []).push({});

Quá trình phát triển ứng dụng luôn không tránh khỏi sai sót, đó là lý do ra đời của công việc kiểm lỗi (debug). Thông thường các môi trường phát triển tích hợp IDE đều hỗ trợ việc kiểm lỗi này. Nhưng khác với việc phát triển ứng dụng trên máy tính nơi mà môi trường phát triển ứng dụng cũng chính là môi trường hoạt

động của ứng dụng, ứng dụng trên hệ điều hành Symbian được phát triển trên máy tính nhưng môi trường hoạt động là trên điện thoại với hệđiều hành Symbian hoàn toàn khác biệt: có những ứng dụng hoạt động tốt trên Emulator nhưng gặp lỗi khi chạy trên điện thoại đích. Do đó quá trình kiểm lỗi đối với ứng dụng Symbian bao gồm 2 quá trình: kiểm lỗi trên Emulator và kiểm lỗi trên điện thoại Symbian. Tuy nhiên không phải IDE nào cũng hỗ trợ cả 2 quá trình này mà thường chỉ là kiểm lỗi trên Emulator. Theo tôi biết, hiện nay chỉ có IDE Metrowerks/CodeWarrior là có hỗ

trợ kiểm lỗi trên điện thoại Symbian với phiên bản Professional Edittion và OEM Edittion. Ngoài ra còn có GDB (GNU Debugger) là một chương trình độc lập chạy trên máy tính được sử dụng để kiểm lỗi trên điện thoại Symbian

6.2.1 Kiểm lỗi trên Emulator

Công việc kiểm lỗi luôn là một phần không thể thiếu trong một IDE. Các IDE dùng trong phát triển ứng dụng trên Symbian luôn hỗ trợ kiểm lỗi trên Emulator.

KHOA CNTT –

ĐH KHTN

Giống như mọi phần debugger trên các IDE, phần debugger trên các IDE phát triển

ứng dụng Symbian hỗ trợ các chức năng: ngắt chương trình, chạy từng bước, xem giá trị biến hay thực hiện tại vị trí con trỏ, … Sau khi biên dịch với kiểu biên dịch debug cho môi trường IDE (WINSCW hay WINS), ta hoàn toàn có thể thực hiện các chức năng này để bắt các lỗi cú pháp cũng như logic. Muốn bắt đầu debbug ở đâu, chúng ta đặt dấu breakpoint tại đó. Nếu muốn debug từđầu thì đặt tại E32Dll(). Sau đó chọn chức năng debug trên menu.

Một kỹ thuật rất hay sử dụng trong quá trình debug là đưa câu lệnh RDebug::Print() vào chương trình. Các hàm này sẽ in các đoạn văn bản mô tả ra file tạm có tên là epocwind.out trong thư mục Windows Temp. Các định dạng kiểu dữ

liệu dùng trong chuỗi tham số của lệnh Print theo định dạng của C. Ví dụ

TInt error=-10;

_LIT(KMsgDebug,"Error value: %d"); RDebug::Print(KMsgDebug,error);

Một số phím nóng cũng được dùng trong quá trình debug để phục vụ cho việc kiểm tra vùng heap hay các server. Ví dụ:

- Ctrl+Alt+Shift+A: số ô heap đang sử dụng.

- Ctrl+Alt+Shift+B: số tài nguyên file server được cấp. - Ctrl+Alt+Shift+C: số tài nguyên window server được cấp. 6.2.2 Kiểm lỗi trên điện thoại Symbian

Việc kiểm lỗi trên điện thoại Symbian là khá chậm và phức tạp nhất là khi dùng câu lệnh RDebug::Print(). Một việc khá bất tiện khác là khi phát hiện lỗi, sau khi sửa lỗi, ta phải biên dịch, cài đặt trên điện thoại lại rồi mới kiểm lỗi tiếp được.

• Với IDE CodeWarrior Professional Edittion hay OEM Edittion

Để có thể kiểm lỗi trên điện thoại Symbian, phần Debugger trên CodeWarrior IDE giao tiếp với một chương trình tên là Metro TRK (Metrowerks’ Target Resident Kernel) chạy trên điện thoại Symbian thông qua cổng kết nối với

đường liên kết giữa điện thoại và máy tính. Thông qua Metro TRK việc kiểm lỗi trên điện thoại sẽ trở nên khá dễ dàng. Không chỉ hỗ trợ kiểm lỗi các ứng dụng đồ

KHOA CNTT –

ĐH KHTN

họa, với Metro TRK, các chương trình thực thi khác như chương trình .exe hay .dll cũng được kiểm lỗi dễ dàng.

Chương trình Metro TRK có thể tìm thấy trong SDK (với phiên bản SDK dùng hệ điều hành Symbian 7.0.7 trở về sau) hoặc lấy trực tiếp trên mạng tại www.Metrowerks.com/MW/Support/Download/default.htm. Sau khi cài đặt chương trình Metro TRK trên điện thoại Symbian, quá trình debug sẽ được thực hiện theo các bước sau:

- Kết nối điện thoại với máy tính.

- Biên dịch chương trình trên điện thoại với kiểu biên dịch debug và loại biên dịch ARMI (sẽ nói trong phần biên dịch).

- Thực thi Metro TRK trên điện thoại.

- Cấu hình kết nối từ xa cho IDE CodeWarrior: Edit->Preference. Sau đó chọn Remote Connections và giá trị cho nó là Symbian MetroTRK.

- Bắt đầu kiểm lỗi chương trình trên IDE CodeWarrior như kiểu debug cho Emulator.

• Với chương trình GDB: (adsbygoogle = window.adsbygoogle || []).push({});

GNU debugger (GDB) là chương trình độc lập chạy trên máy tính sẽ giúp kiểm lỗi trên điện thoại Symbian kết nối với máy tính. Giống như với kiểm lỗi bằng IDE CodeWarrior cần Metro TRK, GDB cũng cần một chương trình nhỏ chạy trên

điện thoại Symbian để giao tiếp với GDB, chương trình GDB stub (gdbstub.exe). Những đặc tính của chương trình GDB:

- GDB có giao diện đồ họa và dòng lệnh: thường giao tiếp bằng dòng lệnh

được sử dụng do hỗ trợđầy đủ hơn giao diện đồ họa.

- GDB có thể kiểm lỗi cho ứng dụng đồ họa và chương trình .exe. - Hỗ trợ hầu hết các tính năng kiểm lỗi.

- Kiểm lỗi cho các chương trình ARMI, ARM4 và THUMB. - Hỗ trợ chuỗi Unicode.

- GDB và GDB stub có thể giao tiếp qua cổng giao tiếp tuần tự, hay hồng ngoại, bluetooth cũng có thể.

KHOA CNTT –

ĐH KHTN

- Cho phép chuyển file từ máy tính lên điện thoại. - GDB stub có thể cấu hình từ 1 file hoặc từ dòng lệnh.

- Kết quả xuất kiểm lỗi có thể trực tiếp ra file hay trong môi trường text console.

- GDB không hỗ trợ kiểm lỗi các chương trình đa tiểu trình, các chương trình ở cấp nhân kernel và không thể gắn GDB với một tiến trình đang chạy.

Quá trình kiểm lỗi với GDB:

- Biên dịch chương trình với dòng SRCDBG trong file .mmp với loại biên dịch ARMI (để có thể sử dụng trên các nền khác).

- Kết nối điện thoại và máy tính.

- Cài đặt chương trình ứng dụng lên điện thoại. - Thực thi GDB stub trên điện thoại.

- Thực thi GDB và bắt đầu kiểm lỗi.

- Để đóng phần kiểm lỗi, trên GDB, từ dòng lệnh gõ : q và trên GDB stub gõ qq (q 2 lần).

Một số câu lệnh thông dụng dùng trên GDB:

- break breakpoint hay b breakpoint: đặt một điểm ngắt tại breakpoint với breakpoint có thể là số dòng hay tên hàm. ví dụ: break Meadebug.cpp:110 hay b CMeadebugAppUi::HandleCommandL.

- clear linenumber/function: xóa breakpoint với số dòng hay tên hàm. - stepi hay si: chạy từng bước.

- nexti hay ni: bước tiếp theo.

- continue hay c: thực hiện tiếp cho đến khi gặp breakpoint tiếp theo. - print variablename hay p variablename: in tên biến và giá trị. - quit hay q: thoát khỏi GDB.

KHOA CNTT –

ĐH KHTN

6.2.3 Một số mã lỗi thông dụng trong Symbian

Phần này giới thiệu các mã lỗi thông dụng trong Symbian. Nó không chỉ được sử dụng để phát hiện lỗi trongdebug mã còn được sử dụng trong lập trình để kiểm soát lỗi.

KErrNone : 0 Không có lỗi.

KErrNotFound: -1 Không thể tìm thấy đối tượng cần KErrGeneral: -2 Lỗi chung

KErrCancel: -3 Thao tác bị từ chối KerrNoMemory: -4 Không đủ bộ nhớ (adsbygoogle = window.adsbygoogle || []).push({});

KErrNotSupported: -5 Thao tác yêu cầu không được hỗ trợ

KErrArgument: -6 Yêu cầu lỗi KErrTotalLossOfPrecision: -7 KErrBadHandle: -8 Đối tượng lỗi KErrOverflow: -9 Tràn KErrUnderflow: -10 KErrAlreadyExists: -11 Đã tồn tại KErrPathNotFound: -12 Không tìm thấy thư mục cần KErrDied: -13 Đối tượng đã đóng

KErrInUse: -14 Đối tượng đang được sử dụng KErrServerTerminated: -15 Server đã đóng

KErrServerBusy: -16 Server bận

KErrCompletion: -17 Lỗi khi hoàn tất thao tác KErrNotReady: -18 Đối tượng chưa sẵn sàng KErrUnknown:-19 Lỗi chung, không rõ KErrCorrupt: -20

KErrAccessDenied: -21 Truy cập bị từ chối KErrLocked: -22 Đối tượng bị khóa KErrWrite: -23 Lỗi ghi

KHOA CNTT –

ĐH KHTN

KErrEof : -25 Lỗi kết thúc file KErrDiskFull: -26 Đĩa đầy

KErrBadDriver: -27 Lỗi trình điều khiển thiết bị

KErrBadName: -28 Tên sai

KErrCommsLineFail: -29 Đường truyền thông lỗi KErrCommsFrame: -30 Khung truyền thông lỗi KErrCommsOverrun: -31 Lỗi tràn đường truyền thông

KErrCommsParity: -32 Lỗi kiểm chẵn/lẽ trong truyền thông KErrTimedOut: -33 Timed out

KErrCouldNotConnect: -34 Lỗi kết nối

KErrCouldNotDisconnect: -35 Lỗi khi ngắt kết nối KErrDisconnected: -36 Đối tượng đã ngắt kết nối KErrBadLibraryEntryPoint: -37 Điểm vào thư viện sai KErrBadDescriptor: -38 Descriptor lỗi

KErrAbort: -39 Đã ngắt KErrTooBig: -40 Quá lớn KErrDivideByZero: -41 Chia cho 0 KErrBadPower: -42 Pin còn quá ít KErrDirFull: -43 Đầy thư mục

KErrHardwareNotAvailable: -44 Phần cứng chưa sẵn sàng

6.3 Biên dịch chương trình

Trên môi trường hệ điều hành máy tính, sau khi kiểm lỗi xong, việc biên dịch chương trình sẽ trở nên rất đơn giản với chỉ một câu lệnh hay một thao tác trên IDE. Nhưng trên hệ điều hành Symbian, việc biên dịch không hềđơn giản bởi có nhiều loại đích biên dịch khác nhau sau những quy ước xây dựng các file dự án .mmp và bld.inf, nhất là biên dịch cho các ứng dụng đồ họa bởi tài nguyên và chương trình

KHOA CNTT –

ĐH KHTN

riêng. Trước khi thực hiện biên dịch, chúng ta hãy xem xét các loại biên dịch khác

Một phần của tài liệu TÌM HIỂU và NGHIÊN cứu kỹ THUẬTPHÁT TRIỂN ỨNG DỤNG TRÊN MÔITRƯỜNG SYMBIAN OS (Trang 129)