Tôi có hơn 20 năm hệ thống nhúng, chủ yếu là 8 và 16 micros. Câu trả lời ngắn cho câu hỏi của bạn cũng giống như bất kỳ sự phát triển phần mềm nào khác - không tối ưu hóa cho đến khi bạn biết bạn cần, và sau đó không tối ưu hóa cho đến khi bạn biết những gì bạn cần tối ưu hóa. Viết mã cho bạn để nó đáng tin cậy, dễ đọc và duy trì trước tiên. Tối ưu hóa sớm là nhiều, nếu không phải là nhiều hơn, một vấn đề trong các hệ thống nhúng
Khi bạn lập trình "mà không lãng phí bất kỳ tài nguyên nào.", Bạn có coi thời gian của mình là tài nguyên không? Nếu không, ai trả tiền cho bạn cho thời gian của bạn, và nếu không có ai, bạn có điều gì tốt hơn để làm với nó không. Một khi lựa chọn, bất kỳ nhà thiết kế hệ thống nhúng nào cũng phải thực hiện là chi phí phần cứng so với chi phí thời gian kỹ thuật. Nếu bạn sẽ vận chuyển 100 đơn vị, sử dụng vi mô lớn hơn, ở mức 100.000 đơn vị, tiết kiệm 1 đô la cho mỗi đơn vị tương đương với 1 năm phát triển phần mềm (bỏ qua thời gian để tiếp thị, chi phí cơ hội, v.v.), ở mức 1 triệu đơn vị, bạn bắt đầu nhận ROI vì bị ám ảnh về việc sử dụng tài nguyên, nhưng hãy cẩn thận vì nhiều dự án nhúng không bao giờ đạt được 1 triệu vì họ đã thiết kế để bán 1 triệu (Đầu tư ban đầu cao với chi phí sản xuất thấp) và đã phá sản trước khi họ đến đó.
Điều đó nói rằng, những điều bạn cần xem xét và nhận thức được với các hệ thống nhúng (nhỏ), bởi vì những điều này sẽ ngăn nó hoạt động, theo những cách không ngờ tới, không chỉ làm cho nó đi chậm.
a) Ngăn xếp - bạn thường chỉ có kích thước ngăn xếp nhỏ và kích thước khung ngăn xếp thường bị giới hạn. Bạn phải nhận thức được việc sử dụng ngăn xếp của bạn mọi lúc. Được cảnh báo, vấn đề ngăn xếp gây ra một số khiếm khuyết ngấm ngầm nhất.
b) Heap - một lần nữa, kích thước heap nhỏ vì vậy hãy cẩn thận về việc cấp phát bộ nhớ không chính đáng. Sự phân mảnh trở thành một vấn đề. Với hai điều này, bạn cần biết những gì bạn làm khi bạn hết tiền - điều đó không xảy ra trên một hệ thống lớn do hệ điều hành cung cấp phân trang. tức là khi malloc trả về NULL, bạn có kiểm tra nó không và bạn sẽ làm gì. Mỗi mallow cần kiểm tra và xử lý, mã phình?. Như một hướng dẫn - không sử dụng nó nếu có một sự thay thế. Hầu hết các hệ thống nhỏ không sử dụng bộ nhớ dynmaic vì những lý do này.
c) Ngắt phần cứng - Bạn cần biết cách xử lý chúng một cách an toàn và kịp thời. Bạn cũng cần biết cách tạo mã đăng ký lại an toàn. Ví dụ, libs tiêu chuẩn C thường không được đăng ký lại, do đó không nên được sử dụng bên trong các trình xử lý ngắt.
d) Hội - hầu như luôn luôn tối ưu hóa sớm. Nhiều nhất là một lượng nhỏ (nội tuyến) là cần thiết để đạt được điều gì đó mà C không thể làm được. Như một bài tập, viết một phương pháp nhỏ trong lắp ráp thủ công (từ đầu). Làm tương tự trong C. Đo hiệu suất. Tôi cá là C sẽ nhanh hơn, tôi biết nó sẽ dễ đọc hơn, có thể duy trì và có thể mở rộng. Bây giờ cho phần 2 của bài tập - viết một chương trình hữu ích trong lắp ráp và C.
Như một bài tập khác, hãy xem phần mềm của nhân Linux là trình biên dịch, nthen đọc, đoạn dưới đây về kernel linux.
Thật đáng để biết cách làm điều đó, nó thậm chí có thể đáng để thành thạo các ngôn ngữ cho một hoặc hai micros.
e) "đăng ký không dấu int biến_name", "đăng ký", và luôn luôn là một gợi ý cho trình biên dịch, không phải là một hướng dẫn, trở lại vào đầu những năm 70 (40 năm trước), điều đó có ý nghĩa. Vào năm 2012, thật lãng phí cho các tổ hợp phím vì trình biên dịch rất thông minh và các hướng dẫn vi mô rất phức tạp.
Quay lại nhận xét linux của bạn - vấn đề bạn gặp phải ở đây là chúng tôi không nói chuyện chỉ 1 triệu đơn vị, chúng tôi đang nói chuyện 100 triệu, với thời gian tồn tại mãi mãi. Thời gian và chi phí kỹ thuật để có được nó tối ưu nhất có thể là con người có giá trị trong khi. Mặc dù là một ví dụ điển hình về thực hành kỹ thuật tốt nhất, nó sẽ là tự sát thương mại đối với hầu hết các nhà phát triển hệ thống nhúng có tính mô phạm như kernal linux yêu cầu.