저는 마이크로 컨트롤러 C 프로그래밍의 초보자이며 중첩 루프를 사용할 때 몇 가지 문제가 있습니다. 다음은 내 C 코드에있는 샘플 구성입니다. 그것은 stop_value에 도달 아래로 올렸하면서 또한 특정 레지스터를 읽을 때까지 루프를 아래로 램프 : 문제는 나는 다음을 수행하려고, 기본적으로 이후C에서 중첩 루프를 다시 시작하는 가장 이상적인 방법은 무엇입니까?
// I am trying to ramp down the while loop
while (i>= stop_value)
{
step_value = default_value;
R32(a particular register, content_register);
if (content_register = a_set_value)
{
if(step_value <= step_max)
{
step_value = step_value +1;
i=start_value;
continue;
}
if(step_value =step_max)
{
// do something;
break;
}
}
WR32(a particular register, content_reset_register); // resetting the register
i=i-1;
}
을 언급하고 있습니다. 레지스터에 정의 된 값이있는 경우 step_value < = step_max인지 확인하십시오. step_value가 < step_max이면 continue 문을 사용하여 while 루프를 재설정하고 i를 초기 시작 값으로 설정합니다. 이 시점에서 내 step_value는 기본 단계 값이 아니라 최신 값이어야합니다. 나는 step_value를 default_value로 초기화하기 때문에 위의 코드가 step_value에 대해 완전하지 않다는 것을 이해한다. (그래서, 어떻게 초기 step_value = default_value 문을 수정해야 루프가 실행될 때 처음에는 default_value가되고 이후에는 가장 최근의 것이된다. step_value?) 하지만 step_value가 내 step_max와 같으면 무언가를 수행하고 그 다음에 중단하십시오 (이 부분이 작동합니다!). 또한 continue 문을 사용하면 레지스터의 내용을 다시 설정해야합니다.
그래서, step_value가 step_max보다 작 으면 레지스터의 내용을 최신 step_value로 while 루프를 효과적으로 재설정하고 싶습니다. 답장을 보내 주셔서 감사합니다.
@imonc 그 편집으로 참을성있게 잘 해냈습니다. :) –
R32 읽기 레지스터가 '휘발성'으로 선언되어 컴파일러가 읽기를 최적화하지 않도록하십시오. 또한 =/== 아래와 같습니다. –
_how 초기 루프가 실행될 때 initial_value = default_value 문을 수정하여 default_value와 그 이후의 가장 최신 step_value_를 갖습니다. 루프 위의'step_value = default_value'를 움직여서'i'와'continue'를 리셋하면 실행되지 않을 것입니다. – Shahbaz