Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Некорректно.
Отправлено
vitalyn 01 февраля 2008 г. 11:34
В ответ на:
Возврат из функции в С... отправлено
<font color=gray>DC</font> 01 февраля 2008 г. 11:16
Ты делаешь очень сильное предположение о том, что SP у тебя не изменится. Это справедливо только для совсем простой системы, когда тебе просто не нужны такие извраты - ничто не мешает в одном цикле проверять поступление байтов и состояние счётчика, вываливаясь с разным кодом возврата в соответствующих случаях. В более-менее сложных программах крайне некорректно таким образом манипулировать с указателем стека.
Прекращать процесс из прерывания можно только в многозадачных ОС, и то, для этого требуется специальные фичи. Например, семафор с таймаутом. Задача становится на ожидание на семафоре, который взведут либо обработчик прерываний приёма байтов, либо обработчик прерывания от таймера. Проснувшаяся задача смотрит, по какой причине она проснулась, не тратя процессорного времени на поллинг.
Другой вариант. Задача тратит время на поллинг, а обработчик прерываний от таймера по таймауту меняет контекст соответствующего процесса, так что когда произойдёт возврат из прерывания, управление будет передано на возврат в main(). Это менее красивое решение.
Составить ответ | Вернуться на конференцию
Ответы