реклама на сайте
подробности

 
 
> Два потока на си
sergey sva
сообщение Sep 10 2008, 12:53
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Как на си реализовать два потока, без использования ОС ? к примеру таймер 0 вызывает
программу обработки прерываний, в который происходит переключение между потоками.
Может что прочитать посоветуете или ссылку дадите.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rst7
сообщение Sep 24 2008, 16:31
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
ИМХО, это не от "камня" зависит


Если смущает модификатор __raw (а это единственная вещь в приведенном коде, характерная для IAR'а, хотя, имеющая аналог, например, в GCC) - так он только для того, чтобы уменьшить время нахождения в состоянии с запрещенными прерываниями. Без него тоже все стреляет. А основную работу тут делают библиотечные функции setjmp/longjmp.

Объясняю, почему "камень класса AVR" - потому что нет режима супервизора. На ARM, например, метод тоже имеет право на существование, но либо в виде принудительного переключения на другой поток (типа yield()), либо с отдельным костылем (возможно на асме, возможно intrinsic-функцией компилятора, если таковая существует) для сохранения и восстановления User Mode SP в процедуре IRQ.

Аналогичный код с принудительным переключением прекрасно работает на x86 (однако, например MSVC слишком умный, он по longjmp уничтожает все объекты, созданные в стеке, посему работу с setjmp/longjmp надо выносить в отдельный файл, который собирать в режиме C, а не C++).

PS Доктор, Вы теперь в каждой теме считаете нужным отписаться, а вдруг флуд поднимется?


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 19:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01379 секунд с 7
ELECTRONIX ©2004-2016