0
내 C 프로젝트를 실행하는 데 IAR (버전 : 6.60.1.5104)을 사용하고 있습니다.값이 <unavailable> 인 IAR
이상한 행동이 나타납니다.
내가 zero
예로서 로컬로 정의 된 변수의 값을 얻고 디버깅하는 동안.
int a = 0
그러나 할당 된 변수의 경우 0이 아닌 값은 <available>
입니다.
나는 코드 아래에 언급 한이 지속적으로 일어나고
int someFun():
{
int32_t a = 0; //IAR says it <unavailable>
int32_t b = 1;
printf("%d%d", a,b);
}
. 도와주세요
가능한 원인입니다. IAR (ARM)은 최적화 수준 '낮음'이상에서 CPU 레지스터를 적극적으로 재사용합니다. 내 기억이 올바르게 작동한다면 기본적으로 디버그 빌드에서도 '낮음'이 활성화되지만 가능한 가장 낮은 수준은 '없음'입니다. – user694733
IAR (제 경우의 경우 8051)은 공격적으로 회선을 최적화하므로, 해당 영역을 중단하려면 회선이 없어지기 때문에 할 수 없습니다. asm ("nop")을 넣을 수 있습니다. 줄을 서서 끊어 라. 옵티마이 저는 해당 행을 만지지 않습니다. 최적화 도구가 변수를 털어 버리지 않도록하는 비슷한 기법이 있습니까? – therealjumbo
이 문제를 해결하려면 변수를 '휘발성'으로 선언하십시오. 나는 그 일을 전에 생각하지 않았다는 것을 믿을 수 없다. – therealjumbo