ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
17 апреля
777989 Топик полностью
vllv (04.09.2017 18:21 - 18:40, просмотров: 418) ответил Dingo_ на Как раз общие, универсальные моменты очень хорошо прослеживаются. Прочитать|записать байт|слово|двойное_слово, всё это со знаком, без знака и хорошо бы с проверкой допустимого диапазона; то же для строки. Реализацию записи и чтения можно 'вынести
Только сейчас проникся, о чем речь. Есть у меня протокол, по следам SNMP, и проги универсальные есть - браузер и тестер, скрипты гоняет. И да, внутри контроллера на X-макро. Внедрено на трех-пяти десятках разных устройств. IMPL_VARIABLE(system, 2, "Objects qty", TX=(long)OBJECTS_QUANTITY; return;, READ_ONLY ) IMPL_VARIABLE(system, 3, "Text", GetText((char*)domp_text.text1); dpr->tx_op_code=UniGetText; return;, SetText((char*)domp_text.text1, TEXT_SIZE); ) IMPL_VARIABLE(system, 4, "Serial number", TX=(long)setup.SerialNumber; return;, setup.SerialNumber=RX; return; ) IMPL_VARIABLE(system, 5, "Network address", TX=(long)setup.NetAddress; return;, SET_LAMP_ADDR(); return; ) IMPL_VARIABLE(system, 6, "Write EEPROM (112233)", TX=eeprom_result;, if (RX==112233L) {if (WriteAndShowSetup1()) eeprom_result=0; else eeprom_result=112233L;} else eeprom_result=0; return; ) IMPL_VARIABLE(system, 7, "Read EEPROM (332211)", TX=(long)eeprom_result; return;, if (RX==332211L) {if (ReadAndShowSetup1()) eeprom_result=0; else eeprom_result=332211L;} else eeprom_result=0; return; ) IMPL_VARIABLE(system, 8, "Network group", TX=(long)setup.NetGroup; return;, if (RX<=0x3ff) setup.NetGroup=(u16)RX; return; ) IMPL_VARIABLE(system, 9, "Selected serial number", TX=selected_serial_number; return;, selected_serial_number=RX; return; ) IMPL_VARIABLE(system, 10, "Shut off but selected(12488421)", TX=silent; return;, if ((RX==12488421L)&&(selected_serial_number!=setup.SerialNumber)) { silent=RX; silent_time=120;} else silent=0; return; ) IMPL_VARIABLE(system, 11, "LED mode:0=ON,1=OFF,2=ON1s,3=BLINK", TX=led_mode; return;, if (RX>=LED_MODES_QTY) led_mode=LED_BLINK; else {if (RX==LED_TIME) StartOneBlink(); else led_mode=(tLED)RX;} return; )
image