Rất nhiều thứ arduino được xử lý bên dưới. Bạn sẽ thấy bộ nhớ (chương trình) sẽ mất bao nhiêu bộ nhớ khi biên dịch, nhưng không phải là bộ nhớ SRAM. Gần đây tôi đã phải khám phá điều này là tốt, và đây là cách tôi đã làm nó.
Trong thư mục arduino IDE có trình biên dịch avr-gcc. Nó cũng chứa một công cụ có tên là 'avr-size'. Đi đến phần cứng / công cụ / avr / bin / và nó sẽ ở đó.
Khi biên dịch, IDE sẽ tạo một thư mục tạm thời trong thư mục tạm thời của bạn và sao chép tất cả các tệp C (++) vào đó. Nó sẽ biên dịch các thư viện, bản phác thảo của bạn (nó cũng thêm những thứ cần thiết để làm cho nó hoạt động) và tạo một tệp hex và elf. Những gì bạn cần làm là biên dịch bản phác thảo của bạn (bằng cách nhấp vào tải lên hoặc xác minh) và tìm thư mục build [hash hash] trong thư mục tạm thời của bạn. Bạn cần chạy avr-size.exe và trao cho nó tệp elf.
Giao diện điều khiển khá tẻ nhạt, nhưng tôi thường điều hướng đến thư mục bin, chạy avr-size.exe và nhập đường dẫn đến thư mục tạm thời của tôi. Đây là C: \ Users [tên người dùng của bạn] \ AppData \ Local \ Temp \ build [thẻ ngẫu nhiên] [Tên phác thảo] .cpp.elf (Windows 7)
Bạn có thể có thể tạo một số tập lệnh (bó) cho việc này, nhưng vì thư mục xây dựng không đổi trên mỗi phiên arduino, tôi không bận tâm.
Đầu ra của kích thước avr trông rất giống với điều này (tôi đã biên dịch một chương trình ví dụ Xbee).
Ở đâu:
- văn bản - dữ liệu flash được sử dụng cho mã
- dữ liệu - Bộ nhớ có dữ liệu khởi tạo (giá trị ban đầu cũng phải được lưu trong FLASH!)
- bss - Bộ nhớ được khởi tạo bằng 0 (trình biên dịch sẽ thêm một số mã để nó sẽ khởi tạo dữ liệu & bss)
- dec & hex là màn hình thập phân và hex của kích thước RAM và FLASH kết hợp của chương trình của bạn.
Arduino IDE đã báo cáo với tôi chương trình này là 3956 byte lớn (FLASH). Điều đó liên quan đến 3924 (mã flash) + 32 (giá trị RAM ban đầu) = 3956 byte FLASH. Việc sử dụng RAM là dữ liệu + bss kết hợp (!) = 32 + 320 = 352 byte sử dụng SRAM.
Lưu ý rằng ATMEGA328 chỉ có 2KiB SRAM và các sự cố có thể xảy ra nếu bạn ở dưới mức đó (Tôi đã có những hành vi không mong muốn ở mức 1700 byte trong số 2048). ATMEGA168 có 1KiB SRAM. Tất cả Arduino mega đã có 8KiB SRAM.
Như một lưu ý bổ sung. Ngoài ra còn có mã 'chỉ số bộ nhớ miễn phí'. Những gì họ làm là cố gắng phân bổ càng nhiều bộ nhớ, đếm xem nó lớn như thế nào và giải phóng nó (malloc () & free ()). Nếu ban đầu bạn chưa sử dụng malloc, điều này sẽ thêm nhiều mã hơn vào chương trình của bạn, đôi khi bạn không có không gian cho. Điều này không lý tưởng và tôi cũng không tìm thấy nó để cho kết quả ổn định. Trong dự án của riêng tôi, tôi đã có ethernet + xbee + thẻ SD + mã thư viện riêng chạy trên Atmega328. Không có đủ SRAM và FLASH cũng trở nên khan hiếm).
Và cuối cùng nhưng không kém phần quan trọng, chỉ báo này không chiếm bộ nhớ được cấp phát với malloc ().