Ok, tôi chẳng bao giờ dùng shell trên PDA cả, nên cũng không dùng cái PocketDos, nên không thể test đoạn mã trên được. Nhưng tôi có thể giúp bạn biết rõ sự khác biệt giữa PC và PPC. Loại bỏ sự khác nhau về GUI, thì PC và Pocket PC có hai điểm khác biệt chính sau.
1. CPU sử dụng trên Pocket PC hiện tại theo kiến trúc ARM, đây là kiến trúc tập lệnh rút gọn (RISC - Reduced instruction set computer), bạn có thể tự tham khảo thêm về RISC. Có điều cần nói để bạn biết là ARM không có tính toán float, một phép chia float có thể dùng đến hàng ngàn lệnh (được cài đặt thủ công và release dưới dạng lib đi kèm với compiler); không có phép chia. Vì vậy muốn chương trình chạy nhanh, bạn cần đặc biệt chú ý những lệnh không tồn tại (không được hỗ trợ ở mức CPU) trong CPU.
2. Memory Management. Bộ nhớ heap trên CE được quản lý theo từng page, mỗi page 1kb, nhỏ hơn rất nhiều so với PC. Đây cũng là một điểm rất quan trọng, cần đặc biệt chú ý nếu bạn lập trình game đồ họa đòi hỏi tốc độc cao. Trên PC bạn có thể ép kiểu bộ nhớ từ BYTE* thành ULONG* (4 bytes cho mỗi đơn vị LONG), để tăng tốc copy bộ nhớ (mỗi lần gán giá trị là 4 bytes thay vì 1 byte), trên Pocket PC vì mỗi page có 1kb và được quản lý rất chặt, nên dùng kiểu đó chắc chắn sẽ phát sinh lỗi. Chỉ có thể sử dụng phương pháp trên nếu bạn dùng Virtual Allocation. Đây là một kinh nghiệm xương máu của tôi.
Đó là điểm khác biệt về kiến trúc xử lý, không chỉ trên Pocket PC mà còn trên Windows Smartphone, Symbian, Palm và Motorola Linux PDA (MobiLinux). Tôi đã đụng tay chân đến rất nhiều hệ điều hành dành cho PDA, tôi chỉ thấy hai điểm khác biệt trên là cực kỳ quan trọng, có thể gây những lỗi mà nhưng coder ít kinh nghiệm có thể mất hàng tuần vẫn không tìm ra lỗi. Còn những khác biệt như File System, GUI, Input là không đáng kể.
Còn về đoạn mã của bạn, bạn thử như sau xem có được không.
Mã:
#include <math.h>
main ();
{
int a, b;
/* input */
printf ("Nhap 1 so a nguyen duong= "); scanf ("%d",&a);
printf ("Nhap 1 so b nguyen duong= "); scanf ("%d",&b);
/* display in int */
printf ("a = %d\nb = %d\nc = %d", a, b, a / b);
/* display in float */
printf ("a = %f\nb = %f\nc = %f\nd = %f", (float)a, (float)b, (float)(a / b),((float) a) / ((float) b));
getch ();
return 0;
}
Đoạn
Mã:
printf ("a = %d\nb = %d\nc = %d", a, b, a / b);
dùng để kiểm tra giá trị nhập có đúng không. Nếu vẫn bị lỗi thì bạn có thể tin rằng thư viện float có vấn đề.