Kinh nghiệm debug lỗi khi làm lập trình nhúng

Print

Đối với người lập trình nhúng, việc viết driver cho 1 ngoại vi (ví dụ USART, SPI, I2C, CAN…), giao tiếp giữa các module phần cứng, là công việc khá quen thuộc.

Tuy nhiên, chúng ta cũng thường xuyên gặp những lỗi khá “vớ vẩn” làm mất rất nhiều thời gian và công sức.

Đặc biệt là khi làm việc với 1 board mạch mới được thiết kế (ver 0.1), chưa được validate về tính năng trước đó. Không biết chính xác lỗi phát sinh là do phần cứng hay phần mềm.

Vậy, làm thế nào để fix được bug nhanh nhất?

Trước hết, 2 thiết bị “nói chuyện” với nhau chúng cần có những điều kiện sau để “hiểu nhau”:

1. Môi trường truyền thông tin.

Ví dụ, trong không gian thì ko thể truyền âm thanh, 2 ngoại vi định truyền dữ liệu cho nhau mà bản thân kết nối vật lý bị hỏng( do pcb lởm khởm hoặc chất lượng hàn kém, mối hàn gây chập chờn, lúc được lúc không) thì ko thể trao đổi dữ liệu được.

Nhiều trường hợp, khi cắm que đo vào thì truyền dữ liệu tốt, bỏ ra thì chập chờn. Nguyên nhân là do mối hàn kém chất lượng, khi bạn đo, que đo đặt lên chân linh kiện, chân này sẽ tiếp xúc tốt hơn với pad, thế là nó chạy, khi không có que đo thì chân linh kiện bị kênh lên so với pad, tiếp xúc kém, nên giao tiếp bị chập chờn.

Cách phát hiện:

2. Mỗi thằng đều có khả năng nói và nghe một cách độc lập.

Một trong hai thằng bị chết thì thằng còn lại nói chuyện với ai? Trong trường hợp này, có thể các chân giao tiếp bị hỏng,chưa khởi tạo được. Nhiều VĐK, 1 chân chết mà core vẫn chạy bình thường :D.

Cách phát hiện:

3. Hai thằng phải nói cùng 1 ngôn ngữ.

(Thử hỏi,thằng dùng tiếng Tây nói chuyện với thằng dùng tiếng Tàu thì có hiểu nhau ko?)

Cách phát hiện:

 

Kinh nghiệm:

Đối với những bug ngáo ngơ, ko biết là tại đâu thì nguyên nhân chính là liên quan đến memory (RAM) hay việc kiểm soát các biến.

Một số nguyên nhân hay gặp:

Lỗi phát sinh do đường bus bận, xét 2 trường hợp sau:

Foo1:

Foo2:

Or:

Kết quả: Foo1 chạy OK, Foo2 bị lỗi.

Nguyên nhân: Foo1 có nhiều thời gian cho lệnh thực thi hơn Foo2, Foo2 có thời gian thực thi quá ngắn dẫn đến đường truyền vẫn bận.

Xử lý: Đưa thêm thời gian vào sau mỗi lần request dữ liệu.

Để hạn chế bug ngay từ đầu dự án, bạn nên “keep coding convention” và biết một vài cái rules thường xuyên đụng tới khi làm embedded:

<comming soon>

 

Bạn có đam mê ngành thiết kế vi mạch và bạn muốn có mức lương 1000 usd cùng lúc bạn

đang muốn tìm một Trung tâm để học vậy hãy đến với ngành vi mạch tại SEMICON

  HotLine: 0972 800 931 Ms Duyên