문제

내 Arduino (C/C ++의 혼합)에 대한 프로그래밍, 나는 이상한 것을 발견했습니다.

직렬 포트를 통해 의사 소통 할 때마다 SRAM 사용을 주시합니다. 일반적으로 300 ~ 400 바이트 사이입니다. 그러나 새로운 루틴을 추가 한 후 (아래 참조), 나는 항상 300 ~ 400 바이트의 무료 메모리에서 점프하는 것을 발견했습니다. 바로 그거죠 1023. 내 직감은 문제가 있다는 것입니다.

이것은 새로운 루틴입니다

void NewRoutine(char *cmdd){

   GSM.print(cmdd);
   GSM.print(26, BYTE);
   GSM.print(endl); // <-- added later
   Serial.print(availableMemory());
}

그리고 이것은 메모리 체크 루틴입니다

  int availableMemory() {
  int size = 1024;
  byte *buf;
  while ((buf = (byte *) malloc(--size)) == NULL);
  free(buf);
  return size;
}

이것에 주목하십시오 : 먼저, 작동하지 않았습니다. ENDL 명령을 추가 한 후 마술처럼 작동했지만 메모리 문제를 발견했습니다.

누구든지 해결 방법에 대한 아이디어가 있습니까?

도움이 되었습니까?

해결책

1023 바이트의 자유 메모리를받는 이유는 순전히 Malloc (1023- -1024)이 첫 번째 시도에서 성공하기 때문입니다. 이것은 당신이 최소 1023 바이트의 메모리를 가지고 있음을 의미하지만 진정한 메모리를 말하지는 않습니다.

이 전에, 당신은 주변에 기억을 유지해야했을 것입니다. 내 추측은 여기 GSM 클래스입니다. 아마도 Newline에서 플러시되는 내부 버퍼에 데이터 (CMDD + 26)를 보유 할 것입니다. ENDL 호출을 추가하자마자 버퍼에서 전체 메모리를 다시 얻을 수 있습니다.

당신의 명령은 얼마나 큽니까? 내 생각에 그것 (또는 그 전체 세트)은 아마도 약 700 바이트 일 것입니다 ...

다른 팁

아마도 데이터를 직렬 포트로 전송하기 위해 힙에 버퍼를 보유하고 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top