Trong quá trình giảng dạy về Embedded firmware, tôi gặp bài
toán tăng perfomance bằng cách tăng tốc độ xử lý của CPU. Tôi gặp vấn đề về CPU
chạy nhanh hơn flash
- Code
được lưu ở flash
--> Trong datasheet của STM32F411, ta thấy rằng tốc độ
flash phụ thục vào điện áp hoạt động. Tôi sử dụng 3.0 Vol --> Tốc độ flash tối
đa là 30MHz
- Code sẽ
được thực thi trên CPU
--> Trong khi đó tốc độ CPU được config tối đa lên đến 100Mhz
--> Vấn đề ở đây là CPU đọc code ở flash lên chậm quá so
với việc thực hiện code --> hiện tượng: làm treo chương trình
--> Giải quyết vấn đề: chúng ta cần config cho CPU để chờ
thêm 3WS (wait states) để KỊP đọc code từ FLASH lên
--> Tiếp tục phát sinh vấn đề nữa: Set tốc độ nhanh làm
gì mà phải chờ 3WS làm giảm performance
--> Giải pháp: Trong STM32F411 cung cấp ART Accelerator
(Adaptive Real-Time)
ART Accelerator: Nó là phần cứng nằm giữa FLASH và CPU. Nhiệm
vụ của nó để tăng performance để giảm wait states (WS)




Nếu chúng ta sử dụng ART


-------------------------------------
Ngoài ra, nếu MCU không support ART thì những đoạn code nào
cần thực thi nhanh. thì chúng ta đưa hàm đó lên RAM. Vì tốc độ đọc dữ liệu từ
RAM sẽ nhanh hơn FLASH rất nhiều
|
__attribute__((section(".ham_tren_ram")))
void update() { __asm("CPSID
i"); flash_erase(0); for(int
i = 0; i < RX_BUFFER_SIZE; i++) {
flash_program((char*)0x08000000
+ i, rx_buffer[i]); } uint32_t* AIRCR
= (uint32_t*)0xE000ED0C; *AIRCR = (0x5FA
<< 16) | (1 << 2); } |
No comments:
Post a Comment