Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2019-май-25 20:36

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу Пред.  1, 2 Все
Автор Сообщение
 Заголовок сообщения: Re: ОСРВ МАКС
СообщениеДобавлено: 2019-май-14 16:05 
Не в сети

Зарегистрирован: 2019-апр-23 17:27
Сообщения: 17
andelie писал(а):
Заинтересовался темой и заглянул в ихнее руководство программиста (https://www.astrosoft.ru/upload/rtos-ma ... mmista.pdf).

Цитата:
3.2.2.6. Метод Delay
Данный статический метод выполняет задержку выполнения задачи с блокировкой ее
планирования на время timeout_m
s.
Аргумент timeout_ms определяет величину задержки в миллисекундах.
Прототип:
Код:
static Result Delay(uint32_t timeout_ms);


Пример из этого же описания:
Цитата:
Код:
void Task1::Execute()
{
puts("Task1 is running");
while (true)
{
puts("Task2 is running");
Task* task = new Task2();
Add(task, Task::PriorityNormal, 0x50);
Delay(700);
puts("Task2 delete");
task->Delete();
}
}




Может так получится?

В исходнике под Cortex M3 у них этот метод так реализован:

Код:
Result Task::Delay(uint32_t timeout_ms)
{
   return Sch().BlockCurrentTask(timeout_ms);
}


Похоже действительно к планировщику обращаются.



Ппц.
У меня не такая ОСЬ.
И не на плюсах.
Чистый си.

Миладр, расскажите пожалуйста в что тут происходит?
У меня ось поставлена исключительно в бинорном виде. И есть всего 3 хэдера.(в скрине)
И это всё.
Пользуюсь самой новой версией CM-LYNX.


Вложения:
Capture.PNG
Capture.PNG [ 13.47 КБ | Просмотров: 148 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОСРВ МАКС
СообщениеДобавлено: 2019-май-14 16:07 
Не в сети

Зарегистрирован: 2014-июн-25 09:29
Сообщения: 115
Тогда извиняюсь, видимо, я не в свое дело полез :oops: .


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОСРВ МАКС
СообщениеДобавлено: 2019-май-14 17:01 
Не в сети

Зарегистрирован: 2014-авг-15 11:04
Сообщения: 89
Откуда: Миландр
МАКС для Cortex и МАКС для 1967 это далеко не близнецы-братья :)
Я почитал на хабре хорошую статью для чайников про МАКС. Но для
этого процессора, насколько я понимаю, еще много чего не сделано.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОСРВ МАКС
СообщениеДобавлено: 2019-май-14 17:19 
Не в сети

Зарегистрирован: 2014-авг-15 11:04
Сообщения: 89
Откуда: Миландр
по поводу того что выполняется только один поток.
Если самому не лезть в приоритеты , то приоритеты по умолчанию одинаковы и
все потоки должны работать. Если только какой-нибудь поток не блокирнет случайно прерывания и не
вырубит ОС :) Кстати, я не нашел нигде в доке как менять период тиков для ОС.
Пришлось из приложения поменять период 0-го таймера.
Немного подумал над вопросом о реализации задержек и не придумал ничего толкового :)
Не понимаю как в вытесняющей многозадачности как-то точно делать какие-то задержки.
В своих экспериментах я реализовал на RTC 64-разрядный счетчик (чтобы отвязаться от частоты PLL )
и задержку считал как смещение от этого счетчика. При этом если поток не достиг истечения задержки,
то я его переводил в IDLE. т.е. отдавал время не другому потоку(т.к. не знаю как отдать) , а просто экономил электроэнергию.
ОС с некоторым периодом пробуждает поток который ждет задержку и поток повторяет проверку "пора работать или
еще поспать". Итого, чем меньше период тиков для ОС, а также чем меньше потоков, тем точнее задержка.
Поморгать светодиодами получается, но как сделать что-то реальное не знаю :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОСРВ МАКС
СообщениеДобавлено: 2019-май-14 18:20 
Не в сети

Зарегистрирован: 2014-авг-15 11:04
Сообщения: 89
Откуда: Миландр
Анисимов Александр писал(а):
Миладр, расскажите пожалуйста в что тут происходит?
У меня ось поставлена исключительно в бинорном виде. И есть всего 3 хэдера.(в скрине)
И это всё.
Пользуюсь самой новой версией CM-LYNX.
Автора ОС легко узнать. Это не Миландр.
Бинарник ОС, я так понимаю, бонус к CM-LYNX :) Но чтобы точно что-то узнать,
нужно писать в техподдержку.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОСРВ МАКС
СообщениеДобавлено: 2019-май-15 09:29 
Не в сети

Зарегистрирован: 2014-авг-15 11:04
Сообщения: 89
Откуда: Миландр
Получилось реализовать задержки с помощью семафоров.
Использование семафора позволяет усыплять поток. Код , который пробуждает ждущий поток,
включил в ОС, используя подмену вектора прерываний таймера 0.
При срабатывании вектора, вызывается код который смотрит нет ли в массиве задержек активных значений.
Если нет, то управление передается в ОС.
Если задержки есть, то проверяется истечение времени задержки.
Если какая-то задержка завершилась, то активируется соответствующий ей семафор
j4 = адрес указателя на созданный семафор;;
cjmp = __ZN4macs9Semaphore6SignalEv;; // название функции в sem_post
CJMP_CALL (abs) (np) ;;
Задача, ждущая этот семафор, реально активируется.
Если просто увеличить счетчик семафора то никакой реакции от спящего потока.
Только через вызов sem_post().


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу Пред.  1, 2 Все

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB