Разобрался как работать с внешней SDRAM, + как сказать компилятору ее размер (до 64КБ).
Заморока теперь такая - При старте программы, в адресах близ 4352 (то есть на дне ВНУТРЕННЕЙ SDRAM) располагается используемая область. Очевидно это "стек" программы. Если задаем массив - граница программы приближается к стеку. При большом размере массива, например -
byte Buffer[8192] ;
компиляция идет без ошибок и алармов, но программа сбоит. Очевидно происходит наползание области программы на стек.
Вопрос - как вынести стек за пределы внутренней ОЗУ - во внешнюю SDRAM ? Очевидно какой-то директивой компилятора ??? Какую строчку надо добавлять в скетч ? С уважением.
ПС. С программированием на Си знаком только через Ардуино ИДЕ.
Вопрос по стэку компилятора для atmega128.
- Ariadna-on-Line
- Это не хвост, это антенна
- Сообщения: 1479
- Зарегистрирован: Вс май 13, 2012 00:01:54
Re: Вопрос по стэку компилятора для atmega128.
Стек у АВРок (как и у большинства микроконтроллеров) аппаратно привязан к внутреннему ОЗУ.
Изменить размещение равноценно отказу от команд PUSH и POP.
Теоретически это возможно - периодическая выемка части содержимого стека во внешнее ОЗУ (под ассемблером к примеру)...
Однако это уже вопрос компиляторосторения или вариант встроенной операционной системы (с потерей быстродействия).
Как вариант - или разработчик добавит функционал в компилятор своими библиотеками или когда-нибудь кто из гуру в том вопросе своего чего напишет...

Изменить размещение равноценно отказу от команд PUSH и POP.
Теоретически это возможно - периодическая выемка части содержимого стека во внешнее ОЗУ (под ассемблером к примеру)...
Однако это уже вопрос компиляторосторения или вариант встроенной операционной системы (с потерей быстродействия).
Как вариант - или разработчик добавит функционал в компилятор своими библиотеками или когда-нибудь кто из гуру в том вопросе своего чего напишет...
- Ariadna-on-Line
- Это не хвост, это антенна
- Сообщения: 1479
- Зарегистрирован: Вс май 13, 2012 00:01:54
Re: Вопрос по стэку компилятора для atmega128.
Если я правильно понимаю ДШ, 16-разрядный регистр SP (stack pointer SPH + SPL) должен быть принудительно установлен на любой адрес больше 60H. Это и будет дно стека. 16 разрядов как раз и есть 64КБ. Так что никакой аппаратной привязки к дну внутренней памяти в АТмеге128 - нету.
Просто эта процедура начальной инициации регистров процессора выполняется на первых тактах работы программы, ДО загрузки библиотек, процедур и прерываний. Она скрыта компилятором от глаз программиста ЯВУ как автоматическая рутинная операция. Должна быть задействована какая-то директива компилятору.
Просто эта процедура начальной инициации регистров процессора выполняется на первых тактах работы программы, ДО загрузки библиотек, процедур и прерываний. Она скрыта компилятором от глаз программиста ЯВУ как автоматическая рутинная операция. Должна быть задействована какая-то директива компилятору.
Re: Вопрос по стэку компилятора для atmega128.
Ощибка - указатель стека может адресовать только внутреннее ОЗУ МК.
У каждого соответственно его размерам.
На применение указателя стека с операциями во внешнем ОЗУ МК не рассчитаны (ибо таковое в подавляющем большинстве случаев физически отсутствует).
Насчет двубайтового формата SP - ОЗУ в том же 128м - 4 килобайта - это диапазон от 0х0000 до 0x0FFF - однобайтовым указателем тут никак не обойдешся.

У каждого соответственно его размерам.
На применение указателя стека с операциями во внешнем ОЗУ МК не рассчитаны (ибо таковое в подавляющем большинстве случаев физически отсутствует).
Насчет двубайтового формата SP - ОЗУ в том же 128м - 4 килобайта - это диапазон от 0х0000 до 0x0FFF - однобайтовым указателем тут никак не обойдешся.
- Ariadna-on-Line
- Это не хвост, это антенна
- Сообщения: 1479
- Зарегистрирован: Вс май 13, 2012 00:01:54
Re: Вопрос по стэку компилятора для atmega128.
Даташит вроде говорит иное.
Хорошо - как заставить компилятор организовать стек во внешней памяти ? Чтобы "стандартный" стек не разрывал внутреннее и внешнее пространство. Хрен его знает как он это сделает - может быть без использования SP ?!
Хорошо - как заставить компилятор организовать стек во внешней памяти ? Чтобы "стандартный" стек не разрывал внутреннее и внешнее пространство. Хрен его знает как он это сделает - может быть без использования SP ?!
- Вложения
-
- External Stack.png
- (70.7 КБ) 163 скачивания
Re: Вопрос по стэку компилятора для atmega128.
В таком случае у компилятора должны быть предусмотрены соответствующие ключи управления для конкретных микроконтроллеров.
Тип МК, размер подключаемой внешней памяти и указание на размещение в ней стека.
Настройка регистров управления внешним ОЗУ останется на совести программиста.
Это разве что спецы по настройкам компилятора Си подскажут...
Если под ассемблером - вчитываться в управление внешним ОЗУ надо да выставить настройку соответствующих регистров управления. Разметка пространства - творчество автора программы, но с учетом всех имеющихся и в программе и в физическом распределении ресурсов особенностей.

Тип МК, размер подключаемой внешней памяти и указание на размещение в ней стека.
Настройка регистров управления внешним ОЗУ останется на совести программиста.
Это разве что спецы по настройкам компилятора Си подскажут...
Если под ассемблером - вчитываться в управление внешним ОЗУ надо да выставить настройку соответствующих регистров управления. Разметка пространства - творчество автора программы, но с учетом всех имеющихся и в программе и в физическом распределении ресурсов особенностей.
- Ariadna-on-Line
- Это не хвост, это антенна
- Сообщения: 1479
- Зарегистрирован: Вс май 13, 2012 00:01:54
Re: Вопрос по стэку компилятора для atmega128.
[uquote="BOB51",url="/forum/viewtopic.php?p=4076184#p4076184"]В таком случае у компилятора должны быть предусмотрены соответствующие ключи управления для конкретных микроконтроллеров.
Тип МК, размер подключаемой внешней памяти и указание на размещение в ней стека.
Настройка регистров управления внешним ОЗУ останется на совести программиста.
[/uquote]1. В этом и заключается мой вопрос. Какую строчку надо вписать в скетч, чтобы компилятор создал стек в нужном месте, в том числе - во внешней памяти.
2. Настроить регистры на управление внешней памятью - не проблема. Все настраивается и работает.
Тип МК, размер подключаемой внешней памяти и указание на размещение в ней стека.
Настройка регистров управления внешним ОЗУ останется на совести программиста.
2. Настроить регистры на управление внешней памятью - не проблема. Все настраивается и работает.
Re: Вопрос по стэку компилятора для atmega128.
Не совсем так...
От настроек регистров управления будут зависеть свойства ОЗУ соответствующих областей...
а это, в свою очередь, должно быть (вероятно) как-то указано компилятору.
Вобчемсс... Ждем участия/комметариев ГУРУ по Си...

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