Kiểm thử đơn vị ngôn ngữ lắp ráp AVR


11

Làm thế nào để bạn đơn vị kiểm tra mã lắp ráp của bạn?

Tôi đang làm việc trên bộ điều khiển servo nối tiếp như là một phần của dự án robot hexapod và mã đã trở nên phức tạp;) Dù sao, tôi đã quen sử dụng các bài kiểm tra đơn vị trong công việc hàng ngày của mình với tư cách là nhà phát triển máy chủ C ++ và vì vậy đã cố gắng áp dụng các loại thử nghiệm tương tự cho mã lắp ráp AVR của tôi. Tôi đã tìm ra một cách phù hợp với tôi (xem tại đây ) nhưng tôi quan tâm nếu có bất kỳ công cụ hoặc kỹ thuật tiêu chuẩn nào mà tôi thiếu.

Đã cập nhật: Dành cho những bạn quan tâm đến nguồn đầy đủ cho bộ điều khiển servo và các bài kiểm tra đơn vị hiện có sẵn tại đây .

Câu trả lời:


3

Tôi cũng sẽ mô tả điều này là thanh lịch, nhưng muốn thêm vấn đề, nếu bạn sẽ tha thứ cho sự xâm nhập của tôi.

Tôi biết có những gói phần mềm rất đắt tiền để xử lý các tình huống như thế này, nhưng tại công ty tôi làm việc tại chúng tôi không thể trả chi phí trừ khi chúng tôi chắc chắn rằng nó làm những gì chúng tôi cần.

Test Driven Development (TDD) là một trong những hệ thống tốt hơn mà tôi đã nghe nói về phát triển và tôi rất thích nó, nhưng các vấn đề chiếm thời gian của tôi thường là do các sự kiện phần cứng và gián đoạn phức tạp mà nhiều người gọi là trục trặc. Có vẻ như có một vấn đề nhỏ xảy ra cứ sau 2 giờ khi các ngôi sao thẳng hàng, nhưng nếu điện thoại của bạn chỉ bị đóng băng mỗi tuần một lần, bạn sẽ nguyền rủa tên kỹ sư. Trong trường hợp của chúng tôi, chúng tôi phải đi vào một nguồn cấp dữ liệu khi mọi thứ thực sự bị phá vỡ, mà như bạn có thể tưởng tượng, tôi muốn tránh.

Tôi đã thấy các giải pháp rất thông minh để kiểm tra chức năng của các hệ thống con, nếu được triển khai đúng cách, có thể giúp tôi tiết kiệm được 3 giờ trong một tuần làm việc 50 giờ, nhưng nếu có một cách thông minh để tìm các tình huống trục trặc thì nó sẽ giúp tôi tiết kiệm hàng tuần làm việc thỉnh thoảng tìm kiếm "lỗi" xảy ra trong trường dưới tải nặng.

Bài đăng này có thể không giúp được một lượng lớn, nhưng tôi thấy việc đưa mọi thứ ra ánh sáng giúp mọi thứ dễ dàng giải quyết hơn. Nếu có một phương pháp TDD để tìm các tình huống trục trặc, tôi có thể nhận được 10 ngàn trong số hàng ngàn được phân bổ để trả tiền cho nó. -Max


1
Tôi chưa thực sự nghĩ về việc kiểm tra sự tương tác giữa mã ngắt và mã không ngắt. Đó là một điểm tốt. Tôi đã lên kế hoạch kiểm tra mã ngắt bộ định thời thế hệ PWM của mình bên ngoài một tình huống bị gián đoạn theo cách tương tự như cách tôi đang kiểm tra mã nối tiếp dòng chính của mình. Tôi đoán ngay cả khi tôi có phạm vi bảo hiểm cho tất cả những điều đó tôi vẫn thiếu tương tác. Tôi cho rằng tôi có thể kích hoạt các ngắt từ trong các thử nghiệm (thật dễ dàng với ngắt hẹn giờ nhưng tất cả các mã ngắt có thể được thiết lập để chạy trên ngắt hẹn giờ trong khai thác thử nghiệm). Không tầm thường mặc dù.
Len Holgate

1
Tôi có thể hiểu nhầm bạn, nhưng tôi cố gắng khá cẩn thận về các tương tác mã không ngắt và ngắt. Tôi có lẽ nên lỏng lẻo hơn trong việc sử dụng các hoạt động nguyên tử của mình, nhưng nó chưa bao giờ được chứng minh là gây hại ở cấp độ tôi có trình tối ưu hóa của chúng tôi. Các vấn đề phát sinh khi một ngắt làm chậm trễ một cái khác, một vấn đề phổ biến mà tôi giúp học sinh sẽ bị gián đoạn tạo ra điều khiển PWM. Nếu bạn cần một tốc độ cực kỳ chính xác, ví dụ như sử dụng mô-đun So sánh trong chip của bạn và một ngắt khác đang bận rộn dành thời gian cho thứ khác và trì hoãn bạn bằng 50uS có thể kết thúc thế giới.
Kortuk

1
Trong một số trường hợp, bạn có thể có mức độ ưu tiên hoặc thậm chí bạn có thể tự ngắt và kích hoạt lại các ngắt toàn cầu trong nội bộ, phụ thuộc vào nền tảng, nhưng cách dễ nhất để phát triển của riêng tôi là hạn chế thời gian làm gián đoạn những điều hoàn toàn cần thiết và có mã thông thường phần còn lại của công việc.
Kortuk

1
Thiết kế hiện tại của tôi được giải thích trên blog của tôi, như là một thiết kế mới được đề xuất. Ngay bây giờ tôi có 64 kênh PWM được tạo bởi ngắt hẹn giờ và không có ngắt nào khác; nối tiếp được thực hiện bằng cách bỏ phiếu. Điều này có nghĩa là PWM là đá rắn nhưng nối tiếp có thể có vấn đề. Thiết kế mới của tôi sẽ sử dụng các ngắt cho UART cũng như bộ hẹn giờ để tạo ra PWM và tái sử dụng cẩn thận và chặn các ngắt để đảm bảo PWM không bị trục trặc và xử lý UART miễn phí bị trục trặc ...
Len Holgate

2
Tôi đã sử dụng PWM làm ví dụ, hệ thống tôi gặp sự cố này có 3 giao diện SPI với 1 trong số các kết nối SPI có 3 chip chúng tôi sử dụng trên đó. Có 4 cổng khác nhau thông báo về sự thay đổi trạng thái của chip bên ngoài và một vài thứ khác đang diễn ra. Vấn đề trở nên tồi tệ hơn khi bạn có nhiều giao diện hơn.
Kortuk

2

Hấp dẫn. Sau Giáng sinh, tôi đã lên kế hoạch thực hiện một số Trình biên dịch với các bức ảnh, khi tôi có thêm một chút thời gian tôi sẽ có một cái nhìn tốt về hệ thống của bạn.

Một cách tôi có thể thấy là kịch bản một số loại khung bằng một ngôn ngữ khác để tạo và phá bỏ các đối tượng giả, v.v., nhưng cách bạn giao diện này với chip / mô phỏng sẽ là một vấn đề.

Nếu nó trở nên quá nặng nề thì điều đó sẽ vượt xa lợi ích của việc kiểm tra đơn vị và cũng khiến bạn không muốn sử dụng nó.


Làm cho nó hoạt động bên trong trình giả lập là trở ngại ban đầu của tôi cho đến khi tôi tìm ra cách tách mã thành các tệp riêng biệt và chỉ đơn giản là "giả" ra một số nhãn mà tôi chuyển sang mã thực. Tôi sẽ đăng toàn bộ sau khi tôi hoàn thành. Việc trang bị thêm các bài kiểm tra đơn vị cho mã đang mất một thời gian nhưng nó rất đáng giá.
Len Holgate

Bây giờ tôi đã có cơ hội thích hợp để xem qua phương pháp của bạn, tôi nghĩ nó khá thanh lịch. Có lẽ tôi sẽ có một cái nhìn về avrs sau Giáng sinh, vì dường như có rất nhiều thứ dựa trên cộng đồng xung quanh chúng hơn là cho Pics. Mọi ý tưởng về một Linux IDE tốt cho lập trình Trình biên dịch AVR có thể là gì.
Amos

1
Có một chuỗi công cụ GNU mà bạn có thể sử dụng thay thế cho Studio Studio (là bộ công cụ miễn phí của Atmel). Có thể chạy nó trên Linux, nhưng tôi không cần.
Len Holgate

Chỉ cần tìm thấy liên kết này đến một bài viết trên Tạp chí Linux về phát triển cho AVR trong Linux: linuxjournal.com/article/7289
Len Holgate

Mối quan tâm chính của tôi với bài báo đó là từ năm 2005 và do đó có thể đã lỗi thời.
A-mốt
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.