ViKo 1 20 февраля, 2015 Опубликовано 20 февраля, 2015 · Жалоба А как программа/компилятор поймет это РАМ или флаш, если обращение будет к 0х00000100 ? А им зачем? Сказано, в 100, значит, в 100. Это пусть процессор мучается, он же знает, как его запустили. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A. Fig Lee 0 20 февраля, 2015 Опубликовано 20 февраля, 2015 · Жалоба А им зачем? Сказано, в 100, значит, в 100. Это пусть процессор мучается, он же знает, как его запустили. Ну а процессор что делать будет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 20 февраля, 2015 Опубликовано 20 февраля, 2015 · Жалоба Ну а процессор что делать будет? Он уже включен железно так, как задано. Может, вам мануал почитать? :rolleyes: Мысль, что по нулевым адресам ничего нет, мне нравится больше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A. Fig Lee 0 20 февраля, 2015 Опубликовано 20 февраля, 2015 · Жалоба Он уже включен железно так, как задано. Может, вам мануал почитать? :rolleyes: Да, не надо нашим людям помогать. Тебя же потом и по кумполу. Зря влез. До свидания. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 20 февраля, 2015 Опубликовано 20 февраля, 2015 · Жалоба Особенно когда люди даже прочитать не могут, а сразу строчат в форум в надежде, что им разжуют всё (однокашники). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 21 февраля, 2015 Опубликовано 21 февраля, 2015 · Жалоба Может ли Cortex-M3 выполнять программу из внешней памяти? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 21 февраля, 2015 Опубликовано 21 февраля, 2015 (изменено) · Жалоба Да ему пофиг какой адрес - что указано в 8000004 или 20000004 (от BOOT0/1 зависит) туда и перейдет. Изменено 21 февраля, 2015 пользователем x893 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 21 февраля, 2015 Опубликовано 21 февраля, 2015 · Жалоба Ой ли? Надо по шинам посмотреть в руководстве. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 21 февраля, 2015 Опубликовано 21 февраля, 2015 · Жалоба Без Ой-ли. Только hardfault можно получить, если не туда куда можно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 22 февраля, 2015 Опубликовано 22 февраля, 2015 · Жалоба Предыдущий оратор путается в показаниях. То у него "без ой-ли", то HardFault. Есть у кого-нибудь подтверженное практикой мнение, или и так всем ясно (что нельзя)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 6 23 февраля, 2015 Опубликовано 23 февраля, 2015 · Жалоба Есть у кого-нибудь подтверженное практикой мнение, или и так всем ясно (что нельзя)? Cortex™-M3 Technical Reference Manual от ARM утверждает что исполнение кода запрещено только из старших 1/2 Гигабайта адресного пространства (от 0xE0000000 и до упора). Так что при желании можно поисполнять даже содержимое регистров периферийных устройств. Т.е. архитектура ARM не запрещает, но конкретно у STM32F1xx не получится, выборка кода запрещена для адресов 0x40000000- 0x5FFFFFFF и от 0xA0000000 до конца памяти. Под внешнюю память отведен диапазон адресов 0x60000000 - 0x9FFFFFFF, если контроллер внешней памяти настроить соответствующим образом, то можно и из внешней памяти код исполнять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 24 февраля, 2015 Опубликовано 24 февраля, 2015 · Жалоба Судя по рисунку, STM32F20X может выполнять программу из внешней памяти. А также и из внутренней OTP Flash, наверное. А еще под картинкой написано: S2: S-bus This bus connects the system bus of the Cortex®-M3 core to a BusMatrix. This bus is used to access data located in a peripheral or in SRAM. Instructions may also be fetch on this bus (less efficient than ICode). The targets of this bus are the 112 KB & 16 KB internal SRAMs, the AHB1 peripherals including the APB peripherals, the AHB2 peripherals and the external memories through the FSMC. То есть, можно команды выбирать откуда хочешь!? :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 25 февраля, 2015 Опубликовано 25 февраля, 2015 · Жалоба Что-то не выходит у меня запустить скомпилированную со сдвигом программу. Сделал загрузчик, пока только переход на основную программу. Занял нулевой сектор. В основном проекте задал в Кейле в свойствах проекта начало ПЗУ 0x8004000, размер 0x3C000 (отобрал нулевой сектор для загрузчика), соответственно задал и диапазон для Flash Download. Скомпилировал, зашил. Вижу в ST-Link Utility свое зашитое. Могу и в отладчике в проекте загрузчика посмотреть память. Вроде, все как надо. Но основной проект не работает. Предполагаю, в загрузчике дело. Что-то не так. Вот фрагмент, переход. /* Если есть SP для приложения */ if (((*(__IO uint32_t *)APPL_ADDR) & 0x2FFE0000) == 0x20000000) { /* Адрес таблицы */ SCB->VTOR = 0x08004000; // NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x4000); /* Указатель на приложение */ pFunc_t JumpAppl = (pFunc_t)(*(__IO uint32_t *)(APPL_ADDR + 4)); __set_MSP(*(__IO uint32_t *)APPL_ADDR); JumpAppl(); } while (true); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 6 25 февраля, 2015 Опубликовано 25 февраля, 2015 · Жалоба Но основной проект не работает. Предполагаю, в загрузчике дело. Что-то не так. NVIC_SetVectorTable() в загрузчике не особо нужен. Это надо в самой запущенной программе сделать, потому что по умолчанию в SystemInit() регистр SCB->VTOR устанавливается на начало флеша. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 25 февраля, 2015 Опубликовано 25 февраля, 2015 · Жалоба NVIC_SetVectorTable() в загрузчике не особо нужен. Это надо в самой запущенной программе сделать, потому что по умолчанию в SystemInit() регистр SCB->VTOR устанавливается на начало флеша. Это я из примеров выше в теме (или подобных) вытянул. Не использую, такой функции в CMSIS и нет. А SystemInit у меня своя, и ничего с VTOR не делает. Плохо, в отладчике оба проекта не видны. Дохожу в загрузчике до JumpAppl() и улетаю незнамо куда, в 0xBFFFXXXX. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться