|
本帖最后由 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);
- }
- }
复制代码 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。
|