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

 
 
> Опримизация switch case, ускорение работы
mantech
сообщение Mar 9 2016, 14:56
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Собственно заинтересовал такой вопрос, навеянный темой в ветке gcc:
http://electronix.ru/forum/index.php?showt...=61802&st=0

Так получилось, что есть программа с 50ю кейсами, переменная от 1 до 50 и выбор соотв. кейса. Хотелось бы ускорить переход на каждый кейс, путем индексирования. Предложенный вариант с функциями и массивом их адресов особо не катит, т.к. нужна передача параметров и глобально задавать переменые - не вариант. Подход с метками считаю более лучшим, но как получить адрес метки, чтоб закинуть его потом в массив - без понятия.
Может есть какие мысли??
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Baser
сообщение Mar 9 2016, 16:31
Сообщение #2


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(mantech @ Mar 9 2016, 16:56) *
Собственно заинтересовал такой вопрос, навеянный темой в ветке gcc:
...
Может есть какие мысли??

А какая платформа у вас?
Если тот же MSP430, что в ссылке, так чем не устраивает _even_in_range_(range) ?

А если что другое, то в ИАРе делал такое:
Код
__task void main(void)
  {
  StartUp_C();
  asm ("MOV.W   SP,&Task_InitSP");
  asm ("MAIN_CYCLE: ");
  for(;;)
    {
    Main_Services();
    .......
    }
  }

void Foo(unsigned int qwerty)
  {
  ........
  asm ("BR      #MAIN_CYCLE");
  }

Так что, со встроенным ассемблером что нить можно придумать, но для switch-а я это делать крайне не советую...
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 14:54
Рейтинг@Mail.ru


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