Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Указание линковщику выполнять код из RAM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
mml
Как сделать, чтобы определенный участок кода выполнялся не из флэш а из ОЗУ.
Так нужно, потому что этот код будет стирать флэш и записывать в нее новую программу. (Программа стирает сама себя, и при этом должна работать).

Микроконтроллер Atmel SAM4S.
Среда AtmelStudio.
Daniil
А почему в подфоруме AVR, а не ARM?

RAMFUNC?
http://www.atmel.com/Images/Atmel-42249-Ex...ote_AT07347.pdf
mml
Спасибо, смотрю.

А почему в подфоруме AVR, а не ARM?
Тут вопрос скорее по среде программирования а не по архитектуре контроллера.


mml
В данном документе описано как прерывания перевести с работы из флэш на работу из РАМ.
А нет ли где пошаговой инструкции как сделать функцию int f(int) выполняемой из РАМ?
Сергей Борщ
QUOTE (mml @ Sep 6 2016, 13:07) *
А нет ли где пошаговой инструкции как сделать функцию int f(int) выполняемой из РАМ?
Чем функция int f(int) глобально отличается от функции void Какой_то_Handler(void)?
mml
Все заработало!
Спасибо!
mml
Не работают брекпоинты в некоторых рамфункциях, а в некоторых работают. Почему?
Сергей Борщ
QUOTE (mml @ Sep 7 2016, 12:33) *
Не работают брекпоинты в некоторых рамфункциях, а в некоторых работают. Почему?
В исходном коде или в дизассемблированном? Строки исходного кода могут быть выкинуты оптимизатором.
mml
оптимизатор отключен

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

Цитата(Сергей Борщ @ Sep 7 2016, 14:01) *
В исходном коде или в дизассемблированном? Строки исходного кода могут быть выкинуты оптимизатором.

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

Функция main сейчас тоже RAMFUNC, и в ней тоже невозможно поставить бреакпоинт.
Сергей Борщ
QUOTE (mml @ Sep 7 2016, 13:44) *
оптимизатор отключен
Сочувствую.

QUOTE (mml @ Sep 7 2016, 13:44) *
мне кажется дебагер не понимает, что функция копируется инициализатором в рам и ставит брекпоинты во флэш

Если вы действовали по приведенному в сообщении Daniil документу, то там код функции располагается в ОЗУ, как и положено. Во флеше расположен образ кода функции и у отладчика нет никаких оснований ставить туда точки останова:
CODE
.relocate : AT (_etext)
{
. = ALIGN(4);
_sfixed_ram_vect = .;
KEEP(*(.ram_vectors .ram_vectors.*));
_srelocate = .;
*(.ramfunc .ramfunc.*);
*(.data .data.*);


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

QUOTE (mml @ Sep 7 2016, 13:44) *
Пишет, что в ран моде не может быть открыто окно с дизассемблером.
Остановите. Потом запустите.
mml
Код
.relocate : AT (_etext)
{
. = ALIGN(4);
_sfixed_ram_vect = .;
KEEP(*(.ram_vectors .ram_vectors.*));
_srelocate = .;
*(.ramfunc .ramfunc.*);
*(.data .data.*);

Так сделал. Подскажите, пожалуйста документ, в котором описаны все ключики для линковщика. Буду изучать.
Сергей Борщ
QUOTE (mml @ Sep 7 2016, 14:34) *
Подскажите, пожалуйста документ, в котором описаны все ключики для линковщика. Буду изучать.
https://sourceware.org/binutils/docs/ld/
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.