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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Функции setjmp/longjmp
_Артём_
сообщение Jan 18 2012, 22:28
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Подумалось вдруг: а нельзя ли с помощью этих функций сделать нечто вреде кооперативной ОС?
Поискал в гугле, не нашёл подобного. Почему? Плохо искал или оно для этого не приспосабливаемо?
Спасибо.
Go to the top of the page
 
+Quote Post
Idle
сообщение Jan 19 2012, 05:32
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874



гугли "cooperative multitasking longjump"
http://en.wikipedia.org/wiki/Setjmp.h#Coop...ve_multitasking
http://my.execpc.com/~geezer/code/setjmp.c
ссылок много
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 19 2012, 06:03
Сообщение #3


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(_Артём_ @ Jan 19 2012, 01:28) *
Подумалось вдруг: а нельзя ли с помощью этих функций сделать нечто вреде кооперативной ОС?

Для кооперативной - слишком шикарно выходит. Зачем там нужен полный контекст?
Вот для примочек а-ля "вытесняющая ось" на фоне общей кооперативной - это может быть.
Не всегда, правда - там, где разные указатели стеков для режимов юзер и прерывания, - не пойдет.
Но это не страшно - поскольку всё будет завязано на низкоуровневые операции, заботиться о переносимости контекстопереключателя на сабже нет смысла.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jan 19 2012, 09:00
Сообщение #4


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(_Pasha @ Jan 19 2012, 08:03) *
Для кооперативной - слишком шикарно выходит. Зачем там нужен полный контекст?
Чтобы передавать управление откуда-то из глубины вызова функций.
Для такой кооперативки стеков нужно практически как для вытеснялки.
У longjmp контекст таки немного меньше, чем полный контекст для вытеснялки, так что стеков и времени на переключение у такой коператвивки нужно меньше. Но несущественно на фоне использовани ястека самими процессами.
Поэтому я не сильно понимаю смысл таких кооперативок. Но они есть, именно на longjmp (надо таки найти в завалах у себя архив «мобильной реализации сопроцесов» из софтпанорамы года так 1993-95 — первое, что я на этом видел).



--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 19 2012, 10:24
Сообщение #5


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(ReAl @ Jan 19 2012, 13:00) *
Чтобы передавать управление откуда-то из глубины вызова функций.
Для такой кооперативки стеков нужно практически как для вытеснялки.

Но свелось жеж к некоей процедурке, с подавлением возможности рекурсивных вызовов? Понятно, что общий случай проигрывает, когда все вызваны ранее, а мы из последнего вызываем эту процедуру и пытаемся оттудава выкачать ну хоть одно событие. Но это маловероятно. Усилиями программистовsm.gif
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jan 19 2012, 12:16
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(ReAl @ Jan 19 2012, 11:00) *
Для такой кооперативки стеков нужно практически как для вытеснялки.
У longjmp контекст таки немного меньше, чем полный контекст для вытеснялки, так что стеков и времени на переключение у такой коператвивки нужно меньше.


Что так много ОЗУ надо? и экономия невелика?

Цитата(ReAl @ Jan 19 2012, 11:00) *
Поэтому я не сильно понимаю смысл таких кооперативок.



Есть ещё какие-то ограничения?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jan 22 2012, 17:16
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Чтоб но плодить темы спрошу тут.
Какие есть кооперативные OS для АВР и поддержкой С++?
Go to the top of the page
 
+Quote Post
dxp
сообщение Jan 23 2012, 07:14
Сообщение #8


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



QUOTE (_Артём_ @ Jan 23 2012, 00:16) *
Чтоб но плодить темы спрошу тут.
Какие есть кооперативные OS для АВР и поддержкой С++?

Вы имели в виду кооперативные RTOS, реализованные на С++? Скорее всего таких нет. А поддержку С++ осуществляет не ОС, а рабочая среда (компилятор и остальное). Т.ч. ничего не мешает взять писанную на С кооперативу и писать свой код на плюсах. Если уж очень хочется, то можно и вокруг сервисов ОС понаделать плюсовых обёрток.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jan 23 2012, 11:07
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(dxp @ Jan 23 2012, 09:14) *
Вы имели в виду кооперативные RTOS, реализованные на С++? Скорее всего таких нет.

Не обязательно реализованные.

Цитата(dxp @ Jan 23 2012, 09:14) *
А поддержку С++ осуществляет не ОС, а рабочая среда (компилятор и остальное).

Да согласен

Цитата(dxp @ Jan 23 2012, 09:14) *
Т.ч. ничего не мешает взять писанную на С кооперативу и писать свой код на плюсах. Если уж очень хочется, то можно и вокруг сервисов ОС понаделать плюсовых обёрток.

Поподались только оси, где прямо говорилось: С++ не поддерживается (например OSA).
А хотелось чтобы просто компилированись и работали с С++ .


Go to the top of the page
 
+Quote Post
dxp
сообщение Jan 23 2012, 16:55
Сообщение #10


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



QUOTE (_Артём_ @ Jan 23 2012, 18:07) *
Поподались только оси, где прямо говорилось: С++ не поддерживается (например OSA).
А хотелось чтобы просто компилированись и работали с С++ .

Что мешает компилировать С код компилятором С++, учитывая, что С является подмножеством С++? Попробуйте взять рабочий пример из OSA и собрать его в С++ режиме.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jan 23 2012, 17:41
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(dxp @ Jan 23 2012, 18:55) *
Что мешает компилировать С код компилятором С++, учитывая, что С является подмножеством С++?

Логично.
Отпугнули они меня этой фразой (может были у них какие-то основания для неё, не знаю):
Цитата
IAR (AVR and STM8)

Работает только в режиме C (не C++).

Оптимизация cross-call должна быть отключена.


Цитата(dxp @ Jan 23 2012, 18:55) *
Попробуйте взять рабочий пример из OSA и собрать его в С++ режиме.


Да, попытка не пытка. Попробую.

Цитата
Да, попытка не пытка. Попробую.


Боятся они ++:
Цитата
Fatal Error[Pe035]: #error directive: "OSA: This is CPLUSPLUS mode!!!" c:\osa\port\avr\osa_avr_iar.h 36

Go to the top of the page
 
+Quote Post
dxp
сообщение Jan 24 2012, 03:30
Сообщение #12


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



QUOTE (_Артём_ @ Jan 24 2012, 00:41) *
Боятся они ++:

Во, как! sm.gif Директивка-то не иаровская, а авторами вставлена. Интересно, какие для этого основания? Попробуйте её закомментарить и собрать.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jan 24 2012, 13:14
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(dxp @ Jan 24 2012, 05:30) *
Во, как! sm.gif Директивка-то не иаровская, а авторами вставлена.


Точно:
Цитата
#ifdef __cplusplus
#error "OSA: This is CPLUSPLUS mode!!!"
#endif


Цитата(dxp @ Jan 24 2012, 05:30) *
Попробуйте её закомментарить и собрать.


Собрать пока не получается: другие ошибки лезут (поменял cpu на М128, чтоб наверняка С++ можно применять)
Цитата(dxp @ Jan 24 2012, 05:30) *
Интересно, какие для этого основания?

Да, интересно.

Цитата
С является подмножеством С++

Может есть у них основания не согласится с фразой?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 24 2012, 13:24
Сообщение #14


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Посмотрел на ужас низкоуровневого подхода в портах осы. Подумалось - не проще ли такие микро-оси размещать в стартапах?
Go to the top of the page
 
+Quote Post
dxp
сообщение Jan 24 2012, 15:02
Сообщение #15


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



QUOTE (_Артём_ @ Jan 24 2012, 20:14) *
Может есть у них основания не согласится с фразой?

Строго говоря, С и С++ не 100% совместимы. Есть несколько моментов, где поведение отличается. Например, в отношении констант и перечислений - у С++ подход более здравый (это и понятно, он позже шёл, учёл недостатки), есть некоторые нюансы с объявлениями переменных, но в целом в С++ нет ничего такого, что требовало бы сборки кода строго по сишным правилам. Очень интересно узнать мотивы авторов на этот счёт.

Вообще, код ОС и пользовательский код почти ортогональны по языку. Например, можно взять ось, писанную на плюсах, и использовать со своим кодом, полностью написанным на С (конечно, придётся использовать выражения вроде object_name.function_name() при обращении к примитивам ОС, но я бы не назвал это использованием С++ в пользовательском коде). А можно наоборот взять написанную на С ось и лабать свой код на ++ вплоть до написания плюсовых обёрток над примитивами ОС. Единственным более-менее обоснованным аргументом для сознательного отказа/запрета С++ в этом случае является использование каких-то жизненно необходимых "плюшек", которые есть в С и которых нет в С++ - например, incomplete arrays.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 26th June 2025 - 14:37
Рейтинг@Mail.ru


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