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