Jump to content

    
Sign in to follow this  
lexa12

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

Recommended Posts

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

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

 

 

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

 

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

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

 

 

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

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

 

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

 

Share this post


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

Share this post


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

 

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

 

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

 

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

Share this post


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

 

 

__regvar __no_init unsigned short IntCounter @ 14;

 

 

Share this post


Link to post
Share on other sites
__regvar __no_init unsigned short IntCounter @ 14;

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

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

Share this post


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

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

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

Share this post


Link to post
Share on other sites
Компилятор предоставляет вам возможность золочить регистры R4-R15. Про другие регистры ничего не говорится.

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

:biggrin:

Share this post


Link to post
Share on other sites
Надо-ж!...
Отож :)

 

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

:biggrin:

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

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

Share this post


Link to post
Share on other sites
...Что в Вашем понимании...

 

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

 

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

 

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

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

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

 

Share this post


Link to post
Share on other sites
Хоть R14...запросто....

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

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

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

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

Share this post


Link to post
Share on other sites
А ничего что в R15 - программный счётчик?
Это - ничего...мелочи.

 

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

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

 

 

Share this post


Link to post
Share on other sites
Вы не ответили на поставленный вопрос. И пытаетесь уйти от проблем возникших у Вас. странно как то..

 

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this