Thời gian chạy
Theo hiểu biết của tôi, bạn không thể phát hiện loại bảng, nhưng bạn có thể đọc ID thiết bị ATmega. Kiểm tra câu hỏi này làm thế nào nó có thể được thực hiện: Chữ ký của thiết bị ATmega hoặc ATtiny có thể được đọc trong khi chạy không? Lưu ý rằng khi sử dụng phương thức này, một số bài tập đăng ký sẽ thay đổi, không chỉ là sơ đồ chân. Do đó mã của bạn có thể trở nên phức tạp hơn đáng kể. Ưu điểm là nếu bạn quản lý để giải quyết tất cả các bài tập thay đổi đăng ký và các phụ thuộc phần cứng khác, bạn có thể sử dụng một tệp .hex duy nhất để lập trình trực tiếp các thiết bị của mình avrdude
.
Thời gian biên dịch
Một cách khác để tìm ra loại bảng / bộ điều khiển là vào thời gian biên dịch. Về cơ bản, bạn biên dịch các phần của mã hoặc đặt macro tùy thuộc vào loại thiết bị được cấu hình trong Arduino IDE. Kiểm tra sniplet mã này cho một ví dụ:
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define DEBUG_CAPTURE_SIZE 7168
#define CAPTURE_SIZE 7168
#elif defined(__AVR_ATmega328P__)
#define DEBUG_CAPTURE_SIZE 1024
#define CAPTURE_SIZE 1024
#else
#define DEBUG_CAPTURE_SIZE 532
#define CAPTURE_SIZE 532
#endif
Đoạn mã được sao chép một cách đáng xấu hổ từ https://github.com/gillham/logic_analyzer/wiki Kiểm tra mã đó để biết một số mánh khóe cụ thể hơn về thiết bị.
Tùy thuộc vào hệ điều hành của máy chủ lưu trữ của bạn, các loại bộ điều khiển được hỗ trợ có thể được tìm thấy trong tệp sau:
- Linux:
/usr/lib/avr/include/avr/io.h
- Các cửa sổ:
...\Arduino\hardware\tools\avr\avr\include\avr\io.h
Việc sử dụng bộ tiền xử lý C (theo đó đoạn mã trên được xử lý) có thể nằm ngoài phạm vi của trang web này. http://stackoverflow.com sẽ là nơi tốt hơn cho các câu hỏi chi tiết.
Nếu bạn đang dùng Linux, bạn có thể dễ dàng tìm thấy tất cả các loại trình điều khiển được hỗ trợ bằng cách nhập:
grep 'defined (__AVR' /usr/lib/avr/include/avr/io.h | sed 's/^[^(]*(\([^)]*\))/\1/'