Перейти к содержанию
    

Указание линковщику выполнять код из RAM

Как сделать, чтобы определенный участок кода выполнялся не из флэш а из ОЗУ.

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

 

Микроконтроллер Atmel SAM4S.

Среда AtmelStudio.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А почему в подфоруме AVR, а не ARM?

 

RAMFUNC?

http://www.atmel.com/Images/Atmel-42249-Ex...ote_AT07347.pdf

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, смотрю.

 

А почему в подфоруме AVR, а не ARM?

Тут вопрос скорее по среде программирования а не по архитектуре контроллера.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В данном документе описано как прерывания перевести с работы из флэш на работу из РАМ.

А нет ли где пошаговой инструкции как сделать функцию int f(int) выполняемой из РАМ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А нет ли где пошаговой инструкции как сделать функцию int f(int) выполняемой из РАМ?
Чем функция int f(int) глобально отличается от функции void Какой_то_Handler(void)?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все заработало!

Спасибо!

 

Изменено пользователем mml

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не работают брекпоинты в некоторых рамфункциях, а в некоторых работают. Почему?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не работают брекпоинты в некоторых рамфункциях, а в некоторых работают. Почему?
В исходном коде или в дизассемблированном? Строки исходного кода могут быть выкинуты оптимизатором.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

оптимизатор отключен

 

мне кажется дебагер не понимает, что функция копируется инициализатором в рам и ставит брекпоинты во флэш

 

В исходном коде или в дизассемблированном? Строки исходного кода могут быть выкинуты оптимизатором.

Пишет, что в ран моде не может быть открыто окно с дизассемблером.

А мне надо быть в ране. Бреакпоинт должен стоять на обработчике прерывания (который сейчас RAMFUNC). Потом я вызываю прерывание, и хочу остановиться на бреакпоинте. Пока функция была не RAMFUNC так работало.

 

Функция main сейчас тоже RAMFUNC, и в ней тоже невозможно поставить бреакпоинт.

Изменено пользователем mml

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

оптимизатор отключен
Сочувствую.

 

мне кажется дебагер не понимает, что функция копируется инициализатором в рам и ставит брекпоинты во флэш

Если вы действовали по приведенному в сообщении Daniil документу, то там код функции располагается в ОЗУ, как и положено. Во флеше расположен образ кода функции и у отладчика нет никаких оснований ставить туда точки останова:

.relocate : AT (_etext)
{
. = ALIGN(4);
_sfixed_ram_vect = .;
KEEP(*(.ram_vectors .ram_vectors.*));
_srelocate = .;
*(.ramfunc .ramfunc.*);
*(.data .data.*);

 

Вы можете убедиться в этом, посмотрев содержимое .map - файла.

 

Пишет, что в ран моде не может быть открыто окно с дизассемблером.
Остановите. Потом запустите.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

.relocate : AT (_etext)
{
. = ALIGN(4);
_sfixed_ram_vect = .;
KEEP(*(.ram_vectors .ram_vectors.*));
_srelocate = .;
*(.ramfunc .ramfunc.*);
*(.data .data.*);

Так сделал. Подскажите, пожалуйста документ, в котором описаны все ключики для линковщика. Буду изучать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите, пожалуйста документ, в котором описаны все ключики для линковщика. Буду изучать.
https://sourceware.org/binutils/docs/ld/

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...