ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
19 мая
181071 Топик полностью
abivan (11.02.2010 21:50 - 21:54, просмотров: 154) ответил koyodza на ещё вопрос: как лучше сделать таблицу ссылок на данные?
не для modbus, а для доморощенного UART протокола использовал доморощенную БД. Каждый параметр имеет свой ID. есть набор базовых типов. typedef enum _InternalDataType{ T_VOID, T_BYTE, /* unsigned char */ T_WORD, /* unsigned short */ T_INT, /* short 2-byte */ T_DWORD, /* unsigned long */ T_LONG, /* long */ T_FLOAT, /* float 4-byte */ T_DOUBLE, /* double 8-byte */ T_STRING, /* n-byte, 255 max */ } t_InternalDataType; из них создаются комбинации в любых сочетаниях и количествах Далее параметр описывается на доморощенном языке { ID_PAR_RESULT, // Измеренная величина (давление, расход и т.д.) <RAM_STORAGE>, PROCESS_DATA_SUBD(), // стандартный обработчик параметра (BYTE)255 & (FLOAT), ACCESS_LEV_LOW/ACCESS_LEV_NOT_ACCESS, // уровни доступа по R/W NO_OPTION} } <RAM_STORAGE> - хранится в ОЗУ по умолчанию в EEPROM { ID_PAR_AUTO_NULL_CORR,// процедура автоматической коррекции нуля. PROCESS_DATA_AUTO_NULL_CORR(), // обработчик вызываемый по *pF ACCESS_LEV_LOW/ACCESS_LEV_LOW } все определено дефайнами #define ID_PAR_AUTO_NULL_CORR 0x20 итд далее запускается прога, котора сначала запускает препроцессор и заменяет буквы на цифры. Далее доморощенный транслятор упаковывает все в БД, проверяя синтаксис, контролируя уникальность ID. создает бинарник(можно залить в EEPROM) и сишник который можно подключить к проекту структура БД представлена на рис. СУБД содержит ф-и /**/ rcode /**/ /* Код возврата : */ /* */ /* Размер прочитанных данных */ /* - Запись найдена, нормальное завершение */ /* -1 - Ошибка */ /* */ /**/ DB_GetPar(BYTE bId, ptr pPar, BYTE bSize) /**/ /* bId - идентификатор параметра */ /* pPar - указатель на приемный буфер */ /* bSize- максимальный размер буфера */ /**/ BOOL /**/ /* Код возврата : */ /* FALSE - Запись произведена успешно */ /* TRUE - Ошибка */ /* */ /**/ DB_PutPar(BYTE bId, ptr pPar) /**/ /* bId - идентификатор параметра */ /* pPar - указатель на приемный буфер */ добавление параметра на человеческом языке, нет привязки параметров к физическим адресам. совместимость новой БД со старым ПО контроллера. ВременнЫе накладные расходы связанные с поискам по кольцам уменьшаются путем построения индексного кэша в тойже EEPROM.
image