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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Что означает сия ошибка в Keil
011119xx
сообщение Dec 10 2012, 04:38
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 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

Что это означает и как с этим бороться?
Архив с проектом прилагаю.
Прикрепленные файлы
Прикрепленный файл  ProjectFirst.7z ( 560.13 килобайт ) Кол-во скачиваний: 9
 
Go to the top of the page
 
+Quote Post
Allregia
сообщение Dec 10 2012, 06:08
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Проц f4 ?
Go to the top of the page
 
+Quote Post
редактор
сообщение Dec 10 2012, 06:29
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



Настройки проекта неверные. Скорее всего у линкера.
У STM насколько я помню адрес кода начинается с 0x0800_0000, а ваш файл пытается загрузиться с адреса 0x0000_0000. Эта область не разрешена по умолчанию для исполняемого кода.
Если линкер собирает все правильно, и это глюк Keil, который думает что все процы стартуют с адреса 0, то можно в командной строке симулятора набрать
Код
PC=0x8000000; //

Это загрузит в счетчик команд адрес вектора сброса STM (если я цифры конечно не перепутал)


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
011119xx
сообщение Dec 10 2012, 06:50
Сообщение #4


Местный
***

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



Все оказалось намного проще. Все настройки проекта верные. В железе все работает. Симулятор данной версии Keil 4.23 не поддерживает STM32F103VG. Поменял на STM32F103VE и симулятор начал работать не с 0-го адреса, а как положено. Думаю версия Keil 4.60 будет поддерживать и STM32F103VG.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Dec 10 2012, 06:58
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 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 sad.gif
Кейловцы сказали, что все описание периферии они сделали отдельным движком, а производители-бяки не дают им документацию, поэтому то и се. Короче говоря, они уже кроме кортексов ничего знать не хотят, как я понял... мэйн-стрим, итить его
Go to the top of the page
 
+Quote Post
Allregia
сообщение Dec 10 2012, 09:27
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(011119xx @ Dec 10 2012, 08:50) *
Все оказалось намного проще. Все настройки проекта верные. В железе все работает. Симулятор данной версии Keil 4.23 не поддерживает STM32F103VG.


Я потому и спросил про F4 - у меня аналогичное поведение. С железом через SWD/JTAG рабтает, а симулятор - нет.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 10 2012, 09:32
Сообщение #7


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

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



Редактируете Memory Map в отладчике, и всё запускается.
Go to the top of the page
 
+Quote Post
011119xx
сообщение Dec 10 2012, 10:17
Сообщение #8


Местный
***

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



А нельзя ли поподробнее? А то я про это и на сайте Keil читал, но так и не понял как это сделать.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 10 2012, 12:14
Сообщение #9


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

Группа: Модераторы
Сообщений: 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, что-то вроде этого. Почему Шарага не ложится никогда? sm.gif
Go to the top of the page
 
+Quote Post
toweroff
сообщение Dec 10 2012, 12:24
Сообщение #10


Гуру
******

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



ViKo, это оно да, но там проблема именно в том, что Keil стартует с адреса 0, а не с того, с которого проц стартует на самом деле
Там в этом INI вообще можно много чего наворотить...
Вот мой пример для LPC29xx
Код
FUNC void Setup (void) {
// <o> Program Entry Point
  PC = 0x20000000;
}

Setup();                             // Setup for Running

//g, main



Go to the top of the page
 
+Quote Post
011119xx
сообщение Dec 11 2012, 03:01
Сообщение #11


Местный
***

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



Viko это вот эта строка: MAP 0x00000000, 0x00040000 exec read отвечает за запуск симулятора с нулевого адреса?
Go to the top of the page
 
+Quote Post
редактор
сообщение Dec 11 2012, 05:26
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



Цитата
это вот эта строка: MAP 0x00000000, 0x00040000 exec read отвечает за запуск симулятора с нулевого адреса?


Нет эта строка только разрешает использовать диапазон памяти для чтения (read) и исполнения кода (exec)
для перехода на нужный адрес надо в том же INI-файле присвоить счетчику команд нужное значение (или через командную строку отладчика)


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 11 2012, 05:39
Сообщение #13


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

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



Я понимаю так - процессор на самом деле начинает считать с нулевого адреса. Но на этот диапазон может отображаться память системная (загрузчик) или flash (пользовательская). Можно еще и с диапазона ОЗУ запустить (эта память не отображается на нулевые адреса). Определяется сигналами BOOT.
MAP - разрешает отладчику использовать указанный диапазон.

Нужно посмотреть, какие адреса создает компилятор. Я думаю, начинаются с 0x0000 0000, а не 0x0800 0000.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Dec 11 2012, 09:29
Сообщение #14


Гуру
******

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



Цитата(ViKo @ Dec 11 2012, 09:39) *
Нужно посмотреть, какие адреса создает компилятор. Я думаю, начинаются с 0x0000 0000, а не 0x0800 0000.

как в скаттере указано, так и создает
А компилятору нужно указать entry point явно, если почему-то не там размещает точку входа
В принципе, можно компилятору сказать, чтобы все адреса делал относительными, получим перемещаемый код, запускаемый с любого адреса, но проц после старта сначала вычитывает PC, SP, вектора и т.д. по вполне себе определенным адресам
Go to the top of the page
 
+Quote Post
011119xx
сообщение Dec 11 2012, 09:51
Сообщение #15


Местный
***

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



Создал ini-файл. Сделал в нем запись: PC = 0x08000000; Запускаю симуляцию, возникает та же ошибка, при этом PC = 0x00000000.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 11 2012, 10:08
Сообщение #16


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

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



Когда я отлаживался в ОЗУ, создал следующую функцию:
Код
FUNC void Setup(void) {
  SP = _RDWORD(0x20000000);        // Setup Stack Pointer
  PC = _RDWORD(0x20000004);        // Setup Program Counter
  _WDWORD(0xE000ED08, 0x20000000);    // Setup Vector Table Offset Register
  xPSR = 0x01000000;            // Thumb
}

// Setup();
G, main

Кажется, это не тот ответ.
Go to the top of the page
 
+Quote Post
-JonnS-
сообщение Dec 11 2012, 20:43
Сообщение #17


Участник
*

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



Для симуляции в Кеил сделал Flash.ini. MK STM32f100RB. Надеюсь поможеть.
Прикрепленные файлы
Прикрепленный файл  Flash.rar ( 604 байт ) Кол-во скачиваний: 28
 
Go to the top of the page
 
+Quote Post
011119xx
сообщение Dec 12 2012, 02:45
Сообщение #18


Местный
***

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



Премного благодарен. Это помогло. Для STM32F103VG нужны какие-то изменения?
Go to the top of the page
 
+Quote Post

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

 


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


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