embeded/Cortex-M3 Ti2012. 6. 18. 22:52
이름은 거창한데,
간단하게 말하면 잘못 구성된 인터럽트 전송 방식에서의 문제점 이다.

void main()
{
    while(1)
        uart_handler();
}

void uart_handler()
{
    if(send != recv) flush();
}

대략 이런 구조에서 단순하게 send와 recv로 전송할 데이터가 있는지만 확인하고
flush()를 이용해 uart tx finish interrupt를 통해 데이터를 지속적으로 보내려고 할경우
uart_handler()에 의해 루프를 도는중 지속적으로 flush를 함으로서 데이터가 몇바이트 깨지거나
순서가 바뀌는 것 같은 문제가 발생하기도 한다.


간단하고 당연한(?) 해결책은
전송이 시작되었고 전송중이라는 플래그를 두는 것. 
Posted by 구차니