|
本帖最后由 sunplus 于 2019-12-27 11:32 编辑
- #include "Arduino.h"
- void setup()
- {
- Serial.begin(9600);
- }
- #define LEN 1024
- uint8_t gWriteBuffer[LEN];
- uint8_t gReadBuffer[LEN];
- volatile static int iWpos = 0;
- volatile static int iRpos = 0;
- void loop()
- {
- while (true)
- {
- int iLen =0;
- iLen = Serial.available();
- //写buffer
- if(iLen > 0 && iLen <= LEN)
- {
- if (iLen + iWpos < LEN)
- {
- Serial.readBytes(gWriteBuffer+iWpos,iLen);
- iWpos += iLen;
- }
- else
- {
- Serial.readBytes(gWriteBuffer+iWpos,LEN - iWpos);
- Serial.readBytes(gWriteBuffer,iLen -(LEN - iWpos));
- iWpos = iLen -(LEN - iWpos);
- }
- }
- else if(iLen > LEN)
- {
- Serial.flush();
- }
- int iReadTempPos = 0;
- iReadTempPos = iWpos;
- int iRlen = 0;
- //读buffer
- if (iReadTempPos != iRpos)
- {
- memset(gReadBuffer,0,sizeof(gReadBuffer));
- if (iReadTempPos > iRpos)
- {
- memcpy(gReadBuffer,gWriteBuffer+iRpos,iReadTempPos - iRpos);
- iRlen = iReadTempPos - iRpos;
- }
- else
- {
- memcpy(gReadBuffer ,gWriteBuffer+iRpos,LEN - iRpos);
- memcpy(gReadBuffer+(LEN - iRpos) ,gWriteBuffer,iReadTempPos);
- iRlen = (LEN - iRpos) + iReadTempPos;
- }
- iRpos = iReadTempPos;
- }
- Serial.printf("serial iWpos %d ,iRpos %d ,iRlen %d \r\n",iWpos,iRpos,iRlen);
- Serial.write(gReadBuffer,iRlen);
- }
- }
复制代码 |
|