Есть рабочий девайс (сигнализация). Возникла необходимость корекции прошивки.
Исходники есть, но не понятно какую ОС применял разработчик? (С ним к сожалению связь потеряна).
Кто нибудь может помочь?
Кусок исходника ниже.
#include "conf.h"
char smb1, smb2,
smb_w[2] = { 0xFB, 0x02 };
void init_v(void)
{
smb1 = 0xFB; // стартовый символ
smb2 = 0x5D; // завершающий символ
rcMode.pSmbBegin = &smb1;
rcMode.pSmbEnd = &smb2;
rcMode.nSmbBegin = rcMode.nSmbEnd = 1;
rcMode.nSmbCmp = 0;
rcMode.state = 0; // begin
rcMode.nRd = 1;
rcMode.startTimeout = 100;
rcMode.intervalTimeout = 100;
}
void conf1Task(void)
{
static char c;
static unsigned int a1;
char m, z, b;
indCtrl.indType = conf_pc;
setUART_BR9600();
init_v();
while (1)
{
OSStartTask(OSTCBP_rcDataTask); // запуск задачи - "прием данных"
OS_WaitBinSem(GETS_SEM, OSNO_TIMEOUT, conf1Task_L1);
if ((c = getRCount()) != 1)
{
if (c == 0) continue;
resetRxBuf();
continue;
}
m = getByte();
switch (m)
{
case 1: // запись данных
a1 = 0;
rcMode.pSmbBegin = smb_w;
rcMode.nSmbBegin = 2;
rcMode.nRd = CONF_BUF_SIZE;
txByte(0xFB); txByte(0x00); txByte(0x5D); // ответ - "OK"
eeprom_write(AUTO_INFO_F_OF, 0);
while (a1 < CONF_IMAGE_SIZE)
{
LED_NET = 1;
OSStartTask(OSTCBP_rcDataTask);
OS_WaitBinSem(GETS_SEM, OSNO_TIMEOUT, conf1Task_L2);
LED_NET = 0;
if (getRCount() != CONF_BUF_SIZE + 1)
{
resetRxBuf();
init_v();
continue;
}
if (getByte() != CONF_BUF_SIZE)
{
txByte(0xFB); txByte(0xFF); txByte(0x5D); // ответ - "ERROR"
resetRxBuf();
init_v();
continue;
}
for (z = 0; z < CONF_BUF_SIZE; z++) // запись блока данных
{
eeprom_write(a1++, getByte());
}
txByte(0xFB); txByte(0x00); txByte(0x5D);
}
OS_Delay(10, conf1Task_L3);
CRC16 = 0xFFFF;
for (a1 = 0; a1 < CONF_IMAGE_SIZE; a1++) // подсчет контрольной суммы
{
doCRC16(eeprom_read(a1));
}
txByte(0xFB); // передача контрольной суммы для проверки
txByte(0x03);
txByte(CRC16 & 0xFF);
txByte(CRC16 >> 8);
txByte(0x5D);
break;
case 4: // чтение данных
rcMode.pSmbBegin = &smb1;
rcMode.nSmbBegin = 1;
rcMode.nRd = 1;
txByte(0xFB); txByte(0x00); txByte(0x5D); // ответ - "OK"
a1 = 0;
CRC16 = 0xFFFF;
while (a1 < CONF_IMAGE_SIZE)
{
LED_NET = 1;
txByte(0xFB);
txByte(0x05);
txByte(CONF_BUF_SIZE);
for (z = 0; z < CONF_BUF_SIZE; z++)
{
txByte(b = eeprom_read(a1++));
doCRC16(

;
}
txByte(0x5D);
LED_NET = 0;
OSStartTask(OSTCBP_rcDataTask);
OS_WaitBinSem(GETS_SEM, OSNO_TIMEOUT, rcDataTask_L4);
if (getRCount() != 1 || getByte() != 0x08)
{
resetRxBuf();
init_v();
continue;
}
}
txByte(0xFB);
txByte(0x07);
txByte(CRC16 & 0xFF);
txByte(CRC16 >> 8);
txByte(0x5D);
break;
}
init_v();
}
}