Например TDA7294

Форум РадиоКот • Просмотр темы - IAR stm32f103, инициализация стека в середине ОЗУ
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Чт июл 18, 2019 17:59:20

Часовой пояс: UTC + 3 часа [ Летнее время ]


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: IAR stm32f103, инициализация стека в середине ОЗУ
СообщениеДобавлено: Пн май 13, 2019 10:14:13 
Вымогатель припоя

Зарегистрирован: Вт ноя 02, 2010 18:46:37
Сообщений: 557
Рейтинг сообщения: 0
Начал копаться в файле линкера, и тут заметил что вершина стека где-то в середине ОЗУ устанавливается :shock:
Причем полистал память под отладкой и в Symbolic memory вижу что есть примеренные выше стека и ниже стека :shock:

Изображение

Файл ликера почти стандартный, да и стандартный пробовал та же фигня.
Код:
/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x08000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x08000000;
define symbol __ICFEDIT_region_ROM_end__   = 0x0803FFFF;
define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__   = 0x2000BFFF;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x1000;
define symbol __ICFEDIT_size_heap__   = 0x1000;
/**** End of ICF editor section. ###ICF###*/

define memory mem with size = 4G;
define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

initialize by copy { readwrite };
do not initialize  { section .noinit };

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };

place in ROM_region   { readonly };
place in RAM_region   { readwrite,
                        block CSTACK, block HEAP };

place at address mem:__ICFEDIT_region_ROM_end__-4095 { readonly section .Flashstart};

place at address mem:__ICFEDIT_region_ROM_end__-1023 { readonly section .default};

в map файле вижу секция CSTACK так и размешается по адресу 0x20002c38
Код:
"A1":  place at 0x08000000 { ro section .intvec };
"P1":  place in [from 0x08000000 to 0x0803ffff] { ro };
"P2":  place in [from 0x20000000 to 0x2000bfff] { rw, block CSTACK, block HEAP };
...................
"P2", part 2 of 3:                          0x1000
  CSTACK                       0x20001c38   0x1000  <Block>
    CSTACK            uninit   0x20001c38   0x1000  <Block tail>
                             - 0x20002c38   0x1000


Как сделать что бы было по нормальному и стек был в конце ОЗУ ?


Вложения:
CSTack.png [123.9 KiB]
Скачиваний: 41
CSTack.png [123.9 KiB]
Скачиваний: 69
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: IAR stm32f103, инициализация стека в середине ОЗУ
СообщениеДобавлено: Пн май 13, 2019 16:20:43 
Вымогатель припоя
Аватар пользователя

Карма: 10
Рейтинг сообщений: 66
Зарегистрирован: Вт май 01, 2018 20:44:47
Сообщений: 621
Рейтинг сообщения: 0
В чём проблема то? Он и так почти в конце, дальше только куча. Разместить где хочешь можно указав в скрипте линкера конкретный адрес расположения. Или вообще в стартапе любой ручками записать в SP, не забыть только эту область у линкера забрать.

PS: Да и какая разница где он? Главное чтобы размера хватало. Ты же не собираешься его превышать, правда? Или таки да?

PPS: А вообще читать доки это рулез.
Цитата:
The place at directive places sections and blocks either at a specific address or, at the
beginning or the end of a region.


Вернуться наверх
 
JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: IAR stm32f103, инициализация стека в середине ОЗУ
СообщениеДобавлено: Вт май 14, 2019 04:48:56 
Вымогатель припоя

Зарегистрирован: Вт ноя 02, 2010 18:46:37
Сообщений: 557
Рейтинг сообщения: 0
"Он и так почти в конце, дальше только куча"
Увы увы, там дальше ещё под 100 перемененных идет. Это я там тестовый массив(mass) на >1000 байт объявил, а после него другие примеренные продолжаются.
Цитата:
place in RAM_region { readwrite, last block CSTACK, block HEAP };

Вот таким образом получилось разместить его в конце всех переменных.
Кстати как насчет того что бы его разместить в самом начале, и ловить HardFault при перевыполнении стека ?


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $88 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay
Не в сети
 Заголовок сообщения: Re: IAR stm32f103, инициализация стека в середине ОЗУ
СообщениеДобавлено: Вт май 14, 2019 06:58:50 
Вымогатель припоя
Аватар пользователя

Карма: 10
Рейтинг сообщений: 66
Зарегистрирован: Вт май 01, 2018 20:44:47
Сообщений: 621
Рейтинг сообщения: 0
Кстати как насчет того что бы его разместить в самом начале, и ловить HardFault при перевыполнении стека ?
Эта теме всплывает на форумах с завидной регулярностью. Я с первого сообщения знал, что к этому придёт. Но никто, почему-то, не может объяснить зачем устраивать HardFault вместо правильного задания размера стека. И ещё, свой инструмент знать надо. Почитай раздел "Stack usage analysis" в документации - пользы будет больше.


Вернуться наверх
 
Плавкие предохранители LittelFuse. Грамотный подбор

Выбор оптимального плавкого предохранителя требует учета многих параметров. Для упрощения выбора оптимального предохранителя и автоматизации расчетов Littelfuse предлагает онлайн-утилиту. Подробнее>>
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: Myp3ik и гости: 9


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

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


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y