реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Указание линковщику выполнять код из RAM
mml
сообщение Sep 6 2016, 07:16
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 10-11-10
Из: Екатеринбург
Пользователь №: 60 777



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

Микроконтроллер Atmel SAM4S.
Среда AtmelStudio.
Go to the top of the page
 
+Quote Post
Daniil
сообщение Sep 6 2016, 08:03
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 3-09-04
Из: Russia, Novosibirsk
Пользователь №: 590



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

RAMFUNC?
http://www.atmel.com/Images/Atmel-42249-Ex...ote_AT07347.pdf
Go to the top of the page
 
+Quote Post
mml
сообщение Sep 6 2016, 08:24
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 10-11-10
Из: Екатеринбург
Пользователь №: 60 777



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

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


Go to the top of the page
 
+Quote Post
mml
сообщение Sep 6 2016, 10:07
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 10-11-10
Из: Екатеринбург
Пользователь №: 60 777



В данном документе описано как прерывания перевести с работы из флэш на работу из РАМ.
А нет ли где пошаговой инструкции как сделать функцию int f(int) выполняемой из РАМ?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 6 2016, 10:24
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (mml @ Sep 6 2016, 13:07) *
А нет ли где пошаговой инструкции как сделать функцию int f(int) выполняемой из РАМ?
Чем функция int f(int) глобально отличается от функции void Какой_то_Handler(void)?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
mml
сообщение Sep 6 2016, 11:34
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 10-11-10
Из: Екатеринбург
Пользователь №: 60 777



Все заработало!
Спасибо!


Сообщение отредактировал mml - Sep 6 2016, 11:39
Go to the top of the page
 
+Quote Post
mml
сообщение Sep 7 2016, 09:33
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 10-11-10
Из: Екатеринбург
Пользователь №: 60 777



Не работают брекпоинты в некоторых рамфункциях, а в некоторых работают. Почему?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 7 2016, 10:01
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (mml @ Sep 7 2016, 12:33) *
Не работают брекпоинты в некоторых рамфункциях, а в некоторых работают. Почему?
В исходном коде или в дизассемблированном? Строки исходного кода могут быть выкинуты оптимизатором.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
mml
сообщение Sep 7 2016, 10:44
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 10-11-10
Из: Екатеринбург
Пользователь №: 60 777



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

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

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

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

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

Сообщение отредактировал mml - Sep 7 2016, 10:47
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 7 2016, 11:20
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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) *
Пишет, что в ран моде не может быть открыто окно с дизассемблером.
Остановите. Потом запустите.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
mml
сообщение Sep 7 2016, 11:34
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 10-11-10
Из: Екатеринбург
Пользователь №: 60 777



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

Так сделал. Подскажите, пожалуйста документ, в котором описаны все ключики для линковщика. Буду изучать.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 7 2016, 15:14
Сообщение #12


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (mml @ Sep 7 2016, 14:34) *
Подскажите, пожалуйста документ, в котором описаны все ключики для линковщика. Буду изучать.
https://sourceware.org/binutils/docs/ld/


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 22:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01454 секунд с 7
ELECTRONIX ©2004-2016