-
- Так все равно полное сохранения контекста требуется. Почему обязательно нужно избегать шедуллера? По-моему, его поставить проще, чем мудрить над чем-то подобным, но чтобы оно шедуллером при этом не являлось. - st256(12.09.2015 13:03)
- Ответ - размер контекста. В первую очередь, локальные переменные в стеке. Под них нужно выделять место "с запасом". Посмотрите protothreands, контекст - строго сколько нужно, ни байтом больше. - Скрипач(12.09.2015 13:06)
- Локальные переменные уже и так в стеке. Или это для - "имитации замыкания&(12.09.2015 23:55, )
- (↴) - Скрипач(13.09.2015 13:45)
- Вообщето переменные в стеке никуда не сохраняются. Просто у каждой задачи свой стек, господин программист с Украины. - st256(12.09.2015 14:47)
- И какой размер у этого "своего стека", господин ездок по заграницам? - Скрипач(12.09.2015 15:07)
- 16-18 см. - Крок(13.09.2015 14:33)
- ...глубина? - Хи-хи(13.09.2015 15:44, )
- от количества регистров зависит. Обычно 100-200 слов. - st256(12.09.2015 15:17)
- ~10 задач. стек по большей части в районе 30-70 слов. сложная задача сожрала ~230. (ARM9) - Mahagam(12.09.2015 15:22)
- ...а от вложенности вызовов не зависит? Или это уже не контекст? :) - Скрипач(12.09.2015 15:21)
- ну на задачу, в среднем, по 10 слов. При глубине вложения 10, как раз 100 слов и набирается. Плюс РОНы и контрольные регистры. Итого - 200. - st256(12.09.2015 15:24)
- А так 100. Разница есть? - Скрипач(12.09.2015 15:29)
- Не понял? - st256(12.09.2015 15:31)
- Разница между 100 и 200 есть, спрашиваю? Скрипач(169 знак., 12.09.2015 15:33 - 15:37)
- Регистры сохраняются все. Ибо прерывание происходит в совершенно неожиданный момент, что там в эту секунду будет твориться, какие задачи выполняться никто предсказать не может. Либо тогда должен иметь место запрет на использование некоторых st256(37 знак., 12.09.2015 18:45)
- Ну так а я о чем? Экономия. - Скрипач(12.09.2015 21:17)
- На ATtiny12 никто и не собирается операционку запускать. - _basile(15.09.2015 17:52, )
- На attiny13 запиливал многозадачку. Часть глобальных переменных разложил по регистрам (WinAVR умеет) и таким макаром сократил потребный объем стека. - LightElf(15.09.2015 19:08)
- Кратко скажите, пожалуйста, как сказать это winavr? - symbions(16.09.2015 01:05)
- как-то так - LightElf(16.09.2015 10:52, ссылка)
- спасибо, ещё бы списко, какие регистры нельзя использовать (или не рекомендуется) - вообще было бы замечательно - symbions(16.09.2015 14:40)
- Не помню, давно уже
не брал в руки шашекAVR не использую - LightElf(16.09.2015 16:10)- Да и так очень хорошо - то всё читать не очень хотелось. Ну а более 2-3 регистров мне вряд ли понадобится. - symbions(16.09.2015 21:12)
- Не помню, давно уже
- спасибо, ещё бы списко, какие регистры нельзя использовать (или не рекомендуется) - вообще было бы замечательно - symbions(16.09.2015 14:40)
- как-то так - LightElf(16.09.2015 10:52, ссылка)
- Кратко скажите, пожалуйста, как сказать это winavr? - symbions(16.09.2015 01:05)
- На attiny13 запиливал многозадачку. Часть глобальных переменных разложил по регистрам (WinAVR умеет) и таким макаром сократил потребный объем стека. - LightElf(15.09.2015 19:08)
- На ATtiny12 никто и не собирается операционку запускать. - _basile(15.09.2015 17:52, )
- Ну так а я о чем? Экономия. - Скрипач(12.09.2015 21:17)
- Регистры сохраняются все. Ибо прерывание происходит в совершенно неожиданный момент, что там в эту секунду будет твориться, какие задачи выполняться никто предсказать не может. Либо тогда должен иметь место запрет на использование некоторых st256(37 знак., 12.09.2015 18:45)
- Разница между 100 и 200 есть, спрашиваю? Скрипач(169 знак., 12.09.2015 15:33 - 15:37)
- Не понял? - st256(12.09.2015 15:31)
- А так 100. Разница есть? - Скрипач(12.09.2015 15:29)
- ну на задачу, в среднем, по 10 слов. При глубине вложения 10, как раз 100 слов и набирается. Плюс РОНы и контрольные регистры. Итого - 200. - st256(12.09.2015 15:24)
- 16-18 см. - Крок(13.09.2015 14:33)
- И какой размер у этого "своего стека", господин ездок по заграницам? - Скрипач(12.09.2015 15:07)
- Да и часто используемые локальные переменные можно сделать static, а некоторые и глобально объявить. - Make_Pic(12.09.2015 13:33)
- Та нафига, рагаццо? Стек подменить значительно дешевле во всех смыслах. - st256(12.09.2015 14:49)
- Сколько нужно памяти на стек? Вдруг кто-то qsort() вызовет чтоб несколько тысяч элементов отсортировать? А памяти в мелком МК хватит на 50 задач, если в каждой qsort и не менее 8КБайт стека нужно? - fk0(12.09.2015 14:51)
- Красиво, но sqrt нереентрантна)) - Олдфаг(12.09.2015 15:09, )
- Тьфу, слслепу перепутал qsort и sqrt. Хотя какая разница. - Олдфаг(12.09.2015 15:13, )
- Столько же, сколько нужно на локальные переменные в обычной задаче. - st256(12.09.2015 14:54)
- На локальные переменные нужно десятки байт. А на стек -- килобайты. На каждую задачу. Потому и protothreads, что стек общий. - fk0(12.09.2015 14:57)
- Хватит чушь нести. Я чо планировщики никогда не писал? - st256(12.09.2015 15:00)
- Ты на вопрос ответь. Сколько памяти нужно на стек в килобайтах, для конкретной задачи. При том, что она вызывает тяжёлые функции из либц, и т.п. Не десятки байт же? Вот в linux менее 4КБайт и не выйдет, а практически нужно несколько страниц, fk0(94 знак., 12.09.2015 15:02)
- === Ты на вопрос ответь. Сколько памяти нужно на стек в килобайтах, для конкретной задачи. st256(688 знак., 12.09.2015 15:15)
- Опять сказки уровня ассемблера. Короче, стек менее единиц килобайт -- не бывает. В нормальных условиях. Поэтому для embedded-задач, характеризующихся сильной параллельностью управляющих алгоритмов (десятки-сотни параллельных процессов) интересны fk0(218 знак., 12.09.2015 15:21)
- Вот вам МК с 64 метрами DDR SDRAM на борту. Ни в чём себе не отказывайте --> - SciFi(16.09.2015 22:06, ссылка)
- прикольные наблюдения. это, видимо, у любителей стандартных библиотек такой нажор стека, у меня из десятка потоков почти все жрут до сотни регистро-мест. и только одна занудная матзадача жрёт больше. - Mahagam(16.09.2015 21:35)
- Заметано. - st256(12.09.2015 15:30)
- Опять сказки уровня ассемблера. Короче, стек менее единиц килобайт -- не бывает. В нормальных условиях. Поэтому для embedded-задач, характеризующихся сильной параллельностью управляющих алгоритмов (десятки-сотни параллельных процессов) интересны fk0(218 знак., 12.09.2015 15:21)
- === Ты на вопрос ответь. Сколько памяти нужно на стек в килобайтах, для конкретной задачи. st256(688 знак., 12.09.2015 15:15)
- Ты на вопрос ответь. Сколько памяти нужно на стек в килобайтах, для конкретной задачи. При том, что она вызывает тяжёлые функции из либц, и т.п. Не десятки байт же? Вот в linux менее 4КБайт и не выйдет, а практически нужно несколько страниц, fk0(94 знак., 12.09.2015 15:02)
- Хватит чушь нести. Я чо планировщики никогда не писал? - st256(12.09.2015 15:00)
- На локальные переменные нужно десятки байт. А на стек -- килобайты. На каждую задачу. Потому и protothreads, что стек общий. - fk0(12.09.2015 14:57)
- Красиво, но sqrt нереентрантна)) - Олдфаг(12.09.2015 15:09, )
- Сколько нужно памяти на стек? Вдруг кто-то qsort() вызовет чтоб несколько тысяч элементов отсортировать? А памяти в мелком МК хватит на 50 задач, если в каждой qsort и не менее 8КБайт стека нужно? - fk0(12.09.2015 14:51)
- Та нафига, рагаццо? Стек подменить значительно дешевле во всех смыслах. - st256(12.09.2015 14:49)
- Локальные переменные уже и так в стеке. Или это для - "имитации замыкания&(12.09.2015 23:55, )
- Ответ - размер контекста. В первую очередь, локальные переменные в стеке. Под них нужно выделять место "с запасом". Посмотрите protothreands, контекст - строго сколько нужно, ни байтом больше. - Скрипач(12.09.2015 13:06)
- Так все равно полное сохранения контекста требуется. Почему обязательно нужно избегать шедуллера? По-моему, его поставить проще, чем мудрить над чем-то подобным, но чтобы оно шедуллером при этом не являлось. - st256(12.09.2015 13:03)