Использует ли загрузчик SRAM?

Я хочу использовать всю SRAM Arduino, написав код на ассемблере. Но использует ли загрузчик некоторое количество SRAM во время работы программы, и если ответ да, приведет ли изменение этих данных к сбою или данные, хранящиеся там, будут повреждены? Благодарим за обращение.

, 👍0


1 ответ


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

5

Вы не указали, какой тип Arduino вы используете. Мой ответ для основанные на AVR.

Загрузчик использует оперативную память во время работы. Однако, как только это управляет вашей программой, микроконтроллер полностью ваш: вы могут свободно использовать всю оперативную память.

Я не проверял с помощью optiboot, но возможно, что загрузчик оставляет некоторые вещи в стеке. Среда выполнения C avr-libc позаботится из этого: одна из первых вещей, которые он делает, это сбрасывает указатель стека. Если вы скомпонуете avr-libc, вы обнаружите, что стек пуст. если ты нет, я предлагаю вам установить указатель стека на RAMEND в начале вашу программу, на всякий случай.

,

Я ожидал, что это не так, но видимо optiboot, поскольку он был скомпилирован для UNO, оставляет 2 байта в стеке, вводя код приложения с SP = 0x8FD. Это не имеет значения по причине, которую вы указали, но я думаю, это забавные бесполезные мелочи. знак равно, @timemage

Нужны ли вам эти два байта, зависит от детали архитектуры: записывается ли указатель стека, затем уменьшается или наоборот на процессоре avr?, @PMF

@PMF: в AVR указатель стека декрементируется при записи в стек., @Edgar Bonet