Hỏi - đáp Nơi cung cấp thông tin nghề nghiệp và giải đáp những thắc mắc thường gặp của bạn

Kĩ thuật debug trong việc phát triển hệ thống nhúng

Các phương pháp thiết kế chắc chắn (như khớp nối thấp, các giao diện được xác định rõ..) sẽ càng ngày càng được cải thiện để giúp giảm số lượng bug. Sau đó, hệ thống phải phụ thuộc vào biểu hiện để được debug. Chúng ta có xu hướng bị kích thích hay thậm chí cảm thấy kinh ngạc khi bug xuất hiện. Nhưng không cần phải như vậy, đó chỉ là một khía cạnh của việc giải quyết vấn đề. Cùng với công cụ, chiến thuật thích hợp và đặt lại các quá trình debug hoàn toàn có thể trở nên rất dễ thở.



Học hỏi và truyền lại các công nghệ debug sẽ giúp giảm lượng bug trong quá trình phát triển và tăng chất lượng code. Hãy thử để các kĩ sư giàu kinh nghiệm thực hiện các khóa học ngắn để các kĩ sư trẻ hơn có thể học hỏi từ họ.

Tuy đây không phải là một danh sách đầy đủ, nhưng sáu kĩ thuật dưới đây có thể hỗ trợ bạn trong quá trình debug.

1. Đơn giản hóa các dữ liệu phức tạp:

Thay thế các analog input phức tạp bằng các dữ liệu kĩ thuật số, tổng hợp, đã được biết đến trước đó hay dữ liệu tổng hợp. Nếu bắt đầu bằng mẫu đếm thì hãy sử dụng mẫu đếm. Đối với các thuật toán có hệ số ( chẳng hạn như filter), hãy thay thế các hiệu số sản xuất bằng một hệ số đơn giản hơn (chẳng hạn như tất cả các số không ngoại từ một hệ số đầy đủ)

2. Chiến thuật chia để trị:

Hãy tim hiểu gốc rễ vấn đề càng lâu càng tốt trước khi cố để hiểu nó. Việc này có thể tiết kiệm đáng kể thời gian mô phỏng và thực hiện phần cứng trong thời gian dài. Để thực thiện, giả sử bạn đã có một chuỗi các thuật toán xử lí tín hiệu chuyên sâu, tạm gọi là A, B, C, D. Khi bạn mô phỏng A và quan sát D, bạn sẽ phát hiện tới vấn đề đang gặp phải. Nếu bạn có thể thu hẹp vấn đề rằng inputs C vẫn tốt nhưng output C lại không tốt, bạn chỉ cần tập trung vào bug và vẫn đề xảy ra chỉ có ở trong C. Giờ bạn đã có thêm thời gian để đi đối phó với các vấn đề khác khó khăn hơn.

Khái niệm này chỉ hoạt động với góc nhìn dừ dưới lên (bottom-up perspective) - xác minh các chức năng level thấp sẽ hoạt động trước, sau đó làm việc qua các lớp trừu tượng. Ví dụ, bạn có một thuật toán logger analog data, bắt đầu bằng việc xác minh giao diện A/D cấp thấp, giao diện bộ nhớ vật lí và giao diện bus truyền thông vật lí. Sau đó di chuyển tới lớp khác để xác minh các chức năng như trình xử lý dữ liệu và bộ định tuyến. Cuối cùng, xác minh mức cao nhất của trình ghi dữ liệu.

3. Làm chậm quá trình xuống:

Hãy làm chậm đồng hồ và tốc dộ dữ liệu, nhiều khi các yêu cầu về thời gian là không được đáp ứng, có thể một thuật toán không được đồng bộ hóa với dữ liệu thuật toán khác, có thể một thuật toán cần được định hướng dữ liệu lại vô tình được code theo định hướng thời gian hoặc có thể thiết bị đang cố đẩy data quá nhanh đến một thiết bị khác

4. Chỉ thay đổi một biến một lần:

Khi có quá nhiều inputs, tốt hơn nên đặt chúng độc lập và chỉ thay đổi 1 biến 1 lần, quan sát phản hồi của hệ thống. Tip ở đây là xác định tất cả input kích thích sự thay đổi trong output của hệ thống. Điều này liên quan đến lỗi cô lập và kích hoạt.

5. Tạo ra các mô hình ngoại tuyến:

Các mô hình này phải càng khớp với thuật toán thời gian thực càng tốt để so sánh bit level. Phương pháp này hữu ích nhất với các phép biến đổi không trực quan (chẳng hạn như phép toán ma trận)- cái quá khó để hiểu output sẽ trông như thế nào so với input. Nếu thuật toán thời gian thực là điểm cố định và thuật toán ngoại tuyến là điểm động có thể một số sự khác biệt nhỏ sẽ được tích lũy và gây ra sự cố.

6. Bắt đầu từ một trạng thái đã được hiểu rõ trước đó:

Từ từ điều chỉnh input tới khi có bug xảy ra và bug có thể quan sát được. Ví dụ. nếu nghi ngờ gói bít, tăng từ từ biên độ tại input cho đến khi lỗi có thể quan sát được. Tương tự như vậy, nếu bộ đệm được sử dụng, hãy bắt đầu bằng cách cho một lượng nhỏ dữ liệu vào thuật toán và từ từ tăng cho đến khi có điều nghi ngờ xảy ra. Ngoài ra, có thể một vòng lặp kiểm soát ngắt với các transients lớn có thể xuất hiện tốt với độ lệch nhỏ hơn xung quanh trạng thái ổn định.

Via Controleng