Применить соответствующую библиотеку. Где-то упоминание попадалось... Для платформы на атмега 2560.
Работа с внешней памятью данных отличается только набором адресов и линий управления. Автоматически будут использованы адреса выше имеющихся в самом МК. Под ассемблером не вопрос. А вот для компилятора Си... Особо ежли цель - заставить компилятор всю память под свои нужды использовать (включая стек), а не просто данные туда скинуть...
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Являюсь инженером-электроником. С Си знаком только через скетчи Ардуино ИДЕ. Ничего про мейкфайлы, СИстудии и линкеры не знаю. Напишите пожалуйста просто куда что вписать, чтобы компилятор Ардуино ИДЕ не ругался на превышение размера требуемой оперативной памяти. Служебные структуры типа стека пусть остаются во внутренней памяти. Все пользовательское - в наружу. Это единственное что мне пока надо. С уважением. ПС. Видимо нужно вставить некий конфигурационный файл в папку со скетчем для компилятора. Где найти инфу как составлять такой файл ?
Прошу прощения. Надо было начинать с другого конца. Гоняю проект в Протеусе, а он как известно глючит не редко. Модель CPU - ATmega128. Процедура включения интерфейса внешнего ОЗУ
MCUCR |= (1<<SRE); // Разрешить внешний интерфейс ОЗУ XMCRA = 0; // //XMCRB |= (1<<XMM1)|(1<<XMM0); // PC7..PC5 released pins XMCRB = 0; // Нам нужны Все разряды адреса
После исполнения этих команд линии Адреса, #RD, #WR, ALE активизируются. И вроде бы должны сразу работать. Но они никак не действуют при чтении-записи. Толи это глюк модели процессора, толи чего-то не хватает. Процессор как бы продолжает работать на внутренней памяти.
а как чтение-запись сделано (кусочек кода). Протеус не всесилен: Спойлер
Цитата:
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.
Обана. Вы имеете в виду предпоследнюю строчку текста под катом ? Не поддерживается программирование внешней памяти. Видимо это оно и есть. Ммммдя. Протеус не катит. В какой проге есть симулятор вроде Протеуса ? Придется мудрить в реале. Всем большое спасибо.
Неоднозначно написано, но и не написано что поддерживается. Если протеус купленный - можно разрабам вопрос задать.
под линукс (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.
Оказалось - просто. Интерфейс внешней памяти, включается при обращении к адресам больше чем 4096. Протеус работает. Но записать и считать в виртуальную микру памяти - не получается. Считанные данные - фигня.
по картинке и в доке внешняя начинается с адреса 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
Блин, чем дальше тем страшней, толи Протеус, толи код. Затормозил делАями() код - оказалось : 1. При записи адреса равны байту данных. Не меняется байт данных - все пишется в одну ячейку !!! 2. Вызывают подозрение вызывают слишком близкие стробы ALE и #WR - это требует скоростного регистра адреса). 3. При чтении - линии AD0-AD7 не шевелятся вообще. (!!!). Находятся в 1-цах. То есть проц не меняет адреса чтения.
Команда записи - mem[index + Offset] = Data; Команда чтения - Data = mem[index + Offset]; Этого вообще достаточно ?
в официальной документации есть пример: гуглоперевод
Цитата:
Поскольку внешняя память отображается после внутренней памяти, как показано на рисунке 11, только 60 Кбайт внешней памяти доступен по умолчанию (адресное пространство от 0x0000 до 0x10FF зарезервировано для внутренней памяти). Однако можно использовать всю внешнюю память, маскирование старших бит адреса до нуля. Это можно сделать с помощью битов XMMn и управления программно наиболее значимые биты адреса. Установив порт C на выход 0x00 и высвободив наиболее значимые биты для нормальной работы вывода порта, интерфейс памяти будет адресовать 0x0000 - 0x1FFF. См. следующие примеры кода
ГЫММ....oleg110592 Насчет использования ВПД... А если без макефайлов, а только malloс? Или непосредственно заданный адрес указателя на переменную...
Касательно режимов ВПД у АВРок... Там множество вариантов в настройках стробов и времени доступа - надо внимательно документацию смотреть. Не мешает узнать не установлен ли "режим совместимости с мегой 103"... Дополнительно смотрим документацию на кристалл используемого ОЗУ (время доступа). Стандартный регистр защелки младшего адреса там как и у mcs51 - К1533ИР33(74HC573). Второе - как монтаж выполнен - качество линий влияет на скорость обмена.
ГЫММ....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.
Опять домыслы. Язвят на развлекательных форумах, а тут требуется уточнение. У 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.
т.е. не только память данных можно подключать, а и флэш и пр. периферию...
По старому - доброму Устройства Ввода-Вывода, отображенные на пространство Внешней Памяти Данных. Попривыкали все на ШПИК ИНГЛИШ, забывая с чего начинали.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения