Вопрос по стэку компилятора для atmega128.

Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Ответить
Аватара пользователя
Ariadna-on-Line
Это не хвост, это антенна
Сообщения: 1479
Зарегистрирован: Вс май 13, 2012 00:01:54

Вопрос по стэку компилятора для atmega128.

Сообщение Ariadna-on-Line »

Разобрался как работать с внешней SDRAM, + как сказать компилятору ее размер (до 64КБ).
Заморока теперь такая - При старте программы, в адресах близ 4352 (то есть на дне ВНУТРЕННЕЙ SDRAM) располагается используемая область. Очевидно это "стек" программы. Если задаем массив - граница программы приближается к стеку. При большом размере массива, например -
byte Buffer[8192] ;
компиляция идет без ошибок и алармов, но программа сбоит. Очевидно происходит наползание области программы на стек.
Вопрос - как вынести стек за пределы внутренней ОЗУ - во внешнюю SDRAM ? Очевидно какой-то директивой компилятора ??? Какую строчку надо добавлять в скетч ? С уважением.
ПС. С программированием на Си знаком только через Ардуино ИДЕ.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15545
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Вопрос по стэку компилятора для atmega128.

Сообщение BOB51 »

Стек у АВРок (как и у большинства микроконтроллеров) аппаратно привязан к внутреннему ОЗУ.
Изменить размещение равноценно отказу от команд PUSH и POP.
Теоретически это возможно - периодическая выемка части содержимого стека во внешнее ОЗУ (под ассемблером к примеру)...
Однако это уже вопрос компиляторосторения или вариант встроенной операционной системы (с потерей быстродействия).
Как вариант - или разработчик добавит функционал в компилятор своими библиотеками или когда-нибудь кто из гуру в том вопросе своего чего напишет...
:roll:
Аватара пользователя
Ariadna-on-Line
Это не хвост, это антенна
Сообщения: 1479
Зарегистрирован: Вс май 13, 2012 00:01:54

Re: Вопрос по стэку компилятора для atmega128.

Сообщение Ariadna-on-Line »

Если я правильно понимаю ДШ, 16-разрядный регистр SP (stack pointer SPH + SPL) должен быть принудительно установлен на любой адрес больше 60H. Это и будет дно стека. 16 разрядов как раз и есть 64КБ. Так что никакой аппаратной привязки к дну внутренней памяти в АТмеге128 - нету.
Просто эта процедура начальной инициации регистров процессора выполняется на первых тактах работы программы, ДО загрузки библиотек, процедур и прерываний. Она скрыта компилятором от глаз программиста ЯВУ как автоматическая рутинная операция. Должна быть задействована какая-то директива компилятору.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15545
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Вопрос по стэку компилятора для atmega128.

Сообщение BOB51 »

Ощибка - указатель стека может адресовать только внутреннее ОЗУ МК.
У каждого соответственно его размерам.
На применение указателя стека с операциями во внешнем ОЗУ МК не рассчитаны (ибо таковое в подавляющем большинстве случаев физически отсутствует).
Насчет двубайтового формата SP - ОЗУ в том же 128м - 4 килобайта - это диапазон от 0х0000 до 0x0FFF - однобайтовым указателем тут никак не обойдешся.
8)
Аватара пользователя
Ariadna-on-Line
Это не хвост, это антенна
Сообщения: 1479
Зарегистрирован: Вс май 13, 2012 00:01:54

Re: Вопрос по стэку компилятора для atmega128.

Сообщение Ariadna-on-Line »

Даташит вроде говорит иное.
Хорошо - как заставить компилятор организовать стек во внешней памяти ? Чтобы "стандартный" стек не разрывал внутреннее и внешнее пространство. Хрен его знает как он это сделает - может быть без использования SP ?!
Вложения
External Stack.png
(70.7 КБ) 163 скачивания
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15545
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Вопрос по стэку компилятора для atmega128.

Сообщение BOB51 »

В таком случае у компилятора должны быть предусмотрены соответствующие ключи управления для конкретных микроконтроллеров.
Тип МК, размер подключаемой внешней памяти и указание на размещение в ней стека.
Настройка регистров управления внешним ОЗУ останется на совести программиста.
Это разве что спецы по настройкам компилятора Си подскажут...
:dont_know:
Если под ассемблером - вчитываться в управление внешним ОЗУ надо да выставить настройку соответствующих регистров управления. Разметка пространства - творчество автора программы, но с учетом всех имеющихся и в программе и в физическом распределении ресурсов особенностей.
:roll:
Аватара пользователя
Ariadna-on-Line
Это не хвост, это антенна
Сообщения: 1479
Зарегистрирован: Вс май 13, 2012 00:01:54

Re: Вопрос по стэку компилятора для atmega128.

Сообщение Ariadna-on-Line »

[uquote="BOB51",url="/forum/viewtopic.php?p=4076184#p4076184"]В таком случае у компилятора должны быть предусмотрены соответствующие ключи управления для конкретных микроконтроллеров.
Тип МК, размер подключаемой внешней памяти и указание на размещение в ней стека.
Настройка регистров управления внешним ОЗУ останется на совести программиста.
:dont_know:

:roll:[/uquote]1. В этом и заключается мой вопрос. Какую строчку надо вписать в скетч, чтобы компилятор создал стек в нужном месте, в том числе - во внешней памяти.
2. Настроить регистры на управление внешней памятью - не проблема. Все настраивается и работает.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15545
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Вопрос по стэку компилятора для atmega128.

Сообщение BOB51 »

Не совсем так...
От настроек регистров управления будут зависеть свойства ОЗУ соответствующих областей...
а это, в свою очередь, должно быть (вероятно) как-то указано компилятору.
Вобчемсс... Ждем участия/комметариев ГУРУ по Си...
8)
Ответить

Вернуться в «Arduino»