A. Fig Lee 0 April 8, 2015 Posted April 8, 2015 · Report post Вот же блин же... мне не нужны все эти драйверы, и периферия. От операционки мне надо чтобы она задачи переключала, а все остальное я сам напишу. Как то это все не дружелюбно для пользователя... То, что вы хотите, реализовано в кокосе. Пара килобайт весь код, заточен под кортекс, на ассемблере переключается, имеет только примитивы синхронизации, никаких драйверов. Надумаете, пальцем ткну где я там баги нашел. Вам может и так сойдет, у нас работает на 1 миллисекунд тик, хорошо загружена. Quote Share this post Link to post Share on other sites More sharing options...
den_po 0 April 9, 2015 Posted April 9, 2015 · Report post ну так я надеялся что FreeRTOS собрана под разные ядра... как обещающая и особо заточенная... но видать нет... Ну дык ответили ж вам - всё необходимое есть в папке source. От вас требуется настроить FreeRTOSConfig.h и вызвать vTaskStartScheduler(). Ну и стартап в некоторых случаях в демке подглядеть. Если не нравится, на каких таймерах висит переключалка задач, тут уже надо будет лезть в папочку port. Quote Share this post Link to post Share on other sites More sharing options...
Golikov 0 April 9, 2015 Posted April 9, 2015 · Report post То, что вы хотите, реализовано в кокосе. Пара килобайт весь код, заточен под кортекс, на ассемблере переключается, имеет только примитивы синхронизации, никаких драйверов. Надумаете, пальцем ткну где я там баги нашел. Спасибо за предложение, пока все же попробую как мне кажется более раскрученный бренд, в надежде на более массовое тестирование. Но а там посмотрим... Ну дык ответили ж вам - всё необходимое есть в папке source. От вас требуется настроить FreeRTOSConfig.h и вызвать vTaskStartScheduler(). Ну и стартап в некоторых случаях в демке подглядеть. Если не нравится, на каких таймерах висит переключалка задач, тут уже надо будет лезть в папочку port. Не..., мне ответили что надо будет брать чужую демку и фильтровать что от демки что от ядра и что там все скручено, так что никогда не заработает сразу, даже если проц совпадет... Вот если мне все нравиться по умолчанию, и я не хочу никуда лезть, мне казалось логичнее взять исходник, а то вдруг автор демки куда то полез и что-то уже поправил. В случае если я возьму прям с сайта ртос.орг, много ли надо доделывать чтобы оно все завелось? Просто оценочно. Quote Share this post Link to post Share on other sites More sharing options...
den_po 0 April 9, 2015 Posted April 9, 2015 · Report post Не..., мне ответили что надо будет брать чужую демку и фильтровать что от демки что от ядра и что там все скручено, так что никогда не заработает сразу, даже если проц совпадет... http://electronix.ru/forum/index.php?s=&am...t&p=1328460 Вот если мне все нравиться по умолчанию, и я не хочу никуда лезть, мне казалось логичнее взять исходник, а то вдруг автор демки куда то полез и что-то уже поправил. В случае если я возьму прям с сайта ртос.орг, много ли надо доделывать чтобы оно все завелось? Просто оценочно. См. мой предыдущий ответ. Quote Share this post Link to post Share on other sites More sharing options...
Golikov 0 April 9, 2015 Posted April 9, 2015 · Report post блин я пропустил этот ответ. То есть я беру из сорс голую систему, пихаю в проект, правлю конфиг, настраиваю свою периферию, запускаю vTaskStartScheduler() и поехали? Дальше останется только добавлять таски? Сколько занимает такой старт на голом проце? Ведь в целом так же можно описать и запуск линукса:) Quote Share this post Link to post Share on other sites More sharing options...
aaarrr 72 April 9, 2015 Posted April 9, 2015 · Report post То есть я беру из сорс голую систему, пихаю в проект, правлю конфиг, настраиваю свою периферию, запускаю vTaskStartScheduler() и поехали? Дальше останется только добавлять таски? Именно. Сколько занимает такой старт на голом проце? Ведь в целом так же можно описать и запуск линукса :) На Cortex-M пару часов в знакомой среде. Некоторой внимательности требует только настройка контроллера прерываний. Quote Share this post Link to post Share on other sites More sharing options...
LightElf 1 April 9, 2015 Posted April 9, 2015 · Report post ну так я надеялся что FreeRTOS собрана под разные ядра... как обещающая и особо заточенная... но видать нет... Что значит "собрана под разные ядра"? FreeRTOS поставляется в исходниках. Заметная часть функционала выполнена на макросах, поэтому ее нельзя собрать в библиотеку. Каталог FreeRTOS\Source содержит исходники кернела. По-минимуму это файлы list.c queue.c tasks.c. Есть еще croutine.c и timers.c - на любителя. Каталог FreeRTOS\Source\portable содержит кусочки, специфичные для конкретного компилятора и ядра. Например FreeRTOS\Source\portable\IAR\ARM_CM3 содержит специфичный код для Cortex-M3 с компилятором IAR. Каталог FreeRTOS\Source\portable\MemMang содержит 4 варианта менеджера памяти. Нужно выбрать один, в доке описаны отличия. Для первого запуска достаточно heap_1.c. Дальше берете FreeRTOSConfig.h из примерно похожей демки, правите под свои потребности - и вуаля. Quote Share this post Link to post Share on other sites More sharing options...
Golikov 0 April 9, 2015 Posted April 9, 2015 · Report post Ну что же, всем спасибо за беседу, попробуем запустить FreeRTOS, а там видно будет. Под собрана, я имел ввиду собраны исходники, ну собственно как и есть, это типа "FreeRTOS\Source\portable\IAR\ARM_CM3".... Quote Share this post Link to post Share on other sites More sharing options...
adnega 15 April 9, 2015 Posted April 9, 2015 · Report post Ну что же, всем спасибо за беседу, попробуем запустить FreeRTOS, а там видно будет. Мне в свое время очень помогли статьи А. Курница о FreeRTOS. Советую. Quote Share this post Link to post Share on other sites More sharing options...
den_po 0 April 9, 2015 Posted April 9, 2015 · Report post То есть я беру из сорс голую систему, пихаю в проект, правлю конфиг, настраиваю свою периферию, запускаю vTaskStartScheduler() и поехали? Дальше останется только добавлять таски? vTaskStartScheduler() возвращает управление только при ошибках либо если какая-то задача принудительно останавливает планировщик, поэтому хотя бы одну свою задачу стоит создавать ДО её вызова Quote Share this post Link to post Share on other sites More sharing options...
MiklPolikov 0 April 10, 2015 Posted April 10, 2015 · Report post Выскажусь тоже. С тех пор, как я попробовал использовать RTOS (scmRTOS) в микроконтроллерах, я делаю все проекты только с RTOS. Сейчас, когда приходится возвращаться к старым безосевым проектам для сопровождения, ужасаюсь этой мешанине коллбэков, машин состояний, конечных автоматов и вызовов их обработчиков из суперлупа:) У меня такое же впечатление о FreeRTOS. Разработку очень сильно упростилась. На столько, что взял за правило делать автоматическую генерацию отчёта об ошибках. Из минусов - расход операционной памяти больше в разы. Но я успокаиваю себя тем, что делать то же самое без ОС на процессоре послабее это в наше время резьба по калу. Недавно до конца освоил спящие режимы процессора. Теперь в задаче бездействия процессор уходит в разные режимы сна в зависимости от необходимой на данный момент мин.частоты. Прерывание по таймеру RTC "заводится" на время, когда должна быть пробуждена ближайшая ждущая чего-то задача. После пробуждения системное время модифицируется, что бы задачи, в которых были таймеры, не заметили засыпания. Quote Share this post Link to post Share on other sites More sharing options...
alexunder 4 April 10, 2015 Posted April 10, 2015 · Report post Мне в свое время очень помогли статьи А. Курница о FreeRTOS. Советую. Спасибо! Думаю надо с чего-то начинать, пусть будет FreeRTOS. На 51 :) Quote Share this post Link to post Share on other sites More sharing options...
Сергей Борщ 186 April 10, 2015 Posted April 10, 2015 · Report post пусть будет FreeRTOS. На 51 :)Может стоит начать с замены 51 на что-то более современное и подходящее для ОС? ;) Quote Share this post Link to post Share on other sites More sharing options...
SM 15 April 10, 2015 Posted April 10, 2015 · Report post Может стоит начать с замены 51 на что-то более современное и подходящее для ОС? ;) Вообще, переключение контекста на 51 чуть ли не самое быстрое из возможных, пока в пределах 4 банков :) Quote Share this post Link to post Share on other sites More sharing options...
AlexandrY 4 April 10, 2015 Posted April 10, 2015 · Report post Вообще, переключение контекста на 51 чуть ли не самое быстрое из возможных, пока в пределах 4 банков :) Ага, как же Во FreeRTOS из 51-х есть только Cygnal и сохранение контекста там выглядит так: /* * Macro to push the current execution context onto the stack, before the stack * is moved to XRAM. */ #define portSAVE_CONTEXT() \ { \ _asm \ /* Push ACC first, as when restoring the context it must be restored \ last (it is used to set the IE register). */ \ push ACC \ /* Store the IE register then disable interrupts. */ \ push IE \ clr _EA \ push DPL \ push DPH \ push b \ push ar2 \ push ar3 \ push ar4 \ push ar5 \ push ar6 \ push ar7 \ push ar0 \ push ar1 \ push PSW \ _endasm; \ PSW = 0; \ _asm \ push _bp \ _endasm; \ } Создатели RTOS-в вообще не выносят всяких аппаратных особенностей. В этом плане говорить что FreeRTOS под что-то заточена немного смешно. Quote Share this post Link to post Share on other sites More sharing options...