플래시 메모리에서 세그먼트에 데이터를 추가하면 프로그램의 타이밍을 어떻게 조정할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/129911

문제

10kHz에서 주요 사이클이 실행되는 실시간 임베디드 앱이 있습니다. 플래시에서 부팅하도록 구성된 Ti TMS320C에서 실행됩니다. 나는 최근에 초기화 된 배열을 소스 파일에 추가했으며 갑자기 타이밍이 망가졌다 (잘 설명하기에는 너무 복잡한 방식으로 - 본질적으로 직렬 포트 쓰기는 더 이상 정시에 완료되지 않습니다.)

나를 방해하는 것들 :

  • 나는 새 데이터에 액세스하지도 않습니다, 초기 배열을 선언합니다.
  • 크기 의존적입니다. 배열이> 40 단어 인 경우에만 문제가 나타납니다.
  • 링크 맵의 데이터 세그먼트가 넘치지 않는다는 것을 알고 있습니다.
  • 데이터 캐싱이 없으므로 캐시 일관성을 방해하기 때문이 아닙니다.

플래시에서 .cinit 세그먼트의 크기를 단순히 증가시키는 방법에 대한 아이디어가 코드의 타이밍에 영향을 줄 수 있습니까?

추가 정보:
나는 코드가 이동했다고 생각했지만 데이터에서 잘 분리되어 있습니다. 메모리 맵을 통해 모든 코드 SEGENTS가 버그 전후에 동일한 주소를 가지고 있는지 확인했습니다. 또한 세그먼트 중 어느 것도 가득 차지 않았 음을 확인했습니다.지도에서 변경되는 주소는 .cinit 섹션에 소수입니다. 이 섹션에는 RAM에서 변수를 초기화하는 데 사용되는 데이터 값이 포함되어 있습니다 (배열과 같은). main ()가 호출 된 후에는 액세스해서는 안됩니다.

도움이 되었습니까?

해결책 5

하루 이상이 흔적을 쳐다보고 조립을 생성 한 후, 나는 그것을 알아 냈다고 생각합니다. 근본 원인 문제는 직렬 포트 쓰기를 시작한 ISR이 더 높은 우선 순위와 충돌 한 경우에만 결함을 일으키는 설계 문제로 판명되었습니다. 타이밍은 방금 두 개의 인터럽트가 충돌하기 위해 하나의 루프에 몇 가지 추가 지침을 추가하면서 해결되었습니다.

따라서 문제는 다음과 같습니다. 플래시 메모리의 추가 데이터를 저장하지만 액세스하지는 않지만 추가 지침이 실행되는 방법은 무엇입니까?

대답은 Frosty와 Frederico의 제안과 관련이 있지만 동일하지는 않습니다. 새 배열은 일부 기존 변수를 이동하지만 페이지 경계 또는 느린 지역으로 이동하지는 않습니다 (이 보드에서는 액세스 시간이 모든 지역에 대해 동일해야 함). 그러나 자주 액세스하는 구조의 오프셋을 변경하여 Optimizer가 액세스하기 위해 약간 다른 명령 시퀀스를 발행하게합니다. 한 데이터 정렬은 한 사이클 파이프 라인 스톨을 유발할 수 있으며, 다른 하나는 그렇지 않습니다. 그리고 그 소수의 지시 사항은 근본적인 문제를 드러내기에 충분히 충분히 타이밍을 바꿨습니다.

다른 팁

내 의심은 귀하의 데이터/코드와 기본 미디어/메모리 간의 조정이 변경 될 것입니다. 데이터에 추가하면 메모리 모델에 따라 힙의 메모리 위치가 변경되며 (메모리 모델에 따라) 코드를 플래시 장치의 '페이지'경계를 가로 질러 이전에 없었던 대기 시간을 초래할 수 있습니다.

아마도 새로운 정적으로 할당 된 배열은 기존 데이터를 느린 메모리 영역으로 밀어서 해당 데이터에 대한 액세스가 느려질까요?

배열이 주소 공간의 덩어리에서 마지막으로 문제가되면 문제가 발생합니까? 그렇지 않은 경우,지도를 보면 배열 선언을 하나씩 이동하여 대신에 섞인 것들이 섞여 있습니다. 이렇게하면 관련 객체를 정확히 찾아 내고 이동하면 지연이 발생하는 이유를 해결하기 시작할 수 있습니다.

나는 내 자신을 위험에 빠뜨리고 여기서 성능 문제가 없다고 주장하고, 성능 문제로 증상이되는 어떤 종류의 기억 부패가 있다고 주장합니다. 실행 가능에 배열 추가 메모리 사진 변경. 따라서 내 생각에 주로 무해한 메모리 부패 (예 : 메모리의 일부를 사용하지 않음)가 메모리를 40 바이트 이상으로 이동하면 메모리 손상이 더 큰 문제를 일으킨다는 것입니다. 어느 것이 실제 질문입니다

초기화가 인접한 다른 코드를 덮어 쓸 수 있습니까? 배열을 사용하는 스트러크 나 변수가 있습니까?

은행이나 페이지 충돌 일 수도 있습니다. 어쩌면 같은 페이지에 있었고 이제 두 페이지로 분할 된 두 가지 루틴이 매우 자주 (인터럽트 처리기 등)가있을 수 있습니다.

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