Atridies 0 4 января, 2014 Опубликовано 4 января, 2014 · Жалоба Спасибо за ответы! Проблема несколько модифицировалась, но не буду создавать отдельной темы. Итак: перенес основное ПО в верхние адреса, перенес туда же вектора прерываний (временно убрав полностью использование прерываний: только ResetVector и начальное значение SP). Если в начальных адресах ставлю такие же значения для ResetVector и SP, как в векторах прерываний - все отлично работает. Но если - в ResetVector - указать адрес функции, где стоит тупо asm("B ххх") (где xxx - тот же адрес, что и в ResetVector) - ничего не работает. Скажу по-другому: Изначально ПО и вектора прерываний - лежат в 0x0800'0000. Переношу ПО и вектора в 0x0800'8000, а в 0x0800'0000 - ставлю константами те же значения, что и в 0x0800'8000 - 8 байт (SP и указатель Reset-а = 0x0800'8E41). Все работает. Добавляю функцию в 0x0800'0100, которая состоит из одной команды " B 0x0800'8E41 ". Заменяю указатель Reset-а - на 0x0800'0100. Ничего не работает. В чем дело? Я ведь добавил-то только безусловный переход... P.S. Да, оказывается у меня Cortex-M3 и соответственно VTOR - есть. Только от этого пока не легче. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Atridies 0 6 января, 2014 Опубликовано 6 января, 2014 · Жалоба Проблема решена. "указатель Reset-а - на 0x0800'0100." - должно быть 0x0800'0101. У кортекса все адреса почему-то сдвинуты на один байт вперед. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alx125 0 6 января, 2014 Опубликовано 6 января, 2014 · Жалоба Проблема решена. "указатель Reset-а - на 0x0800'0100." - должно быть 0x0800'0101. У кортекса все адреса почему-то сдвинуты на один байт вперед. Это не сдвижка, а признак системы команд Thumb. Для Cortex M3 он всегда "1" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться