Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

таск мениджър или проста ОС за кортекс м3
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=8735
Страница 1 от 3

Автор:  head_up [ Сря Мар 23, 2011 12:42 pm ]
Заглавие:  таск мениджър или проста ОС за кортекс м3

Нещата са опрели до някаква форма на таск мениджър ил икакто писах - семпла ос от типа на freeRTOS. Поради някакви съображения ръководството се запъва за freeRTOS-а и ме напъват да си напиша собствен таск мениджър, което вероятно в крайна сметка ще се случи. Но все пак, колеги, някой би ли могъл да ми препоръча, ако не говото решение, то поне от къде да се зачета за архитектурата на таск мениджърите, че нещо го дъвча с гуглето, а то само глупости плюе ?!
Изискванията малко по-конкретно са: да мога да поддържам до около 32 таска, приоритети между тях, споделена периферия - ако някой я ползва друг да не може да пипа, общи глобални променливи (разни масиви) без да стават мазаници - тасковете в общи линии трябва да се изчакват един друг и да не си пипат перифериите и променливите, с които операра "колегата". Това е което ме интересува, като ако някой таск ми е по-жизнено важен да мога да то отработя овреме - т.е. нещо като приоритети, пък ако може и да се прекъсват един друг при възникване на събитие, което да извика по-високо приоритетния, вместо да чака първи на опашката - още по-добре. Като цяло не ужасно тежка задача, но знам ли до къде ще се стигне на края, а и предполагам, че докато я докарам до работещо решение, ще ми отнеме много повече време отколкото да ползвам чуждо и да му търся бъговете. Та бихте ли препоръчали нещо по темата?

Едит: не ми трябват никакви стекове, нито за tcp/ip, usb, flash cards и т.н. - от просто по-просто :)
И да се дъвче от GCC ...

Автор:  miro_atc [ Сря Мар 23, 2011 12:58 pm ]
Заглавие: 

Сега не ти трябва това или онова, ама като ти потрябва ще си скубеш косите ;-)

Бих ти препоръчал cocox или nuttx. Кокоса признавам си не съм се задълбавал лично, препоръчвам повече на база чужди отзиви. Но nuttx съм го разглеждал и смея да твърдя, че е добър.

Но ако въпреки всичко си решил да си чупиш главата сам, може да погледнеш и моето решение (кръстил съм го tmos ).

Автор:  Цецо [ Сря Мар 23, 2011 1:58 pm ]
Заглавие: 

Ако ти трябва нещо наистина толкова просто - просто открадни сорсовете на FreeRTOS. Тя е точно това - прост таск сутчер с елементарните инструменти за синхронизация - семафор, мутекс и опашка. Толкоз. Сорсовете и са 3-4 файла, не е трудна за "взаимстване", щом толкоз държат да имате собствена ваша. Плюваш малко, размазваш с пръст да не личи оригинала и си готов :)

Много по лесно ще е от това да откриваш топлата вода изначало.

Автор:  head_up [ Сря Мар 23, 2011 2:16 pm ]
Заглавие: 

Цецо, подозирам, че си прав, но основната идея е да не се полвало нещо с толкова много възможности-тежест-бъгове, а да се направи нещо, което да покрие минималните изисквания на заданието и толкоз. Нещо като топлата вода. Мокро, да мие и да не ти е гадно. Ама нали ...

miro_atc, ще да ги скубя косите, натам отива работата ... cocox го рещнах по-рано, nuttx също го гледах - прекален натруфени са, почти като freertos-a, а то началството това не го харесва. Та... така! :(

Автор:  fan [ Сря Мар 23, 2011 2:28 pm ]
Заглавие: 

Не си губи времето с глупости, ами почни с някоя готова фрее ртос, ползвай от нея най-простите неща. Понатрупай малко опит с кортексите, па тогава тръгвай да си правиш своя. Едва ли ще изпиташ чак такива затруднения да убедиш работодателите си в това! ОС-а е за хора с дълбоки познания в съответната платформа! Това ти го напомням - не вярвам да не го знаеш! :)

Автор:  miro_atc [ Сря Мар 23, 2011 2:37 pm ]
Заглавие: 

Ако можеш да убедиш началството за nuttx ще е най-добре повярвай ми... Казвам ти го като човек, който се връща от там, накъдето ти си тръгнал ;-)

Фреертос не става, знам че Цецо мисли друго, ама съм сигурен че ще си промени мнението ако някой ден задълбае повече....

Разликата между фреертос и нутх-а е ОГРОМНА. И то не в размера, а в качеството. Нут-а можеш да си конфигурираш както искаш и за какъвто борд искаш. Може да слагаш GUI, стекове, маже да ги махаш както си искаш. Има документация, има организация на сорсовете.... има си всичко!
Ако искаш нут-а да ти е малък го конфигурираш само с базова функционалност и ще излезе по-малък и по-добър, отколкото ти би го направил....

Автор:  gicho [ Сря Мар 23, 2011 2:39 pm ]
Заглавие: 

А началството харесва ли бъгове, и изоставания от планираните срокове ... :D

Едва ли си струва да разработвате нещо такова, според мен вземете нещо готово и забравете. Което не ви трябва не го ползвайте.

За кортекс в момента има сума ти готови и безплатни неща, а като гледам, и вие не сте сигурни какво ви трябва - как го виждате да правите контрол на достъпа до ресурси / периферия без семафори, да комуникирате между таскове без мейлбокси и кюта? Накрая от цялото "не ни трябва" ще си го напишете, и ще си изхарчите времето да дебъгвате.

Ето едно сравнение:
http://www.yagarto.de/projects/rtoscomp/index.html



Оттам можеш да погледнеш това:
http://www.chibios.org/dokuwiki/doku.php?id=start

Изглежда бързо това нещо. Но нямам пряк сблъсък с него.

Универсалният вариант е FreeRTOS-а.

Автор:  miro_atc [ Сря Мар 23, 2011 2:54 pm ]
Заглавие: 

gicho написа:

Универсалният вариант е FreeRTOS-а.


Не искам да го обръщам на някаква война като ПИК срещу всички останали, но забравете за фреертос. Не ми е приятно да плюя работата на колеги, но вече 3-4 години се занимавам с операционни системи и за мен е грехота след като има читави решения да се ползва нещо от сорта на Фреертос. Това е грешен коловоз, не тръгвайте по него!

Автор:  Nikola Kirov [ Сря Мар 23, 2011 3:00 pm ]
Заглавие: 

Ами странни хора сте. Вие не творите ли бъгове като пишете?
Готов съм да се басирам на много че ще натвориш поне 10 пъти повече бъгове отколкото има в готова OS като FreeRtos.
Бъговете излизат при продължително тестване най вече.

С FreeRtos-a няколко пъти съм си мислил ей го на,тоя път вече шибания FreeRtos омазва нещо и като дълбая дълбая пак предмониторното устройство се оказва бъгаво ;)
Просто при по разпространените OS всеки потребител се оказва и тестер и като намери бъг и го рапортува и го оправят. Като копаш сам тестовете не са толкова всеобхватни.

Друг въпрос е че ще имаш доста недомислици в първите версии. Като подкараш нещата и почнеш да си ги забелязваш ще почнеш да кърпиш кода. Ей тук в тази фаза ще си допълниш още по сериозно букетчето с явни и неявни бъгове. И кво ще се получи,вместо да изпишеш вежди ще избодеш очи. Че и маса време ще загубиш.

Ако заделиш половината от времето което ще похабиш за писане на собствена OS в разучаване в детайли,на ниво сорс,ще имаш много по изчистен от бъгове код отколкото при варианта сам да си пишеш OS.

И аз си имам собствена OS ама вероятно ще я изоставя,ще мине в графата обучение и развитие ;)

Автор:  Цецо [ Сря Мар 23, 2011 3:20 pm ]
Заглавие: 

miro_atc написа:
Фреертос не става, знам че Цецо мисли друго, ама съм сигурен че ще си промени мнението ако някой ден задълбае повече....


Оф, стига бе човек :) Дилемата я имам и преди ти да ми я натрапиш :)

Давай агитирай ме. Какво печеля с nuttx?

1. Posix интерфейс (никак не е малко).

то с това май чистите RTOS предимства се изчерпват.

2. USB - нещо не можах да се ориентирам какво предлагат като стек. Т.е. какви устройства могат да изимитирам (Mass, HID, COM)???
3. TCP/IP - в конкретния случай не ми трябва. Ама лошо няма.
4. GUI - ровил ли си го? Читав ли е?
и т.н....

Като цяло всичко допълнително извън класическия RTOS е в процес на разработка при нута и като цяло доста зле документирано.

Автор:  head_up [ Сря Мар 23, 2011 3:22 pm ]
Заглавие: 

абе хора, ОС е малко силно казано, по-скоро имах предвид повече към таск мениджър. Ей, на и Rowley-то си имат собствен и подозирам, че ще ми е много лесно да го ползвам, но не е идейно да се ползва "нещо като" дадено от средата, прекалено обвързващо. И сигурно сте прави, че ще ми отиде повече време да пиша и дебъгвам отколкото да ползвам готово и да кърпя, знам ли... ще го помисля още малко, но почвам да се обърквам в приличното разнообразие от разни ххххххОС-та, всеки правил и струвал да се чудиш и маеш под кой камък какво ще излезе.

Автор:  Цецо [ Сря Мар 23, 2011 3:25 pm ]
Заглавие: 

Аз затова ти казвам - вземи фрииртос - а и просто му "взаимствай" таскера. Или там каквото ти трябва. Препоръчвам ти него, защото просто е достатъчно прост, за да може човек да краде цели порции код без да мисли много :)

А това, че е толкова прост си има и предимства (според мен) и недостатъци (според Миро).

Незнам какъв ти е опита с Куртексите, ама писането на ОС не е тривиална работа. Най-малкото трябва да владееш конкретния процесор и асемблера му на доста прилично ниво. Т.е. да си изял програминг мануала от сайта на АРМ за конкретното ядро с кориците. Аз самия не съм стигал чак такива висини и затова се доверявам на други.

Автор:  relsys [ Сря Мар 23, 2011 4:21 pm ]
Заглавие: 

Ето как го правя аз:

Код:
void main(void)
{
Init_Hardware();

Init_Variables();

Init_TMR0();

Init_TMR5();

Init_RS232(br115200);

Init_Network_Protocol();


ADD_TASK_Enabled[ADD_TASK_1] = False;
ADD_TASK_Enabled[ADD_TASK_2] = False;
ADD_TASK_Enabled[ADD_TASK_3] = False;
ADD_TASK_Enabled[ADD_TASK_6] = False;

MAIN_TASK_Dispatcher = 0;
SOFT_USART_Init();
 
while (True)
   {   
     switch (MAIN_TASK_Dispatcher)
       {
         case TASK_0:
           {
             //MAIN_TASK_0
                 
             break;
           }
         case TASK_1:
           {
             //MAIN_TASK_1
             
             break;
           }
         case TASK_2:
           {
             //MAIN_TASK_2
             
             break;
           }
       }  //switch (MAIN_TASK_Dispatcher)
       
    if (ADD_TASK_Enabled[ADD_TASK_Dispatcher])       
       switch (ADD_TASK_Dispatcher)
         {
           case ADD_TASK_0:
             {
               
               
               break;
             }
           case ADD_TASK_1:
             {
               //ADD_TASK_1       
                         
               break;
             }
           case ADD_TASK_2:
             {
               
               break;
             }
           case ADD_TASK_3:
             {
               //ADD_TASK_3
               
               break;
             }
           case ADD_TASK_4:
             {
               Feed_Button_Handle();
               break;
             }
           case ADD_TASK_5:
             {
                                           
               break;
             }
           case ADD_TASK_6:
             {
               
               break;
             }
           case ADD_TASK_7:
             {
               
               break;
             }
         }  //switch (ADD_TASK_Dispatcher)
         
       ADD_TASK_Dispatcher++;
       
       if (ADD_TASK_Dispatcher >= 10)
         ADD_TASK_Dispatcher = 0;

   }
}

Автор:  head_up [ Сря Мар 23, 2011 4:51 pm ]
Заглавие: 

@relsys, това си е проста стейт машина, която ги върти безкрайно, какво му е интересното? Ако имаш събитие отнасящо се до таск 2, докато отработваш таск 1 му ядеш главата с някой тайм-аут. Ако и трите ти таска споделят общи входно изходни точки (и недай Боже имат тайм-аути) му ядеш главата . Не е функционално по никакъв начин. Но пък е простичко :)

Автор:  miro_atc [ Сря Мар 23, 2011 5:51 pm ]
Заглавие: 

Цецо написа:
Давай агитирай ме. Какво печеля с nuttx?


Мога да те агитирам да ползваш моя ОС, даже се пробвах ако помниш... За nuttx няма какво да те агитирам, просто ти казвам, че той е по-добър от моя ОС. Аз си го признавам и без бой, а ти дали ще ми повярваш е все тая.

Това, което искам да кажа в случая е, че има огромна разлика между нещо дето цъка таскове и истинска операционна система. Фреертос няма нищо общо с операционните системи. Това е един проЗт кърнел. Моят продукт също не е баш истинска ОС. Имам някои общи неща с операционните системи, но нямам всичко необходимо, а част от това което имам пък е направено по недостатъчно стандартен начин. Докато nuttx имат всичко и с пълно право могат да си нарекат продукта "операционна система".

Една операционна система е преди всичко концепция. Концепция за това как да разделяш сложните проблеми на много, но прости задачи. Концепция за това как да накараш много задклавиатурни устройства да работят заедно и ефективно. От това следват много неща... трудно ми е накратко да изброя всички критерии на които трябва да отговаря един ОС.
Трябва да се сблъскаш, за да го разбереш каква е разликата между ОС и нещо дето се разпространява като ZIP файл. Няма концепция за драйвери, няма система за конфигуриране, няма нищо.
Не знам как да ти го кажа, но идеята на един ОС е да пести време и нерви. Това значи че като имаш примерно GUI и множество стекове и/или драйвери да можеш да подкараш за минути произволна комбинация от тях. А не да се чудиш като пуснеш GUI дали ще умре ethernet-a или няма.
В единия случай имаш нещо като "лего" т.е. набор от парченца като GUI, USB, Ethernet. Избираш си каквото ти трябва и си спокоен че каквото и да избереш парченцата ще паснат едно с друго. Нещо повече, ако ти трябва направиш ново парче, а колегата ти друго си знаете как трябва да стане. И ако следвате концепцията и вашите парченца ще се стиковат.
Ти ме питаш дали имал USB, TCP и GUI... Ами, не просто ги има, но са истински драйвери. Демек може да си конфигурираш един SPI на който да имаш дисплей, на същата шина да имаш дейта флаш. Върху флаша да подкараш файлова система, а файловата система да мапнеш към USB-то. Разликата с фреертос е просто огромна. Пак ти казвам, трябва да се поблъскаш малко и тогава ще разбереш за какво ти говоря...

Иначе тия сравнения дето ги дават колко време трябвало за task switch и колко байта бил кода са жив ташак. По това не можеш да съдиш за качеството на една операционна система изобщо!

Страница 1 от 3 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/