Перейти к содержанию
    

Нужна помощь (PIC18F2525 - правка прошивки)

Есть прошивка рабочая (gsm сигнализация) ее 2 года назад сделали.

Сейчас возникла необходимость скорректировать уровень усиления микрофона и запрос баланса изменить.

Человек который ее сделал, куда-то пропал, не отвечает на письма.

Сможете помочь? Если да, пишите договоримся - aleksu19(собака)rambler.ru

Прошивка написана на Си с Salvo RTOS

 

Кусок исходника ниже

--------------------------------------------------------------------------------

 

#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 >> ;

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 >> ;

txByte(0x5D);

break;

}

init_v();

}

}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...