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

 
 
> Отладка МК без внутренней флеши в Keil, LPC1820
Harvester
сообщение Jul 24 2014, 15:22
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Подскажите, пожалуйста, как отлаживать программу на LPC1820 в среде Keil.
1. В симуляторе
При запуске отладочной сессии счетчик команд указывает на нулевой адрес. Естественно, это неправильно, т.к. у LPC1820 ОЗУ из которого выполняется программа (один из блоков) находится по адресу 0x10000000. При попытке "шагнуть" выдает ошибку "error 65: access violation at 0xFFFFFFF4 : no 'write' permission".
В пакете LPC OpenWare нашел файл lpc18xx_debug_iram.ini следующего содержания:
Код
FUNC void Setup (unsigned int region) {
  region &= 0xFF000000;
  SP = _RDWORD(region);                          // Setup Stack Pointer
  PC = _RDWORD(region + 4);                    // Setup Program Counter
  _WDWORD(0xE000ED08, region);              // Setup Vector Table Offset Register
}
LOAD %L INCREMENTAL
Setup(0x10000000); // Get ready to execute image in SRAM or whatever region it is in
g,main

и вставил его в поле "Initialization File".
При переходе в режим отладки выдается та же самая ошибка sad.gif.
Как это побороть?

2. В железе, отладчик J-Link (оригинал)
В том же пакете нашел аналогичный файл инициализации lpc18xx_debug_spiflash.ini. Как я понял он рассчитан на то, что код запишется отладчиком в SPI-Flash и будет считан оттуда при старте МК. Соответственно МК должен быть сконфигурирован для загрузки с SPIFI (это указано в файле). У меня плата сконфигурирована вроде бы для загрузки через USB (точнее не могу понять - корпус BGA и все внешние эл-ты 0403).
В связи с этим вопрос - можно ли при работе с отладчиком как-то писать код в ОЗУ МК (0x10000000) и исполнять оттуда?

Ну и факультативный вопрос - влияют ли установленные OTP-биты на процесс (и саму возможность) отладки через JTAG? В доках по этому поводу ничего не нашел. Если проглядел - ткните носом, плиз.


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Jul 24 2014, 15:45
Сообщение #2


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

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



Когда-то для STM32F103 использовал такой файл ini.
Код
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
}

MAP 0x00000000, 0x00040000 exec read
MAP 0x08000000, 0x08040000 exec read
MAP 0x40000000, 0x40040000 read    write
MAP 0x20000000, 0x20020000 read write
MAP

LOAD objects\Exercises.axf
Setup();
G, main

Обратите внимание на xPSR, нужно Thumb режим установить.
Go to the top of the page
 
+Quote Post
Harvester
сообщение Jul 24 2014, 17:08
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Цитата(ViKo @ Jul 24 2014, 19:45) *
Обратите внимание на xPSR, нужно Thumb режим установить.

Добавил эту команду в свой файл. И еще вставил
Код
MAP 0x10000000, 0x10010000 exec read write

Теперь при запуске отладки (симулятор) PC почему то равен 0x00010000.
В окне дизассемблера по всем адресам нули. Правда, ошибка уже не выдается.

Update:
Заменил автогенерируемый скаттер-файл линкера
Код
LR_IROM1 0x14000000 0x04000000  {   ; load region size_region
  ER_IROM1 0x14000000 0x04000000  { ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x10000000 0x00018000  { ; RW data
   .ANY (+RW +ZI)
  }
}

на свой
Код
LR_IROM1 0x10000000 0x00018000  {   ; load region size_region
  ER_IRAM1 0x10000000 0x00018000  { ; load address = execution address
   *.o (RESET, +First)
   .ANY (+RO)
   .ANY (+RW +ZI)
  }
}

Убрал команду запуска из ini-файла. Теперь при запуске отладчика PC становится куда надо, но при выполнении программы все-равно лезут ошибки типа
*** error 65: access violation at 0x40043128 : no 'write' permission
*** error 65: access violation at 0x40050018 : no 'write' permission
*** error 65: access violation at 0x40050044 : no 'write' permission
*** error 65: access violation at 0x40050040 : no 'read' permission
Причем по этим адресам в коде обращений никаких нет

Сообщение отредактировал Harvester - Jul 25 2014, 06:48


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 18:30
Рейтинг@Mail.ru


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