Вопросы по многозадачности - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming

Программирование / Programming
Ищете помощи в написании программы, есть сложность в выполнении задания (в институте и т.д.), пожалуйста, спросите у нас в данном форуме и мы обязательно вам поможем.

Описание темы:Многозадачность на одном ядре

Ответ
Опции темы
Непрочитано 04.05.2012, 23:11   #1
Аватар для Хлорка
Пользователь

Автор темы (Топик Стартер) Вопросы по многозадачности

Здатуте уважаЕмые товарИщи. На языке Си (ну и хрень), конечно лучше чем асемблер, столкнулся с проблемой однопоточности. Вопрос в том, как же вообще аппаратно делают многозадачность. У меня программа компиллируется из Си в ассемблер, потом из ассемблера в HEX (прошивка). Как ни странно, но она однопоточная. Слышал в среде Keil компиллятор Си раскидывает ассемблерные блоки по-очереди из разных потоков. А на практике приходится иметь дело с перываниями. И как же тогда один стек возврата из подпрограмм будет работать в двух потоках. Т.е. один поток вызвал функцию, затем второй поток тоже вызывает функцию, первая функция заканчивается быстрее второй и адрес возврата попадает в код чужого потока?

Пока что в качестве потока использую таймерные прерывания по N мс. Затем обработчик прерывания меняет ID потока и в бесконечном цикле mein выполняется условный переход. Можно попробовать сразу в обработчике менять адрес возврата, по соответствующему потоку, но кажется Си так не умеет, надо чё-то на ассмблере мутить.
Хлорка вне форума Отправить сообщение для Хлорка с помощью ICQ Ответить с цитированием
Непрочитано 04.05.2012, 23:21   #2
Аватар для DiagoD

По умолчанию Re: Вопросы по многозадачности

какой у тебя микроконтролер?

Добавлено через 3 минуты
Я очень давно читал статью о много поточности для МК, уже даже и не помню, что там было но суть была такова, что МК не поддерживают много поточность но есть модели в которых это можно на программным образом сделать, работает эта фишка не со всеми МК.

Последний раз редактировалось DiagoD; 04.05.2012 в 23:25. Причина: Добавлено сообщение
DiagoD вне форума Отправить сообщение для DiagoD с помощью ICQ Отправить сообщение для DiagoD с помощью Skype™ Ответить с цитированием
Непрочитано 05.05.2012, 14:52   #3
Аватар для Хлорка
Пользователь

Автор темы (Топик Стартер) Re: Вопросы по многозадачности

Цитата:
Сообщение от DiagoD Посмотреть сообщение
какой у тебя микроконтролер?
AVR 8bit

Цитата:
Сообщение от DiagoD Посмотреть сообщение
Я очень давно читал статью о много поточности для МК, уже даже и не помню, что там было
Дай ссылку.

Цитата:
Сообщение от DiagoD Посмотреть сообщение
МК не поддерживают много поточность но есть модели в которых это можно на программным образом сделать, работает эта фишка не со всеми МК.
Ну это возможно на ARM7-9 и Cortex-е - 32-х битных процах поддерживается. Может где-то и на 16-ти битных. Но использовать такие аппаратные вещи для какой-то мелочной задачи экономически нецелесообразно.

Взгляни, например, на музыкальные центры, там стоят такие же слабые МК, причем успеват все делать и команды обработать и лампочками одновременно помигать и время на экране считать.

Хлорка подумала и вот что решила. Можно попробовать реализовать такую функцию через прерывания таймера, как ранее, но обработчик прерываний будет менять (swap) объекты обработки (задачи) местами по-очереди. При этом в объект задачи должны хранится экземпляры ID-потока и его стек. Т.е. подмена не адреса возврата для какого-то потока, а целого стека. Наверно можно столкнуться с проблемой нехватки оперативки и предварительного его резервирования, но это решаемо куда меньшими затратами. В любом случае наверно тут понядобятся ассеблерные вставки, а я его не люблю.
Хлорка вне форума Отправить сообщение для Хлорка с помощью ICQ Ответить с цитированием
Ответ

Метки
assembler


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Вопросы v 1.1] Danko153 Perfect World 3 27.04.2012 12:02
Вопросы? Perios Lineage II 17 29.09.2010 12:25
Вопросы по WE cezar Создание карт 0 06.12.2008 23:35


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 00:39. Часовой пояс GMT +3.

Вверх