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

 
 
> Стек для прерываний, и недостаток таймеров
amaora
сообщение Jul 26 2009, 20:51
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



Кто нибудь делал отдельный стек для прерываний? есть ли смысл? код думаю писать как то так,

Код
handler:
sts stack-0, r16
sts stack-1, r17
in    r16, __SP_L_
in    r17, __SP_H_
sts stack-2, r16
sts stack-3, r17
ldi r16, lo8(stack-4)
ldi r17, hi8(stack-4)
out    __SP_L__, r16
out    __SP_H__, r17
//здесь код обработчика прерывания
// востановление писать лень ) тут все понятно
reti_


Не слишком ли будет тяжеловесно? хотя это не главный вопрос, основная сложность с компилятором (GCC) как его заставить генерировать обработчтки в таком виде? можно __attribute__ ((__naked__)) но тогда надо как то следить за тем какие регистры были использованы, не сохранять же все. Похоже надо начинать смотреть исходники GCC.

Правка: push/pop и st/ld длятся все по 2 такта, можно просто заменить все push на sts с фиксированными адресами ... потерь в скорости не будет.

Сообщение отредактировал amaora - Jul 26 2009, 21:17
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_Pasha
сообщение Jul 27 2009, 05:47
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(amaora @ Jul 26 2009, 23:51) *
Кто нибудь делал отдельный стек для прерываний? есть ли смысл? 

Когда писАл на асме, оформлял задачи "для каждого чиха", в виде подпрограмм с переопределяемой точкой входа, простенький TCB содержал 8 байт (pc:2, sp:2, X:2,Z:2), за ним следовали локальные переменные (на них всегда указывает Y) и стек. Все задачи, ессно, могли быть реентерабельны. Принимая во внимание, что на мега16 нельзя создать андроида smile.gif, рискну предположить, что глубина стека в этом случае будет байт 16. Но вот Сишные концепты - не влезают в эту схему. Грубое юзание стека не позволит.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- amaora   Стек для прерываний, и недостаток таймеров   Jul 26 2009, 20:51
- - aaarrr   Цитата(amaora @ Jul 27 2009, 00:51) есть ...   Jul 26 2009, 20:55
- - amaora   И вопрос второй, в atmega16 три таймера, а что есл...   Jul 26 2009, 20:58
|- - aaarrr   Цитата(amaora @ Jul 27 2009, 00:58) А над...   Jul 26 2009, 21:19
|- - defunct   Цитата(amaora @ Jul 26 2009, 23:58) А над...   Jul 26 2009, 22:01
||- - Zlumd   Цитата(defunct @ Jul 27 2009, 05:01) Возь...   Jul 27 2009, 09:35
||- - defunct   Цитата(Zlumd @ Jul 27 2009, 12:35) А разв...   Jul 27 2009, 11:01
||- - prottoss   Цитата(defunct @ Jul 27 2009, 19:01) Не п...   Jul 27 2009, 14:39
|||- - defunct   Цитата(prottoss @ Jul 27 2009, 17:39) Кла...   Jul 27 2009, 15:00
||- - Zlumd   Цитата(defunct @ Jul 27 2009, 18:01) Да. ...   Jul 28 2009, 01:05
||- - defunct   Цитата(Zlumd @ Jul 28 2009, 04:05) Так эт...   Jul 28 2009, 01:33
||- - _Pasha   Цитата(defunct @ Jul 28 2009, 04:33) Дайт...   Jul 28 2009, 01:55
||- - Zlumd   Цитата(defunct @ Jul 28 2009, 08:33) Как ...   Jul 28 2009, 06:01
||- - defunct   Цитата(Zlumd @ Jul 28 2009, 09:01) Так оч...   Jul 28 2009, 23:02
|- - prottoss   Цитата(amaora @ Jul 27 2009, 04:58) И воп...   Jul 27 2009, 07:49
|- - SasaVitebsk   Цитата(prottoss @ Jul 27 2009, 10:49) Я б...   Jul 27 2009, 10:04
- - amaora   Хорошо, с клавиатурой ясно, надо как то усложнить ...   Jul 27 2009, 15:56
- - _Pasha   Цитата(amaora @ Jul 27 2009, 18:56) А вот...   Jul 27 2009, 16:54
- - amaora   Цитата(_Pasha @ Jul 27 2009, 20:54) Имхо,...   Jul 28 2009, 07:43
- - _Pasha   Цитата(amaora @ Jul 28 2009, 10:43) С эти...   Jul 29 2009, 10:32


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

 


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


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