• Chủ Nhật, 21/12/2003 16:51 (GMT+7)

    Câu hỏi :
    Chương trình điều khiển 1 tay máy viết bằng Visual C++ 6.0, dùng lệnh _outp( ) để xuất qua cổng song song, chạy tốt trên Windows XP Professional nhưng không thể xuất điều khiển qua cổng song song, trên Windows 98 thì xuất được nhưng chạy một lúc bị báo lỗi thiếu bộ nhớ.

    Trả lời :
     

    Nếu chương trình chưa xuất được thông tin ra port điều khiển thì làm sao bạn biết nó chạy tốt. Thực tế chương trình ứng dụng trên WinXP không được phép truy xuất trực tiếp các port I/O vì WinXP là 1 HĐH có nhiều người dùng, đa nhiệm đa luồng có khả năng bảo vệ hệ thống rất cao. Một trong các biện pháp để bảo vệ hệ thống là cấm không cho ứng dụng truy xuất trực tiếp tài nguyên của máy (các port I/O là những tài nguyên của máy). Cách chính quy để viết code truy xuất phần cứng trên WinXP là viết code đó trong module driver thiết bị (dạng *.drv, *.vxd...), còn ứng dụng chỉ gọi các hàm dịch vụ của driver này để truy xuất gián tiếp phần cứng. Bạn cũng có thể xây dựng driver trên Win9x để truy xuất phần cứng một cách tin cậy và an toàn. Nhưng nếu bạn đã viết code truy xuất trực tiếp phần cứng trong phần mềm thì cũng được với điều kiện phần cứng mà bạn truy xuất không được quản lý bởi driver của Windows, nếu không tranh chấp về việc sử dụng phần cứng đó có thể xảy ra và ứng dụng sẽ báo lỗi. Để xác định nguyên nhân chính xác của lỗi thiếu bộ nhớ như bạn trình bày, bạn cần debug cẩn thận chương trình của mình, việc truy xuất I/O đơn thuần không thể gây ra lỗi thiếu bộ nhớ.

    Chuyên mục: Lập trình