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

0

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

volatile byte shifty_data[3];

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

Теги:
arduino
arduino-ide
avr

1 ответ

1
Лучший ответ

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

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

  • 0
    да, спасибо, я в конечном итоге использую глобальную переменную, и ее адрес может быть вставлен в progspace, который является отдельным (отсюда моя путаница), так как они находятся на BSS, адрес известен во время загрузки

Ещё вопросы

Сообщество Overcoder
Наверх
Меню