Lỗi khi phát triển phần mềm nhúng

Là một lập trình viên đôi lúc bạn sẽ phải thốt lên:

Một số lỗi hay gặp khi phát triển phần mềm nhúng - Phần 2

Trong quá trình phát triển có lẽ chúng ta thường xuyên phải đối mặt với những tình huống không ai muốn đó. Hãy cùng nhau chia sẻ những kinh nghiệm về những lỗi hay gặp, những trải nghiệm mà chúng ta phải đối mặt trong quá trình phát triển để công việc lập trình đỡ phải thốt lên như trên nhé.

Một số lỗi hay gặp nhất mà bản thân đã từng gặp, hoặc đã chứng kiến nhiều người gặp trong quá trình dev/review code…

Vấn đề bộ nhớ

Memory leak

Biểu hiện dễ thấy nhất của các bệnh về bộ nhớ nhiều lúc là nó không có biểu hiện gì, bỗng nhiên chỉ thấy chương trình treo cứng, không có bất cứ một thông tin nào, không có bất cứ một assert, một cảnh báo gì, vì đơn giản bộ nhớ sai các địa chỉ nhảy, các địa chỉ trả về, các vùng dữ liệu bị corrupt thì chương trình hầu hết là bị treo.

Các vấn đề hay gặp trong bộ nhớ:

Vấn đề quản lý ngắt

Interrupt Handling

Một ví dụ cho việc không bảo vệ biến giữa ngắt và chương trình chính:

int a = 0;
void main() {
    //Do somethings
    while(1) {
        if (a == 3) {
            Process(a);
        }
    //Do somethings
    }
}

void ISR_Process() {
    a++;
}

Trong đó ISR_Process là hàm xử lý ngắt cho một ngắt bất kỳ nào đó trong hệ thống của bạn. Trong trường hợp sau khi check giá trị biến a bằng 3 xong, bạn expect xử lý một trạng thái của hệ thống qua hàm Process(), giữa 2 sự kiện này xảy ra ngắt, và hàm xử lý ngắt làm tăng giá trị biến lên 1 (a++). Sau khi quay trở lại từ ngắt, hệ thống gọi hàm Process(a), nhưng giá trị a lúc này thực tế đã là 4, điều này làm các thao tác xử lý trong hàm Process mà ta expect khi đó giá trị đầu vào là 3 (thực tế đã là 4) bị sai. Lỗi này có thể khắc phục bằng việc thêm vào các câu lệnh bảo vệ vô hiệu hóa ngắt ISR_Process trước câu lệnh check (a == 3), sau khi xử lý xong hàm Process mới enable ngắt trở lại.

Vấn đề khi làm việc với các hệ điều hành

Event Based System

Biên dịch và Debug