Перейти к содержанию
    

Всем доброго времени суток!

Мне нужно реализовать планировщик задач. Для начала самый простой: без приоритетов через квант времени переключать два какие-нибудь процесса.

p.s. извините что если это глупый вопрос)

Изменено пользователем Новичек

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в чём сложность-то? Заводите области сохранения регистров для каждого из потоков, а также счётчик времени до истечения кванта текущего потока. Настраиваете прерывания от таймера. При каждом прерывании счётчик уменьшается. Когда достиг нуля -- регистры текущего потока записываются в его область сохранения, устанавливается новое значение счётчика, из области сохранения другого потока загружаются его регистры -- и всё.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем доброго времени суток!

Мне нужно реализовать планировщик задач. Для начала самый простой: без приоритетов через квант времени переключать два какие-нибудь процесса.

p.s. извините что если это глупый вопрос)

Так Вы свою хотите написать или выбрать из имеющихся?

Свою писать не советую, если нужно сложнее чем суперлуп. Если не суперлуп а с переключением контекста- то опять же почему не взять уже готовую, их много.

Не нужно велосипед изобретать, сэкономленное время еще пригодится для других глупостей :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня курсовая работа. Научник сказал написать планировщик. Как я понял за основу нужно взять freeRTOS (как бы все кроме планировщика).

Я не очень хорошо программирую. Я не могу понять к примеру от куда, как взять квант времени.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не очень хорошо программирую. Я не могу понять к примеру от куда, как взять квант времени.

По первому вопросу - Керниган и Ричи "Язык Си".

По второму - квант времени можно задать только таймером. В любой микропроцессорной системе хотябы один таймер найдется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня курсовая работа. Научник сказал написать планировщик. Как я понял за основу нужно взять freeRTOS (как бы все кроме планировщика).

Я не очень хорошо программирую. Я не могу понять к примеру от куда, как взять квант времени.

 

Квант времени не берут, а задают или ждут.

Задается квант один раз при инициализации какого либо таймера который может генерировать прерывания.

В STR912fw44 я использовал для этих целей таймер часов реального времени (RTC).

 

У меня есть порт uCOS-II на STR912fw44.

Рекомендую изучать uCOS-II.

Эта RTOS гораздо легче(яснее) написана чем FreeRTOS, лучше откоментирована и документирована.

Из нее проще будет вычленить планировщик и сделать рефакторинг.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Квант времени не берут, а задают или ждут.

Задается квант один раз при инициализации какого либо таймера который может генерировать прерывания.

В STR912fw44 я использовал для этих целей таймер часов реального времени (RTC).

 

У меня есть порт uCOS-II на STR912fw44.

Рекомендую изучать uCOS-II.

Эта RTOS гораздо легче(яснее) написана чем FreeRTOS, лучше откоментирована и документирована.

Из нее проще будет вычленить планировщик и сделать рефакторинг.

AlexandrY могу ли я с вами связаться по почте или каким либо другим образом т.к. л/c не могу написать (выдает ошибку)? Моя почта [email protected].

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Где можно скачать uCOS-II? Никак не могу найти.

На сайте Micrium-а можно скачать исходники.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Помогите создать проект в Keil для str912 мигания светодиода. Может быть нужно подключить какие нибудь уже ненаписанные библиотеки для данного МК?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Помогите создать проект в Keil для str912 мигания светодиода. Может быть нужно подключить какие нибудь уже ненаписанные библиотеки для данного МК?

 

Вот выложил порт UCOSII для STR912

Порт сделан для моей платформы, схема и плата есть в том же архиве.

Там же есть и файловая система от Keil и TCP стек от Micrium.

Есть тесты Dhrystone и Whetstone.

Ну и конечно моргание светодиодом. :biggrin:

Но по STR912 я не консультирую, так как перестал ими заниматься уже несколько лет.

 

Скачиватель может ругнуться, так как в архиве есть .exe файл микриума для тестирования быстродействия TCP/IP протокола - PCATTCP.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо Александр.

Как я понял там 3 проекта: Flash, Ram, extRam. Когда компилируешь выдает кучу ошибок. Мне кается что в проектах не хватает файлов Ekernel и EkernelComps. Можешь ещё сказать какие файлы что означает а то я их открываю и голова сразу взрывается... Не понимаю как связь организована между ними и что каждый из них может делать. Какие из этих файлов представляют особую важность для начального освоения. с чего начать? может быть где то лежит документация на русском что означают сокращения? Можете ещё объяснить как по схеме что нибудь понять) хот бы одну логическую цепочку.

p.s. где мигалка то? ))) и какие файлы для её работы необходимы?

Изменено пользователем Новичек

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо Александр.

Как я понял там 3 проекта: Flash, Ram, extRam. Когда компилируешь выдает кучу ошибок. Мне кается что в проектах не хватает файлов Ekernel и EkernelComps. Можешь ещё сказать какие файлы что означает а то я их открываю и голова сразу взрывается... Не понимаю как связь организована между ними и что каждый из них может делать. Какие из этих файлов представляют особую важность для начального освоения. с чего начать? может быть где то лежит документация на русском что означают сокращения? Можете ещё объяснить как по схеме что нибудь понять) хот бы одну логическую цепочку.

p.s. где мигалка то? ))) и какие файлы для её работы необходимы?

 

Эт потому что взялись компилировать последним Keil-ом, а я ж говорил, что проект старый. Значит и компилировать надо старыми тулсами. :biggrin:

Но ничего, я исправил. Снова скачайте по старой ссылке.

Keil в последних своих хидерах RTL.h взялся объявлять BSD сокеты, а в проекте они уже были в TCP стеке микриума.

Ekernel я убрал чтоб не мешал, это был движок логического контроллера.

 

Еще я добавил схему верхней платы поскольку светодиоды находились на ней. Платы связаны через 40-а пиновый разъем X5 (на main board) и X14 (на AddOn board).

Светодиоды управляются с помощью микросхемы расширителя портов по I2C (U5 на AddOn board, MCP23016-I/SS). I2C идет по линиям SDA1, SCL1 на контакты 13, 14 разъема X14 (на AddOn board) и приходит к микроконтроллеру (U2, STR912FW44X6) на ноги 33, 35 на main board.

 

Все начинается с файла app.c, там процедура main. В ней создается задача AppManTask в которой инициализируется расширитель портов, драйвер UART, виртуальный COM порт по USB, WEB сервер, VT100 терминал и проч. и кроме этого создается задача LedTask в которой то и производится циклическое включение и выключение всех светодиодов.

 

Сама RTOS находится в директории UCOS. Я ее скомпилировал в библиотеку. Там найдете проект для компиляции библиотеки.

Тут же и самый важный и самый хитрый и самый критичный файл RTOS - os_cpu_a.asm.

Это ручная работа, которая выполняется для каждой платформы индивидуально, переключатель контекстов RTOS. От надежности и оптимальности этого переключателя зависит стабильность и быстродействие всей оси и то насколько быстро будут обрабатываться все прерывания.

 

На втором по важности месте находятся файлы в директории BSP. Там собраны процедуры низкоуровневой работы с периферией. В других осях их бы называли драйверами, но в UCOS нет выраженной концепции драйверов, поэтому там просто наборы функций для работы с интерфейсами, портами, таймерами и проч. В частности за работу с расширителем портов по I2C отвечает файл MCP23016_IOexp.c

 

Стек TCP микриума находится в директории TCP

В USB находится понятно все что связано с USB.

Дальше уж как нибудь сами разбирайтесь.

В проекте есть файл proj.vpw это рабочее пространство редактора SlickEdit, я всегда им пользуюсь для написания и изучения исходников. Рекомендую.

 

Проект Keil карту адресов берет из диалога в IDE.

.sct файлы не используются.

Проект грузится во Flash и выполняется с адреса 0.

Там сами смотрите STR91x_startup.s если что пойдет не так с инициализацией памяти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне нужно реализовать планировщик задач. Для начала самый простой: без приоритетов через квант времени переключать два какие-нибудь процесса.

 

COOS - предельно простая кооперативная микроось. Ни строчки на ассемблере, С и только С и ничего кроме С.

 

COOS.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...