Jump to content

    

Выделение места под стек и кучу в Си

57 minutes ago, Darth Vader said:

На первом этапе я хотел полностью повторить ассемблерный стартап в части резервирования места под кучу и стек но на С/С++.

Насколько я знаю, в стартапе это не нужно делать. Зачем? В стартапе стэк может только быть инициализирован, а для Cortex-Mx только там.

Share this post


Link to post
Share on other sites
9 часов назад, Forger сказал:

На предыдущей странице я привел полностью рабочий кусок как раз в Keil, там все есть для повторения.  Почему народ не читает, непонятно :beee:

"Не читает" что? В том что Вы привели, нет ничего про получение в си-исходнике начала и конца секции.

Share this post


Link to post
Share on other sites
6 minutes ago, jcxz said:

"Не читает" что? В том что Вы привели, нет ничего про определение в си-исходнике начала и конца секции.

В моем примере начала и конец секции не требуется, нужен лишь адрес самого объекта.

Share this post


Link to post
Share on other sites
Только что, Forger сказал:

Секции объявляются в скрипте линкера, в исходниках начала и конец секции не требуется объявлять.

Ещё раз: Прочитайте внимательнее на что я отвечал и что я отвечал. Мой ответ был не про объявление секций.

Share this post


Link to post
Share on other sites

Поясните, в чем проблема?

Чем мой исходник не годится?

Share this post


Link to post
Share on other sites
Только что, Forger сказал:

Поясните, в чем проблема?

Проблема видимо в том, что Вы не читаете то, на что отвечаете.

Share this post


Link to post
Share on other sites
14 minutes ago, jcxz said:

Проблема видимо в том, что Вы не читаете то, на что отвечаете.

См. выше, ответ исправлен был видать после того, как вы на него отреагировали ((

 

 

Таблица векторов (в добавку к предыдущему исходнику):


static void (* const __vectors[])() __attribute__((section("RESET"))) __attribute__((used)) =
{
	(void (*)())(&startupStack[STARTUP_STACK_SIZE_BYTES/sizeof(StackItem)]),
	ResetHandler,
	NMI_Handler,			// NMI,
	HardFault_Handler,		// HardFault
	MemManage_Handler,		// MemManage_Handler
	BusFault_Handler,		// BusFault_Handler
	UsageFault_Handler,		// UsageFault_Handler
  ....

Как видно адрес секции тут тоже не требуется.

Share this post


Link to post
Share on other sites
4 часа назад, Forger сказал:

__attribute__((section("RESET"))) __attribute__((used))

Можно слегка сократить писанину.  __attribute__((section("RESET"), used))

 

ЗЫ:

Кстати, столкнулся со странным поведением Keil при оптимизации -О0. Он пытается __ARM_get_argv в стартовом коде сделать и там умирает. С -O1 и выше он этой муйней не занимается и всё шоколадно.

Share this post


Link to post
Share on other sites
24 минуты назад, VladislavS сказал:

Барабанная дробь! Впервые на арене! Стартап для GCC IAR и Keil одновременно.

Ну дык - условной компиляцией можно и бульдога с носорогом скрестить. У меня есть такие си-файлы, которые компилятся и IAR-ом (для CM4F) и VS (для винды).

Share this post


Link to post
Share on other sites

Почитал всё же документацию. В общем, сделал традиционно как в остальных средах. Линкер занимается распределением памяти, стартап стартом. Без всякого мозгоклюйства.

 

startup_keil_stm32f072.c

STM32F072-SRAM.sct

STM32F072-FLASH.sct

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now