Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: lookup table
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
one_eight_seven
Всем доброго времени суток.

Интересует меня следующий вопрос. Как осуществить условные переходы с помощью таблицы в Keil uVision3? В документации сказано, что switch-case по-умолчанию делается с помощью таблицы, при использовании оптимизации уровнем 4 и выше. Однако, если посмотреть ассемблерный код, сформированный компилятором из Си, то видно, что каждый case проверяется путём прибавления какой-либо константы к значению аккумулятора и сравнением с нулём, на основе чего делаются условные переходы. И так при любом уровне оптимизации.

В IAR'е на MSP430 коллега подобное осуществил, но сегодня полдня мучали Keil, и не нашли как бы сделать и в нём.
Палыч
Цитата(one_eight_seven @ Jun 23 2010, 00:42) *
сегодня полдня мучали Keil, и не нашли как бы сделать и в нём.
Как Вы написали - так оно и есть! Но, нужно помнить, что Keil - тоже "не дурак": таблица занимает в памяти некоторое место + процедура CCASE (или ICASE), которая "раскручивает" таблицу тоже сколько-то места занимает. Если число case в switch - небольшое, то таблица и функция могут вместе занимать больше места (или выполняться дольше), чем банальные сравнения и переходы - оптимизация "рулит" (сделает то, что должна делать - оптимизировать).
scifi
Цитата(one_eight_seven @ Jun 23 2010, 00:42) *
Интересует меня следующий вопрос. Как осуществить условные переходы с помощью таблицы в Keil uVision3?

Дык, всегда можно сделать список указателей на функции.
Только к чему этот геморрой? Очередной пример преждевременной оптимизации? Помните, что говорил старик Кнут: Преждевременная оптимизация — корень всех бед.
zltigo
QUOTE (scifi @ Jun 23 2010, 08:38) *
Помните, что говорил старик Кнут

Только не надо цитировать обрывки цитат кем-то уже бездумно процитированные - получаются такие-же глубокомысленно-глупые "рекомендации", как по Вашей ссылке.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.