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

 
 
> Стек для прерываний, и недостаток таймеров
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
Ответов
amaora
сообщение Jul 27 2009, 15:56
Сообщение #2


Местный
***

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



Хорошо, с клавиатурой ясно, надо как то усложнить планировщик, сейчас он может только циклически переключать задачи (round-robin).

А вот генерацию пролога/эпилога прерываний придется похоже выполнять с помощью скриптов, т.к. в исходниках GCC все очень не просто.

По поводу кооперативной многозадачности, это же программная версия модели бесконечного цикла (ну или idle/sleep) и множества обработчиков прерываний? Для того что я делаю сейчас этого было бы достаточно, но не хочется этим ограничиваться.

Сообщение отредактировал amaora - Jul 27 2009, 15:57
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jul 27 2009, 16:54
Сообщение #3


;
******

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



Цитата(amaora @ Jul 27 2009, 18:56) *
А вот генерацию пролога/эпилога прерываний придется похоже выполнять с помощью скриптов

Имхо, это шаг в сторону. Жизнеспособны в этом случае только варианты написания прерываний либо на чистом Си, либо на чистом асме. Остальное - полумеры, рано или поздно кривизна такого подхода себя обнаружит.
Цитата
По поводу кооперативной многозадачности

Например, так
Код
void system (int priority)
{
switch(priority)
{
case 0: task0();
case 1: task1(); task2();
case 2: task3();
}
}
/*........................*/
void task0(void)
{
  if(!data_ready()) system(1); 
/*............*/
}
int main(void)
{
   while(1) system(0);
  return 0;
}

ЗЫ: при невозможности разрулить приоритетами мютексы проще встраивать в саму задачу.
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
- - _Pasha   Цитата(amaora @ Jul 26 2009, 23:51) Кто н...   Jul 27 2009, 05:47
- - 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 Текстовая версия Сейчас: 23rd July 2025 - 15:15
Рейтинг@Mail.ru


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