Пытаюсь запустить freeModBus для AVR. Переделал код под IAR.
Код
#define REG_INPUT_START 1000
#define REG_INPUT_NREGS 4
/* ----------------------- Static variables ---------------------------------*/
static USHORT usRegInputStart = REG_INPUT_START;
static USHORT usRegInputBuf[REG_INPUT_NREGS];
/* ----------------------- Start implementation -----------------------------*/
int
main( void )
{
eMBErrorCode eStatus;
eStatus = eMBInit( MB_RTU, 0x01, 0, 9600, MB_PAR_NONE );
__enable_interrupt();
/* Enable the Modbus Protocol Stack. */
eStatus = eMBEnable( );
for(;; )
{
( void )eMBPoll( );
/* Here we simply count the number of poll cycles. */
usRegInputBuf[0]++;
}
}
От Мастера даю запрос на чтение одного регистра:
Код
mb.ReadOutputRegisters(0x01, 1000, 1, wTempData);
упорно отвечает ошибкой:
Код
01 83 02 C0
Контроллер Mega128, F_CPU 11059200, MB_TIMER_PRESCALER 1024
Другая реализация протокола ModBus для Mega128 на этот запрос отвечает нормально. Наблюдаю в PortMonitor. А c FreeModBus - ошибка. Уже не знаю что и думать... Куда копать?