Перейти к содержанию
    

Обработчик прерываний

P.S. Оптимизацию включать пробовали?

Если обработчик написан на асме, зачем включать оптимизацию и что она даст?

 

 

Или Вы считаете, что команды привязки адресов служат только для формирования таблицы прерываний?

 

Вы используете странные понятия.

Что в Вашем понимании "команды привязки адресов" ? Звучит как абракадабра. Если это какие то директивы или настройки компилятора, так и пишите.

 

 

ну почему же либо?

стэк(если писюк то это та же озу), регистры, озу(конкретный адресс), внешняя переферия.

 

Мне вот это очень понравилось, для Вас переферия МК и "регистры" разные понятия :)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если обработчик написан на асме, зачем включать оптимизацию и что она даст?
Если на асме - ничего не даст. Попробуйте на Си написать с включённой оптимизацией. Может и не понадобится асм.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если на асме - ничего не даст. Попробуйте на Си написать с включённой оптимизацией. Может и не понадобится асм.

 

Обработчик простейший - пара команд. Если убрать сохранение в стек при вызове, получится то что надо.

 

Писать на Си с оптимизацией наверно будет тоже самое.

 

Я думаю может как-нибудь проинициализировать переменную в основной программе как "regvar", но настораживает, что нельзя залочить регистр в компиляторе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я думаю может как-нибудь проинициализировать переменную в основной программе как "regvar", но настораживает, что нельзя залочить регистр в компиляторе.

 

 

__regvar __no_init unsigned short IntCounter @ 14;

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

__regvar __no_init unsigned short IntCounter @ 14;

Как написано в руководстве по компилятору есть т.н. "Scratch registers" и "Preserved registers". А требуется как раз доступ к "Scratch register" недоступный __regvar.

В этом то сейчас и вопрос как его залочить :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В этом то сейчас и вопрос как его залочить :)
Компилятор предоставляет вам возможность золочить регистры R4-R15. Про другие регистры ничего не говорится.

А требуется как раз доступ к "Scratch register"
Самые лучшие регистры он оставил себе.

есть т.н. "Scratch registers" и "Preserved registers".
Это относится к соглашениям о вызовах функций. Резервирование регистров - вопрос отдельный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Компилятор предоставляет вам возможность золочить регистры R4-R15. Про другие регистры ничего не говорится.

Надо-ж!... И Вы прям вот так вот запросто золочиваете R15??...

:biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надо-ж!...
Отож :)

 

И Вы прям вот так вот запросто золочиваете R15??...

:biggrin:

Хоть R14...запросто....

А что - что-то не так? Ну так напишите - что толку намёками говорить...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...Что в Вашем понимании...

 

...для Вас переферия МК и "регистры" разные понятия :)

 

Вы не ответили на поставленный вопрос. И пытаетесь уйти от проблем возникших у Вас. странно как то..

 

переферия это совокупность не только регистров но и некой обвязки выполняющей определённый функционал. Например ПДП, Или скажем АЦП.

Теоретически - Вам никто не мешает сохранить (зная поведение данного узла) определённого размера данные.

Надеюсь Вам стали понятны отличия?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хоть R14...запросто....

А что - что-то не так? Ну так напишите - что толку намёками говорить...

А ничего что в R15 - программный счётчик?

Ну если без R14 ещё как-то можно вообразить выполнение программы (без вызовов функций ;), то без PC.... затрудняюсь...

Или у вас тут AVR, а не ARM? Тогда - ФИ..... :)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А ничего что в R15 - программный счётчик?
Это - ничего...мелочи.

 

Ну если без R14 ещё как-то можно вообразить выполнение программы (без вызовов функций ;), то без PC.... затрудняюсь...
Быстро сдаётесь - а ведь могли бы сказать новое слово в науке и технике.

Или у вас тут AVR, а не ARM? Тогда - ФИ..... :)))
Ну да - мелко плаваем ...

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы не ответили на поставленный вопрос. И пытаетесь уйти от проблем возникших у Вас. странно как то..

 

переферия это совокупность не только регистров но и некой обвязки выполняющей определённый функционал. Например ПДП, Или скажем АЦП.

Теоретически - Вам никто не мешает сохранить (зная поведение данного узла) определённого размера данные.

Надеюсь Вам стали понятны отличия?

Вы не поняли вопрос.

Специально для Вас повторяю развернуто "как правильно написать обработчик прерывания на ассемблере с передачей параметров (переменной) в основную программу в IAR? "

И на этот вопрос уже есть ответ (не Ваш, боюсь не поймете - используя директиву EXTERN).

А Вы начинаете разводить какую то теорию. Если не знаете ответа, зачем отвечать?

Насчет переферии, очевидно тот же АЦП для программиста это тот же самый регистр(или регистры), тем более в контексте обсуждаемой темы. Зачем Вы разделяете эти понятия известно только Вам :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...