выделить / зарезервировать avr sram с известным адресом во время загрузки, чтобы поместиться в прогс

я пытаюсь зарезервировать несколько байтов sram, где адрес ДОЛЖЕН быть известен во время загрузки, чтобы его можно было вставить в PROGSPACE. До сих пор я проверял мой код в порядке с хитрым распределением на плате Arduino Nano, установив адрес (0x1F6) и последний в программе, которую я делаю

volatile byte shifty_data[3];

чтобы его не переписали в кучу …
код работает нормально, но я не доволен этим, потому что он не совместим с другими ядрами и, возможно, с изменениями среды.
До сих пор я рассматривал изменения в malloc __heap_start (безуспешно, потому что он не постоянен, а адрес неизвестен во время загрузки, я думаю), я также смотрел на avr / io.h и, в частности, на iom328p.h через RAMSTART определяет, что это может работать, но … на systemn это кажется слишком низким, поскольку я хочу использовать аппаратный SPI поверх него … и это может быть лучшим способом сделать это на более высоком уровне, предпочтительно в файлах arduino.
есть идеи?

0

Решение

Я не совсем уверен, что вы спрашиваете здесь, но есть две важные вещи, которые я считаю, что вы неправильно понимаете. Пространство программы отделено от SRAM. они находятся в двух разных адресных автобусах. AVR фактически предоставляет инструкцию для копирования данных из программного пространства в RAM из-за этого разделения [делая его модифицированной гарвардской архитектурой]. Кроме того, есть еще одна вещь, что любая объявленная глобально переменная будет находиться либо в разделе .bss, либо в разделе .data SRAM (это на самом деле является частью стандарта C). __do_copy_data а также __do_clear_bss разделы конечного исполняемого файла позаботятся об этом [они автоматически добавляются в раздел .init4]. Вы можете переопределить этот механизм, используя флаги компилятора, однако адрес каждой глобальной переменной известен с момента запуска программы [что-то, что происходит из флэш-памяти, а не из SRAM].

Теперь, помещая вещи в SRAM, я предлагаю вам взглянуть на эта страница в руководстве по avr-libc. Он имеет дело с разделами памяти в целом и как их настроить. Приветствия.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector