|
Что означает сия ошибка в Keil |
|
|
|
Dec 10 2012, 04:38
|

Местный
  
Группа: Свой
Сообщений: 381
Регистрация: 5-07-05
Из: Уфа
Пользователь №: 6 544

|
Использую Keil 4.23. Создал проект для STM32F103VG, настроил, подключил CMSIS, StdPerihp_Driver. Основная функция выглядит так: Код int main(void) { while(1) { } } Теперь хочу запустить симулятор, запускаю и получаю сообщение следующего вида: Load "D:\\Keil Projects\\ProjectFirst\\ProjectFirst.AXF" *** error 65: access violation at 0x0000000C : no 'read' permissionЧто это означает и как с этим бороться? Архив с проектом прилагаю.
|
|
|
|
|
Dec 10 2012, 06:29
|
Местный
  
Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315

|
Настройки проекта неверные. Скорее всего у линкера. У STM насколько я помню адрес кода начинается с 0x0800_0000, а ваш файл пытается загрузиться с адреса 0x0000_0000. Эта область не разрешена по умолчанию для исполняемого кода. Если линкер собирает все правильно, и это глюк Keil, который думает что все процы стартуют с адреса 0, то можно в командной строке симулятора набрать Код PC=0x8000000; // Это загрузит в счетчик команд адрес вектора сброса STM (если я цифры конечно не перепутал)
--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
|
|
|
|
|
Dec 10 2012, 06:58
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(011119xx @ Dec 10 2012, 10:50)  Все оказалось намного проще. Все настройки проекта верные. В железе все работает. Симулятор данной версии Keil 4.23 не поддерживает STM32F103VG. Поменял на STM32F103VE и симулятор начал работать не с 0-го адреса, а как положено. Думаю версия Keil 4.60 будет поддерживать и STM32F103VG. LPC2929 он тоже поддерживает... Компилит, это да С симуляцией те же шаманства с адресом. В отладке периферии ARM9 нет как класса, почему-то вся от ARM7  Кейловцы сказали, что все описание периферии они сделали отдельным движком, а производители-бяки не дают им документацию, поэтому то и се. Короче говоря, они уже кроме кортексов ничего знать не хотят, как я понял... мэйн-стрим, итить его
|
|
|
|
|
Dec 10 2012, 12:14
|

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

|
Цитата(011119xx @ Dec 10 2012, 13:17)  А нельзя ли поподробнее? А то я про это и на сайте Keil читал, но так и не понял как это сделать. Вообще-то, я это прописываю в ini файле, который подключается при симуляции, в опциях проекта на вкладке Debug. Типа такого: MAP 0x00000000, 0x00040000 exec read MAP 0x08000000, 0x08040000 exec read MAP 0x40000000, 0x40040000 read write MAP 0x20000000, 0x20020000 read write MAP То же можно ввести вручную, когда запускаете отладчик, без старта. Debug->Memory Map. Цитата(011119xx @ Dec 10 2012, 13:17)  А нельзя ли поподробнее? А то я про это и на сайте Keil читал, но так и не понял как это сделать. Вообще-то, я это прописываю в ini файле, который подключается при симуляции, в опциях проекта на вкладке Debug. Типа такого: MAP 0x00000000, 0x00040000 exec read MAP 0x08000000, 0x08040000 exec read MAP 0x40000000, 0x40040000 read write MAP 0x20000000, 0x20020000 read write MAP То же можно ввести вручную, когда запускаете отладчик, без старта. Debug->Memory Map. P.S. Сколько можно терпеть безобразие? Постоянно Электроникс ложится! Bad Gateway 502, что-то вроде этого. Почему Шарага не ложится никогда?
|
|
|
|
|
Dec 11 2012, 05:26
|
Местный
  
Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315

|
Цитата это вот эта строка: MAP 0x00000000, 0x00040000 exec read отвечает за запуск симулятора с нулевого адреса? Нет эта строка только разрешает использовать диапазон памяти для чтения (read) и исполнения кода (exec) для перехода на нужный адрес надо в том же INI-файле присвоить счетчику команд нужное значение (или через командную строку отладчика)
--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
|
|
|
|
|
Dec 11 2012, 09:29
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(ViKo @ Dec 11 2012, 09:39)  Нужно посмотреть, какие адреса создает компилятор. Я думаю, начинаются с 0x0000 0000, а не 0x0800 0000. как в скаттере указано, так и создает А компилятору нужно указать entry point явно, если почему-то не там размещает точку входа В принципе, можно компилятору сказать, чтобы все адреса делал относительными, получим перемещаемый код, запускаемый с любого адреса, но проц после старта сначала вычитывает PC, SP, вектора и т.д. по вполне себе определенным адресам
|
|
|
|
|
Dec 11 2012, 20:43
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 7-05-07
Из: Болгария
Пользователь №: 27 577

|
Для симуляции в Кеил сделал Flash.ini. MK STM32f100RB. Надеюсь поможеть.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|