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

 
 
 
Reply to this topicStart new topic
> scmRTOS + VDSP стеки задач в разных секциях
Fat Robot
сообщение Nov 16 2010, 19:52
Сообщение #1


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



посоветуйте, пожалуйста,
можно ли законными способами разместить стеки задач в разных секциях (речь о VDSP)?
или только шаблон задачи курочить?
Go to the top of the page
 
+Quote Post
dxp
сообщение Nov 17 2010, 03:28
Сообщение #2


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(Fat Robot @ Nov 17 2010, 01:52) *
посоветуйте, пожалуйста,
можно ли законными способами разместить стеки задач в разных секциях (речь о VDSP)?
или только шаблон задачи курочить?

Вам нужно стек "оторвать" от самого объекта? Если нет, то почему тогда не разместить весь объект в нужной секции?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Nov 17 2010, 11:53
Сообщение #3


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



Спасибо, dxp, буду пробовать.

Признаюсь, я пока "провисаю" в понимании того, во что преобразуются языковые конструкции с++ при компиляции. например, я не могу сейчас ответить на вопросы: если я по Вашему совету размещаю сам объект в секции "data", то в какой секции будет размещен исполняемый код методов? а если они inline? а если static?

Не открою тайны, сказав, что plain c в этом смысле куда более очевиден.

В общем, есть некоторое поле для осмысления пока с не предсказуемым результатом: печально будет в итоге осознать, что с++ не применим для класса задач, с которыми мне приходится иметь дело.
Go to the top of the page
 
+Quote Post
dxp
сообщение Nov 17 2010, 13:50
Сообщение #4


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(Fat Robot @ Nov 17 2010, 17:53) *
Признаюсь, я пока "провисаю" в понимании того, во что преобразуются языковые конструкции с++ при компиляции. например, я не могу сейчас ответить на вопросы: если я по Вашему совету размещаю сам объект в секции "data", то в какой секции будет размещен исполняемый код методов? а если они inline? а если static?

В первом приближении можно считать, что объект класса - это как обычная сишная структура, но имеющая нативную связь с кодом (функциями-членами), реализованную неявно (хотя механизм очень простой - просто при каждом вызове функции-члена неявно передается указатель на эту структуру с данными, а зная размещение данных этой структуры в памяти (смещения относительно базового адреса), компилятор может однозначно и эффективно организовать доступ к конкретным членам-данным). Таким образом, объект класса - это, собственно, непрерывный кусок памяти, подобный любому агрегатному типу. От агрегатных типов (сишных структур, массивов) его отличает наличие дополнительного функционала - конструкторы/деструкторы, возможность использовать ограничение доступа (public/private), служебные данные типа vptr (если используются виртуальные функции) и т.п.

Функции-члены - это обычный код, как и обычные функции. И лежат они вместе со всем исполняемым кодом. В отличие от обычных функций, эти функции-члены можно вызывать только по отношению к объектам своих классов. Технически - это обычный код и размещается на общих основаниях.

Цитата(Fat Robot @ Nov 17 2010, 17:53) *
Не открою тайны, сказав, что plain c в этом смысле куда более очевиден.

Это пока. smile.gif Поближе познакомитесь, все станет так же прозрачно.

Цитата(Fat Robot @ Nov 17 2010, 17:53) *
В общем, есть некоторое поле для осмысления пока с не предсказуемым результатом: печально будет в итоге осознать, что с++ не применим для класса задач, с которыми мне приходится иметь дело.

Не будет. smile.gif С++ подходит для решения тех же задач что и С нисколько не хуже оного.

Т.е. вам нужно попробовать написать:
Код
#pragma section("section_name", NO_INIT)
TProcType ProcName;

и компилятор должен будет разместить этот объект в этой секции. Весь объект целиком - его внутренние данные и стек. Насколько вам это подходит, не знаю. А в чем причина в необходимости размещать стеки процессов в разных секциях, если не секрет?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Nov 17 2010, 20:00
Сообщение #5


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



Спасибо за разъяснения, dxp. Мне нужно попробовать, чтоб как-то с этим сжиться.

Причина такого требования к размещению банальна: быстрым процессам отдаем быструю внутреннюю память как для кода, так и для стека и данных, а медленным - медленную внешнюю SRAM.

Хотя общий объем как исполняемого кода, так и данных у целевой задачи довольно большой, но, с точки зрения ОС, процессов и межпроцессного взаимодействия не так много: сигнальная часть, часть обработки данных, CLI, системный мониторинг, драйверы простенькой внешней периферии. Т.е. Ваша ОС видится применимой для подобных задач. Единственно, нужно аккуратно всё разложить по секциям.

Прототип делался на uCOS. Она хорошая, но
- у нее довольно злая лицензия
- в ней много лишнего, связанного, наверное, как с наследием демонстрационного пособия, так и с той жменей стандартов, которым она хочет удовлетворять.

Цитата(dxp @ Nov 17 2010, 16:50) *
А в чем причина в необходимости размещать стеки процессов в разных секциях, если не секрет?

Go to the top of the page
 
+Quote Post

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

 


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


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