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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> вытясняющая многозадачность, чистый С без ОС
Zelepuk
сообщение Nov 30 2011, 19:23
Сообщение #31


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(Warlockwolf @ Nov 30 2011, 21:47) *
хидер

Код
typedef  void (*pFunction)(void);
#define DefaultAddress 0x00000000UL


соурсе

Код
vu8         DNA_head=0;
vu8         DNA_teil=0;
pFunction   DNAQeue[0x100];


void Ribosoma()
{  pFunction  Application;
   pFunction*  DNAQeue_teil=&DNAQeue[0x0];
  while(1){  
            if((*DNAQeue_teil)!=DefaultAddress){Application=*DNAQeue_teil;  *DNAQeue_teil=DefaultAddress; DNAQeue_teil=&DNAQeue[++DNA_teil]; Application();};
          };
    
}

void DNA_Next() //spec pustishka
{
  return;
}

void InDNA(pFunction Thread)
{
    DNAQeue[DNA_head++]= Thread;
    DNAQeue[DNA_head++]=(pFunction)DNA_Next;      
}

void InDNA_rapid(pFunction Thread)
{ u16 vtem;
  u16 DNA_i;
  for(DNA_i=0;DNA_i!=16;DNA_i++){vtem=(DNA_teil+DNA_i);
                                 if(DNAQeue[vtem]==(pFunction)DNA_Next){ DNAQeue[vtem]=Thread;goto meett;};
                                 if(DNAQeue[vtem]==DefaultAddress){ InDNA(Thread);goto meett;}
                                };  
meett:
{};
};



Коментарии я почти не пишу. так что разбирайтесь как есть.
InDNA()- в очередь в конец.
InDNA_rapid()-в очередь в пустое место, если 16 ближайших заняты, тогда в конец.

Код
int main(void)
{
  InDNA(&initARM); //-- первая задача
  Ribosoma();  
}


спасибо большущее, как я и думал, здесь кольцевая очеред, но не совсем понятно где задаётся приоритет и как читается?
Go to the top of the page
 
+Quote Post
Warlockwolf
сообщение Nov 30 2011, 20:08
Сообщение #32


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 17-06-08
Пользователь №: 38 358



приоритет задается постановкой в очередь. либо в конец очереди, либо в середину. в любом случае задачи выполняются по очереди. в сформированной очереди задачи не меняются.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Dec 1 2011, 05:38
Сообщение #33


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(Warlockwolf @ Dec 1 2011, 00:08) *
приоритет задается постановкой в очередь. либо в конец очереди, либо в середину. в любом случае задачи выполняются по очереди. в сформированной очереди задачи не меняются.


Таким образом, если возникает событие, требующее обработки немедленно (реалтайм), то оно в любом случае ждёт своей очереди, не прерывая обрабатываемое в данный момент событие.
Это вытеснение?
Go to the top of the page
 
+Quote Post
Warlockwolf
сообщение Dec 1 2011, 08:03
Сообщение #34


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 17-06-08
Пользователь №: 38 358



Я ж писал, - реал тайм -при возникновении прерывания задача полностью отрабатывается. (ком по пдп набил буфер, и по прерыванию его сразу обработала задача)
вот и вытеснение, задача которая сидела в очереди и выполнялась, прервалась. если во время выполнения новой задачи, возникнет прерывание еще более высокого уровня. то и эта задача прервется.

Сообщение отредактировал Warlockwolf - Dec 1 2011, 08:03
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Dec 1 2011, 08:26
Сообщение #35


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



понятно, вобщем кольцевая очередь низкоприоритетных задач + прерывания.
Просто вы писали обозначая приоритеты цифрами (0,1,2...) вот я и подумал что это както задаётся программно.
Теперь ясно.
Получается что необходимо разрешать прервания в прерываниях.
но например для MSP430 :
Микроконтроллеры семейства MSP430 имеют особенность – когда вложенные прерывания разрешены, любое прерывание, возникающее во время выполнения одной подпрограммы обработки прерывания, вызовет выполнение своей подпрограммы, несмотря на приоритеты прерываний.

Получается для MSP430 такое провернуть не удастся.

Сообщение отредактировал Zelepuk - Dec 1 2011, 09:20
Go to the top of the page
 
+Quote Post
_Ivana
сообщение Jan 10 2012, 17:56
Сообщение #36


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



Цитата(kolobok0 @ Nov 30 2011, 10:53) *
буду краток:
ось, планировщики (и т.д.) нафик не нужно в МК. Это Вы ребята подсознательно хотите как у "больших" типа. зачем тягаться в той весовой категории где МК вообще все плюсы сольёт. Чем будет отличаться то? тем что на борту у него есть аппаратная реализация то, что у "больших" на матери? всё?

по мне: единственный плюс разработки с юзаньем оси - командная разработка (типа просче дробить, тестировать, изолировать и т.п.), и скорость в счёт качества(подсобрать всякую тучу кривых библиотек и сапотить энным кол-вом работников). всё.

конечно же это чисто мой взгляд на вещи. холивар не хочу разводить. приводить свой опыт не буду - это уже из разряда измерений линейкой всяких органов...

удачи вам
(круглый)


Спасибо за пожелание удачи, но простите, немного непонятно - вы против ОС или планировщиков? Планировщик был "изобретен" мной 2 месяца назад в силу незнания что они уже изобретены, когда потребовалось условно говоря, варить борщ, смотреть телек, укладывать ребенка, играть одновременно 10 партий в шахматы на 10 досках и иметь возможность впустить гостя, позвонившего в дверь внезапно и потом ещё уделять ему время - и все это асинхронно и без потери реального времени! Я был очень доволен, когда придумал как это осуществить. Без ОС, без вытеснения, без почтовых ящиков, просто по крестьянски, но с реальным временем. А тут ваше такое мнение....

Сообщение отредактировал _Ivana - Jan 10 2012, 17:57
Go to the top of the page
 
+Quote Post
SyncLair
сообщение Jan 10 2012, 18:57
Сообщение #37


Местный
***

Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197



Цитата(Zelepuk @ Nov 29 2011, 12:56) *
Хочется найти хорошо расписанный пример написания программы с вытясняющим планировщиком без применения какой-либо ОС на чистом С. Нашёл отличное описание кооперативного планировщика, но хочется разобраться с вытясняющим.
Подскажите, кто знает.

Во-первых: вытесняющая многозадачность -- стек на каждый поток исполнения. Возможность его переполнения.

Во-вторых: оно Вам зачем надо? чтобы параллельно несколько потоков выполнялось? А наверно вы хотите чтоб одни потоки работали бесконечно а другие их вытесняли время от времени? Тогда вам и приоритет поди понадобиться? Дак почему бы не взять простейшую ОС? что сложного то -- несколько доп файлов в проект и всё.

В-третьих: на чистом Си вы ничего не получите так как чистый Си предполагает классическую однопоточную модель выполнения программ ибо создавалось это в те времена когда о реалтайме и куче периферийных устройств особо не думали. Без кусочка асма тут ну никак не обойтись

Цитата(kolobok0 @ Nov 30 2011, 11:53) *
по мне: единственный плюс разработки с юзаньем оси - командная разработка (типа просче дробить, тестировать, изолировать и т.п.), и скорость в счёт качества(подсобрать всякую тучу кривых библиотек и сапотить энным кол-вом работников). всё.

Очень такой большой плюс. :-)


--------------------
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Jan 11 2012, 05:03
Сообщение #38


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(_Ivana @ Jan 10 2012, 20:56) *
Спасибо за пожелание удачи, но простите, немного непонятно - вы против ОС или планировщиков? Планировщик был "изобретен" мной 2 месяца назад в силу незнания что они уже изобретены, когда потребовалось условно говоря, варить борщ, смотреть телек, укладывать ребенка, играть одновременно 10 партий в шахматы на 10 досках и иметь возможность впустить гостя, позвонившего в дверь внезапно и потом ещё уделять ему время - и все это асинхронно и без потери реального времени! Я был очень доволен, когда придумал как это осуществить. Без ОС, без вытеснения, без почтовых ящиков, просто по крестьянски, но с реальным временем. А тут ваше такое мнение....

раскройте секрет реализации подробнее. Очень интересно.

Цитата(SyncLair @ Jan 10 2012, 21:57) *
В-третьих: на чистом Си вы ничего не получите так как чистый Си предполагает классическую однопоточную модель выполнения программ ибо создавалось это в те времена когда о реалтайме и куче периферийных устройств особо не думали. Без кусочка асма тут ну никак не обойтись


а как же ChibiOS? там "чистый" С
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jan 11 2012, 09:08
Сообщение #39


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(_Ivana @ Jan 10 2012, 21:56) *
... без потери реального времени! ...без вытеснения...А тут ваше такое мнение....


sm.gif)) возможно я, что то не понимаю в данной терминологии но имхо - несовместимо.

моё мнение базируется чисто на опыте. пока таких задач не было, где требовалось по теме поста - планировщики или оси. возможно потому как пишу одын. хз. при этом всё что вы перечислили из задач - всё реально делается без планировщиков и осей (там выше был список про готовить, убирать и прочей фигни).

т.е. в осадке имеем только
1) я сделал и жалко выкидывать, тем более модняво
2) теперь я могу абстрагироваться от других мелких под задачек...ура!!! ура!!! ура!!! но надо не забыть что шина разделяема, что юсарт разделяем, что..ой чёрт дай ка я заведу мьютексы, семафорчики и критические секции на всяк случай...ура!!! ура!!! ура!!! а вот мне нужно чётко нарезать по 1 микросекунде, ой блин тут надо приоритеты явно заводить...ну или там блокировку или не вытеснять... ура..ура..ура...


замечу, что умение абстрагироваться от другой мелкой задачи стало поспокойнее - значит польза...кхм... не надо там помнить о правилах подключения, диспетчиризации и временных квантов...
я всё прально написал??? так???
или я что то недопонимаю в высшей идеи???
(круглый)


Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 11 2012, 10:15
Сообщение #40


;
******

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



Да простит меня MrYuran, который забадался уже читать мои наблюдения по поводу прототредов sm.gif
Если дополнить прототредовский контекст 1 байтом, содержащим информацию, например, о подписке треда на некоторое событие, то из обработчика этого события можно вызывать только те треды, которые его ожидают. Итого, вся вытеснялка у нас базируется на физических источниках событий-прерываниях. Реалтаймовые костыли налицо.
Go to the top of the page
 
+Quote Post
SyncLair
сообщение Jan 11 2012, 20:10
Сообщение #41


Местный
***

Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197



Цитата(Zelepuk @ Jan 11 2012, 09:03) *
а как же ChibiOS? там "чистый" С

А как же папочка os/ports там и ассемблерные файлы имеются.


--------------------
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Jan 12 2012, 05:15
Сообщение #42


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(SyncLair @ Jan 11 2012, 23:10) *
А как же папочка os/ports там и ассемблерные файлы имеются.


всё же вы говорили о неприменимости C.
Go to the top of the page
 
+Quote Post
SpyBot
сообщение Jan 12 2012, 06:25
Сообщение #43


Местный
***

Группа: Свой
Сообщений: 285
Регистрация: 5-11-05
Пользователь №: 10 491



Цитата(SyncLair @ Jan 10 2012, 22:57) *
В-третьих: на чистом Си вы ничего не получите так как чистый Си предполагает классическую однопоточную модель выполнения программ ибо создавалось это в те времена когда о реалтайме и куче периферийных устройств особо не думали. Без кусочка асма тут ну никак не обойтись

Сорри, но почему не получится?
Грубо говоря, нам необходимо в прерывании манипулировать значением program counter.
Это, мне кажется, можно сделать и на си...
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jan 12 2012, 06:49
Сообщение #44


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(SpyBot @ Jan 12 2012, 09:25) *
Сорри, но почему не получится? Грубо говоря, нам необходимо в прерывании манипулировать значением program counter.
А как вы push-pop регистрового контекста из си реализуете?


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
SpyBot
сообщение Jan 12 2012, 07:10
Сообщение #45


Местный
***

Группа: Свой
Сообщений: 285
Регистрация: 5-11-05
Пользователь №: 10 491



Цитата(demiurg_spb @ Jan 12 2012, 10:49) *
А как вы push-pop регистрового контекста из си реализуете?

Например, IAR AVR использует раздельные стеки возвратов и данных.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 03:00
Рейтинг@Mail.ru


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