Tôi đang lập trình C trong một mục tiêu được nhúng. Do sự phức tạp ngày càng tăng và các vấn đề testability, mô đun là phải.Biến truyền hiệu quả cho các mô-đun trong nền lập trình c được nhúng
Trong nháy mắt, chương trình là vòng điều khiển. Đọc các đầu vào vật lý sử dụng phần cứng nội bộ, áp dụng một số phép tính và áp dụng các kết quả tính toán. Tuy nhiên, việc kiểm soát khá phức tạp, và có nhiều trạng thái bên trong và thay đổi các biến.
Điều khiển này được chia thành các mô-đun khác nhau, bao gồm các chức năng của các trạng thái khác nhau. Các nhiệm vụ/tính toán phổ biến được cung cấp trong các mô-đun riêng biệt và được gọi trong các mô-đun khác nhau, để giữ cho bản thân tôi bị khô. Đối với enum và kiểu nhất quán trên toàn bộ dự án, một tệp .H hàng đầu được sử dụng (như các chiến lược OO như kế thừa không phải là một tùy chọn trong khung của tôi, theo như tôi quan tâm).
Sự cố của tôi nảy sinh khi quyết định cách chuyển các biến đến và từ các mô-đun.
cách tiếp cận ban đầu của tôi là:
mymodule.H:
struct Inputs{
int input1;
...
int inputN;
}
struct Outputs{
int output1;
...
int outputN;
}
void mymodule(Inputs in,Outputs* out);
Và trong hàm main (hoặc các mô-đun mà gọi module này) có "đầu vào" và "đầu ra" loại cấu trúc tạo ra.
Sau đó, các biến được sao chép vào cấu trúc đầu vào, hàm được gọi (tham chiếu kết quả đầu ra) và sau khi hoàn thành, nội dung của cấu trúc này được sử dụng để tính toán thêm.
Tuy nhiên, điều này sẽ dẫn đến một dấu chân bộ nhớ lớn, vì mỗi mô-đun yêu cầu các thể hiện của InputType và OutputType được tạo trong mô-đun gọi. Nó không phải là một giải pháp ellegant theo ý kiến của tôi. Phân bổ động, bằng cách này, không được phép trong dự án của tôi.
Bạn có thể cung cấp cho tôi một số nguyên tắc và/hoặc ý tưởng thay thế để có được giải pháp tốt không?
Cảm ơn bạn.
Added
Một trong những giải pháp có thể được thông qua InputStruct cũng như con trỏ, nhưng vì họ là một cách hiệu quả đầu vào cho các mô-đun, làm thế nào tôi có thể đảm bảo rằng họ không được sửa đổi dọc theo mã?
Added
Bằng cách này, một vấn đề khác nảy sinh là một thực tế rằng không phải tất cả các mô-đun nhận các biến giống nhau, và không có cơ chế thừa kế có sẵn (vì đây là C), cấu trúc của mỗi mô-đun phải được nạp với các giá trị thích hợp. Tôi khá obfuscated ...
Cấu trúc 'Đầu vào' cũng phải được chuyển thành con trỏ. – mah
Tôi không hiểu tại sao bạn không được phép sử dụng 'bộ nhớ động'? Bạn sẽ hoàn thành một dự án khá phức tạp như thế nào? –
@ bash.d Quá ít bộ nhớ để đủ khả năng phân mảnh? –