lexa12 0 February 8, 2014 Posted February 8, 2014 · Report post P.S. Оптимизацию включать пробовали? Если обработчик написан на асме, зачем включать оптимизацию и что она даст? Или Вы считаете, что команды привязки адресов служат только для формирования таблицы прерываний? Вы используете странные понятия. Что в Вашем понимании "команды привязки адресов" ? Звучит как абракадабра. Если это какие то директивы или настройки компилятора, так и пишите. ну почему же либо? стэк(если писюк то это та же озу), регистры, озу(конкретный адресс), внешняя переферия. Мне вот это очень понравилось, для Вас переферия МК и "регистры" разные понятия :) Quote Share this post Link to post Share on other sites More sharing options...
Артём__ 0 February 8, 2014 Posted February 8, 2014 · Report post Если обработчик написан на асме, зачем включать оптимизацию и что она даст?Если на асме - ничего не даст. Попробуйте на Си написать с включённой оптимизацией. Может и не понадобится асм. Quote Share this post Link to post Share on other sites More sharing options...
lexa12 0 February 8, 2014 Posted February 8, 2014 · Report post Если на асме - ничего не даст. Попробуйте на Си написать с включённой оптимизацией. Может и не понадобится асм. Обработчик простейший - пара команд. Если убрать сохранение в стек при вызове, получится то что надо. Писать на Си с оптимизацией наверно будет тоже самое. Я думаю может как-нибудь проинициализировать переменную в основной программе как "regvar", но настораживает, что нельзя залочить регистр в компиляторе. Quote Share this post Link to post Share on other sites More sharing options...
Артём__ 0 February 8, 2014 Posted February 8, 2014 · Report post Я думаю может как-нибудь проинициализировать переменную в основной программе как "regvar", но настораживает, что нельзя залочить регистр в компиляторе. __regvar __no_init unsigned short IntCounter @ 14; Quote Share this post Link to post Share on other sites More sharing options...
lexa12 0 February 8, 2014 Posted February 8, 2014 · Report post __regvar __no_init unsigned short IntCounter @ 14; Как написано в руководстве по компилятору есть т.н. "Scratch registers" и "Preserved registers". А требуется как раз доступ к "Scratch register" недоступный __regvar. В этом то сейчас и вопрос как его залочить :) Quote Share this post Link to post Share on other sites More sharing options...
Артём__ 0 February 8, 2014 Posted February 8, 2014 · Report post В этом то сейчас и вопрос как его залочить :)Компилятор предоставляет вам возможность золочить регистры R4-R15. Про другие регистры ничего не говорится. А требуется как раз доступ к "Scratch register" Самые лучшие регистры он оставил себе. есть т.н. "Scratch registers" и "Preserved registers". Это относится к соглашениям о вызовах функций. Резервирование регистров - вопрос отдельный. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 81 February 9, 2014 Posted February 9, 2014 · Report post Компилятор предоставляет вам возможность золочить регистры R4-R15. Про другие регистры ничего не говорится. Надо-ж!... И Вы прям вот так вот запросто золочиваете R15??... Quote Share this post Link to post Share on other sites More sharing options...
Артём__ 0 February 9, 2014 Posted February 9, 2014 · Report post Надо-ж!...Отож :) И Вы прям вот так вот запросто золочиваете R15??... Хоть R14...запросто.... А что - что-то не так? Ну так напишите - что толку намёками говорить... Quote Share this post Link to post Share on other sites More sharing options...
kolobok0 0 February 9, 2014 Posted February 9, 2014 · Report post ...Что в Вашем понимании... ...для Вас переферия МК и "регистры" разные понятия :) Вы не ответили на поставленный вопрос. И пытаетесь уйти от проблем возникших у Вас. странно как то.. переферия это совокупность не только регистров но и некой обвязки выполняющей определённый функционал. Например ПДП, Или скажем АЦП. Теоретически - Вам никто не мешает сохранить (зная поведение данного узла) определённого размера данные. Надеюсь Вам стали понятны отличия? Quote Share this post Link to post Share on other sites More sharing options...
jcxz 81 February 10, 2014 Posted February 10, 2014 · Report post Хоть R14...запросто.... А что - что-то не так? Ну так напишите - что толку намёками говорить... А ничего что в R15 - программный счётчик? Ну если без R14 ещё как-то можно вообразить выполнение программы (без вызовов функций ;), то без PC.... затрудняюсь... Или у вас тут AVR, а не ARM? Тогда - ФИ..... :))) Quote Share this post Link to post Share on other sites More sharing options...
Артём__ 0 February 10, 2014 Posted February 10, 2014 · Report post А ничего что в R15 - программный счётчик? Это - ничего...мелочи. Ну если без R14 ещё как-то можно вообразить выполнение программы (без вызовов функций ;), то без PC.... затрудняюсь...Быстро сдаётесь - а ведь могли бы сказать новое слово в науке и технике. Или у вас тут AVR, а не ARM? Тогда - ФИ..... :)))Ну да - мелко плаваем ... Quote Share this post Link to post Share on other sites More sharing options...
lexa12 0 February 10, 2014 Posted February 10, 2014 · Report post Вы не ответили на поставленный вопрос. И пытаетесь уйти от проблем возникших у Вас. странно как то.. переферия это совокупность не только регистров но и некой обвязки выполняющей определённый функционал. Например ПДП, Или скажем АЦП. Теоретически - Вам никто не мешает сохранить (зная поведение данного узла) определённого размера данные. Надеюсь Вам стали понятны отличия? Вы не поняли вопрос. Специально для Вас повторяю развернуто "как правильно написать обработчик прерывания на ассемблере с передачей параметров (переменной) в основную программу в IAR? " И на этот вопрос уже есть ответ (не Ваш, боюсь не поймете - используя директиву EXTERN). А Вы начинаете разводить какую то теорию. Если не знаете ответа, зачем отвечать? Насчет переферии, очевидно тот же АЦП для программиста это тот же самый регистр(или регистры), тем более в контексте обсуждаемой темы. Зачем Вы разделяете эти понятия известно только Вам :) Quote Share this post Link to post Share on other sites More sharing options...