mml 0 September 6, 2016 Posted September 6, 2016 · Report post Как сделать, чтобы определенный участок кода выполнялся не из флэш а из ОЗУ. Так нужно, потому что этот код будет стирать флэш и записывать в нее новую программу. (Программа стирает сама себя, и при этом должна работать). Микроконтроллер Atmel SAM4S. Среда AtmelStudio. Quote Share this post Link to post Share on other sites More sharing options...
Daniil 0 September 6, 2016 Posted September 6, 2016 · Report post А почему в подфоруме AVR, а не ARM? RAMFUNC? http://www.atmel.com/Images/Atmel-42249-Ex...ote_AT07347.pdf Quote Share this post Link to post Share on other sites More sharing options...
mml 0 September 6, 2016 Posted September 6, 2016 · Report post Спасибо, смотрю. А почему в подфоруме AVR, а не ARM? Тут вопрос скорее по среде программирования а не по архитектуре контроллера. Quote Share this post Link to post Share on other sites More sharing options...
mml 0 September 6, 2016 Posted September 6, 2016 · Report post В данном документе описано как прерывания перевести с работы из флэш на работу из РАМ. А нет ли где пошаговой инструкции как сделать функцию int f(int) выполняемой из РАМ? Quote Share this post Link to post Share on other sites More sharing options...
Сергей Борщ 4 September 6, 2016 Posted September 6, 2016 · Report post А нет ли где пошаговой инструкции как сделать функцию int f(int) выполняемой из РАМ?Чем функция int f(int) глобально отличается от функции void Какой_то_Handler(void)? Quote Share this post Link to post Share on other sites More sharing options...
mml 0 September 6, 2016 Posted September 6, 2016 (edited) · Report post Все заработало! Спасибо! Edited September 6, 2016 by mml Quote Share this post Link to post Share on other sites More sharing options...
mml 0 September 7, 2016 Posted September 7, 2016 · Report post Не работают брекпоинты в некоторых рамфункциях, а в некоторых работают. Почему? Quote Share this post Link to post Share on other sites More sharing options...
Сергей Борщ 4 September 7, 2016 Posted September 7, 2016 · Report post Не работают брекпоинты в некоторых рамфункциях, а в некоторых работают. Почему?В исходном коде или в дизассемблированном? Строки исходного кода могут быть выкинуты оптимизатором. Quote Share this post Link to post Share on other sites More sharing options...
mml 0 September 7, 2016 Posted September 7, 2016 (edited) · Report post оптимизатор отключен мне кажется дебагер не понимает, что функция копируется инициализатором в рам и ставит брекпоинты во флэш В исходном коде или в дизассемблированном? Строки исходного кода могут быть выкинуты оптимизатором. Пишет, что в ран моде не может быть открыто окно с дизассемблером. А мне надо быть в ране. Бреакпоинт должен стоять на обработчике прерывания (который сейчас RAMFUNC). Потом я вызываю прерывание, и хочу остановиться на бреакпоинте. Пока функция была не RAMFUNC так работало. Функция main сейчас тоже RAMFUNC, и в ней тоже невозможно поставить бреакпоинт. Edited September 7, 2016 by mml Quote Share this post Link to post Share on other sites More sharing options...
Сергей Борщ 4 September 7, 2016 Posted September 7, 2016 · Report post оптимизатор отключенСочувствую. мне кажется дебагер не понимает, что функция копируется инициализатором в рам и ставит брекпоинты во флэш Если вы действовали по приведенному в сообщении Daniil документу, то там код функции располагается в ОЗУ, как и положено. Во флеше расположен образ кода функции и у отладчика нет никаких оснований ставить туда точки останова: .relocate : AT (_etext) { . = ALIGN(4); _sfixed_ram_vect = .; KEEP(*(.ram_vectors .ram_vectors.*)); _srelocate = .; *(.ramfunc .ramfunc.*); *(.data .data.*); Вы можете убедиться в этом, посмотрев содержимое .map - файла. Пишет, что в ран моде не может быть открыто окно с дизассемблером.Остановите. Потом запустите. Quote Share this post Link to post Share on other sites More sharing options...
mml 0 September 7, 2016 Posted September 7, 2016 · Report post .relocate : AT (_etext) { . = ALIGN(4); _sfixed_ram_vect = .; KEEP(*(.ram_vectors .ram_vectors.*)); _srelocate = .; *(.ramfunc .ramfunc.*); *(.data .data.*); Так сделал. Подскажите, пожалуйста документ, в котором описаны все ключики для линковщика. Буду изучать. Quote Share this post Link to post Share on other sites More sharing options...
Сергей Борщ 4 September 7, 2016 Posted September 7, 2016 · Report post Подскажите, пожалуйста документ, в котором описаны все ключики для линковщика. Буду изучать. https://sourceware.org/binutils/docs/ld/ Quote Share this post Link to post Share on other sites More sharing options...