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

 
 
> Псевдомногозадачность в IAR
piroman
сообщение Nov 19 2013, 17:58
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 27-09-12
Пользователь №: 73 712



Уважаемые!
Кто знает, как в IAR EWAVR грамотно реализовать следующий сценарий->
1. После сброса контроллера пользователь выбирает из предложенного списка одну из задач на выполнение.
2. Выхода из выбранной задачи обратно или в другую задачу нет.
3. Задача забирает ВСЕ ресурсы контроллера.

Собственно, вопрос в том, как объяснить линкеру, что разные задачи размещают свои переменные по совпадающим/пересекающимся адресам в RAM, как если бы других задач не существовало?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
scifi
сообщение Nov 19 2013, 18:44
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Легко. 1+N прошивок: первая (загрузчик) - это выбор задачи, а остальные - собственно сами задачи. Яр тут ни при чём - это везде так делается. Надо распределить прошивки по памяти и проработать механизм перехода их загрузчика в задачу.
Go to the top of the page
 
+Quote Post
piroman
сообщение Nov 19 2013, 20:10
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 27-09-12
Пользователь №: 73 712



Цитата(scifi @ Nov 19 2013, 21:44) *
Легко. 1+N прошивок: первая (загрузчик) - это выбор задачи, а остальные - собственно сами задачи. Яр тут ни при чём - это везде так делается. Надо распределить прошивки по памяти и проработать механизм перехода их загрузчика в задачу.

Это получается нерациональное расходование flash-памяти. А как быть, если эти задачи должны использовать общую библиотеку или функции друг из друга? Вообще, больше волнует вопрос общего использования ОЗУ.

Цитата(ArtemKAD @ Nov 19 2013, 22:06) *
Не пользуйтесь статическими переменными и ничего объяснять не придётся.

Если переменная не статическая, она просто не видна в другой задаче или вроде того, но место в ОЗУ занимает всё равно. А нужно, чтобы каждая задача владела ОЗУ полностью. Т.е., как я понимаю, начальный адрес размещения переменных в ОЗУ для всех задач должен быть одинаковый.

Цитата(scifi @ Nov 19 2013, 21:44) *
Легко. 1+N прошивок: первая (загрузчик) - это выбор задачи, а остальные - собственно сами задачи. Яр тут ни при чём - это везде так делается. Надо распределить прошивки по памяти и проработать механизм перехода их загрузчика в задачу.

Потом, в случае доработки, опять же собирать по частям сложно, по-моему.
Go to the top of the page
 
+Quote Post
psL
сообщение Nov 19 2013, 20:17
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390



Цитата(piroman @ Nov 20 2013, 00:10) *
А как быть, если эти задачи должны использовать общую библиотеку или функции друг из друга?
Если переменная не статическая, она просто не видна в другой задаче или вроде того, но место в ОЗУ занимает всё равно.

Сами себе противоречите: то задачи изолированные, то вызывают код друг из друга.
Если переменная не статическая и не глобальная - она лежит в стеке задачи вплоть до завершения задачи. Если задача не вызывается, переменная никогда не попадет в стек, соответственно памяти не займет.

Про загрузчик вам правильно все рассказали.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 15:04
Рейтинг@Mail.ru


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