Title Image

Blog Logo

Start Procedure & Startup File

🌱 Start Procedure & Startup File

    👉 Start Procedure

    Khi vi điều khiển reset, nó sẽ làm những công việc sau:
Startup
MCU Reset Sequence

  • Tìm đến Reset_Handler() ở trong vector table.
  • Khởi tạo vùng nhớ databss, cụ thể là copy data và bss từ Flash lên RAM để run.
  • Khởi tạo thư viện 'C' chuẩn, các thư viện như stdio.h, stdlib.h, ...
  • Gọi đến hàm main() và thực hiện chương trình.

    👉 Startup File

    File Startup là file nhằm thiết lập môi trường chuẩn để hàm main() được chạy, tuân theo Start Procedure ở trên, và chứa Vector table.

    File Startup các bạn có thể tìm thấy trong các project, đặc biệt là STM32 project. File Startup có thể là file .c hoặc .s (assembly), và thường là file assembly để tăng tốc độ khởi động của một chương trình. 

    Các bước thực hiện trong một file Startup (ở đây mình dùng file .c vì ASM thì rất khó giải thích):

    ➤ Tạo một bảng Vector Table cho vi điều khiển tương ứng.

Startup
Ví dụ bảng Vector Table bằng ngôn ngữ C

    Các vector này được đặc trong section .isr_vector quy định trong file linker script

Startup

    Ở đây, mỗi vi điều khiển sẽ có một Vector Table khác nhau, tương ứng với các Exception và Interrupt priority của các Vi điều khiển khác nhau. Trên đây là ví dụ về Vector Table của Vi điều khiển STM32F407. 

    ➤ Thực hiện hàm Reset_Handler()

    Cụ thể trong Reset_Handler() ta sẽ làm những việc sau:
  • Khởi tạo databss, cụ thể là copy 2 vùng nhớ này từ FLASH lên RAM.
    Copy .data section từ FLASH lên RAM.
Startup
Copy Data from Flash to RAM

    Khởi tạo vùng nhớ .bss với giá trị là 0.

Startup
Initialize .bss section
  • Khởi tạo standard library (nếu có) 
Startup
Initialize Standard Library
  • Gọi hàm main()
Startup
Call main function

        Nhớ khai báo nguyên mẫu hàm, hàm main() này chính là hàm main() trong file main.c.
    
    Hãy thử viết một file Startup cho vi điều khiển của bạn, hoặc thử đọc file startup bằng assembly do project tạo sẵn 😁

    👉 Dưới đây là video mô tả về Reset Sequence trong các Vi điều khiển lõi ARM Cortex-M và mô phỏng trên vi điều khiển KL46 (Lõi ARM CortexM0+)

>>>= Follow ngay =<<<

Để theo dõi 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