Title Image

Blog Logo

Bootloader 4. Endianness - Little or Big?

🌱 Bootloader 4. Endianness - Little or Big?

    Một thuật ngữ tương đối mới lạ @@ Câu hỏi đặt ra: nó là gì? Tại sao lại giới thiệu nó ở đây, nó liên quan gì đến bootloader chứ?  

    👉 Câu trả lời: thật ra mình thấy hay thì share thôi 😁 Mong là nó giúp ích cho các bạn, đặc biệt là các bạn đang hứng thú với phần Bootloader này. Ngoài ra, việc hiểu kiến trúc bộ nhớ cũng như cách truy xuất sẽ giúp ích cho quá trình học về Vi điều khiển.

    Bootloader liên quan nhiều đến việc nạp Firmware vào Vi điều khiển, cụ thể hơn là chúng ta nạp file nhị phân xuống bộ nhớ của Vi điều khiển. Vậy, có 2 điều quan trọng để lưu tâm: 

  • File nhị phân - Cấu trúc, nội dung, ... (Sẽ được giới thiệu ở bài sau)
  • Sắp xếp chúng trong Bộ nhớ như thế nào? - Cụ thể là sắp xếp như thế nào để Vi điều khiển đọc ra theo đúng thứ tự, vì việc tìm nạp lệnh của chúng là tự động. 
    👉 Và việc sắp xếp dữ liệu (ở đây là Firmware) trong bộ nhớ gọi là Endianess 
    👉 Cụ thể hơn ở đây chúng ta nhắc đến 2 cách sắp xếp đó là Big EndianLittle Endian.

    💬 Big Endian vs Little Endian

    Sự khác biệt của Little Endian và Big Endian khi lưu trữ chính là ở việc sắp xếp thứ tự các byte dữ liệu

    Trong cơ chế lưu trữ Little Endian (xuất phát từ "little-end" nghĩa kết thúc nhỏ hơn), byte cuối cùng trong biểu diễn nhị phân trên sẽ được ghi trước, tương ứng với byte LSB (trong số thấp nhất) sẽ được ghi trước, ở địa chỉ nhỏ nhất trên bộ nhớ.

    Ngược lại với Little Endian, với Big Endian thì byte MSB sẽ được ghi trước, ở địa chỉ lớn nhất trên bộ nhớ. 

Endianness
Little Endian vs Big Endian

     💚 Big Endian

    Có thể thấy, Big Endian sắp xếp byte MSB trong bộ nhớ trước, vì vậy nó hợp tự nhiên hơn, giống như chúng ta đọc viết chữ từ trái sang phải, thì Big Endian cũng sắp xếp các byte lần lượt từ trái sang phải. Big Endian có lẽ hợp với cách nhìn tự nhiên của con người chúng ta hơn (chắc trừ mấy ông Nhật Bản viết truyện từ phải qua trái). 

Big Endian

    Big Endian thường được sử dụng trong một số dòng chip: Motorola 68K processors, PowerPC (by Motorola) and SPARK (by Sun) processors.
    
    Đối với đặc điểm có Big-Endian, chúng ta có thể nhận thấy nó sẽ phù hợp hơn cho một số trường cụ thể:
  • Với việc đọc byte có trọng số cao (MSB) trước (vì MSB có địa chỉ thấp nhất), chúng ta có thể dễ dàng ước lượng kích thước của một số, cùng với đó là xác định số đó là số dương hay âm.
  • Dạng nhị phân và dạng thập phân được sắp xếp giống nhau, vì vậy việc chuyển đổi giữa 2 dạng số này sẽ dễ dàng hơn.
  • Với 2 điểm trên, Big-Endian vẫn được sử dụng trong các bài toán về giao thức mạng.

    💚 Little Endian

    Có vẻ như Little Endian hơi "trái tự nhiên" so với Big Endian. 

Little Endian

    Nhưng đó là với con người chúng ta, còn với máy tính thì sao? Hãy đến với ví dụ sau: 

    👉 Chúng ta có một con số 20, biểu diễn dưới dạng hexa là 20 = 0x14. Vậy, nếu con số này được đặt trong các hệ điều hành khác nhau, hoặc gán vào các biến với kích thước khác nhau, chúng ta sẽ có:   

  • 64 bit ⇒ 20 = 0x14 = 14 00 00 00 00 00 00 00
  • 32 bit ⇒ 20 = 0x14 = 14 00 00 00
  • 8 bit   ⇒ 20 = 0x14 = 14 00
    Có thể thấy, việc đọc giá trị dù ở hệ điều hành nào thì cũng sẽ ra cùng một giá trị khi chúng ta dùng Little Endian. Nếu dùng cho các biến, chúng ta có thể dễ dàng chuyển sang các kiểu biến có kích thước nhỏ hơn, và việc tính toán của máy tính cũng diễn ra tự nhiên hơn.
    Một lợi ích khác của Little-Endian đó là khi việc thực hiện các phép toán học (cộng/trừ/nhân/chia). Như cách thông thường, các phép toán luôn được thực hiện từ các byte LSB trước để xem phép toán có nhớ hay không, nên Little-Endian rất phù hợp với việc này.

    👉 Chính vì lí do đó, Little Endian thường sử dụng trong các dòng chip của Intel, và nhiều Vi điều khiển (trong đó có STM32) và hiện nay trong các dòng chip thì nó được sử dụng nhiều hơn so với Big-Endian.

    Các bạn có thể test thử, xem máy tính và vi điều khiển của mình sử dụng Endianness nào, bằng một đoạn code nhỏ sau: 


    Việc chuyển đổi giữa 2 kiểu sắp xếp này cũng khá đơn giản, bạn có thể tham khảo trên Internet với từ khóa "Convert Little Endian to Big Endian"...

    💬 Video về Endianness

>>>= Follow ngay =<<<

Để nhận được những bài học miễn phí mới nhất nhé 😊

Chúc các bạn học tập tốt 😊

                                        

Đăng nhận xét

0 Nhận xét