SergeyVas 0 12 декабря, 2013 Опубликовано 12 декабря, 2013 · Жалоба Подскажите как реализовать такое, может примеры есть. Нужны три функции main0 main1 main2 Выполняться должны по очереди например 1000 тактов процессора main0, следующие 1000 main1.. выполняться должны не до конца, а останавливаться в любой точке как счетчик отсчитает 1000 тактов,с сохранением всех данных, с последующем их восстановлением. Думаю это нужно делать в startup на asm. Все это нужно сделать на платке с процессором imx233. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 12 декабря, 2013 Опубликовано 12 декабря, 2013 · Жалоба Тут наверное требуется РТОС c соответствующим планировщиком... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyVas 0 12 декабря, 2013 Опубликовано 12 декабря, 2013 · Жалоба Тут наверное требуется РТОС c соответствующим планировщиком... Хотелось бы попроще, ртос из за трех функций, ну если только она будет на одном листе кода. ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 12 декабря, 2013 Опубликовано 12 декабря, 2013 · Жалоба Подскажите как реализовать такое, может примеры есть. Нужны три функции main0 main1 main2 Выполняться должны по очереди например 1000 тактов процессора main0, следующие 1000 main1.. выполняться должны не до конца, а останавливаться в любой точке как счетчик отсчитает 1000 тактов,с сохранением всех данных, с последующем их восстановлением. Думаю это нужно делать в startup на asm. Все это нужно сделать на платке с процессором imx233. SoC на ARM9 это не DSP. Тут +-1000 тактов уже можно промахнуться только из-за непопаданий в кэш. Крайне неудачная затея. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyVas 0 12 декабря, 2013 Опубликовано 12 декабря, 2013 · Жалоба Не приходилось ничего подобного делать. Такой алгоритм не будет работать?, крутиться цикл в нем идет счет, после отсчета 1000 циклов, сохранить состояние всех регистров счетчик команд ... после записать в счетчик команд адрес следующей функции и востановить все регистры .... отсчитать еще 1000 тактов.? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aoreh 0 12 декабря, 2013 Опубликовано 12 декабря, 2013 (изменено) · Жалоба Не приходилось ничего подобного делать. Такой алгоритм не будет работать?, крутиться цикл в нем идет счет, после отсчета 1000 циклов, сохранить состояние всех регистров счетчик команд ... после записать в счетчик команд адрес следующей функции и востановить все регистры .... отсчитать еще 1000 тактов.? вы хотите реализовать ОС с раунд-робин щедулером (точнее эту часть ос) Потом у вас станет вопрос обмена информацией между мэйнами и вы вспомните про примитивы синхронизации, так потихоньку и получится простенька ос типа FreeRTOS и ей подобным Изменено 12 декабря, 2013 пользователем aoreh Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyVas 0 12 декабря, 2013 Опубликовано 12 декабря, 2013 · Жалоба Понятно, все таки удобнее будет использовать ртос. сейчас посмотрю, что пишут freertos. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 12 декабря, 2013 Опубликовано 12 декабря, 2013 · Жалоба Не приходилось ничего подобного делать. Такой алгоритм не будет работать?, крутиться цикл в нем идет счет, после отсчета 1000 циклов, сохранить состояние всех регистров счетчик команд ... после записать в счетчик команд адрес следующей функции и востановить все регистры .... отсчитать еще 1000 тактов.? Это обычные прерывания. Средний джиттер в пару десятков тактов будет (иногда больше), но реализация примитивнейшая. Запускаете 3-и compare канала в таймерах. Каждый вызывает свое прерывание в которых выполняются задачи, каждая со своим стеком. Возврата из прерывание не нужно. Просто каждое следующее прерывание восстанавливает свой стек и разрешает прерывание для следующей задачи. И так они и прерывают друг друга бесконечно. Но надо знать какие регистры требуют сохранения состояния, а какие нет. Если задачи написаны на C-и. Поэтому лучше действительно посмотреть, как делается переключение контекста в RTOS uCOS-II Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 12 декабря, 2013 Опубликовано 12 декабря, 2013 · Жалоба а как быстро кончиться стэк если каждое прерывание будет вызывать из другого и никогда не возвращаться? и как новое вызвавшееся прерывание узнает на какой команде прекратило свою работу прошлый его предок? вот ни разу это не обычные прерывания... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 12 декабря, 2013 Опубликовано 12 декабря, 2013 · Жалоба а как быстро кончиться стэк если каждое прерывание будет вызывать из другого и никогда не возвращаться? и как новое вызвавшееся прерывание узнает на какой команде прекратило свою работу прошлый его предок? Есть такая вещь как переключение стека ;) Сохраняете контекст задачи (все регистры) на стеке задачи, переключаетесь на стек следующей задачи, восстанавливаете её регистры... И так по кругу... вот ни разу это не обычные прерывания... Не знаю как на imx, но на ARM7/9 и Cortex вполне себе обычное. На ARM-ах и Cortex-ах реализация на асм пишется на раз. Про джиттер AlexandrY правильно сказал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyVas 0 12 декабря, 2013 Опубликовано 12 декабря, 2013 · Жалоба imx это тоже arm9 arm926ej-s. Тоже подумал что не должно быть сложно, попробую вначале без ос обойтись, если не получиться тогда уже буду смотреть на freertos. Может какие примеры есть давайте любые ссылки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 12 декабря, 2013 Опубликовано 12 декабря, 2013 · Жалоба Не знаю как на imx, но на ARM7/9 и Cortex вполне себе обычное. На ARM-ах и Cortex-ах реализация на асм пишется на раз. Про джиттер AlexandrY правильно сказал. у меня другие понятия обычности получается:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aoreh 0 12 декабря, 2013 Опубликовано 12 декабря, 2013 · Жалоба imx это тоже arm9 arm926ej-s. Тоже подумал что не должно быть сложно, попробую вначале без ос обойтись, если не получиться тогда уже буду смотреть на freertos. Может какие примеры есть давайте любые ссылки. так а че там не получится, получится, конечно, не боги писали ртосы. просто вопрос в целях-времени, а сложного, конечно, ничего там нет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться