[an error occurred while processing this directive]
|
прога (mega128, IARC320c)передает пакет в уарт
void transmitDataRS485(char *data, char dataSize, char ctrlByte)
{
char txUartDataBuf[MAX_SIZE_TX_BUF];
char txUartSizeBuf;
char i;
char k=0;
uint crc;
crc = 0xFFFF;
txUartDataBuf[k++] = 0xAA;
txUartDataBuf[k++] = 0xAA;
txUartDataBuf[k++] = 0xAA;
txUartDataBuf[k++] = DLE;
txUartDataBuf[k++] = STX;
txUartDataBuf[k++] = BU_RS_ADR;
txUartDataBuf[k++] = ctrlByte;
crc = crc16(crc, ctrlByte);
for (i = 0; i < dataSize; i++) {
txUartDataBuf[k] = data[i];
crc = crc16(crc, txUartDataBuf[k]);
if (txUartDataBuf[k] == DLE) {
k++;
txUartDataBuf[k] = DLE;
}
k++;
}
crc ^= 0xFFFF;
multiByte.sumr = crc;
txUartDataBuf[k++] = multiByte.bytes[1];
if (multiByte.bytes[1] == DLE) txUartDataBuf[k++] = DLE;
txUartDataBuf[k++] = multiByte.bytes[0];
if (multiByte.bytes[0] == DLE) txUartDataBuf[k++] = DLE;
txUartDataBuf[k++] = DLE;
txUartDataBuf[k++] = ETX;
txUartSizeBuf = k;SetBit(PORTD,TE_LAN);
SendDataPort(txUartDataBuf, txUartSizeBuf);while(!(UCSRA & (1<
SetBit(UCSRA,TXC);
ClrBit(PORTD,TE_LAN);
}
после суток нормальной работы перестает передавать последние байты
DLE, ETX. размер буфера txUartSizeBuf в этом случае в норме.
далее, в другом файле
void SendBytePort(char bByte)
{
while(!(UCSRA & (1<UDR = bByte;
}void SendDataPort(char *pData, uint nDataSize)
{
uint i;
for(i=0;i{
SendBytePort(pData[i]);
}
}
голова пухнет. Помогите.
E-mail: info@telesys.ru