문제

Armbler에 작은 모듈을 만들었고, 베어 메탈 내장 응용 프로그램과 함께 연결되었습니다. 때로는 응용 프로그램을 재건 할 때 "오류 [LP002] : 재배치 실패 : 범위를 벗어나거나 불법적으로 평가됩니다". 더 수수께끼는 C 모듈에서 일부 코드를 댓글을 달린 후 오류가 발생한다는 것입니다.

IAR 매뉴얼은 '섹션이나 코드를 다시 주문'하는 것에 대해 모호합니다. 그러나 .C 파일에서 컴파일러가 생성 한 어셈블러 파일을 살펴보면 섹션 선언과 광산 사이에는 차이가 없습니다. 실제로 C에서 스터브 한 다음 조립 된 파일을 인수하여 코드를 시작했습니다.

도움이 되었습니까?

해결책 2

문제의 원인과 허용 가능한 해결 방법을 구현하는 방법을 찾았습니다. 내 어셈블러 소스에는 데이터 섹션과 코드 섹션이 있었고 링커는 너무 멀리 떨어져있었습니다. 이제 변수를 코드 섹션으로 옮겼습니다 (내부 플래시에 글을 쓰는 동안 인터럽트 컨텍스트에서 실행해야하기 때문에 RAM에 배치되었습니다). 이제 올바르게 링크 할 수 있습니다.

이것은 남아있는 질문입니다. 링커에 특정 섹션을 서로 가깝게 배치하도록하는 방법은 무엇입니까?

다른 팁

신비한 링커/컴파일러 오류가 발생할 때마다 모두 재건됩니다. 약 절반의 시간이 수정됩니다. 내 생각에 일부 모듈은 다시 컴파일되어야했지만 그렇지 않았다고 생각합니다.

행운을 빕니다.

컴파일러의 문서를 살펴보십시오. 일반적으로 링커 명령 파일에 대한 섹션이 있으며, 원하는 것을 정확하게 수행합니다.

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