2012-04-26 42 views
8

Tôi cần phải xác định tốc độ mà Arduino thực hiện một chức năng nhất định.Làm thế nào để đo tốc độ thực hiện chức năng của Arduino?

Điều gì sẽ là thời điểm tốt nhất để làm điều đó? Cho đến nay tôi đã tìm thấy thứ gì đó với một lớp Đồng hồ bấm giờ, nhưng tôi tự hỏi liệu có phương pháp gốc nào để làm điều đó không.

Trả lời

14

Cách đơn giản là sử dụng chức năng millis() hoặc micros() trong thư viện Arduino. Bạn sẽ có kết quả hạt mịn hơn với micros().

Ví dụ:

unsigned long start = micros(); 
// Call to your function 
myFunction(); 
// Compute the time it took 
unsigned long end = micros(); 
unsigned long delta = end - start; 
Serial.println(delta) 

Đọc kỹ tài liệu của micros(): có một số thông tin về việc giải quyết thời gian.

+0

đừng quên thời gian chức năng 'micrô' trước khi xóa thời gian gọi của nó khỏi kết quả, điều đó có thể đáng kể. unsigned long m1 = micros(); unsigned long m2 = micros(); unsigned long mt = m2 - m1; ... unsigned long delta = end - start - mt; –

+0

@UgoRobain Điều này có vẻ như một ý tưởng tốt lúc đầu, nhưng nó vốn đã thiếu sót để thử và loại bỏ các lỗi từ một chức năng thời gian bằng cách thời gian nó sử dụng chính nó. – krb686

+1

Bạn có thể xây dựng? Tôi không thấy lý do tại sao gọi 'micros' hai lần và trừ đi kết quả sẽ không cho tôi thời gian thực hiện bởi micros. nếu bạn gọi điều này trước khi thực hiện chức năng của bạn thời gian bạn có thể trừ hai lần thời gian 'micros' và do đó đạt được để có được một thời gian chính xác hơn của myFunction. –

7

cách xâm nhập ít nhất là đặt chân cổng cao trước khi gọi hàm và thấp sau đó. Đặt một dao động trên chân cổng và đo thời gian cao.

Điều này cũng có thể cung cấp cho bạn ý tưởng định tính tốt về sự thay đổi thời gian thực hiện bằng cách kích hoạt trên cạnh tăng và xem jitter trên cạnh rơi xuống.

+0

Cảm ơn rất nhiều. Có, tôi đã sử dụng một osciloscope, nhưng cho các mục đích khác. Vấn đề là tôi phải có khả năng sử dụng biến đó trong chương trình của tôi. – Eugen

Các vấn đề liên quan