-
- В FreeRTOS и честный TLS реализовать нетрудно и обойтись без него - тоже не проблема. Каждому потоку при старте передается указатель pvParameters. Собственно он и есть маленький TLS. Замена для malloc тоже есть (heap_x.c). В общем проблемы LightElf(18 знак., 27.11.2013 09:09 - 09:31)
- Есть два подхода к многозадачности. Полная изоляция процессов -- у каждого свой контекст, свой набор переменных, стек и т.п. Это реализуется в unix и там ничего не нужно. Среди RTOS для МК можно отметить nuttx. Есть подход ecos-style практикуемый fk0(1416 знак., 26.11.2013 18:13)
- +100500 - plainuser(27.11.2013 13:19)
- Если используете чужую либу, то понятно, но опять-таки, если я правильно понимаю, ее придется подправить, как мин. подобавлять везде thread и перекомпилить или нет? А вот со своим полностью не согласен, иначе как работают системы построенные без aoreh(144 знак., 26.11.2013 18:19)
- Вот я и не понимаю, как работают системы без чудес. Не иначе как чудодейственным образом. Ведь прекрасно понятно, почему они работать не могут. Из чего делаю вывод, что работают они в условиях "мы библиотечные функции не используем" и до поры, до fk0(9 знак., 26.11.2013 18:42)
- ну а если эти самые библиотечные функции и нафик не упали? то как быть? - Mahagam(26.11.2013 21:58)
- ни о чем.... - aoreh(26.11.2013 19:15)
- Ну вот объясни, как оно работает, когда два потока одновременно вызывают malloc() ? Скажешь УМВР? Не о чём говорить с адептами RTOS'ов которые даже не знают как у них эти RTOS'ы (не)работают. - fk0(26.11.2013 20:11)
- Не о чем говорить с человеком, который не понимает, что malloc в частности и куча в целом никакого отношение к TLS не имеет, но утверждает, что без него никак... - aoreh(26.11.2013 20:38)
- само по себе thread в разных кмопиляторах выглядит по разному, разными ОС поддерживается по разному, в той же винде есть тонкости в разных версиях по использованию этой фишки в длл. Это что касается статик-линк версии, динамическое так вообще aoreh(137 знак., 27.11.2013 11:33 - 11:49)
- От компилятора потоки не зависят. Нужна только поддержка в libc. Как IAR, Keil и др. не знаю. В "больших" ОС всё есть. В более-менее серьёзных RTOS своя libc или её часть (или хотя бы берут newlib) где предусмотрена многопоточность. Собственно от fk0(222 знак., 27.11.2013 11:54)
- т.е. возвращаемся к тому, что если ОС нормальная и библиотека многопоточная, то можно об TLS не знать? aoreh(292 знак., 27.11.2013 12:02)
- Многопоточная библиотека в своей реализации опирается на TLS и это принципильно. А самому о TLS можно и не знать, если оно не нужно в своих задачах. TLS-переменная может просто глобальной переменной, не обязательно регистром процессора и т.п. - fk0(27.11.2013 13:15)
- Вдогонку. Глобальной переменной может быть только для одноядерных микроконтроллеров (коих пока большинство). - fk0(27.11.2013 13:29)
- В итоге спор получился ни о чем... правда может кому будет полезен с точки зрения просвещения... Я раньше не знал, что в самих компилляторах есть поддержка TLS переменных (__thread в GCC), правда пока так и не понял насколько она стандартизирована aoreh(205 знак., 27.11.2013 13:24 - 13:27)
- Многопоточная библиотека в своей реализации опирается на TLS и это принципильно. А самому о TLS можно и не знать, если оно не нужно в своих задачах. TLS-переменная может просто глобальной переменной, не обязательно регистром процессора и т.п. - fk0(27.11.2013 13:15)
- т.е. возвращаемся к тому, что если ОС нормальная и библиотека многопоточная, то можно об TLS не знать? aoreh(292 знак., 27.11.2013 12:02)
- От компилятора потоки не зависят. Нужна только поддержка в libc. Как IAR, Keil и др. не знаю. В "больших" ОС всё есть. В более-менее серьёзных RTOS своя libc или её часть (или хотя бы берут newlib) где предусмотрена многопоточность. Собственно от fk0(222 знак., 27.11.2013 11:54)
- Не о чём говорить с человеком, который не понимает, что malloc устанавливает переменную errno, которую без TLS ну никак не сделать. - fk0(27.11.2013 01:55)
- О Боже и как же мы раньше маллок использовали без столько ценной переменной.... - aoreh(27.11.2013 11:30)
- Использовали как обычно. Но странно не понимать, что это ломает работающие в соседнем потоке математические функции из math.h, где без errno бывает не обойтись. - fk0(27.11.2013 11:37)
- А свой malloc/new написать не выход разве? Который учтывает многозадачность? Apтём(263 знак., 27.11.2013 02:11)
- Задача стандартная -- делаем сразу свой процессор с аппаратным TLS... - fk0(27.11.2013 11:38, ссылка)
- О Боже и как же мы раньше маллок использовали без столько ценной переменной.... - aoreh(27.11.2013 11:30)
- само по себе thread в разных кмопиляторах выглядит по разному, разными ОС поддерживается по разному, в той же винде есть тонкости в разных версиях по использованию этой фишки в длл. Это что касается статик-линк версии, динамическое так вообще aoreh(137 знак., 27.11.2013 11:33 - 11:49)
- Не о чем говорить с человеком, который не понимает, что malloc в частности и куча в целом никакого отношение к TLS не имеет, но утверждает, что без него никак... - aoreh(26.11.2013 20:38)
- Ну вот объясни, как оно работает, когда два потока одновременно вызывают malloc() ? Скажешь УМВР? Не о чём говорить с адептами RTOS'ов которые даже не знают как у них эти RTOS'ы (не)работают. - fk0(26.11.2013 20:11)
- Вот я и не понимаю, как работают системы без чудес. Не иначе как чудодейственным образом. Ведь прекрасно понятно, почему они работать не могут. Из чего делаю вывод, что работают они в условиях "мы библиотечные функции не используем" и до поры, до fk0(9 знак., 26.11.2013 18:42)
- Я бы тоже не сказал что существенно. Но у fk0 видимо есть аргУменты про TLS. Он даже их кажется приводил...но я не помню где... - Apтём(26.11.2013 17:49)