Перейти к содержанию
    

imx233 три функции main

Подскажите как реализовать такое, может примеры есть.

Нужны три функции main0 main1 main2 Выполняться должны по очереди например 1000 тактов процессора main0, следующие 1000 main1.. выполняться должны не до конца, а останавливаться в любой точке как счетчик отсчитает 1000 тактов,с сохранением всех данных, с последующем их восстановлением. Думаю это нужно делать в startup на asm. Все это нужно сделать на платке с процессором imx233.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тут наверное требуется РТОС c соответствующим планировщиком...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тут наверное требуется РТОС c соответствующим планировщиком...

Хотелось бы попроще, ртос из за трех функций, ну если только она будет на одном листе кода. )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите как реализовать такое, может примеры есть.

Нужны три функции main0 main1 main2 Выполняться должны по очереди например 1000 тактов процессора main0, следующие 1000 main1.. выполняться должны не до конца, а останавливаться в любой точке как счетчик отсчитает 1000 тактов,с сохранением всех данных, с последующем их восстановлением. Думаю это нужно делать в startup на asm. Все это нужно сделать на платке с процессором imx233.

 

SoC на ARM9 это не DSP.

Тут +-1000 тактов уже можно промахнуться только из-за непопаданий в кэш.

 

Крайне неудачная затея.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не приходилось ничего подобного делать. Такой алгоритм не будет работать?, крутиться цикл в нем идет счет, после отсчета 1000 циклов, сохранить состояние всех регистров счетчик команд ... после записать в счетчик команд адрес следующей функции и востановить все регистры .... отсчитать еще 1000 тактов.?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не приходилось ничего подобного делать. Такой алгоритм не будет работать?, крутиться цикл в нем идет счет, после отсчета 1000 циклов, сохранить состояние всех регистров счетчик команд ... после записать в счетчик команд адрес следующей функции и востановить все регистры .... отсчитать еще 1000 тактов.?

вы хотите реализовать ОС с раунд-робин щедулером (точнее эту часть ос)

Потом у вас станет вопрос обмена информацией между мэйнами и вы вспомните про примитивы синхронизации, так потихоньку и получится простенька ос типа FreeRTOS и ей подобным

Изменено пользователем aoreh

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Понятно, все таки удобнее будет использовать ртос. сейчас посмотрю, что пишут freertos.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не приходилось ничего подобного делать. Такой алгоритм не будет работать?, крутиться цикл в нем идет счет, после отсчета 1000 циклов, сохранить состояние всех регистров счетчик команд ... после записать в счетчик команд адрес следующей функции и востановить все регистры .... отсчитать еще 1000 тактов.?

 

Это обычные прерывания.

Средний джиттер в пару десятков тактов будет (иногда больше), но реализация примитивнейшая.

Запускаете 3-и compare канала в таймерах. Каждый вызывает свое прерывание в которых выполняются задачи, каждая со своим стеком.

Возврата из прерывание не нужно. Просто каждое следующее прерывание восстанавливает свой стек и разрешает прерывание для следующей задачи.

И так они и прерывают друг друга бесконечно.

Но надо знать какие регистры требуют сохранения состояния, а какие нет. Если задачи написаны на C-и.

Поэтому лучше действительно посмотреть, как делается переключение контекста в RTOS uCOS-II

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а как быстро кончиться стэк если каждое прерывание будет вызывать из другого и никогда не возвращаться?

и как новое вызвавшееся прерывание узнает на какой команде прекратило свою работу прошлый его предок?

 

вот ни разу это не обычные прерывания...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а как быстро кончиться стэк если каждое прерывание будет вызывать из другого и никогда не возвращаться?

и как новое вызвавшееся прерывание узнает на какой команде прекратило свою работу прошлый его предок?

Есть такая вещь как переключение стека ;)

Сохраняете контекст задачи (все регистры) на стеке задачи, переключаетесь на стек следующей задачи, восстанавливаете её регистры... И так по кругу...

 

вот ни разу это не обычные прерывания...

Не знаю как на imx, но на ARM7/9 и Cortex вполне себе обычное.

На ARM-ах и Cortex-ах реализация на асм пишется на раз.

Про джиттер AlexandrY правильно сказал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

imx это тоже arm9 arm926ej-s. Тоже подумал что не должно быть сложно, попробую вначале без ос обойтись, если не получиться тогда уже буду смотреть на freertos. Может какие примеры есть давайте любые ссылки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не знаю как на imx, но на ARM7/9 и Cortex вполне себе обычное.

На ARM-ах и Cortex-ах реализация на асм пишется на раз.

Про джиттер AlexandrY правильно сказал.

 

у меня другие понятия обычности получается:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

imx это тоже arm9 arm926ej-s. Тоже подумал что не должно быть сложно, попробую вначале без ос обойтись, если не получиться тогда уже буду смотреть на freertos. Может какие примеры есть давайте любые ссылки.

так а че там не получится, получится, конечно, не боги писали ртосы.

просто вопрос в целях-времени, а сложного, конечно, ничего там нет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...