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

 
 
> CortexM3, запись данных в Program Counter.
Danis
сообщение Nov 28 2011, 11:09
Сообщение #1


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



Привет, коллеги по цеху!

Работаю в IAR, пишу на Си. Имеется надобность прочитать данные из ячейки flash по адресу 0x08000804 и записать их в регистр PC (R15). Походу тут без ассемблера не обойтись. Прошу помощи в реализации кода. Спасибо!


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
borman11
сообщение Nov 28 2011, 18:56
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 16-03-06
Из: Москва
Пользователь №: 15 298



Вот пример из бутлоадера Flash Magic
Код
void execute_user_code(void)
{
    void (*user_code_entry)(void);
    user_code_entry = (void(*)(void)) USER_FLASH_START;
    user_code_entry();
}
Go to the top of the page
 
+Quote Post
Danis
сообщение Nov 29 2011, 06:42
Сообщение #3


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



Цитата(borman11 @ Nov 28 2011, 21:56) *
Вот пример из бутлоадера Flash Magic
.....


подправил под себя:

unsigned int Data = *(u32*)(0x08000804);
void (*user_code_entry)(void);
user_code_entry = (void(*)(void))Data;
user_code_entry();


Да, работает (”перепрыгивает”), спасибо. Но мы тут просто ”тупо” перепрыгнули адрес (Инструкция BLX).
Но как быть с регистром R13(SP), полагаю, для правильной дальнейшей работы его тоже надо инициализировать значением из ячейки 0x08000800?


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 29 2011, 07:43
Сообщение #4


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Danis @ Nov 29 2011, 09:42) *
Но мы тут просто "тупо” перепрыгнули адрес (Инструкция BLX).

"Тупо перепрыгнуть" была бы команда B, а здесь Branch with link and change state.
Вы занесли адрес возврата в LR. А стек при чем? Разве он чем-то забит?
Go to the top of the page
 
+Quote Post
Danis
сообщение Nov 29 2011, 09:05
Сообщение #5


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



Цитата(ViKo @ Nov 29 2011, 10:43) *
А стек при чем? Разве он чем-то забит?


Я ведь с одного проекта на другой перепрыгиваю. Разве можно оставить без инициализации SP?


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 29 2011, 09:14
Сообщение #6


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Danis @ Nov 29 2011, 12:05) *
Я ведь с одного проекта на другой перепрыгиваю. Разве можно оставить без инициализации SP?

Так он же останется прежним. Если стек очищен, значит, указатель будет указывать на начало стека.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st August 2025 - 19:05
Рейтинг@Mail.ru


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