реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> imx233 три функции main
sergey sva
сообщение Dec 12 2013, 12:42
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Подскажите как реализовать такое, может примеры есть.
Нужны три функции main0 main1 main2 Выполняться должны по очереди например 1000 тактов процессора main0, следующие 1000 main1.. выполняться должны не до конца, а останавливаться в любой точке как счетчик отсчитает 1000 тактов,с сохранением всех данных, с последующем их восстановлением. Думаю это нужно делать в startup на asm. Все это нужно сделать на платке с процессором imx233.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 12 2013, 12:45
Сообщение #2


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



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


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Dec 12 2013, 12:58
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Цитата(demiurg_spb @ Dec 12 2013, 16:45) *
Тут наверное требуется РТОС c соответствующим планировщиком...

Хотелось бы попроще, ртос из за трех функций, ну если только она будет на одном листе кода. )
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Dec 12 2013, 13:17
Сообщение #4


Ally
******

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



Цитата(sergey sva @ Dec 12 2013, 14:42) *
Подскажите как реализовать такое, может примеры есть.
Нужны три функции main0 main1 main2 Выполняться должны по очереди например 1000 тактов процессора main0, следующие 1000 main1.. выполняться должны не до конца, а останавливаться в любой точке как счетчик отсчитает 1000 тактов,с сохранением всех данных, с последующем их восстановлением. Думаю это нужно делать в startup на asm. Все это нужно сделать на платке с процессором imx233.


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

Крайне неудачная затея.
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Dec 12 2013, 14:17
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Не приходилось ничего подобного делать. Такой алгоритм не будет работать?, крутиться цикл в нем идет счет, после отсчета 1000 циклов, сохранить состояние всех регистров счетчик команд ... после записать в счетчик команд адрес следующей функции и востановить все регистры .... отсчитать еще 1000 тактов.?
Go to the top of the page
 
+Quote Post
aoreh
сообщение Dec 12 2013, 14:27
Сообщение #6


Участник
*

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



Цитата(sergey sva @ Dec 12 2013, 17:17) *
Не приходилось ничего подобного делать. Такой алгоритм не будет работать?, крутиться цикл в нем идет счет, после отсчета 1000 циклов, сохранить состояние всех регистров счетчик команд ... после записать в счетчик команд адрес следующей функции и востановить все регистры .... отсчитать еще 1000 тактов.?

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

Сообщение отредактировал aoreh - Dec 12 2013, 14:28
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Dec 12 2013, 14:53
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Понятно, все таки удобнее будет использовать ртос. сейчас посмотрю, что пишут freertos.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Dec 12 2013, 15:07
Сообщение #8


Ally
******

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



Цитата(sergey sva @ Dec 12 2013, 16:17) *
Не приходилось ничего подобного делать. Такой алгоритм не будет работать?, крутиться цикл в нем идет счет, после отсчета 1000 циклов, сохранить состояние всех регистров счетчик команд ... после записать в счетчик команд адрес следующей функции и востановить все регистры .... отсчитать еще 1000 тактов.?


Это обычные прерывания.
Средний джиттер в пару десятков тактов будет (иногда больше), но реализация примитивнейшая.
Запускаете 3-и compare канала в таймерах. Каждый вызывает свое прерывание в которых выполняются задачи, каждая со своим стеком.
Возврата из прерывание не нужно. Просто каждое следующее прерывание восстанавливает свой стек и разрешает прерывание для следующей задачи.
И так они и прерывают друг друга бесконечно.
Но надо знать какие регистры требуют сохранения состояния, а какие нет. Если задачи написаны на C-и.
Поэтому лучше действительно посмотреть, как делается переключение контекста в RTOS uCOS-II
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Dec 12 2013, 15:26
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



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

вот ни разу это не обычные прерывания...
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 12 2013, 17:17
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Golikov A. @ Dec 12 2013, 21:26) *
а как быстро кончиться стэк если каждое прерывание будет вызывать из другого и никогда не возвращаться?
и как новое вызвавшееся прерывание узнает на какой команде прекратило свою работу прошлый его предок?

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

Цитата(Golikov A. @ Dec 12 2013, 21:26) *
вот ни разу это не обычные прерывания...

Не знаю как на imx, но на ARM7/9 и Cortex вполне себе обычное.
На ARM-ах и Cortex-ах реализация на асм пишется на раз.
Про джиттер AlexandrY правильно сказал.
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Dec 12 2013, 17:32
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



imx это тоже arm9 arm926ej-s. Тоже подумал что не должно быть сложно, попробую вначале без ос обойтись, если не получиться тогда уже буду смотреть на freertos. Может какие примеры есть давайте любые ссылки.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Dec 12 2013, 18:28
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(jcxz @ Dec 12 2013, 21:17) *
Не знаю как на imx, но на ARM7/9 и Cortex вполне себе обычное.
На ARM-ах и Cortex-ах реализация на асм пишется на раз.
Про джиттер AlexandrY правильно сказал.


у меня другие понятия обычности получаетсяsm.gif
Go to the top of the page
 
+Quote Post
aoreh
сообщение Dec 12 2013, 18:49
Сообщение #13


Участник
*

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



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

так а че там не получится, получится, конечно, не боги писали ртосы.
просто вопрос в целях-времени, а сложного, конечно, ничего там нет
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 09:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01459 секунд с 7
ELECTRONIX ©2004-2016