Đề Xuất 4/2024 # File Hex (File Thực Thi) Là Gì? (Học Mplab X Ide, Bài 5) # Top 2 Yêu Thích

Vậy file .hex (hay file thực thi) là gì ? chúng được tạo ra như thế nào? .

Bài học này nằm trong seri bài học Hướng dẫn lập trình vi điều khiển PIC bằng MPLAB X IDE cùng blogchipntn.

THÔNG TIN thêm về chúng tôi

Kiến Trúc Xây Dựng của blogchipntn

Các mục trên tương ứng với thanh MENU ở trên trang và thanh CATEGORIES (chuyên mục) ở phía phải của trang, giúp cho đọc giả có thể dễ dàng hơn trong việc tìm kiếm/ chọn lựa bài học, hoặc quay lại các bài học cũ. Và quan trọng hơn hết là làm cho trang web gọn gàng dễ đọc.

Để bước vào bài học này, chúng ta cần chuẩn bị:

Một thiết bị ghi chép cá nhân

Một máy tính kết nối mạng

Một khoảng thời gian đủ dài để đọc bài viết

Đối tượng phù hợp với bài viết:

Học sinh khối THPT – THCS

Sinh viên khối đại học cao đẳng trung cấp

Người xem có sở thích DIY

Đọc giả muốn tìm hiều về thế giới vi điều khiển của Microchip

Nào, chúng ta cùng bước vào bài học !

File thực thi (* .hex) là gì ? Tại sao chúng ta cần nó ?

Khi chúng ta nhắc đến cụm từ “File thưc thi” thì có rất nhiều các khái niệm được đưa ra, và nhiều nhất trong số đó là các khái niệm file thực thi trong công nghệ máy tính ( còn gọi là file .exe).

File thực thi trong công nghệ máy tính nói chung được hiểu chung là 1 file khi được cài đặt trên 1 môi trường làm việc nhất định sẽ cho ra 1 ứng dụng phù hợp với tính năng, yêu cầu của người lập trình.

Ví dụ: khi ta cài đặt ứng dụng Microsoft_office_2024.exe vào máy tính, chúng ta sẽ có ứng dụng Microsoft office để sử dụng, các mã lệnh thao tác trên ứng dụng này, giờ đây đang được các chip phần cứng của máy tính thực hiện để cho ra các văn bản theo đúng yêu cầu thao tác của người gõ phím.

Tương tự như thế, khi chúng ta lập trình chương trình trên C Editor, các mã nguồn C của chúng ta cũng sẽ được biên dịch bằng Compiler và chúng được tập hợp lại, gán địa chỉ vùng nhớ bằng Linker, để cuối cùng cho ra 1 file mà chúng ta sử dụng file đó để ” Nhét ” vào bên trong vi điều khiển.

Làm sao để “Nhét” vào bên trong vi điều khiển, chúng ta sẽ học ở Bài 7.

Hãy tiếp tục quan sát sơ đồ giản lược sau:

Chúng ta có thể thấy, ta có 3 thành phần ngõ vào và 1 thành phần ngõ ra duy nhất cho phần Linker.

Hãy nhớ lại ở bài trước, blogchipntn có đưa ra sơ đồ lập trình bao gồm:

Linker tiếp nhận ngõ ra file object( *.o) từ phía Compiler, đồng thời tải lên file Start-up và file Script. Hai file này thông thường được tích hợp trong bộ thư viện của Hãng. Khi người dùng muốn sử dụng vi điều khiển của bất kì hãng nào, người dùng phải tải về và thêm chúng vào IDE của mình.

Ví dụ: khi bạn Lập trình vi điều khiển ARM STM32F0 với IAR, vì IAR và nhà sản xuất chip ARM STMicroElectronics là 2 nhà cung cấp dịch vụ khác nhau, nên khi lập trình STM32F0 trên IAR IDE bạn phải tải Thư viện chuẩn của chip STM32 (STM32F0xx_StdPeriph_Driver) và Start-up (CMSIS) của STM32 về và thêm vào IAR IDE.

Tuy nhiên, vì MPLAB IDE và vi điều khiển PIC được phát triển bởi chính hãng Microchip, vậy trên bên trong MPLAB IDE đã được tích hợp sẵn hàng trăm file start-up (tức là file định nghĩa, khai báo, IDE đang làm việc với chip nào, 8-bit, 16-bit, 32-bit, AVR, PIC,….) khi người dùng chọn thao tác “Build”, IDE sẽ tự động kéo các file này vào Linker.

Vậy file Linker Script dùng để làm gì ? Như chúng ta đã nói đến ở Bài 1 về cấu tạo của vi điều khiển.

Để dễ hình dung, hãy tưởng tượng vi điều khiển giống như một miếng đất rộng lớn (xem Fg03) như Quận 1 của TPHCM, bên trong miếng đất đó, chúng ta chia ra, Ủy ban quận ở đâu, Tòa án ở đâu, trường học ở đâu, Bãi rác ở đâu, Nhà xe công cộng ở đâu,…

Thì, vi điều khiển cũng tương tự như vậy, Script có nhiệm vụ gắn địa chỉ cụ thể cho từng vùng nhớ chương trình, vùng nhớ biến, vùng nhớ EEPROM, Thanh ghi, Con trỏ,….

Để từ đó vi điều khiển hiểu, à với phép tính A + B = C thì phải chạy ra địa chỉ này lấy giá trị biến A sau đó chạy qua địa chỉ nọ lấy giá trị của biến B, …

Và cuối cùng, tập hợp 3 file Object từ phí Compiler + Start-up files + Linker Script files này lại sẽ cho ra 1 file thực thi cuối cùn g dạng .hex và bên trong chúng chỉ là các con số 01010101010101

Tại sao file thực thi ( .hex ) lại ảnh hưởng đến việc lựa chọn vi điều khiển ?

Khối lượng của file sẽ quyết định chúng có thể thực thi trên vi điều khiển mong muốn hay không, tại sao vậy.

Hãy quan sát hình Fg06, các file thực thi .hex có độ lớn là 19kb, 40kb, 41kb.

Ví dụ chúng ta chọn vi điều khiển PIC12Fxyzabcd có bộ nhớ chương trình (độ rộng nơi đủ để chứa các con số 010101 này) là 40kb, thì chúng ta chỉ có thể “Nhét-upload” file 39 kb vào bên trong vi điều khiển để vi điều khiển có thể chạy.

Hãy nhớ lại Bài học số 4, nơi chúng ta nói về câu chuyện 50000 cái vỏ lon bia, và câu chuyện ép chúng lại thành 1 cục rồi bỏ vào container chở qua Mỹ để bán, nếu chiếc container chỉ rộng 40m và cục vỏ lon sau khi ép của chúng ta rộng 41m, chúng ta không thể nào bỏ lọt cục đó vào chiếc container được, buộc lòng chúng ta phải giải quyết bằng 2 cách: (1) ép lại bằng 1 chiếc máy khác, để cục kim loại trở nên nhỏ hon hoặc (2)Thuê 1 chiếc container rộng 50m để bỏ lọt cục kim loại.

Đúng như thế phương pháp (1) chính là bạn cần mua bản quyền trị giá $1200 của Compiler XC8, phương pháp (2) là bạn phải thay đổi vi điều khiển PIC12Fxyzabcd thành vi điều khiển mới PIC12Fabcdxyz để có bộ nhớ đủ rộng chưa mã thực thi (0101010101).

Nếu ban đầu blogchipntn chọn vi điều khiển PIC16F1828 với bộ nhớ chương trình là 7 kb

Với cùng tính năng, số lượng chân in/out, blogchipntn tìm thấy PIC16F1829 có bộ nhớ chương trình 14 kb

$600 cho việc thay đổi chip so với $1200 mua phần mềm biên dịch mới, xem ra chi phí chỉ bằng 1 nửa, vậy phải chăng đổi chip là giải pháp hay hơn trong tình huống này ?

Và rồi bài toán Kinh tế trở nên phúc tạp hơn 1 tý, $600 trải dài trong 3 năm, chúng ta liệu có chắc chắn được rằng giá chip vi điều khiển sẽ luôn là $0.94 trong 3 năm tới, nếu có thêm khách hàng C, D đến đặt thêm hàng nữa thì sao, phải chăng bài toán $600 đang trở thành bội số, là nút thắt khó giữ trong bài toán kinh tế này, thêm nữa nếu model sản phẩm A dùng chip PIC16F1828, model sản phẩm B dùng chip PIC16F1829, model C là PIC18F18xx,… thì bài toán kinh tế nay chuyển sang bài toàn về kỹ thuật và nhân lưc. Một lập trình viên rất khó hoặc không có đủ thời gian để kiểm soát hết nhiều vi điều khiển đến như vậy, mặt khác nếu thay đổi các chức năng trong một vi điều khiển, người lập trình sẽ dành rất nhiều thời gian để test cho tính năng đó, khi ấy bài toán Kinh tế $600 sẽ phải công thêm Kinh tế trả phí nhân lực, máy móc thiết bị cho phát triển sản phẩm.

Ở 1 chiều hướng ngược lại, $1200 blogchipntn sẽ có được, 1 phần mềm biên dịch mã thực thi được tối ưu hóa 1 cách tốt nhất cho vi điều khiển, không cần thay đổi chip vi điều khiển trong vùng khả năng nén được code, bài toán kinh tế nay chỉ đơn giản là chi phí bảo dưỡng cho phần mềm đó, lập trình viên sẽ ít phải test các tính năng khác nhau trên chip hơn, và trên tất cả nếu ta mua 50000 con chip hãng sẽ bán rẻ hơn ta mua 10000 chip, chi phí $0.94 sẽ giảm xuống và chúng ta chỉ việc tìm kiếm khách hàng, hoàn thiện sản phẩm tốt hơn nữa mà thôi.

[QUẢNG CÁO]Đuôi đèn cảm ứng thông minh An Thái Sơn, phát hiện Chuyển động, …

Thay đổi kết cấu của file thực thi có làm ảnh hưởng gì đến vi điều khiển hay không ?

Câu trả lời sẽ là CÓ, việc thy đổi các chữ số 01010101 bên trong file thực thi bằng tay có thể làm hành vi của vi điều khiển bị sai so với mong muốn, và thậm chí tồi tộ hơn là có thể dẫn đến cháy vi điều khiển.

Blogchipntn đã từng xem vi điều khiển như quận 1 của TPHCM, vậy bạn hãy tưởng tượng các chữ số 010101 trong file thực thi đó như là địa chỉ và hành vi chúng ta thực hiện tại Quận 1.

Ví dụ dãy số 0101110010010000011 tương trưng cho việc “Đi đến Nhà Chùa và nói rằng Tôi muốn biến tất cả thành cát bụi”, nhưng sau đó bạn dùng tay thay đổi lại 0101110000011100011, lúc này người thực thi (vi điều khiển) sẽ hiểu là “Đi đến Đồn Cảnh Sát và nói rằng Tất cả đối với tôi chỉ là cát bụi”. Nếu là bạn trong thực tế, khi bạn đến sở cảnh sát quận 1 và quát to “Tất cả đối với tôi đều là cát bụi” bạn có thể sẽ bị cảnh sát bắt, hoặc tệ hơn, bạn sẽ bị bắn chết vì cảnh sát nghi bạn là kẻ khủng bố muốn đánh bom biến mọi người thành cát bụi.

Với vi điều khiển cũng vậy, việc thay đổi bằng tay có thể dẫn đến vi điều khiển đến sai địa chỉ, lấy sai giá trị tên biến, và tệ hơn là xuất ngõ vào ra sai lệch dẫn đến ngắn mạch, hờ mạch điện chạm chập gây ra cháy nổ.

Việc thực hiện thay đổi mã thực thi .hex nên chỉ được thực hiện khi bạn hiểu thật rõ từng byte, chức năng của chúng, vị trí chúng nẵm và blogchipntn khuyên bạn chỉ nên dùng trong trường hợp cực cực kỳ cấp thiết, không nên dùng cho những mục đích thương mại.

Lời Kết

File .hex (hay fiel thực thi) cho vi điều khiển là một file chứa các con số 01010101. File này được Compiler + Linker kết hợp tạo thành. Trong file có chứa các địa chỉ ( không gian chip) nơi mà các con số 010101 sẽ cư trú. Bộ nhớ của chip dùng để chứa file này là bộ nhớ không bay hơi ( không bị mất khi mất điện) hay còn được gọi là ROM/Flash.

Bộ nhớ của chip phải đủ lớn để chứa được file này. File này (các con số 010101) có thể được sửa đổi bằng tay, tuy nhiên việc sửa đổi nhỏ này có thể dẫn đến hư hỏng vùng nhớ chip dẫn đến cháy vi điều khiển.