Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Ответить

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

Чт авг 12, 2021 10:52:53

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

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

Сб авг 14, 2021 01:02:10

Стек у АВРок (как и у большинства микроконтроллеров) аппаратно привязан к внутреннему ОЗУ.
Изменить размещение равноценно отказу от команд PUSH и POP.
Теоретически это возможно - периодическая выемка части содержимого стека во внешнее ОЗУ (под ассемблером к примеру)...
Однако это уже вопрос компиляторосторения или вариант встроенной операционной системы (с потерей быстродействия).
Как вариант - или разработчик добавит функционал в компилятор своими библиотеками или когда-нибудь кто из гуру в том вопросе своего чего напишет...
:roll:

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

Сб авг 14, 2021 01:33:29

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

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

Сб авг 14, 2021 14:05:24

Ощибка - указатель стека может адресовать только внутреннее ОЗУ МК.
У каждого соответственно его размерам.
На применение указателя стека с операциями во внешнем ОЗУ МК не рассчитаны (ибо таковое в подавляющем большинстве случаев физически отсутствует).
Насчет двубайтового формата SP - ОЗУ в том же 128м - 4 килобайта - это диапазон от 0х0000 до 0x0FFF - однобайтовым указателем тут никак не обойдешся.
8)

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

Сб авг 14, 2021 15:05:31

Даташит вроде говорит иное.
Хорошо - как заставить компилятор организовать стек во внешней памяти ? Чтобы "стандартный" стек не разрывал внутреннее и внешнее пространство. Хрен его знает как он это сделает - может быть без использования SP ?!
Вложения
External Stack.png
(70.7 KiB) Скачиваний: 129

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

Вс авг 15, 2021 10:01:37

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

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

Вс авг 15, 2021 22:10:35

В таком случае у компилятора должны быть предусмотрены соответствующие ключи управления для конкретных микроконтроллеров.
Тип МК, размер подключаемой внешней памяти и указание на размещение в ней стека.
Настройка регистров управления внешним ОЗУ останется на совести программиста.
:dont_know:

:roll:
1. В этом и заключается мой вопрос. Какую строчку надо вписать в скетч, чтобы компилятор создал стек в нужном месте, в том числе - во внешней памяти.
2. Настроить регистры на управление внешней памятью - не проблема. Все настраивается и работает.

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

Пн авг 16, 2021 09:13:16

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