mantech 53 9 марта, 2016 Опубликовано 9 марта, 2016 · Жалоба Собственно заинтересовал такой вопрос, навеянный темой в ветке gcc: http://electronix.ru/forum/index.php?showt...=61802&st=0 Так получилось, что есть программа с 50ю кейсами, переменная от 1 до 50 и выбор соотв. кейса. Хотелось бы ускорить переход на каждый кейс, путем индексирования. Предложенный вариант с функциями и массивом их адресов особо не катит, т.к. нужна передача параметров и глобально задавать переменые - не вариант. Подход с метками считаю более лучшим, но как получить адрес метки, чтоб закинуть его потом в массив - без понятия. Может есть какие мысли?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 9 марта, 2016 Опубликовано 9 марта, 2016 · Жалоба Хотелось бы ускорить переход на каждый кейс, путем индексирования.ИАР достаточно умный компилятор, такую оптимизацию он делал автоматически еще лет 15 назад, посмотрите листинг. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 9 марта, 2016 Опубликовано 9 марта, 2016 · Жалоба Хотелось бы ускорить переход на каждый кейс, путем индексирования. ... Может есть какие мысли?? Мысли есть. А оно надо? В смысле из-за неоптимальности именно в этом месте что-то не работает? И присоединюсь к Сергею: многие компиляторы это сами умеют. А если не умеет, или ему в этом конкретном случае что-то мешает, то и фиг с ним. Делать закат солнца вручную - такой моветон... Подход с метками считаю более лучшим, но как получить адрес метки, чтоб закинуть его потом в массив - без понятия. Переходите на GCC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 9 марта, 2016 Опубликовано 9 марта, 2016 · Жалоба Собственно заинтересовал такой вопрос, навеянный темой в ветке 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-а я это делать крайне не советую... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 9 марта, 2016 Опубликовано 9 марта, 2016 · Жалоба Мысли есть. А оно надо? В смысле из-за неоптимальности именно в этом месте что-то не работает? В смысле просто была мысль ускорить интерпретацию команд... Да, забыл, платформа АРМ кортекс А9. Переходите на GCC. Нее, уж лучше вы к нам Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 9 марта, 2016 Опубликовано 9 марта, 2016 · Жалоба В смысле просто была мысль ускорить интерпретацию команд... Ну так гэцэцэшная фича с метками-указателями для этого и придумана. Нее, уж лучше вы к нам А я и там, и здесь. Что удобнее, то и использую. А вы можете продолжать колоться, плакать и кушать свой кактус Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться