메뉴 바로가기

서브메뉴 바로가기

본문 바로가기

logo

묻고 답하기
조회 수 16,177 추천 수 1 댓글 2
?

단축키

Prev이전 문서

Next다음 문서

위로 아래로 댓글로 가기 인쇄 쓰기 목록
?

단축키

Prev이전 문서

Next다음 문서

위로 아래로 댓글로 가기 인쇄 쓰기 목록
?
  • WhiteAT 2008.01.14 21:33

    전에 문제가 되었던 것은 잘 해결이 되었나요^^?

    크게 2가지 방법이 있습니다. (다른방법이 있다면 다른 방법을 사용하면 되겠죠?)
    (예를 들어 함수 f1, f2,f3 함수 3개가 있다고 할때...)

    1. 전역변수로 사용 (함수의 인자를 사용하지 않고)
    int f1_timer;
    int f2_timer;
    int f3_timer;

    void op_f1(){ if(f1_timer>0) return;   }
    void op_f2(){ if(f2_timer>0) return;   }
    void op_f3(){ if(f3_timer>0) return;   }

    2. 전역변수로 사용 (함수의 인자로 전달)
    void op_f1(&timer){ if(timer>0) return;   }
    void op_f2(&timer){ if(timer>0) return;   }
    void op_f3(&timer){ if(timer>0) return;   }


    함수 인자로 포인터를 사용하는 이유는 함수 내에서도 전달된 인자값이 변경되기 때문입니다.
    예를 들어 아래처럼 했을 때는 timer 값이 함수 내에서 timer 값이  변경되면, 함수내에서만 적용됩니다.
    void op_f1(timer){ if(timer>0) return;   } 
    그 이유 때문에 포인터를 사용하는 겁니다.





    1번과 2번이 크게 차이가 없어 보이지만,  (비슷한 일을 할 경우)엄청난 차이가 있는 경우가 있습니다.
    예를 들어, 키 8개 led 8개가 있고,  눌러진 키의 번호에 해당하는 LED 를 ON 하려고 할때

    1번 방법으로 한다면.
    void op_f1(){ if(f1_timer>0) return;  // led 처리 }
    void op_f2(){ if(f2_timer>0) return; // led 처리 }
    void op_f3(){ if(f3_timer>0) return;  // led 처리 }
    void op_f4(){ if(f4_timer>0) return;  // led 처리 }
    void op_f5(){ if(f5_timer>0) return;   // led 처리 }
    void op_f6(){ if(f6_timer>0) return;   // led 처리 }
    void op_f7(){ if(f7_timer>0) return;   // led 처리 }
    void op_f8(){ if(f8_timer>0) return;   // led 처리 }
    로 선언이 되고  메인에서는
    op_f1();op_f2();op_f3();op_f4();op_f5();op_f6();op_f7();op_f8();
    가 되겠죠?

    2번 방법인 경우.
    void op_f1(&timer) if( *timer>0) return;  // led 처리 }  // 하나의 함수만 선언하면 되고,
    메인에서는
    op_f1(&timer1);
    op_f1(&timer2);
    op_f1(&timer3);..................식으로 사용될 것입니다.


    이 예제는 간단한 예제이지만 관련된 변수가 많아지고 op_f1내의 함수 기능이 많아지면, 수정하기와 디버깅 하는데 엄청난 차이가 생깁니다...


    전달받은 인자가 함수내에서 값이 변경되고 또 그 값을 돌려 줘야 한다면 call-by-reference를 사용하거나  전역변수를 사용해야 하고,
    인자값을 받아서 사용만 하려면 call-by-value 로 사용하면 됩니다.

    전달인자의 크기가 작을 때는 call-by-reference 방식이 속도가 빠르지만 전달인자의 크기가 커지면 속도의 차이는 크지 않습니다.
    그리고 call-by-reference는 주소공간을 줄인다는 장점이 있구요..

  • 러빙유 2008.01.14 22:13
    아. 그렇군요...많은 도움이 되고 있습니다. 한번 또 머리를 돌려 봐야 되겠네요..^^

    네, 많이 도와 주신 덕분에 그럭저럭 해결이 되었습니다.^^'..  그런데, WHILE(1) 안에, 아직 넣어주어야 할 것들이 많아서

    넣어보면서 타이머 값을 조절할 일이 좀 남아 있죠^^.  감사합니다.

  1. No Image 04Apr
    by 이노시엠
    2009/04/04 in 일반
    Replies 1

    VC++ RS232C통신 및 Log data 수집

  2. No Image 03Feb
    by 헤이즐넛
    2009/02/03 in 일반
    Replies 1

    [MFC]키보드 입력 관련 질문입니다.

  3. 어제 테트리스에 댓글 달았던 학생입니다

  4. No Image 12Dec
    by centerki
    2008/12/12 in 일반
    Replies 1

    테트리스 소스에 대한 질문이있습니다.

  5. No Image 01Dec
    by 하나
    2008/12/01 in 일반
    Replies 1

    기술자료실에 127번 글에서 질문있습니다..

  6. No Image 09Nov
    by worb10
    2008/11/09 in 일반

    문제 답변 쫌 부탁드려요~ ^^

  7. No Image 13Jun
    by 러빙유
    2008/06/13 in 일반

    조언 부탁드립니다. 필드에서 지적 받은건데요..

  8. No Image 29May
    by 송용욱
    2008/05/29 in 일반
    Replies 1

    c++구조체와 함수를사용해서 성적표만들기2

  9. No Image 29May
    by 송용욱
    2008/05/29 in 일반
    Replies 1

    c++구조체와 함수를사용해서 성적표만들기

  10. No Image 15May
    by 이나니
    2008/05/15 in 일반
    Replies 1

    mfc 테트리스 질문이요~

  11. No Image 22Jan
    by 러빙유
    2008/01/22 in 일반
    Replies 3

    RS485 통신 방법

  12. No Image 14Jan
    by 러빙유
    2008/01/14 in 일반
    Replies 2

    함수인자를 구조체 변수나 구조체 주소로 받는 것.

  13. No Image 09Jan
    by 러빙유
    2008/01/09 in 일반
    Replies 12

    인터럽트 루틴을 메인으로 빼고자 하는데 가능할 지요?

  14. No Image 08Jan
    by 러빙유
    2008/01/08 in 일반
    Replies 8

    LED 깜빡 거림.

  15. No Image 04Jan
    by 러빙유
    2008/01/04 in 일반
    Replies 2

    IAR 컴파일러 환경에서 AVR128 Timer1 인터럽터 구현이 안되요..

목록
Board Pagination Prev 1 2 3 4 Next
/ 4