2013-06-04 2 views
0

내 프로그램에 여러 이미지가 있으며 LCD와 키패드가있는 메뉴와 같은 기능을 수행하려고합니다.PIC 용 mikroC에서 오버플로 오류를 해결하는 방법은 무엇입니까?

> Recursion or cross-calling of 'lcd_write' 
> Not enough RAM for call stack 

내가 스택 오버 플로우에 대해 뭔가를 읽어 내가이 명하는 오류를 가지고 미세 전까지 순간을 작업했다. 이 문제를 어떻게 해결할 수 있습니까?

PIC v6 컴파일러에는 PIC16F877a 및 mikroC가 사용됩니다.

답변

0

이 문제를 해결하는 방법은 마지막으로 컴파일 가능한 버전으로 돌아가서 lcd_write에 대한 다른 호출에서 변경된 내용을 확인하고 프로그램을 재구성하여 재귀가 발생하므로 해당 호출을 제거하십시오. 예를 들어, lcd write 데이터를 즉시 쓰기보다는 버퍼에 넣고, 나중에 버퍼에서 무엇인가를 찾을 때 쓰게됩니다.

컴파일 타임에 알 수없는 값으로 호출 스택을 사용하고 PIC와 같은 작은 마이크로 칩에 하드웨어 호출 스택이 8 개 (예 : PIC16F877a)이거나 작은 경우가 있기 때문에 재귀가 임베디드 환경에서 잘못되었습니다. 2 단계.

임베디드 전문가는 호출 스택에 a good explanation의 문제가 있습니다. 마지막으로 컴파일 가능한 버전으로

+0

나는 이것을 읽었고 결국 나는 이것을 얻었다. "이것들을 모두 시험해 본 후에도 여전히 고착된다면, 정말로 피클에 빠지게된다." lol 방금 ​​if/else 문을 소개하고 erros가 시작되었습니다. lcd_write와 마찬가지로 모든 함수에서이 오류가 발생합니다. – mafap

0

이동, 당신은 통화 기능 트리를 볼 수 있고 스택이 제한의에서입니다 볼 수 있습니다 다음,보기 탭이 메뉴에서 "통계"

이동, 성공적으로 컴파일. 동일한 컨트롤러에서 같은 문제가 발생하여 I2C LCD 함수를 다시 구조화하여 다른 호출 된 함수에서 함수를 호출하지 않도록하십시오.

코드를 실제로 최적화 할 수없는 경우 PIC18로 업그레이드하는 것이 좋습니다.