1553B 통신 I/O 드라이버를 개발을 하면서 만났던 이슈에 대한 트러블 슈팅 과정을 정리합니다.
CPU와 I/O 카드(1553B)가 동시에 비동기적으로 데이터 블럭에 접근하게 됨으로 이전 데이터와 최신 데이터가 섞이는 문제가 발생하였습니다.
dwDataBlkAddr = pNode->U.DataBlock.pMemNode->U.MemBlock.dwAceAddr;
dwOldDataBlkAddr = FLEXMEMREAD(DevNum, (pMsgNode->U.Message.pMemNode->U.MemBlock.dwAceAddr + 2));
if (dwOldDataBlkAddr == pDataNode->U.DataBlock.pMemNode->U.MemBlock.dwAceAddr)
{
dwNewDataBlkAddr = pDataNode->U.DataBlock.pMemNode->U.MemBlock.dwAceAddr + BC_DUAL_MSG_SIZE;
}
else
{
dwNewDataBlkAddr = pDataNode->U.DataBlock.pMemNode->U.MemBlock.dwAceAddr;
}