53 0 666KB
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN
**********
BÁO CÁO BÀI TẬP CUỐI KÌ MÔN KỸ THUẬT LẬP TRÌNH
Giảng viên hướng dẫn: Nguyễn Chí Cường Mã học phần: EE3491 Mã lớp: 126005 Nhóm sinh viên thực hiện: STT Họ và tên 1 Vũ Tuấn Chiến 2 Nguyễn Tuấn Dũng Những phần mềm đãThuyết giải quyết được: 3 yêu cầu mà Phạm Quang
I. 1. Nhập tên file, kiểm tra file đầu vào
MSSV 20181355 20181427 20181778
Phần mềm cho phép nhập tên file hex vào sau tên file chạy là HexDisplay vào trong Command Prompt.
Hình 1. Cách chạy chương trình trong Command Prompt Sau khi nhập file, chương trình có thể kiểm tra một số lỗi và thông báo đến người dùng như: Không mở được file. File không phải file Hex. ⇒ Vì vậy, chương trình sẽ chỉ đọc các file Hex. Khi đưa vào phần mềm các file .pdf, .jpg, .txt,… thì phần mềm sẽ báo lỗi với người dùng là file nhập vào không phải file Hex. 2. Xử lí và kiểm tra từng dòng dữ liệu Sau khi đã kiểm tra file, phần mềm tiến hành đọc và xử lí từng dòng dữ liệu. Nếu phần mềm phát hiện một trong những lỗi sau thì sẽ dừng và báo cho người dùng dòng bị lỗi:
Không có ký tự ‘:’ ở đầu dòng. Có ký tự không phải ký tự Hex. Số lượng byte data không đúng. Check sum sai.
⇒ Chương trình sẽ chỉ hoạt động khi nội dung file thỏa mãn format của Intel Hex File. 3. Hiển thị dữ liệu ra Phần mềm hiển thị ra màn hình địa chỉ ô nhớ, nội dung ô nhớ ở dạng hex và mã ASCII tương ứng. II. Cấu trúc của phần mềm 1. Cấu trúc tổng quát của phần mềm
Phần mềm được thiết kế theo phương pháp thiết kế truyền thống (top-down) và sử dụng ngôn ngữ C để lập trình
Hình 2. Sơ đồ tổng quát phần mềm Sau khi người dùng nhập tên file Hex và chạy phần mềm từ Command Prompt, đầu tiên, chương trình sẽ kiểm tra định dạng file và xem file có thể mở không và báo lại người dùng nếu có lỗi. Tiếp theo, phần mềm sẽ tiến hành đọc, kiểm tra và lưu nội dung của từng dòng vào bộ nhớ đệm. Nếu gặp lỗi ở dòng nào thì phần mềm sẽ dừng và báo lỗi dòng đó không đúng định dạng Intel Hex File. Phần mềm sẽ in ra 25 dòng. Sau đó, phần mềm hỏi người dùng có in 25 dòng tiếp theo hay không? Nếu có, phần mềm sẽ tiếp tục kiểm tra và in 25 dòng tiếp theo và lặp lại đến khi file đã được đọc hết hoặc đã quá dài. 2. Cấu trúc và chức năng chi tiết từng khối
a. Khối kiểm tra file đầu vào Phần mềm kiểm tra 4 kí tự cuối của tên file xem có phải là “.hex” không. Nếu không phải thì phần mềm báo lỗi không phải file Hex và kết thúc bằng lệnh exit(). Nếu đã đúng thì phần mềm mở file bằng lệnh fopen() và tiếp tục kiểm tra file có mở được hay không. Nếu không thì phần mềm báo lỗi không thể mở và nếu có thì phần mềm tiếp tục đến bước xử lý dữ liệu từng dòng.
Hình 3. Kiểm tra file đầu vào b. Khối đọc, kiểm tra và in từng dòng Phần mềm sử dụng vòng lặp. Mỗi vòng lặp đọc một dòng bằng lệnh fgets() mỗi dòng lệnh được gán vào một xâu đặt là strLine1. Cuối mỗi vòng lặp, con trỏ được tăng lên và tiếp tục đọc dòng tiếp theo, vòng lặp sẽ kết thúc khi file đã hết, quá dài (được kiểm tra bằng hàm feof()) hoặc người dùng chọn ngừng in thêm. Các dòng dữ liệu sẽ được kiểm tra 4 yếu tố: •
Kiểm tra ký tự ‘:’ đầu mỗi dòng. Ký tự này được lấy bởi strLine[0].
• Kiểm tra các ký tự hex còn lại: Phần mềm so sánh mã ASCII của ký tự strLine[i] với mã ASCII của các ký tự hex. Nếu nằm trong khoảng đó, strLine[i] thỏa mãn là một ký tự hexa. • Kiểm tra độ dài của data: đếm số ký tự của một dòng.Data count được biểu diễn bới strLine[1] và strLine[2]. Data count đang ở dạng hex, được chuyển về dạng thập phân. Data count trong dữ liệu nhận được được tính bới (tổng số ký tự11)/2. So sánh hai giá trị này với nhau để kiểm tra kết quá. • Kiểm tra checksum: Trên lý thuyết checksum được tính bới tổng các byte gửi đi, lấy mã bù 2. Và lấy 1 byte thấp nhất. Thực tế chính là lấy tổng tất cả các byte của dòng dữ liệu trong file. Nếu tổng đó bằng 0 là checksum đúng.
Hình 4. Khối đọc, kiểm tra và in từng dòng Sau khi dòng dữ liệu đã được kiểm tra và thỏa mãn format Intel Hex File, dữ liệu sẽ được in ra. Tuy nhiên vì dữ liệu của mỗi dòng được máy hiểu như các kí tự. Vì vậy, để có thể in được ra các kí tự có mã ASCII tương ứng với 2 kí tự Hexa liên tiếp, dữ liệu cần được chuyển đổi qua hai bước: chuyển từ hexa về giá trị tương ứng từ 1 đến 16 rồi từ đó ghép hai số Hexa liên tiếp thành 1 byte.Sau đó mới có thể
in ra kí tự ASCII tương ứng.
Hình 5. Chuyển các kí tự Hexa về giá trị từ 1 đến 16
Hình 6. Ghép 2 ký tự Hexa thành 1 byte Sau khi đã chuyển đổi được các kí tự Hexa thành các kí tự có mã Hexa tương ứng. Dòng dự liệu lần lượt được in ra thánh 3 phần: địa chỉ, nội dung dữ liệu, và kĩ tự có mã ASCII tương ứng( lưu ý là các mã nhỏ hơn không phải mà mã của kí tự nên cần loại bỏ chúng và sẽ chuyển về dấu ‘.’).
Sau khi đã kiểm tra xem file đã chạy hết chưa, đã quá dài chưa hoặc đã hết 25 dòng chưa, phần mềm hỏi người dùng xem có muốn in thêm không.
Nếu người dùng đồng ý, phần mềm sử dụng lệnh system(“cls”) để xóa màn hình rồi tiếp tục in ra 25 dòng tiếp theo và lặp lại. III. Những điểm quan trọng ảnh hưởng đến hiệu quả phần mềm Kiến thức rõ ràng về các kiểu dữ liệu để có thể xử lí được các dữ liệu đọc từ file. Từ đó có thể tránh được sai sót khi chuyển đổi qua lại các kiểu dữ liệu. Hiểu rõ các kiến thức về file Hex để có thể đọc và phân tích các thành phần trong một file Hex. Nắm được các lỗi có thể xảy ra trong quá trình viết phần mềm để có phương pháp xử lí. Trình bày code lần lượt từ trên xuống. Sử dụng các hàm con để có thể triển khai hàm main dễ dàng đồng thời thuận tiện hơn trong việc debug và tối ưu chương trình. IV. Kết quả Để kiểm tra phần mềm tốt nhất, ngoài việc chỉ chạy với file chuẩn avr_uart.hex. Báo cáo sẽ bao gồm các kết quả khi chạy với file không phải không phải file hex, file hex với thiếu kí tự “:”, file hex có kí tự không phải kí tự hexa, file hex có số lượng byte data không đúng, file hex có checksum không đúng. 1. Kết quả với file chuẩn avr_uart.hex
Hình 7. Kết quả chạy phần mềm
Hình 8. Kết quả nếu người dùng chọn N(No)
Hình 9. Kết quả nếu người dùng chọn Y(Yes) 2. Kết quả với file .log (charge2.log) Hình 10. Kết quả với charge2.log 3. Kết quả với file hex thiếu kí tự “:”
Hình 11. Kết quả khi file thiếu “:” 4. Kết quả với file hex có kí tự không phải hexa
Hình 12. Kết quả khi có kí tự không phải hexa 5. Kết quả với file có số lượng byte data không đúng
Hình 13. Kết quả khi bytecount không đúng 6. Kết quả với file có checksum không đúng
Hình 14. Kết quả khi check sum không đúng