Asm trong C

🌱 Asm trong C

    Các bạn lập trình Vi điều khiển chắc không còn xa lạ gì với ngôn ngữ Assembly, ngôn ngữ bậc thấp hơn so với C. Trong thực tế, những người lập trình Vi điều khiển thường sử dụng ngôn ngữ C nhiều hơn vì nó đơn giản hơn, tuy nhiên trong một số trường hợp chúng ta cần phải sử dụng ASM bởi những ưu điểm của nó mà C không thể có. 
    ➤ Vậy làm sao để nhúng ngôn ngữ ASM vào trong project viết bằng C?

   👉 Ưu điểm của Assembly

  • Tốc độ thực thi nhanh hơn so với C, tất nhiên rồi, "Một câu lệnh C bằng 3 câu lệnh ASM". Các file source C cũng cần trải qua quá trình biên dịch để tạo ra các file assembly (Xem bài Build Process). 
  • Tương tác trực tiếp với những thanh ghi Core, một ví dụ mà các bạn thường thấy đó là các hàm trong CMSIS như __enable_irq(), __get_xPSR(), ... là các hàm được viết bằng Asm có khả năng tương tác trực tiếp với các thanh ghi core. Việc tương tác với các thanh ghi như R0>>R16 cũng chỉ có thể thực hiện bằng ASM. (Vì những thanh ghi này không có địa chỉ gì cả nên ngôn ngữ C cũng không thể làm gì hơn!!!).
  • Giảm tải bộ nhớ. Vẫn là câu "Một câu lệnh C bằng 3 câu lệnh ASM", ASM giúp tiếp kiệm bộ nhớ hơn khá nhiều so với C. 
    Vì vậy, có thể thấy một số công việc mà chúng ta có thể "buộc" phải sử dụng ASM thay vì C như:

  • Viết các file Startup - đảm bảo một hệ thống có thời gian khởi động của một hệ thống là ngắn nhất có thể, chúng ta nên dùng ASM cho startup file.
  • Viết các hàm chuyển đổi ngữ cảnh trong RTOS, ... nói chung là những công việc cần đảm bảo về mặt tốc độ.
  • Việc tương tác với thanh ghi Core, việc này là bắt buộc, vì C không thể làm được.

    👉 Cách sử dụng ASM trong C

    Có khá nhiều cách sử dụng asm trong C, mình liệt kê 3 cách sau mà mình hay sử dụng/gặp:

    💬 Sử dụng các câu lệnh ASM độc lập

                                Cú pháp:     __asm("...");

Cách sử dụng này có thể dùng ở bất cứ đâu tại các hàm trong C, có thể sử dụng với những lệnh đơn giản và hoạt động riêng lẻ như: 

    💬 Tạo một hàm C với nội dung ASM

    Nếu muốn tạo hẳn một hàm với nội dung ASM trong C, chúng ta có thể viết một hàm rồi sử dụng toàn bộ các câu lệnh theo cú pháp  __asm("..."); như ở trên.

    Hoặc viết theo cách sau:

    Tuy nhiên cách này không hỗ trợ tất cả các trình biên dịch nên cách trên vẫn thường được sử dụng hơn!

    💬 Tạo file ASM riêng biệt

    File ASM này sẽ không cần trải qua quá trình biên dịch từ các file .c. Ví dụ tiêu biểu là các file Startup như đã nói ở trên. Nếu muốn sử dụng lại các biến/hàm trong file asm này tại các file C khác, chúng ta có thể sử dụng từ khóa extern.

    Ví dụ mình viết một hàm bên ASM như sau:


    Và bây giờ, chúng ta có thể sử dụng nó trong file C của mình bằng cách sử dụng từ khóa extern:


    Đó là những cách mình thường thấy và sử dụng, nếu có cách nào khác nữa, hãy góp ý dưới bài viết nhé!

>>>= Follow ngay =<<<

💚 Kênh Youtube Lập trình - Điện tử 💚

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

XEM THÊM CÁC BÀI VIẾT VỀ EMBEDDED C

Nguyễn Văn Nghĩa

Mình là một người thích học hỏi và chia sẻ các kiến thức về Nhúng IOT.

Đăng nhận xét

Mới hơn Cũ hơn