Здравствуйте, Уважаемый Slav!
Wed Jul 12 2006 17:00, Slav Matveev wrote to Olga Nonova:
ON>> Я ничего не предлагаю. Это Phillips СПЕЦИАЛЬHО так назначил состояния ON>> регистра I2С. Т.е. регистр статуса принимает значеня: 0,8,16,24.... ON>> Как видите, совсем не любимое для switch: 0,1,2,3...
SM> Я бы хотел посмотреть на программера, который добровольно SM> откажется от 3 бит регистра ради такого извращения, SM> которое, к тому же, не портабильно совершенно.
Хардваре I2C в кристаллах Phillips разрабатывали отнюдь не программеры на С. А люди, озабоченные быстродействием. И они-то посчитали, что самое 'aatrnbdyjt решение будет именно такое. Патент имеют. Вы разработчиков Phillips уважаете?
SM> Как не трудно догадаться switch( status >> 3 ) , SM> зато не надо делать выравнивание на границу 256 байт, кратно SM> которым адресует старший байт адреса перехода.
По-моему методу ветвления, да на ассемблере, никаких "switch( status >> 3 )" не требуется.
SM> В случае если обработчик состояние не укладывается в 7 машинных слов SM> надо делать либо jmp, либо call и никакого выигрыша против SM> перехода по таблице уже нет.
Я не зря ссылалась на пример дрейвера I2C, написанный на ассемблере. Так вот, из примерно 40-ка возможных состояний статус-регистра I2C там только пара не укладывается в промежуток 8 инструкций. Для этой пары да, использованы дополнительные jmp-ы. Оцените, всего 2 из 40.
Всего Вам Хорошего Ольга