|
|
  |
imx233 три функции main |
|
|
|
Dec 12 2013, 14:27
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 16-06-11
Пользователь №: 65 731

|
Цитата(sergey sva @ Dec 12 2013, 17:17)  Не приходилось ничего подобного делать. Такой алгоритм не будет работать?, крутиться цикл в нем идет счет, после отсчета 1000 циклов, сохранить состояние всех регистров счетчик команд ... после записать в счетчик команд адрес следующей функции и востановить все регистры .... отсчитать еще 1000 тактов.? вы хотите реализовать ОС с раунд-робин щедулером (точнее эту часть ос) Потом у вас станет вопрос обмена информацией между мэйнами и вы вспомните про примитивы синхронизации, так потихоньку и получится простенька ос типа FreeRTOS и ей подобным
Сообщение отредактировал aoreh - Dec 12 2013, 14:28
|
|
|
|
|
Dec 12 2013, 15:07
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(sergey sva @ Dec 12 2013, 16:17)  Не приходилось ничего подобного делать. Такой алгоритм не будет работать?, крутиться цикл в нем идет счет, после отсчета 1000 циклов, сохранить состояние всех регистров счетчик команд ... после записать в счетчик команд адрес следующей функции и востановить все регистры .... отсчитать еще 1000 тактов.? Это обычные прерывания. Средний джиттер в пару десятков тактов будет (иногда больше), но реализация примитивнейшая. Запускаете 3-и compare канала в таймерах. Каждый вызывает свое прерывание в которых выполняются задачи, каждая со своим стеком. Возврата из прерывание не нужно. Просто каждое следующее прерывание восстанавливает свой стек и разрешает прерывание для следующей задачи. И так они и прерывают друг друга бесконечно. Но надо знать какие регистры требуют сохранения состояния, а какие нет. Если задачи написаны на C-и. Поэтому лучше действительно посмотреть, как делается переключение контекста в RTOS uCOS-II
|
|
|
|
|
Dec 12 2013, 17:17
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Golikov A. @ Dec 12 2013, 21:26)  а как быстро кончиться стэк если каждое прерывание будет вызывать из другого и никогда не возвращаться? и как новое вызвавшееся прерывание узнает на какой команде прекратило свою работу прошлый его предок? Есть такая вещь как переключение стека  Сохраняете контекст задачи (все регистры) на стеке задачи, переключаетесь на стек следующей задачи, восстанавливаете её регистры... И так по кругу... Цитата(Golikov A. @ Dec 12 2013, 21:26)  вот ни разу это не обычные прерывания... Не знаю как на imx, но на ARM7/9 и Cortex вполне себе обычное. На ARM-ах и Cortex-ах реализация на асм пишется на раз. Про джиттер AlexandrY правильно сказал.
|
|
|
|
|
Dec 12 2013, 18:49
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 16-06-11
Пользователь №: 65 731

|
Цитата(sergey sva @ Dec 12 2013, 21:32)  imx это тоже arm9 arm926ej-s. Тоже подумал что не должно быть сложно, попробую вначале без ос обойтись, если не получиться тогда уже буду смотреть на freertos. Может какие примеры есть давайте любые ссылки. так а че там не получится, получится, конечно, не боги писали ртосы. просто вопрос в целях-времени, а сложного, конечно, ничего там нет
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|