C언어, 이때 전역변수를 쓸수밖에 없는것일까요?
글쓴이: gurumong / 작성시간: 화, 2009/04/07 - 10:21오전
두함수에서 사용해야할 변수가 있는데
하나의 함수는 인터럽트서비스 루틴이라 호출시에 값을 전달할수 없거든요
이때 두 함수에서 같이 사용할 변수는 전역으로 선언할수 밖에 없는것인가요?
전역으로 선언하면 필요한 두 함수 이외에 다른 함수에서도 접근할수있다는게 불만이거든요
함수의 용도를 설명하면...
인터럽트 서비스 루틴 함수에서는 인터럽트(입력)가 발생하면 호출되어져서 배열(링버퍼)에 값을 넣구요
다른 함수(get)에서는 호출되어지면 버퍼에 값이 있는지 확인을 하고 가져오는데 없으면 값이 있을때까지 빈루프문을 돌게되구요
이렇게 사용되어지는 버퍼는 전역변수로 선언할수 밖에 없는것인지? ㅜ.ㅜ
Forums:
전역변수는 어쩔수 없는 선택이죠
프로그래밍에 전역변수를 안 쓸수는 없습니다.
클래스 내부의 private 데이터형이라고 할지라도 클래스를 전체로 보면 일종의 전역변수에 해당하지요.
주의하면서 쓸 수 밖에는 없습니다.
적어도 동적
적어도 동적 할당시켜서 일일이 포인터 넘겨주는 것보단 낫습니다 = _=);;;
다른 함수에서 접근하지 못하게 하고 싶다면 scope를 제한하면 됩니다.
C 언어에는 scope 개념 자체가 없었으므로 실제로 쓸 수 있는 방법은 소스 코드를 별도의 파일로 분리하고 ISR에서 사용하는 전역변수 및 함수를 static으로 선언하는 겁니다. 다만 이 방법의 문제점은 link 과정이 조금 복잡해진다는 점입니다. :)
리눅스라면
리눅스라면 request_irq에서 마지막 파라메터로 포인터를 넘기면 됩니다.
정답
다들 이렇게 하지 않나요?
파일 단위 모듈화와
파일 단위 모듈화와 static 키워드 활용해보세요
static 키워드를 붙여놓을 경우 그 파일이 아니면 접근하지 못합니다. (외부 심볼을 만들지 않습니다.)
--
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
댓글 달기