임베디드 대상에서 C를 프로그래밍 중입니다. 복잡성과 테스트 가능성 문제가 증가함에 따라 모듈성이 필수적입니다.임베디드 C 프로그래밍 백그라운드에서 모듈로 변수를 전달하는 효율성
한 눈에 프로그램은 제어 루프입니다. 내부 하드웨어를 사용하여 물리적 입력을 읽고 계산을 적용하고 계산 된 출력을 적용합니다. 그러나 컨트롤은 매우 정교하며 많은 내부 상태와 변수가 있습니다.
이 컨트롤은 다른 상태의 기능을 묶어 여러 모듈로 나뉩니다. 일반적인 작업/계산은 별도의 모듈로 제공되며 자신을 DRY 상태로 유지하기 위해 여러 모듈에서 호출됩니다. 전체 프로젝트에서 enum과 형식 일관성을 위해 최상위 .H 파일이 사용됩니다 (상속과 같은 OO 전략은 내 프레임 워크에서 옵션이 아닙니다. 관련이 있습니다).
내 문제는 모듈간에 변수를 전달하는 방법을 결정할 때 발생합니다.
내 초기 접근 방식은 다음과 같습니다
mymodule.H:
struct Inputs{
int input1;
...
int inputN;
}
struct Outputs{
int output1;
...
int outputN;
}
void mymodule(Inputs in,Outputs* out);
그리고 주요 기능 (또는이 모듈을 호출 모듈)에
는 "입력"을 만들어 "출력"형 구조체가 있습니다.그런 다음 변수가 Inputs 구조체에 복사되고 함수가 호출되어 (Outputs 구조체 참조) 완료되면이 구조체의 내용이 추후 계산에 사용됩니다.
그러나 각 모듈은 호출 모듈에서 InputType 및 OutputType의 인스턴스를 생성해야하기 때문에 메모리 사용 공간이 커집니다. 그것은 내 의견으로는 훌륭한 해결책이 아닙니다. 동적 할당은 내 프로젝트에서 허용되지 않습니다.
좋은 해결책을 얻으려면 몇 가지 가이드 라인 및/또는 다른 아이디어를 제공해 주시겠습니까?
감사합니다. 솔루션의 추가
한
는 포인터로 InputStruct을 통과 할 수 있지만,이 모듈에 효과적입니다 입력으로, 어떻게 그들이 코드에 따라 수정되지 않도록 보장 할 수? 그런데 라이트
이 발생하는 문제는 모든 모듈은 동일한 변수를 수신하고 있다는 사실이다 제공되지 않음 상속 메커니즘 (이 C이기 때문에), 각 모듈의 구조가 갖는 함께 적절한 값을로드하십시오. 꽤 ... 난독 화하고
'Inputs' 구조체도 포인터로 전달되어야합니다. – mah
'동적 메모리'를 사용할 수없는 이유는 무엇입니까? 어떻게 복잡한 프로젝트를 완성 할 수 있습니까? –
@ bash.d 분열을 일으킬만한 메모리가 너무 적습니까? –