IAR Embedded Workbench 버전 6.6 인 MSP430 v5.60.7에 IAR Embedded Workbench를 사용하고 있습니다. C99을 사용하고 있습니다.IAR Embedded Workbench 6 (MSP430 V5.6) 프로그램 시작 재정의
__program_start()를 __unit_test_main()이라는 자체 심볼로 덮어 쓰려고합니다. 나는 링커 설정 탭으로 가서 "기본 프로그램 엔트리 무시"상자를 체크하고 "엔트리 심볼"옵션을 선택하고 __unit_test_main을 입력했습니다. 이 컴파일 및 링크 그러나 시뮬레이터에서 실행되지 않습니다. "사용자 오류 : 0x0에 잘못된 opcode가 있습니다"라는 메시지가 나타납니다. 타겟에서 실행하려고하면 컨트롤러가 작동하지 않습니다. 컨트롤러가 저전력 모드로 전환됩니다.
PC와 SP는 모두 시작할 때 0x00으로 초기화됩니다.
그렇다면 PC와 SP를 제대로 초기화하려면 어떻게해야합니까/정의해야합니까?
#include <cstdio>
void __unit_test_main(void);
void __unit_test_main(void)
{
printf("Hello World");
for(;;)
{
}
}
를 호출 난 당신이 그 함수의 라이브러리 함수를 호출 할 수 있는지 확실하지 않다했을 것이다. 내가 올바르게 이해했다면 초기화 작업이 아직 끝나지 않았을 때 프로그램을 인계받습니다. '.bss' 섹션은 초기화되지 않았고'.data' 섹션은 초기화되지 않았습니다. 이것은 라이브러리 함수가 필요로하는 전역 변수 ('printf'에는 어떤 것이 있다고 생각합니다)가 쓰레기 값을 가질 가능성이 있음을 의미합니다. 참고 : 이것은 추측 일 뿐이며 MSP 또는 입력 무시로 작업하지 않았습니다. – user694733
__unit_test_main을 실행할 수 없습니다. CLIB와는 아무런 관련이없는 이유가 확실하지 않습니다. – Nick