안녕하세요..
예전에는 된 것 같은데 interrupt에서 변수 값을 바꿔도 main에서는 안변하네요.
간단한 것 같은 데 잘 안되요...
interrupt에서 m_ReadReq을 바꾸고 main에서 PORTD.1을 이용하여 보는 데 동작을 안하네요...
main에서 출력하지 않고 interrupt에서 출력하면 잘 됩니다.
뭔가 실수한 것 같은데 잘 모르겠습니다.
잘 부탁드립니다.
참 compile은 win-AVR에서 했습니다.
예전에는 된 것 같은데 interrupt에서 변수 값을 바꿔도 main에서는 안변하네요.
간단한 것 같은 데 잘 안되요...
interrupt에서 m_ReadReq을 바꾸고 main에서 PORTD.1을 이용하여 보는 데 동작을 안하네요...
main에서 출력하지 않고 interrupt에서 출력하면 잘 됩니다.
뭔가 실수한 것 같은데 잘 모르겠습니다.
잘 부탁드립니다.
참 compile은 win-AVR에서 했습니다.
winAVR에서는 interrupt에서 전역변수를 쓸려면 단순히
U8 m_ReadReq; 라고 하면 안되고
volatile U8 m_ReadReq; 이라고 선언해야 하네요.
--> 확실하지 않지만 Ram영역에 변수를 기록할 때 사용하는 변수로도 알고 있는데 제가 잘 못 알고 있는 것인지 해서 ㅎㅎ
dohyunpak@yahoo.co.kr로 연락 부탁드립니다.
(copy해서 약간 수정한 글입니다....
AVR-GCC컴파일러는 여러개의 태스크들이 동시 다발적으로 실행되는 리눅스 OS를 위해 개발된 컴파일러이고 운영체제에 의해 태스크들이 스케줄링되므로 메모리 할당 받은 영역이 그 때 그때마다 다를 수 있음. 그때마다 인터럽트 서비스 루틴내에 사용되 전역변수 값이 바뀌게 되거나 다른 태스크에 의해 간섭을 받게 되면 문제가 생기므로 아예 간섭받지 않는 별도의 영역에 할당해 버림->이것이 volatile로 선언된 전역변수임)
대충 알것 같기도..... 밑에 파일 첨부합니다. 위 내용은 28page 하단 부터 있습니다.
으싸 으싸 열씸히 납을 쌓아야 겠습니다.