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

 
 
> Функции setjmp/longjmp
_Артём_
сообщение Jan 18 2012, 22:28
Сообщение #1


Гуру
******

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



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


;
******

Группа: Участник
Сообщений: 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
Сообщение #3


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

Группа: Свой
Сообщений: 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
_Артём_
сообщение Jan 19 2012, 12:16
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #5


Гуру
******

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



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


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
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #8


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
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #10


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
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 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
dxp
сообщение Jan 24 2012, 15:02
Сообщение #12


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
_Артём_
сообщение Jan 24 2012, 20:50
Сообщение #13


Гуру
******

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



Цитата(dxp @ Jan 24 2012, 17:02) *
Единственным более-менее обоснованным аргументом для сознательного отказа/запрета С++ в этом случае является использование каких-то жизненно необходимых "плюшек", которые есть в С и которых нет в С++ - например, incomplete arrays.

Думаю не тот случай...
Попытался собрать проект примера в первоначальном виде (С99/AT90S4433 - эта древность ещё выпускается? Смысл делать пример на таком).
Тоже ошибки.
Цитата
Error[e12]: Unable to open file 'C:\Program Files\IAR Systems\Embedded Workbench 6.0\avr\LIB\CLIB\cl0t.r90'
Go to the top of the page
 
+Quote Post
dxp
сообщение Jan 25 2012, 12:09
Сообщение #14


Adept
******

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



QUOTE (_Артём_ @ Jan 25 2012, 03:50) *
Попытался собрать проект примера в первоначальном виде (С99/AT90S4433 - эта древность ещё выпускается? Смысл делать пример на таком).
Тоже ошибки.

Так это линкер ругается на то, что не хватает библиотеки. Либо IAR надо поменять, либо МК на тот, для которого есть библиотека.


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

Сообщений в этой теме
- _Артём_   Функции setjmp/longjmp   Jan 18 2012, 22:28
- - Idle   гугли "cooperative multitasking longjump...   Jan 19 2012, 05:32
|- - _Pasha   Цитата(ReAl @ Jan 19 2012, 13:00) Чтобы п...   Jan 19 2012, 10:24
|- - _Артём_   Цитата(dxp @ Jan 25 2012, 14:09) Так это ...   Jan 25 2012, 13:20
|- - dxp   QUOTE (_Артём_ @ Jan 25 2012, 20:20) ...   Jan 26 2012, 04:04
|- - _Артём_   Цитата(dxp @ Jan 26 2012, 06:04) Ну, так ...   Jan 26 2012, 05:11
- - _Pasha   Посмотрел на ужас низкоуровневого подхода в портах...   Jan 24 2012, 13:24


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

 


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


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