typedef struct __I2C_SEND_BUF_QUE
{
u8 buf[3][132]; //前两个字节为数据长度,第三个第四个字节为内存地址
u8 outPos;
u8 inPos;
u8 len;
} I2C_SEND_BUF_QUE;
I2C_SEND_BUF_QUE sendBufQue;
void InitsendBufQue()
{
sendBufQue.outPos = 0;
sendBufQue.inPos = 0;
sendBufQue.len = 0;
}
if(sendBufQue.len > 0) // 缓冲区有待写入的数据
{
//。。。。。。
。。。。写I2C其他代码
//...................
//判别本数据帧是否写完成
lenCount += lenInPage;
if(lenCount >= AllLen)
{
sendBufQue.len--;
if(++sendBufQue.outPos == 3)
sendBufQue.outPos = 0;
lenCount = 0;
curPage = 0; //为下一帧做好准备
}
}
void WriteParam(unsigned char *pSource, unsigned short startAddr,unsigned short len)
{
unsigned int i;
unsigned char *p;
unsigned short *pTemp;
if(len > 128)//要求一次操作小于128字节
return;
if(sendBufQue.len == 3)
return;
p = &sendBufQue.buf[sendBufQue.inPos][0];
sendBufQue.len++;
if(++sendBufQue.inPos == 3)
sendBufQue.inPos = 0;
pTemp = (unsigned short *)p;
*pTemp = len; // 要写入的数据长度
pTemp++;
*pTemp = startAddr;
for(i = 0; i < len; i++)
*(p+4+i) = *(pSource+i);
}
这是本人最近写的部分程序摘抄,
LS看看我的是不是使用了队列,
阁下也搞个队列代码,看看是不是玩出花 |