|
|
  |
вытясняющая многозадачность, чистый С без ОС |
|
|
|
Nov 30 2011, 19:23
|
Знающий
   
Группа: Участник
Сообщений: 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(); } спасибо большущее, как я и думал, здесь кольцевая очеред, но не совсем понятно где задаётся приоритет и как читается?
|
|
|
|
|
Dec 1 2011, 05:38
|
Знающий
   
Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464

|
Цитата(Warlockwolf @ Dec 1 2011, 00:08)  приоритет задается постановкой в очередь. либо в конец очереди, либо в середину. в любом случае задачи выполняются по очереди. в сформированной очереди задачи не меняются. Таким образом, если возникает событие, требующее обработки немедленно (реалтайм), то оно в любом случае ждёт своей очереди, не прерывая обрабатываемое в данный момент событие. Это вытеснение?
|
|
|
|
|
Jan 10 2012, 17:56
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Цитата(kolobok0 @ Nov 30 2011, 10:53)  буду краток: ось, планировщики (и т.д.) нафик не нужно в МК. Это Вы ребята подсознательно хотите как у "больших" типа. зачем тягаться в той весовой категории где МК вообще все плюсы сольёт. Чем будет отличаться то? тем что на борту у него есть аппаратная реализация то, что у "больших" на матери? всё?
по мне: единственный плюс разработки с юзаньем оси - командная разработка (типа просче дробить, тестировать, изолировать и т.п.), и скорость в счёт качества(подсобрать всякую тучу кривых библиотек и сапотить энным кол-вом работников). всё.
конечно же это чисто мой взгляд на вещи. холивар не хочу разводить. приводить свой опыт не буду - это уже из разряда измерений линейкой всяких органов...
удачи вам (круглый) Спасибо за пожелание удачи, но простите, немного непонятно - вы против ОС или планировщиков? Планировщик был "изобретен" мной 2 месяца назад в силу незнания что они уже изобретены, когда потребовалось условно говоря, варить борщ, смотреть телек, укладывать ребенка, играть одновременно 10 партий в шахматы на 10 досках и иметь возможность впустить гостя, позвонившего в дверь внезапно и потом ещё уделять ему время - и все это асинхронно и без потери реального времени! Я был очень доволен, когда придумал как это осуществить. Без ОС, без вытеснения, без почтовых ящиков, просто по крестьянски, но с реальным временем. А тут ваше такое мнение....
Сообщение отредактировал _Ivana - Jan 10 2012, 17:57
|
|
|
|
|
Jan 10 2012, 18:57
|
Местный
  
Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197

|
Цитата(Zelepuk @ Nov 29 2011, 12:56)  Хочется найти хорошо расписанный пример написания программы с вытясняющим планировщиком без применения какой-либо ОС на чистом С. Нашёл отличное описание кооперативного планировщика, но хочется разобраться с вытясняющим. Подскажите, кто знает. Во-первых: вытесняющая многозадачность -- стек на каждый поток исполнения. Возможность его переполнения. Во-вторых: оно Вам зачем надо? чтобы параллельно несколько потоков выполнялось? А наверно вы хотите чтоб одни потоки работали бесконечно а другие их вытесняли время от времени? Тогда вам и приоритет поди понадобиться? Дак почему бы не взять простейшую ОС? что сложного то -- несколько доп файлов в проект и всё. В-третьих: на чистом Си вы ничего не получите так как чистый Си предполагает классическую однопоточную модель выполнения программ ибо создавалось это в те времена когда о реалтайме и куче периферийных устройств особо не думали. Без кусочка асма тут ну никак не обойтись Цитата(kolobok0 @ Nov 30 2011, 11:53)  по мне: единственный плюс разработки с юзаньем оси - командная разработка (типа просче дробить, тестировать, изолировать и т.п.), и скорость в счёт качества(подсобрать всякую тучу кривых библиотек и сапотить энным кол-вом работников). всё. Очень такой большой плюс. :-)
--------------------
|
|
|
|
|
Jan 11 2012, 05:03
|
Знающий
   
Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464

|
Цитата(_Ivana @ Jan 10 2012, 20:56)  Спасибо за пожелание удачи, но простите, немного непонятно - вы против ОС или планировщиков? Планировщик был "изобретен" мной 2 месяца назад в силу незнания что они уже изобретены, когда потребовалось условно говоря, варить борщ, смотреть телек, укладывать ребенка, играть одновременно 10 партий в шахматы на 10 досках и иметь возможность впустить гостя, позвонившего в дверь внезапно и потом ещё уделять ему время - и все это асинхронно и без потери реального времени! Я был очень доволен, когда придумал как это осуществить. Без ОС, без вытеснения, без почтовых ящиков, просто по крестьянски, но с реальным временем. А тут ваше такое мнение.... раскройте секрет реализации подробнее. Очень интересно. Цитата(SyncLair @ Jan 10 2012, 21:57)  В-третьих: на чистом Си вы ничего не получите так как чистый Си предполагает классическую однопоточную модель выполнения программ ибо создавалось это в те времена когда о реалтайме и куче периферийных устройств особо не думали. Без кусочка асма тут ну никак не обойтись а как же ChibiOS? там "чистый" С
|
|
|
|
|
Jan 11 2012, 09:08
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(_Ivana @ Jan 10 2012, 21:56)  ... без потери реального времени! ...без вытеснения...А тут ваше такое мнение....  )) возможно я, что то не понимаю в данной терминологии но имхо - несовместимо. моё мнение базируется чисто на опыте. пока таких задач не было, где требовалось по теме поста - планировщики или оси. возможно потому как пишу одын. хз. при этом всё что вы перечислили из задач - всё реально делается без планировщиков и осей (там выше был список про готовить, убирать и прочей фигни). т.е. в осадке имеем только 1) я сделал и жалко выкидывать, тем более модняво 2) теперь я могу абстрагироваться от других мелких под задачек...ура!!! ура!!! ура!!! но надо не забыть что шина разделяема, что юсарт разделяем, что..ой чёрт дай ка я заведу мьютексы, семафорчики и критические секции на всяк случай...ура!!! ура!!! ура!!! а вот мне нужно чётко нарезать по 1 микросекунде, ой блин тут надо приоритеты явно заводить...ну или там блокировку или не вытеснять... ура..ура..ура... замечу, что умение абстрагироваться от другой мелкой задачи стало поспокойнее - значит польза...кхм... не надо там помнить о правилах подключения, диспетчиризации и временных квантов... я всё прально написал??? так??? или я что то недопонимаю в высшей идеи??? (круглый)
|
|
|
|
|
Jan 11 2012, 20:10
|
Местный
  
Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197

|
Цитата(Zelepuk @ Jan 11 2012, 09:03)  а как же ChibiOS? там "чистый" С А как же папочка os/ports там и ассемблерные файлы имеются.
--------------------
|
|
|
|
|
Jan 12 2012, 05:15
|
Знающий
   
Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464

|
Цитата(SyncLair @ Jan 11 2012, 23:10)  А как же папочка os/ports там и ассемблерные файлы имеются. всё же вы говорили о неприменимости C.
|
|
|
|
|
Jan 12 2012, 06:25
|
Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 5-11-05
Пользователь №: 10 491

|
Цитата(SyncLair @ Jan 10 2012, 22:57)  В-третьих: на чистом Си вы ничего не получите так как чистый Си предполагает классическую однопоточную модель выполнения программ ибо создавалось это в те времена когда о реалтайме и куче периферийных устройств особо не думали. Без кусочка асма тут ну никак не обойтись Сорри, но почему не получится? Грубо говоря, нам необходимо в прерывании манипулировать значением program counter. Это, мне кажется, можно сделать и на си...
|
|
|
|
|
Jan 12 2012, 07:10
|
Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 5-11-05
Пользователь №: 10 491

|
Цитата(demiurg_spb @ Jan 12 2012, 10:49)  А как вы push-pop регистрового контекста из си реализуете? Например, IAR AVR использует раздельные стеки возвратов и данных.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|