Если я не первый раз поднимаю эту тему, то заранее извиняюсь (я не смог придумать поисковику удобоваримое слово для поиска. На void* или таблица вываливается куча страниц).
Хочу заменить конструкцию Switch case на таблицу переходов и все это на языке Си.
Как вызвать процедуру по адресу я знаю, вопрос как бы мне заполнить таблицу с 256 значениями.
На асме я это реализовывал так:
Сначала создавал массив адресов на обработчик default, а затем в другом инклюднике прописывал (переопределял по вычисленным адресам определенные обработчики) Вот так:
Код
COM_SN_WRITE EQU 42h ; Команда записи SN
ORG TABEL_COM+(COM_SN_WRITE*2) ; тут умножаю на 2, так как храню адрес из 2-х байт, в Keil Си он 3-х байтовый
DW SEND_COM_SN_WRITE ; Ну а тут собственно сам обработчик (процедура). Тут ее адрес
SEND_COM_SN_WRITE:
RET
ORG TABEL_COM+(COM_SN_WRITE*2) ; тут умножаю на 2, так как храню адрес из 2-х байт, в Keil Си он 3-х байтовый
DW SEND_COM_SN_WRITE ; Ну а тут собственно сам обработчик (процедура). Тут ее адрес
SEND_COM_SN_WRITE:
RET
TABEL_COM это адрес таблицы
COM_SN_WRITE номер команды
SEND_COM_SN_WRITE адрес обработчика
Как бы мне теперь так же сделать на Си в Keil?
PS Работу switch в Keil я разобрал, он работает с таблицей не так как мне нужно (она все равно перебором просматривает всю свою таблицу).