реклама на сайте
подробности

 
 
> Оптимизация switch?
1eXX
сообщение Oct 7 2008, 18:39
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 15-06-08
Из: Кировская слобода
Пользователь №: 38 298



Привет народ!
Посоветуйте, как можно создать таблицу переходов для оптимизации switch (case-ов за сотню)?
"__even_in_range" в данном случае не очень универсален и ограничен 30 переходами.
Заранее благодарен за любую идею.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
1eXX
сообщение Oct 8 2008, 07:52
Сообщение #2





Группа: Новичок
Сообщений: 5
Регистрация: 15-06-08
Из: Кировская слобода
Пользователь №: 38 298



Цитата(plombir @ Oct 8 2008, 08:09) *
А вот поймёт ли компилятор указатель на метку (как при goto), не пробовал. Но команда "Indirect Jump to (Z)" у AVR есть.
Хорошая мысль, да, вот только с меткой проблемы. Никак не удается получить ее адрес, да и goto не желает иметь переменной в качестве аргумента :(


Цитата(Rst7 @ Oct 8 2008, 09:23) *
Чето вопрос не совсем ясен. IAR при больших свичах создает таблицу переходов. Самостоятельно. А вообще - код в студию.
Хорошо бы знать директиву, чтобы компилятор создавал эту таблицу всегда, а не когда ему вздумается. Дело в том, что задача критична ко времени отклика, где каждый тик на счету и хорошо бы и на малых switch-ах реализовать эти переходы.
Код больно длинен, а вообще тоже самое, что и любой свитч с кучей case-ов, ничего сверхестественного.
А какая грань, при которой он создает таблицу, не подскажете?

Цитата(MrYuran @ Oct 8 2008, 09:27) *
Откуда такие сведения?
У меня при "switch(__even_in_range( state,60 ))" компилятор говорит что большой код (свободной flash-памяти завались) и реализуй-ка ты на "switch(state)", с 58 все ок. Отсюда 30 case-ов. И потом условие, при которых используется __even_in_range, требует четных state-ов, а у меня какие попало, с интервалом (0-10000), вразброс.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Oct 8 2008, 08:06
Сообщение #3


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(1eXX @ Oct 8 2008, 10:52) *
...а у меня какие попало, с интервалом (0-10000), вразброс.

В этом случае компилятору действительно не хватит места или оно будет неоптимально использовано для создания таблицы. Подразумевается, что таблица должна быть непрерывной (ну, или почти непрерывной).
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 1eXX   Оптимизация switch?   Oct 7 2008, 18:39
- - plombir   Попробуйте таблицей (массивом во flash) указателей...   Oct 8 2008, 04:09
- - Rst7   Чето вопрос не совсем ясен. IAR при больших свичах...   Oct 8 2008, 05:23
- - MrYuran   Цитата(1eXX @ Oct 7 2008, 22:39) "__...   Oct 8 2008, 05:27
|- - Dog Pawlowa   Цитата(1eXX @ Oct 8 2008, 10:52) А какая ...   Oct 8 2008, 11:22
|- - prottoss   Цитата(1eXX @ Oct 8 2008, 15:52) а у меня...   Oct 8 2008, 12:23
- - MrYuran   По-моему, switch-case в любом случае преобразуется...   Oct 8 2008, 08:04
- - 1eXX   Похоже одновременно изящного и эффективного решени...   Oct 8 2008, 09:49
|- - prottoss   Цитата(1eXX @ Oct 8 2008, 17:49) Похоже о...   Oct 8 2008, 10:51
- - 1eXX   Цитата(Dog Pawlowa @ Oct 8 2008, 15:22) Я...   Oct 8 2008, 11:58
|- - Dog Pawlowa   Цитата(1eXX @ Oct 8 2008, 14:58) Каким об...   Oct 8 2008, 13:12
|- - Сергей Борщ   Цитата(Dog Pawlowa @ Oct 8 2008, 16:12) К...   Oct 9 2008, 00:29
||- - Dog Pawlowa   Цитата(Сергей Борщ @ Oct 9 2008, 03:29) Д...   Oct 9 2008, 05:23
||- - Сергей Борщ   Цитата(Dog Pawlowa @ Oct 9 2008, 08:23) Т...   Oct 9 2008, 07:01
||- - Dog Pawlowa   Цитата(Сергей Борщ @ Oct 9 2008, 10:01) П...   Oct 9 2008, 08:24
|- - shasik   Цитата(Dog Pawlowa @ Oct 8 2008, 16:12) К...   Oct 10 2008, 18:09
- - 1eXX   Самое яблочко, Дог :beer:   Oct 8 2008, 17:42
- - Dog Pawlowa   Цитата(1eXX @ Oct 8 2008, 20:42) Самое яб...   Oct 8 2008, 18:02


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 13:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01434 секунд с 7
ELECTRONIX ©2004-2016