Tổng quan về kích thước mã được biên dịch


9

Khi tôi biên dịch mã của mình, Arduino IDE trả về kích thước phác thảo nhị phân theo byte.

Có cách nào tốt để tìm hiểu (xấp xỉ) chức năng nào hoặc phần nào trong mã của tôi chiếm bao nhiêu bộ nhớ trong flash, để tôi có cảm giác tính năng nào chiếm phần lớn bộ nhớ flash quý giá hoặc nơi tôi có thể lãng phí flash và nên bắt đầu tối ưu hóa?

Câu trả lời:


6

Một cách tiếp cận là xem xét danh sách lắp ráp của chương trình.

  1. Sau khi biên dịch chương trình (thông qua nút Xác minh hoặc Tải xuống), hãy tìm thư mục chứa các tệp .cpp, .hex và .elf cho chương trình đã được lưu trữ. (Nếu bạn gặp khó khăn khi tìm thấy chúng, hãy bật nhanh các tùy chọn biên dịch dài dòng trong IDE arduino và xem tên thư mục trong đầu ra.)

  2. Trong thư mục đó, hãy chạy avr-objdump -S fn.cpp.elf > listing.txt trong đó fn.cpp.elf là tên của bản phác thảo của bạn đã .inođược gỡ bỏ và .cpp.elfthêm vào cuối. Ví dụ: với bản phác thảo serialecho.ino:

    avr-objdump -S serialecho.cpp.elf> list.txt

  3. Xem listing.txttệp và trừ địa chỉ bắt đầu của từng hàm khỏi địa chỉ kết thúc của nó, sử dụng số học hex. Ví dụ: với setup

    void setup () {serial.begin (9600); }

trong danh sách chúng ta sẽ thấy

00000144 <setup>:
...(6 lines snipped)...
 144:   26 e0           ldi     r18, 0x06       ; 6
 146:   40 e8           ldi     r20, 0x80       ; 128
 148:   55 e2           ldi     r21, 0x25       ; 37
 14a:   60 e0           ldi     r22, 0x00       ; 0
 14c:   70 e0           ldi     r23, 0x00       ; 0
 14e:   80 e1           ldi     r24, 0x10       ; 16
 150:   92 e0           ldi     r25, 0x02       ; 2
 152:   db c1           rjmp    .+950           ; 0x50a <_ZN14HardwareSerial5beginEmh>

00000154 <loop>:

Phép tính 0x154 Lỗi0x144 = 0x10 cho thấy phần setupnày dài 16 byte.

Những ví dụ này được tạo ra trên một hệ thống linux. Tôi nghĩ rằng cách tiếp cận này giống nhau trên hệ thống MSWindows ngoại trừ bạn có thể cần phải nói avr-objdump.exethay vì avr-objdumpvà có thể cần chỉ định đường dẫn của nó. Xem, ví dụ, kết quả Trình biên dịch, ở đâu? chủ đề tại forum.arduino.cc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.