명령 버퍼에 명령을 쓰는 상황이 있습니다. 명령 버퍼의 명령이 실행될 때가되면 명령이 처리되어 UART를 다른 하위 시스템으로 보냅니다. 명령이 처리되면 UART로 보내야하는 데이터가 대기열에 저장되고 플래그가 발생합니다. 그런 다음 잠시 후 메인 루프가 플래그가 올라 왔는지 확인한 후 루프가 UART로 데이터를 보낸다. 그러나 명령이 처리되는 시간과 UART를 보낼 준비가 된 시간 사이에 배열이 손상됩니다. 내가 회로 내 디버거를 사용하고 중단 점을 설정했기 때문에 이것을 알 수 있습니다. 전 세계에서 무슨 일이 벌어지고 있으며 어떻게 해결할 수 있습니까? 배열이 지워집니다.
이
가 발생하는 예이다오른쪽 처리 큐에 저장 (a[]
큐이다) 일 :
a[0] = 0x3;
a[1] = 0x6;
a[2] = 0x9;
오른쪽
a[0] = 0x3;
a[1] = 0x6;
a[2] = 0x0;
또는 때로는,
a[0] = 0x3;
a[1] = 0x0;
a[2] = 0x0;
행동은 임의적입니다. 때로는 하나의 바이트 만 손상되고 다른 시간은 2 바이트가됩니다.
프로그래밍 언어? 코드 샘플? –
더 이상의 정보가 없으면 버그는 문자 그대로 될 수 있습니다. 'a'가 안전하게 할당 되었습니까? 그 밖의 모든 것이 안전하게 할당 되었습니까? (예 : 다른 모든 포인터 값이 맞습니까?) 이상한 인터럽트가 점프하고 문제를 일으키고 있습니까? –
체크 아웃 valgrind -이 같은 메모리 오류를 디버깅하는 데 매우 유용합니다. – alternative