11/*********************************************************************************/
22/*
3- * Author : Jung Hyun Gu
3+ * Author : Jeong Hyun Gu
44 * File name : AvrUart.c
55*/
66/*********************************************************************************/
77#include <string.h>
88#include "AvrUart.h"
99/*********************************************************************************/
10- #if (AVR_UART_REVISION_DATE != 20170224 )
10+ #if (AVR_UART_REVISION_DATE != 20170322 )
1111#error wrong include file. (AvrUart.h)
1212#endif
1313/*********************************************************************************/
14+ #define INC_BUF_POINTER (__PTR__ , __RING_BUF__ ) (__PTR__ == &(__RING_BUF__)->Buf[(__RING_BUF__)->Size - 1] ? \
15+ __PTR__ = (__RING_BUF__)->Buf : \
16+ __PTR__++)
17+ /*********************************************************************************/
1418/** Global variable **/
1519
1620
@@ -32,37 +36,6 @@ static char CheckAllOfInit(tag_AvrUartCtrl *Com)
3236 return (Com -> Bit .InitRegister && Com -> Bit .InitBuffer && Com -> Bit .InitGeneral ) ? true : false;
3337}
3438/*********************************************************************************/
35- static char * MoveBufPointer (char * Ptr , tag_AvrUartRingBuf * Que , int Move )
36- {
37- int Distance ;
38-
39- /*
40- 1) 인수
41- - Ptr : 이동전 기준 버퍼 주소.
42- - Que : 'tag_AvrUartRingBuf' 타입의 인스턴스 주소.
43- - Move : 이동할 거리.
44-
45- 2) 반환
46- - 이동한 버퍼의 주소.
47-
48- 3) 설명
49- - 인수로 받은 Ptr의 위치에서 지정한 거리만큼 이동한 위치의 버퍼 주소 반환.
50- */
51-
52- Distance = & Que -> Buf [Que -> Size - 1 ] - Ptr ;
53- if (Move > Distance )
54- {
55- Move -- ;
56- Ptr = Que -> Buf + (Move - Distance );
57- }
58- else
59- {
60- Ptr += Move ;
61- }
62-
63- return Ptr ;
64- }
65- /*********************************************************************************/
6639char AvrUartLinkRegister (tag_AvrUartCtrl * Com , char * pUDR , char * pUCSRA , char * pEnablePort , char EnablePin )
6740{
6841 /*
@@ -210,7 +183,7 @@ void AvrUartPutChar(tag_AvrUartCtrl *Com, char Char)
210183 TxQue -> Ctr ++ ;
211184 * TxQue -> InPtr = Char ;
212185
213- TxQue -> InPtr = MoveBufPointer (TxQue -> InPtr , TxQue , 1 );
186+ INC_BUF_POINTER (TxQue -> InPtr , TxQue );
214187 }
215188}
216189/*********************************************************************************/
@@ -240,7 +213,7 @@ void AvrUartTxQueueControl(tag_AvrUartCtrl *Com)
240213 TxQue -> Ctr -- ;
241214 * Com -> pUDR = * TxQue -> OutPtr ;
242215
243- TxQue -> OutPtr = MoveBufPointer (TxQue -> OutPtr , TxQue , 1 );
216+ INC_BUF_POINTER (TxQue -> OutPtr , TxQue );
244217 }
245218 else
246219 {
@@ -305,7 +278,7 @@ void AvrUartRxQueueControl(tag_AvrUartCtrl *Com)
305278 RxQue -> Ctr ++ ;
306279 * RxQue -> InPtr = * Com -> pUDR ;
307280
308- RxQue -> InPtr = MoveBufPointer (RxQue -> InPtr , RxQue , 1 );
281+ INC_BUF_POINTER (RxQue -> InPtr , RxQue );
309282 Com -> ReceivingCnt = Com -> ReceivingDelay ;
310283 }
311284}
@@ -369,7 +342,7 @@ void AvrUartGetChar(tag_AvrUartCtrl *Com, char *Char)
369342 RxQue -> Ctr -- ;
370343 * Char = * RxQue -> OutPtr ;
371344
372- RxQue -> OutPtr = MoveBufPointer (RxQue -> OutPtr , RxQue , 1 );
345+ INC_BUF_POINTER (RxQue -> OutPtr , RxQue );
373346 }
374347}
375348/*********************************************************************************/
0 commit comments