Например TDA7294

Форум РадиоКот • Просмотр темы - Как указать компилятору Arduino IDE количество SRAM ?
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 24, 2024 03:19:10

Часовой пояс: UTC + 3 часа


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



Начать новую тему Ответить на тему  [ Сообщений: 33 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Как указать компилятору Arduino IDE количество SRAM ?
СообщениеДобавлено: Пн июн 28, 2021 01:13:26 
Это не хвост, это антенна
Аватар пользователя

Карма: 17
Рейтинг сообщений: 223
Зарегистрирован: Вс май 13, 2012 00:01:54
Сообщений: 1352
Рейтинг сообщения: 0
ATmega128. Подключена микросхема 64Кб внешней памяти SRAM. Как указать компилятору, что у процессора имеется не 4Kb, а именно 64 Кбайт памяти.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как указать компилятору Arduino IDE количество SRAM ?
СообщениеДобавлено: Пн июн 28, 2021 07:44:38 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14062
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Применить соответствующую библиотеку.
Где-то упоминание попадалось... Для платформы на атмега 2560.
8)
Работа с внешней памятью данных отличается только набором адресов и линий управления.
Автоматически будут использованы адреса выше имеющихся в самом МК.
Под ассемблером не вопрос.
А вот для компилятора Си...
Особо ежли цель - заставить компилятор всю память под свои нужды использовать (включая стек),
а не просто данные туда скинуть...
:dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как указать компилятору Arduino IDE количество SRAM ?
СообщениеДобавлено: Пн июн 28, 2021 08:13:31 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Как указать компилятору, что у процессора имеется не 4Kb, а именно 64 Кбайт памяти.

это может поможет:
https://www.rlocman.ru/shem/schematics.html?di=110664
Цитата:
А вот для компилятора Си...

несложно... надо линкеру подсказать:
Код:
-Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x8030ff

https://www.rlocman.ru/shem/schematics.html?di=71095


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

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

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Как указать компилятору Arduino IDE количество SRAM ?
СообщениеДобавлено: Пн июн 28, 2021 10:37:48 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14062
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Неплохо... но во внешнюю пошли только данные... стек остался во внутренней.
В принципе для ардуинки вполне себе достаточно.
8)


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Как указать компилятору Arduino IDE количество SRAM ?
СообщениеДобавлено: Пн июн 28, 2021 11:23:31 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 2
но во внешнюю пошли только данные... стек остался во внутренней.

в Цэ можно творить чудеса легким движением:
Цитата:
-Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x8090ff,--defsym=__stack=0x8010ff

з.ы. а скетчи ардуино можно компилить макефайлом, который дает полное управление тем же линкером


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Как указать компилятору Arduino IDE количество SRAM ?
СообщениеДобавлено: Пн июн 28, 2021 14:13:25 
Это не хвост, это антенна
Аватар пользователя

Карма: 17
Рейтинг сообщений: 223
Зарегистрирован: Вс май 13, 2012 00:01:54
Сообщений: 1352
Рейтинг сообщения: 0
Являюсь инженером-электроником. С Си знаком только через скетчи Ардуино ИДЕ. Ничего про мейкфайлы, СИстудии и линкеры не знаю. Напишите пожалуйста просто куда что вписать, чтобы компилятор Ардуино ИДЕ не ругался на превышение размера требуемой оперативной памяти. Служебные структуры типа стека пусть остаются во внутренней памяти. Все пользовательское - в наружу. Это единственное что мне пока надо. С уважением.
ПС. Видимо нужно вставить некий конфигурационный файл в папку со скетчем для компилятора. Где найти инфу как составлять такой файл ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как указать компилятору Arduino IDE количество SRAM ?
СообщениеДобавлено: Пн июн 28, 2021 15:32:03 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
чтоб не изучать мэйк файл пока такой вариант (ссылка была уже):
1) добавить распакованные файлы из архива в папку со своим скетчем
Вложение:
xmem.zip [2.01 KiB]
Скачиваний: 173

2)в скетче использовать так:
Спойлер
Код:
#include <xmem.h>
 
void setup() {
  // initialise the memory
  xmem::begin(false);
}
 
void loop() {
  // declare some pointers into external memory
  int *intptr=reinterpret_cast<int *>(0x2200);
  char *charptr=reinterpret_cast<char *>(0x2200);
 
  // store integers in bank 0
  xmem::setMemoryBank(0,false);
  intptr[0]=1;
  intptr[10000]=2;
  intptr[20000]=3;
 
  // store characters in bank 1
  xmem::setMemoryBank(1,false);
  charptr[0]='a';
  charptr[10000]='b';
  charptr[20000]='c';
 
  delay(1000);
}

з.ы. как добавить в ардуиновом ИДЕ дополнительные параметры линкера не знаю. но вроде можно добавлять флаги типа так:
Код:
Добавьте собственные флаги компилятора в platform.local.txt. Просто создайте его в том же каталоге, где находится platform.txt. Например:

compiler.c.extra_flags=
compiler.c.elf.extra_flags=
compiler.S.extra_flags=
compiler.cpp.extra_flags=-mcall-prologues -fno-split-wide-types -finline-limit=3 -ffast-math
compiler.ar.extra_flags=
compiler.objcopy.eep.extra_flags=
compiler.elf2hex.extra_flags=


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как указать компилятору Arduino IDE количество SRAM ?
СообщениеДобавлено: Пн июн 28, 2021 16:45:18 
Это не хвост, это антенна
Аватар пользователя

Карма: 17
Рейтинг сообщений: 223
Зарегистрирован: Вс май 13, 2012 00:01:54
Сообщений: 1352
Рейтинг сообщения: 0
Прошу прощения. Надо было начинать с другого конца.
Гоняю проект в Протеусе, а он как известно глючит не редко. Модель CPU - ATmega128. Процедура включения интерфейса внешнего ОЗУ

MCUCR |= (1<<SRE); // Разрешить внешний интерфейс ОЗУ
XMCRA = 0; //
//XMCRB |= (1<<XMM1)|(1<<XMM0); // PC7..PC5 released pins
XMCRB = 0; // Нам нужны Все разряды адреса

После исполнения этих команд линии Адреса, #RD, #WR, ALE активизируются. И вроде бы должны сразу работать. Но они никак не действуют при чтении-записи. Толи это глюк модели процессора, толи чего-то не хватает. Процессор как бы продолжает работать на внутренней памяти.


Вложения:
Безым.png [89.01 KiB]
Скачиваний: 148
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как указать компилятору Arduino IDE количество SRAM ?
СообщениеДобавлено: Пн июн 28, 2021 18:20:21 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
а как чтение-запись сделано (кусочек кода).
Протеус не всесилен:
Спойлер
Цитата:
Features
We believe our simulation models are the most accurate and the most complete on the market today. A
summary of model capabilities is listed below:
• Supports the entire instruction set.
• Supports all port and other I/O pin operations.
• Supports all counter/timers including seperate prescalers, capture compare and PWM modes.
• Supports watchdog timer.
• Supports serial U(S)ART.
• Supports master slave SPI, USI and TWI serial interfaces.
• Supports Analogue-to-Digital Conversion (ADC) and analogue comparator modules in all modes.
• Supports all internal and external interrupt modes.
• Supports internal code and data EEPROM memory inc. code protection and data persistence.
• Internally generated processor clock for performance. Event timing accurate to one clock period.
• Provides internal consistency checks on code (e.g. execution of invalid op-codes, illegal memory accesses,
stack overflow checking, etc.).
• Fully integrated in to the VSM source level debugging system.
• Fully integrated into the Proteus Diagnostic Control System.
Limitations
The following is a listing of known limitations in the current version of the AVR® family:
x Brown-out Reset is not implemented.
x Power supply voltage changing is not supported.
x JTAG and other in-circuit debugging interfaces are not supported.
x External programming of memories is not supported.
x Electrical characteristics dependency of the temperature is not implemented.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как указать компилятору Arduino IDE количество SRAM ?
СообщениеДобавлено: Вт июн 29, 2021 02:07:20 
Это не хвост, это антенна
Аватар пользователя

Карма: 17
Рейтинг сообщений: 223
Зарегистрирован: Вс май 13, 2012 00:01:54
Сообщений: 1352
Рейтинг сообщения: 0
Обана. Вы имеете в виду предпоследнюю строчку текста под катом ? Не поддерживается программирование внешней памяти. Видимо это оно и есть.
Ммммдя. Протеус не катит. В какой проге есть симулятор вроде Протеуса ? Придется мудрить в реале. Всем большое спасибо.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как указать компилятору Arduino IDE количество SRAM ?
СообщениеДобавлено: Вт июн 29, 2021 08:20:13 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Неоднозначно написано, но и не написано что поддерживается. Если протеус купленный - можно разрабам вопрос задать.

под линукс (Debian) есть прекрасный Simulavr
https://crafting.be/2013/09/simulavr-start/
Можно дебиан в виртуалбоксе установить (ISO-диск всего 300мБ) - гораздо быстрее виндовса устанавливается, и даже иксы/вэйланды не потребуются.
Под другие линуксы придется скомпилировать - есть исходник. Должно бы и под виндовс скомпилироваться в MinGW (Msys2).
В виндовс10 сейчас есть WSL(2) - там под внутренней убунтой должно заработать.

Внешнюю память похоже в симулавр симулировать можно:
Цитата:
Execution timing should be nearly accurate, different access times for internal RAM / external RAM / EEPROM and other hardware components are simulated.

https://www.nongnu.org/simulavr/features.html

Можно симулавр и под ардуино пристроить:
Running an Arduino sketch with a simulavr script
http://sgerwk.altervista.org/simulavrsc ... ulate.html


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как указать компилятору Arduino IDE количество SRAM ?
СообщениеДобавлено: Вт июн 29, 2021 18:17:45 
Это не хвост, это антенна
Аватар пользователя

Карма: 17
Рейтинг сообщений: 223
Зарегистрирован: Вс май 13, 2012 00:01:54
Сообщений: 1352
Рейтинг сообщения: 0
Оказалось - просто. Интерфейс внешней памяти, включается при обращении к адресам больше чем 4096. Протеус работает. Но записать и считать в виртуальную микру памяти - не получается. Считанные данные - фигня.
Код:
---
MCUCR |= (1<<SRE);              // External memory interface enable
XMCRA = 0;
XMCRB = 0;                            // Нам нужны Все разряды адреса
---
byte* mem;                            //
   mem = (byte*)malloc(BUFFER_SIZE);    //
---
// Fill memory incrementing values
int index;
byte Data;   
for(index = 0; index < (BUFFER_SIZE + 1); index++) {
    mem[index + Offset] = Data;
    Data++       
  } 
// Display memory block   
for(index = 0; index < (BUFFER_SIZE + 1); index++) {
    Serial.print(mem[index + Offset], HEX);
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как указать компилятору Arduino IDE количество SRAM ?
СообщениеДобавлено: Вт июн 29, 2021 18:46:40 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
по картинке и в доке внешняя начинается с адреса 4352 (ATmega128 in non ATmega103 compatibility mode: Memory Configuration A is available)
Изображение
Цитата:
An optional external data SRAM can be used with the ATmega128. This SRAM will occupy an
area in the remaining address locations in the 64K address space. This area starts at the
address following the internal SRAM. The Register file, I/O, Extended I/O and Internal SRAM
occupies the lowest 4352bytes in normal mode, and the lowest 4096bytes in the ATmega103
compatibility mode (Extended I/O not present), so when using 64Kbyte (65536 bytes) of External Memory, 61184bytes of External Memory are available in normal mode, and 61440 bytes in
ATmega103 compatibility mode. See “External Memory Interface” on page 25 for details on how
to take advantage of the external memory map


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как указать компилятору Arduino IDE количество SRAM ?
СообщениеДобавлено: Вт июн 29, 2021 21:55:08 
Это не хвост, это антенна
Аватар пользователя

Карма: 17
Рейтинг сообщений: 223
Зарегистрирован: Вс май 13, 2012 00:01:54
Сообщений: 1352
Рейтинг сообщения: 0
Блин, чем дальше тем страшней, толи Протеус, толи код. Затормозил делАями() код - оказалось :
1. При записи адреса равны байту данных. Не меняется байт данных - все пишется в одну ячейку !!!
2. Вызывают подозрение вызывают слишком близкие стробы ALE и #WR - это требует скоростного регистра адреса).
3. При чтении - линии AD0-AD7 не шевелятся вообще. (!!!). Находятся в 1-цах. То есть проц не меняет адреса чтения.

Команда записи - mem[index + Offset] = Data;
Команда чтения - Data = mem[index + Offset];
Этого вообще достаточно ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как указать компилятору Arduino IDE количество SRAM ?
СообщениеДобавлено: Ср июн 30, 2021 08:04:06 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
в официальной документации есть пример:
гуглоперевод
Цитата:
Поскольку внешняя память отображается после внутренней памяти, как показано на рисунке 11, только 60 Кбайт внешней памяти доступен по умолчанию (адресное пространство от 0x0000 до 0x10FF зарезервировано для внутренней памяти). Однако можно использовать всю внешнюю память, маскирование старших бит адреса до нуля. Это можно сделать с помощью битов XMMn и управления программно наиболее значимые биты адреса. Установив порт C на выход 0x00 и высвободив наиболее значимые биты для нормальной работы вывода порта, интерфейс памяти будет адресовать 0x0000 - 0x1FFF. См. следующие примеры кода

C Code Example
Код:
#define OFFSET 0x2000
void XRAM_example(void)
{
  unsigned char *p = (unsigned char *) (OFFSET + 1);
  DDRC = 0xFF;
  PORTC = 0x00;
  XMCRB = (1<<XMM1) | (1<<XMM0);
  *p = 0xaa;
  XMCRB = 0x00;
  *p = 0x55;
}

з.ы. в протеусе можно поглядеть дамп памяти, после выполнения этого примера (если он выполнится конечно)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как указать компилятору Arduino IDE количество SRAM ?
СообщениеДобавлено: Ср июн 30, 2021 10:49:34 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14062
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
ГЫММ....oleg110592
Насчет использования ВПД...
А если без макефайлов, а только malloс?
Или непосредственно заданный адрес указателя на переменную...
:roll:

Касательно режимов ВПД у АВРок...
Там множество вариантов в настройках стробов и времени доступа - надо внимательно документацию смотреть.
Не мешает узнать не установлен ли "режим совместимости с мегой 103"...
Дополнительно смотрим документацию на кристалл используемого ОЗУ (время доступа).
Стандартный регистр защелки младшего адреса там как и у mcs51 - К1533ИР33(74HC573).
Второе - как монтаж выполнен - качество линий влияет на скорость обмена.
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как указать компилятору Arduino IDE количество SRAM ?
СообщениеДобавлено: Ср июн 30, 2021 11:20:56 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
ГЫММ....oleg110592
ВПД... А если без макефайлов, а только malloс?

(ВПД)Воинские перевозочные документы?
malloс обсуждалось - все равно надо каким то образом указать. В ардуино иде, как выше показано, есть способ (не проверено).
Цитата:
Переменные __malloc_heap_start и __malloc_heap_end могут использоваться для ограничения функции malloc(), чтобы она работала в определенной области памяти. Эти переменные статически инициализируются для указания на начало кучи __heap_start и конец кучи __heap_end соответственно, where __heap_start заполняется линкером для указания области вне .bss, и __heap_end устанавливается в 0, чем подразумевается для malloc(), что куча находится ниже стека (стек расположен в более старших адресах, чем куча).

Если куча перенесена в external RAM, то __malloc_heap_end должна быть настроена соответствующим образом. Это можно сделать либо во время выполнения кода (run-time), путем записи значения в эту переменную, или это может быть реализовано автоматически во время линковки (link-time), путем настройки значения символа __heap_end.

http://microsin.net/programming/avr/avr ... alloc.html


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как указать компилятору Arduino IDE количество SRAM ?
СообщениеДобавлено: Ср июн 30, 2021 12:09:21 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14062
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Чего язвимс то?
Внешняя Память Данных
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как указать компилятору Arduino IDE количество SRAM ?
СообщениеДобавлено: Ср июн 30, 2021 13:11:35 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Опять домыслы. Язвят на развлекательных форумах, а тут требуется уточнение. У mega128 по документации External Memory Interface.
Цитата:
With all the features the External Memory Interface provides, it is well suited to operate as an
interface to memory devices such as External SRAM and Flash, and peripherals such as LCDdisplay, A/D, and D/A.

т.е. не только память данных можно подключать, а и флэш и пр. периферию...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как указать компилятору Arduino IDE количество SRAM ?
СообщениеДобавлено: Ср июн 30, 2021 14:49:20 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14062
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
По старому - доброму Устройства Ввода-Вывода, отображенные на пространство Внешней Памяти Данных.
Попривыкали все на ШПИК ИНГЛИШ, забывая с чего начинали.
8)


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 33 ]  1,  

Часовой пояс: UTC + 3 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


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

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


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