|
|
  |
LPC1778 не получается переместить программу, Не могу переместить программу в нужный адрес FLASH |
|
|
|
May 13 2013, 12:25
|
Частый гость
 
Группа: Участник
Сообщений: 103
Регистрация: 29-01-08
Пользователь №: 34 558

|
Цитата(jcxz @ May 13 2013, 15:18)  А вот передо мной сейчас лежит устройство как раз на LPC1778, только подключено к IAR через JTAG. Стираю FlashMagic-ом ВСЮ память, прошиваю через JTAG начиная с 0x00001000, стартую (из под JTAG) - и удивительно - ПО прекрасно работает. Наверное оно не знает, что у него первые 0x1000 байт забиты 0xFF, если бы знало - точно не работало-бы!  А вы в настройках проекта просто указываете с какого адреса шить? В самой программе ничего не меняете?
|
|
|
|
|
May 13 2013, 13:17
|
Частый гость
 
Группа: Участник
Сообщений: 103
Регистрация: 29-01-08
Пользователь №: 34 558

|
Цитата(sensor_ua @ May 12 2013, 08:01)  Может, всё хорошо, только отладчику скрипт нужен с правильными адресами? Типа такого, только цифирьки свои вписать CODE /*---------------------------------------------------------------------------- * Name: Dbg_ROM.ini * Purpose: ROM Debug Initialization File * Note(s): *---------------------------------------------------------------------------- * This file is part of the uVision/ARM development tools. * This software may only be used under the terms of a valid, current, * end user licence from KEIL for a compatible version of KEIL software * development tools. Nothing else gives you the right to use this software. * * This software is supplied "AS IS" without warranties of any kind. * * Copyright © 2008-2011 Keil - An ARM Company. All rights reserved. *----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------- Setup() configure PC & SP for RAM Debug *----------------------------------------------------------------------------*/ FUNC void Setup (void) { SP = _RDWORD(0x00000000); // Setup Stack Pointer PC = _RDWORD(0x00000004); // Setup Program Counter _WDWORD(0xE000ED08, 0x00000000); // Setup Vector Table Offset Register //_WDWORD(0x400FC0C4, _RDWORD(0x400FC0C4) | 1<<12); // Enable ADC Power //_WDWORD(0x40034034, 0x00000F00); // Setup ADC Trim }
LOAD %L INCREMENTAL // load the application
Setup(); // Setup for Running
g, main Может быть, на сайте поддержки Keil сказали, что надо правильные адреса задать. Только как понять, что куда записывать? В PC я так понимаю надо начальный адрес программы записать. А что надо записать в указатель стека? Плюс еще команда неясная : _WDWORD(0xE000ED08, 0x00000000); // Setup Vector Table Offset Register Может кто-нибудь сможет объяснить? А то смотрю на все это - как баран на новые ворота...
|
|
|
|
|
May 13 2013, 15:52
|
Профессионал
    
Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387

|
Вот, например, цифирьки по образу и подобию https://github.com/ransford/freertos-moo/bl...eil/Dbg_RAM.ini(Vector Table Offset Register совпадает с SP, а PC смещен на 4, ну и тут рекомендуют начальное смещение кратное 2^6) Вы же выставляете свои цифирьки в настройках проекта? Впишите их в скрипт
--------------------
aka Vit
|
|
|
|
|
May 14 2013, 07:25
|
Частый гость
 
Группа: Участник
Сообщений: 103
Регистрация: 29-01-08
Пользователь №: 34 558

|
Уважаемые специалисты. Вроде сделал как надо: Код FUNC void Setup (void) { SP = _RDWORD(0x10000000); // Setup Stack Pointer PC = _RDWORD(0x10000004); // Setup Program Counter _WDWORD(0xE000ED08, 0x10000000); // Setup Vector Table Offset Register - VTOR }
LOAD %L INCREMENTAL // load the application
Setup(); // Setup for Running
g, main Указатель стека указывает на ОЗУ, PC тоже задан со смещением +4. VTOR задан. Данный .INI фаил я добавил в debug/simulator. Но ничего не изменилось. В симуляторе стою на нулевом адресе. Насколько я понял, в регистре VTOR бит[29] установлен, значит таблица должна быть размещена в ОЗУ. Вроде все нормально. Где же я еще торможу...? Симулятор даже не хочет работать... Вот беда..
|
|
|
|
|
May 14 2013, 11:48
|
Профессионал
    
Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387

|
Цитата Указатель стека указывает на ОЗУ... А настройки во вкладке проекта Target совпадают?
--------------------
aka Vit
|
|
|
|
|
May 14 2013, 12:46
|
Частый гость
 
Группа: Участник
Сообщений: 103
Регистрация: 29-01-08
Пользователь №: 34 558

|
Цитата(sensor_ua @ May 14 2013, 14:48)  Да, настройки RAM в проекте совпадают с теми, которые я указываю в .INI файле. Чувствуется, что нет начальной инициализации. Не стартует процессор... В симуляторе даже не работает... Тупик какой-то...
|
|
|
|
|
May 14 2013, 20:57
|
Частый гость
 
Группа: Участник
Сообщений: 103
Регистрация: 29-01-08
Пользователь №: 34 558

|
Цитата(sensor_ua @ May 14 2013, 17:53)  А для ROM со смещением так пробовал? Я из RAM не пускался - по идее туда чем-то нужно загрузить. Это либо должна сделать программа путём копирования откуда-то из ROM (наверно в стартапе), либо подгрузить отладчик. Немного не понял, о чем речь. Для ROM я указываю смещение в проекте... Задаю стартовый адрес и длину.
|
|
|
|
|
May 15 2013, 20:56
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(Metallist64 @ May 15 2013, 14:05)  Как только прерывание - получаем ступор. Хотя бут вроде все корректно настраивает. Может в стартапе снова инициализируется адрес 0х0 для таблице векторов? Модицифируйте startup_xxxx.s, как я предлагал: Код __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler DCD NMI_Handler ; NMI Handler ... VTOR EQU (0xE000E000 + 0x0D08) Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT __main IMPORT SystemInit ; ++++++++++++++++++++++++++++++++++++++++++++++ MOV32 R1, #VTOR ; Load VTOR register address LDR R0, =__Vectors ; Load user program vector table address STR R0, [R1] ; Store to VTOR to relocate the vector table ; ++++++++++++++++++++++++++++++++++++++++++++++ LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 ENDP Между +++ в стандартный startup_xxxx добавлены команды, которые "следят" за тем, чтобы указатель на векторную таблицу всегда был настроен правильно.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|