Easyelectronics.ru

Электроника для всех
Текущее время: 26 фев 2021, 03:56

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 22 ] 
Автор Сообщение
 Заголовок сообщения: FreeRTOS, heap, SW4STM32
СообщениеДобавлено: 20 июл 2020, 23:50 
Старожил

Зарегистрирован: 08 июл 2013, 17:00
Сообщения: 863
Коллеги! Нужна помощь.

Решил перевести проект с Кейла на SW4STM32. МК STM32F446, FreeRTOS 10.2. Сразу скажу, что с Эклипсом и его производными для МК раньше не работал. Вроде, победил почти всё, но споткнулся в конце.

Мне нужно, чтобы у менеджера памяти ОС было под управлением 96К из 128К ОЗУ, что прописываю во FreeRTOSConfig.h:
Show

Скрипт линковщика:
Show

И стартап:
Show

И мнение компилятора о моих умственных способностях:
Show



Откуда взялись эти цифры? Не въезжаю:
Цитата:
region `RAM' overflowed by 74760 bytes


Растолкуйте, что я делаю не так? Как мне добиться для менеджера памяти ОС больше 64К ОЗУ? Можно просто ткнуть что прочитать, чтобы понять. Работа со связкой Эклипс+ГЦЦ+СТМ32 для меня дело новое, инфы в Инете, вроде, вагон, но где и что читать пока не успел разобраться. Сориентируйте, кто может.


Последний раз редактировалось tonyk 21 июл 2020, 00:33, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS, heep, SW4STM32
СообщениеДобавлено: 21 июл 2020, 00:25 
Старожил

Зарегистрирован: 06 окт 2014, 20:14
Сообщения: 1076
96 кБ из 112 кБ. Видимо типы памяти имеют значение. 112кБ-75кБ=36кБ видимо ОС требует окромя HEAP_SIZE.
/* Memories definition */
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K (112К)
RAM (xrw) : ORIGIN = 0x (уточните по описанию проца)
RAM (xrw) : ORIGIN = 0x (уточните по описанию проца) что-то мне подсказывает, что у проца три разных региона ОЗУ
ROM (rx) : ORIGIN = 0x8000000, LENGTH = 512K
}


Последний раз редактировалось AstraHard 21 июл 2020, 00:30, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS, heep, SW4STM32
СообщениеДобавлено: 21 июл 2020, 00:29 
Старожил

Зарегистрирован: 08 июл 2013, 17:00
Сообщения: 863
AstraHard писал(а):
96 кБ из 112 кБ. Видимо типы памяти имеют значение. 112кБ-75кБ=36кБ видимо ОС требует окромя HEAP_SIZE.

Да ну... Не верю. Откуда FreeRTOS вдруг для работы понадобилось аж 36К?! И где это прописано?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS, heep, SW4STM32
СообщениеДобавлено: 21 июл 2020, 00:35 
Старожил

Зарегистрирован: 08 июл 2013, 17:00
Сообщения: 863
AstraHard писал(а):
96 кБ из 112 кБ. Видимо типы памяти имеют значение. 112кБ-75кБ=36кБ видимо ОС требует окромя HEAP_SIZE.
/* Memories definition */
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K (112К)
RAM (xrw) : ORIGIN = 0x (уточните по описанию проца)
RAM (xrw) : ORIGIN = 0x (уточните по описанию проца) что-то мне подсказывает, что у проца три разных региона ОЗУ
ROM (rx) : ORIGIN = 0x8000000, LENGTH = 512K
}

Уточнение на картинке.


Вложения:
Screenshot_52.jpg
Screenshot_52.jpg [ 67.24 Кб | Просмотров: 914 ]
Screenshot_51.jpg
Screenshot_51.jpg [ 53.68 Кб | Просмотров: 914 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS, heap, SW4STM32
СообщениеДобавлено: 21 июл 2020, 01:15 
Старожил

Зарегистрирован: 06 окт 2014, 20:14
Сообщения: 1076
Помниться мне, когда я писал для CCS(Code Composer Studio), кстати, тоже Eclipse по указывал регионы памяти все раздельно и, тоже видел такие сообщения компилятора. Правда не дошел до уточнения того, как регионы объединять в один и в чем тут тонкости. Вроде, что не все регионы памяти ОЗУ подходили для RAM функций, что-то такое. А, из этого следует интересный момент, сама ОС размещает во 2 регионе RAM функции? Ведь второй регион подключен к матрице AHB посвоему.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS, heap, SW4STM32
СообщениеДобавлено: 21 июл 2020, 01:32 
Старожил

Зарегистрирован: 06 окт 2014, 20:14
Сообщения: 1076
Дело в том, что ОС управляет некоторыми регистрами о существовании которых узнают не все и не всегда. Именно поэтому RAM разделена на регионы и, подключена к шине AHB каждый регион посвоему. Слова concurent RAM acceses не следует воспринимать слишком буквально. Доступ осуществляется на основе системы приоритетов (не является полностью прозрачным, а управляемым ОС) и, в некоторых вариантах на основе псевдослучайных вращающихся приоритетов (кстати этот патент не принадлежит самой ARM) и, в этом случае процесс более прозрачен для ОС!!!

P.S. ARM достаточно приближен к сложным процессорам со многими возможностями, которые до сих пор не освоены даже ОС. Это Вам не 8 разрядов, где портирование бывает полностью прозрачным. Кстати, не совсем верно говорить, ОС для ARM, вернее говорить, что ОС, прежде всего, для AMBA-2 (в конкретном случае). Высказывание ОС для ARM - это высказывание на публику, ту что не увлекается перфекционизмом, и, как следствие, не в курсе подобного рода сообщений компилятора. Кстати, мне пришла в голову мысль, если ОС позиционирует себя как ОС для ARM а не для AMBA, то ПМСМ эта ОС имеет корни в 8 разрядах и, вряд-ли от нее есть польза кроме вреда. Недаром я, сталкивался с вопросом, что при подключенном отладчике все работает, а при отключенном зависает, это прямое следствие того, на что указано выше. Не исключаю, что GCC может оказаться умнее FreeRTOS;)

P.P.S. Впрочем, такие тонкости не должны Вас пугать, ведь это просто перфекционизм, а ведь Вы не такой? Зачем Вам много ОЗУ? Считать, что ОС не может потребить 36Kb это значит мыслить категориями 8 разрядов и, считать, что ОС не имеет права разместить свой код тоже в ОЗУ (часть кода), а зачем тогда 0 Waitstater RAM. А роль шины AMBA в прозрачной оптимизации выполнения пользовательского кода в процессе выполнения (разруливание конкуренции DMA (тут многие сломались, кстати даже Майкрософт, нет нет да заикается или дергается)) Вы под ОС как видите? или никак?
Да что там говорить, даже AMD не справляется и, только Intel на высоте. Достаточно сравнить Intel и AMD по установившейся скорости USB здесь AMD, как всегда в заднице Intel. Как и в Видео тоже.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS, heap, SW4STM32
СообщениеДобавлено: 21 июл 2020, 08:47 
Старожил

Зарегистрирован: 08 июл 2013, 17:00
Сообщения: 863
До этого работал с STM32F411, имеющей такой же объём ОЗУ, но под Кейл. Ни каких проблем с разметкой ОЗУ не встречал: как разметил, то и получил. А тут даже не вижу, где бы могло, а, главное, для чего, откусываться столько ОЗУ. Ладно, буду дальше рыть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS, heap, SW4STM32
СообщениеДобавлено: 21 июл 2020, 08:55 
Старожил

Зарегистрирован: 08 июл 2013, 17:00
Сообщения: 863
Всё. Нашёл. Забыл удалить большой массив, вот ОЗУ и не хватало.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS, heap, SW4STM32
СообщениеДобавлено: 21 июл 2020, 09:23 
Старожил

Зарегистрирован: 06 окт 2014, 20:14
Сообщения: 1076
Читал вот эту статью про Inline модификатор https://www.terraelectronica.ru/news/6538. Автор так и не дал ответ, почему так. Просто констатировал факт. В МК STM32F446 + FreeRTOS 10.2. те 16 кБ, которые Вы игнорировали это не CMM RAM случаем, может ОС ее очень ждет (чтобы она была упомянута отдельно) и, потому что она Serial и, подключена к шине AHB отдельно от области 112кБ!

P.S. Пример указаний для компоновщика более продвинутых, просто есть сомнения что FreeRTOS это нужно.
MEMORY
{
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 256K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 40K
MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K
CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 8K
}


Последний раз редактировалось AstraHard 21 июл 2020, 10:51, всего редактировалось 5 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS, heap, SW4STM32
СообщениеДобавлено: 21 июл 2020, 09:33 
Старожил

Зарегистрирован: 06 окт 2014, 20:14
Сообщения: 1076
Все понятно, у меня перфекционизм. Зато есть повод поинтересоваться, наконец, FreeRTOS 10.2 в плане высказываний которые выше. Видимо, я очень много увидел в FreeRTOS 10.2. Впрочем, Спасибо за тему, это интересно.

P.S. Видимо, судя по Вашим наблюдениям, FreeRTOS 10.2 имеет "8 разрядную идеологию" и, почти не в курсе особенностей шинной архитектуры процессора и типах памяти, печаль...


Последний раз редактировалось AstraHard 21 июл 2020, 10:36, всего редактировалось 3 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS, heap, SW4STM32
СообщениеДобавлено: 21 июл 2020, 10:09 
Старожил

Зарегистрирован: 06 окт 2014, 20:14
Сообщения: 1076
Не, SRAM2 в STM32F446 это не CCM, она подключена только к S-bus. Это, видимо, Serial. А вот SRAM1 подключена к I-Bus (Instruction) и D-Bus (data). А CMM STM32F303CC подключена только к I-Bus (Instruction) и D-Bus (data) без S-bus (serial). SRAM2 в STM32F446 подключена только к S-Bus (serial) и служит для ввода вывода только, с применением DMA. Кстати, то что SPI перестает работать при большом буфере может быть связано с ОС и SRAM2 которая только Serial устройства обслуживает и, имеет размер 16кБ только.

P.S. Так ОС эта (FreeRTOS 10.2) разруливает конкуренцию за DMA? со стороны пользовательского кода? как Вы думаете?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS, heap, SW4STM32
СообщениеДобавлено: 21 июл 2020, 11:08 
Старожил

Зарегистрирован: 08 июл 2013, 17:00
Сообщения: 863
Э-э-э... Я даже растерялся. Не буду ничего отвечать, подожду, пока уважаемый AstraHard изучит FreeRTOS.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS, heap, SW4STM32
СообщениеДобавлено: 21 июл 2020, 11:36 
Старожил

Зарегистрирован: 06 окт 2014, 20:14
Сообщения: 1076
А Вы расскажите кратко что умеет FreeRTOS, или где это, без воды, прочитать. А то я встретил где-то высказывание что в лицензионном соглашении есть запрет сравнивать ее с другими.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS, heap, SW4STM32
СообщениеДобавлено: 21 июл 2020, 12:16 
Старожил

Зарегистрирован: 08 июл 2013, 17:00
Сообщения: 863
http://easyelectronics.ru/img/ARM_kurs/FreeRTOS/Kurniz.pdf


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS, heap, SW4STM32
СообщениеДобавлено: 21 июл 2020, 21:18 
Старожил

Зарегистрирован: 06 окт 2014, 20:14
Сообщения: 1076
Не, я лучше первоисточник почитаю.


Последний раз редактировалось AstraHard 21 июл 2020, 21:34, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS, heap, SW4STM32
СообщениеДобавлено: 21 июл 2020, 21:29 
Старожил

Зарегистрирован: 08 июл 2013, 17:00
Сообщения: 863
AstraHard писал(а):
Не, я лучше первоисточник почитаю.

А это и есть переведённый источник.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS, heap, SW4STM32
СообщениеДобавлено: 21 июл 2020, 21:34 
Старожил

Зарегистрирован: 06 окт 2014, 20:14
Сообщения: 1076
Короче, вот это понравилось Co-operative scheduling option (типа виртуализация) и это zero copy interfaces. Зато нет упоминания о технологиях автоматического управления шиной (железные приоритеты). И опциях для ядра, типа размещения части кода в CCM RAM. И не хватает, соответственно, усовершенствованной технологии сообщений, с использованием DMA (или не упомянуто). Хотя, упомянуто, что каждое сочетание компилятор процессор представляет собой отдельный порт, это архиважно и, не упомянуты детали как это отражается на ключевых потребительских свойствах, можно только догадываться все ли что предлагает конкретный контроллер реализовано в варианте (порте). Из этого следует, что описание отдельного порта это гораздо более важно, чем сама ОС. А эти таймеры, переключение контекста, счетные семафоры и мьютексы и.т.д. и.т.п. уже стандарт обсосанный до косточек.


Последний раз редактировалось AstraHard 21 июл 2020, 22:15, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS, heap, SW4STM32
СообщениеДобавлено: 21 июл 2020, 22:14 
Старожил

Зарегистрирован: 08 июл 2013, 17:00
Сообщения: 863
Цитата:
Co-operative scheduling option (типа виртуализация)

Нет, это кооперативная многозадачность. Такая была в Выньдовс 3.11.

Цитата:
Зато нет упоминания о технологиях автоматического управления шиной (железные приоритеты). И опциях для ядра, типа размещения части кода в CCM RAM.

Каждый пользователь делает это сам, если ему это нужно.

Цитата:
И не хватает, соответственно, усовершенствованной технологии сообщений, с использованием DMA (или не упомянуто).

Коммент выше. Ещё тонкость: в МК от СТМ есть области ОЗУ, недоступные DMA.

Цитата:
каждое сочетание компилятор процессор представляет собой отдельный порт, это архиважно и, не упомянуто в "вольном пересказе". Из этого следует, что описание отдельного порта это гораздо более важно, чем сама ОС

Всё с точностью до наоборот. Абсолютно пофиг. Код, написанный под ФриРТОС и без привязки к "железу", компилируется разными компиляторами под разные архитектуры и- самое главное!- работает везде одинаково. Пробовал Кейлом и ГЦЦ под АРМ и АВР. Речь идёт о задачах, таймерах, управлению памятью, семафорами и тому подобном.
Разные порты могут по разному использовать возможности конкретного МК, это другой вопрос, но с точки зрения программы пользователя работать они будут одинаково.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS, heap, SW4STM32
СообщениеДобавлено: 21 июл 2020, 22:39 
Старожил

Зарегистрирован: 06 окт 2014, 20:14
Сообщения: 1076
Последнее я написал сам сумбурно, но основная моя идея как раз в том, что эта одинаковость сильнее всего и не нравиться. Потому, что для задач "Жесткого" реального времени, обычно, саму ОС запускают как задачу обслуживающую, в основном, пользовательский интерфейс. Для этого я бы у FreeRTOS забрал и аппаратный таймер, пусть живет на эмуляции такового, пусть живет в виртуальном времени. Кроме того, для конкретно STM32, оказывается есть аппаратный способ прервать высоко приоритетный обмен DMA, тоесть вращать приоритеты DMA аппаратно. Это можно интегрировать в код ОС.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS, heap, SW4STM32
СообщениеДобавлено: 22 июл 2020, 09:33 
Старожил

Зарегистрирован: 06 окт 2014, 20:14
Сообщения: 1076
Вообще, отладка имеет приоритет в системе выше чем у ядра процессора и DMA вместе взятых (вообще, наивысший из возможных), иначе, она (отладка) не смогла бы выполнять свои функции. FreeRTOS не разруливает ситуации конкуренции пользовательского кода за шину AMBA. Все отдается на откуп писателю кода без соответствующей поддержки со стороны ОС. Прозрачную поддержку такого типа, (прозрачно для ОС) обеспечивает патент Silicon Images, но ST Micro не покупала этот патент и, отсюда такие ситуации.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS, heap, SW4STM32
СообщениеДобавлено: 22 июл 2020, 12:39 
Старожил

Зарегистрирован: 08 июл 2013, 17:00
Сообщения: 863
Цитата:
Для этого я бы у FreeRTOS забрал и аппаратный таймер, пусть живет на эмуляции такового, пусть живет в виртуальном времени

Зачем забирать?! SysTick специально создан для этого. Ну и как тогда таймеры ОС будут?
Судя по постам, назначение и построение ОС для МК не изучено и не осознано.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS, heap, SW4STM32
СообщениеДобавлено: 22 июл 2020, 14:46 
Старожил

Зарегистрирован: 06 окт 2014, 20:14
Сообщения: 1076
Это точно сказано, зато предложений по модификации наваял достаточно. Подробнее о технологии NetSilicon можно почитать здесь https://kit-e.ru/cpu/konstrukczii-shin- ... yh-sistem/

Цитата "NetSilicon разработала новую систему управления полосой пропускания взамен той, что используется в AMBA-архитектуре"
Смотрите Программирование «вращающегося» арбитра шины. Я предложил сделать подобное для STM32, за счет свойств отладки.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB