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

 
 
> прыгнуть на другой адрес в ROM
romez777
сообщение Apr 5 2008, 08:17
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077



Приветствую,

MCU: at91sam7s256
toolchain: Yagarto (gcc-4.2.1)

Есть два простых приложения. Образ первого (размером XXX байт) расположен по адресу 0x100000 (т.е. в самом начале флеша), печатает строку в DBGU и переходит на адрес, по которому расположен другой образ.

Второй образ лежит по адресу 0x100000 + XXX . Все что он делает это выводит другую строку в DBGU и на этом успокаивается.

Но проблема в том, что переход по этому адресу не происходит! Адреса прописал верно, скрипты линкера подлправил. Не знаю, что я упустил...

Прикладываю маленкьй архив с кодом обоих приложений и ld-скриптов. Очень надеюсь, что знающие люди подскажут где я облажался.

Спасибо!
Прикрепленные файлы
Прикрепленный файл  fwdat91boot.zip ( 4.81 килобайт ) Кол-во скачиваний: 122
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
amw
сообщение Apr 7 2008, 11:24
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(romez777 @ Apr 5 2008, 11:17) *
Приветствую,

MCU: at91sam7s256
toolchain: Yagarto (gcc-4.2.1)

Есть два простых приложения. Образ первого (размером XXX байт) расположен по адресу 0x100000 (т.е. в самом начале флеша), печатает строку в DBGU и переходит на адрес, по которому расположен другой образ.

Второй образ лежит по адресу 0x100000 + XXX . Все что он делает это выводит другую строку в DBGU и на этом успокаивается.

Но проблема в том, что переход по этому адресу не происходит! Адреса прописал верно, скрипты линкера подлправил. Не знаю, что я упустил...

Прикладываю маленкьй архив с кодом обоих приложений и ld-скриптов. Очень надеюсь, что знающие люди подскажут где я облажался.

Спасибо!

А что, собственно, располагается по адресу 0x1004f8? А Вы что ожидаете по этому адресу? main()?
Так оно не должно там быть.
А startup код у Вас есть? Где он? В обоих программах?
И дайте вывод
Код
arm-elf-objdump -SD app1.elf
arm-elf-objdump -SD app2.elf

PS: insight просимулирует этот код, но без периферии. Да из eclipse на gdb при target sim. Не знаю, входит ли insight в Yagarto. Я сам собирал.

Сообщение отредактировал amw - Apr 7 2008, 11:29


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
romez777
сообщение Apr 9 2008, 09:21
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077



Цитата(amw @ Apr 7 2008, 14:24) *
И дайте вывод
Код
arm-elf-objdump -SD app1.elf
arm-elf-objdump -SD app2.elf


Поизучал полученный дамп, но вроде никакого криминала не обнаружилось. Вот так выглядят инструкции перехода на другой образ:

Код
...
    ((funct)0x100580)();
  1002f2:    4b06          ldr    r3, [pc, #24]    (10030c <.text+0x30c>)
  1002f4:    f000 f80c     bl    100310 <.text+0x310>
...


Может быть стартап второго приложения нужно переписать (на данный момент он идентичен с первым), ведь первое приложение все уже инициализирует, во втором наверное достаточно только настроить стек и bss?

Есть еще какие-то идеи?

Спасибо!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 9 2008, 10:35
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(romez777 @ Apr 9 2008, 12:21) *
Может быть стартап второго приложения нужно переписать (на данный момент он идентичен с первым), ведь первое приложение все уже инициализирует, во втором наверное достаточно только настроить стек и bss?
А вот этого делать ни в коем случае не нужно. Мало ли что понанастраивало первое приложение. Второму виднее, что ему нужно и пусть оно настроит все, в чем нуждается. Иначе у вас будет слишком большая зависимость второго приложения от первого.


Цитата(romez777 @ Apr 9 2008, 12:21) *
Поизучал полученный дамп, но вроде никакого криминала не обнаружилось.
Нифига себе - никакого smile.gif
Код
00100000 <_startup>:
//*- If an exception occurs before remap, this would result in an infinite loop.
//*- To ensure if a exeption occurs before start application to infinite loop.
//*------------------------------------------------------------------------------*/

                B           InitReset           /* 0x00 Reset handler */
  100000:    ea000010     b    100048 <InitReset>
Но этот код должен исполняться не с 100000, а с нуля, хотя расположен должен быть действительно по адресу 100000. Kоманда B, будучи перемещенная в адрес 0, прыгнет совсем не туда, куда вы хотите, ибо использует относительную адресацию. Вы попадете на адрес 0x48, и надо ли описывать, что произойдет после ремапа? В начале этого стартапа крупными буквами написано:
Цитата
Generic CStartup for KEIL and GCC No Use REMAP
Он предназначен для линковки с адреса 0.

Второе приложение у вас находится в том же секторе, что и первое. Интересно, как ваш загрузчик будет его стирать? Вместе с собой? Надо сразу распределять память под приложение правильно.

Прикладываю свой вариант стартапа, скриптов линкера и "рыбу" загрузчика. Проверка целостности приложения происходит в __low_level_init(). Если приложение можно запускать, оно тут же и запускается (приложение получает практически всю периферию нетронутой - только запущен PLL и настроено направление портов). Если нельзя - после возврата из __low_level_init() заканчиввается инициализация загрузчика и запуск main() собственно загрузчика. Приложение использует этот же стартап-код из crt.s.
Прикрепленные файлы
Прикрепленный файл  boot_GCC.zip ( 6.49 килобайт ) Кол-во скачиваний: 95
 


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
romez777
сообщение Apr 12 2008, 01:28
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077



Цитата(Сергей Борщ @ Apr 9 2008, 13:35) *
Прикладываю свой вариант стартапа, скриптов линкера и "рыбу" загрузчика. Проверка целостности приложения происходит в __low_level_init(). Если приложение можно запускать, оно тут же и запускается (приложение получает практически всю периферию нетронутой - только запущен PLL и настроено направление портов). Если нельзя - после возврата из __low_level_init() заканчиввается инициализация загрузчика и запуск main() собственно загрузчика. Приложение использует этот же стартап-код из crt.s.


Сергей, в вашем варианте стартапа вы не инициализируете стеки для каждого из режимов (interrupt mode, supervisor mode). Почему?

И еще. В этом примере http://www.atmel.com/dyn/resources/prod_do...started_1.0.zip в линкер-скрипте они вообще не описывают секции памяти (директива MEMORY), секция .vectors (содержит таблицу векторов) помещается в область .data; сам стартап делает remap

Код
at91sam7s_getting_started_flash.elf:     file format elf32-littlearm

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000cac  00100000  00100000  000000a0  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000080  00200000  00100cac  00000d4c  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          0000000c  00200080  00200080  00000dcc  2**2
                  ALLOC
  3 .debug_line   000001ef  00000000  00000000  00000dcc  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_info   0000149a  00000000  00000000  00000fbb  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_abbrev 00000286  00000000  00000000  00002455  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_aranges 00000068  00000000  00000000  000026e0  2**3
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_frame  00000260  00000000  00000000  00002748  2**2
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_loc    000002f4  00000000  00000000  000029a8  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_pubnames 00000144  00000000  00000000  00002c9c  2**0
                  CONTENTS, READONLY, DEBUGGING
10 .debug_str    00000046  00000000  00000000  00002de0  2**0
                  CONTENTS, READONLY, DEBUGGING
11 .comment      00000024  00000000  00000000  00002e26  2**0
                  CONTENTS, READONLY


Видно, что область .data линкуется в 0x100000 адреса. Это потому, что remapping происходит?

Эх... все больше загадок sad.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- romez777   прыгнуть на другой адрес в ROM   Apr 5 2008, 08:17
- - Leen   Не специалист, увы, но по моим соображениям: - вну...   Apr 6 2008, 07:54
|- - romez777   Цитата(Leen @ Apr 6 2008, 10:54) Не специ...   Apr 6 2008, 08:27
|- - Сергей Борщ   Цитата(romez777 @ Apr 6 2008, 11:27) Я со...   Apr 7 2008, 09:54
- - r301   делал нечто похожее, но на lpc2378. Проблема была ...   Apr 6 2008, 10:53
|- - romez777   Цитата(r301 @ Apr 6 2008, 13:53) делал не...   Apr 6 2008, 23:39
- - Leen   А Вы можете сдампить прошивку контроллера и выложи...   Apr 7 2008, 05:21
|- - romez777   Цитата(Leen @ Apr 7 2008, 08:21) А Вы мож...   Apr 7 2008, 06:25
- - Leen   у Вас есть gdb. Но я им пользоваться не умею... За...   Apr 7 2008, 09:29
|- - romez777   Цитата(Leen @ Apr 7 2008, 12:29) у Вас ес...   Apr 7 2008, 12:49
|- - romez777   Цитата(amw @ Apr 7 2008, 14:24) А что, со...   Apr 8 2008, 03:34
|- - romez777   Здравствуйте, большое спасибо за ценные замечания...   Apr 10 2008, 05:47
||- - Сергей Борщ   Цитата(romez777 @ Apr 10 2008, 08:47) Обы...   Apr 10 2008, 06:36
||- - romez777   Приветствую. Все немного проясняется, из мозаики ...   Apr 10 2008, 14:46
||- - amw   Цитата(romez777 @ Apr 10 2008, 17:46) Все...   Apr 11 2008, 07:56
||- - romez777   Здравствуйте, Цитата(amw @ Apr 11 2008, 10...   Apr 12 2008, 04:11
||- - amw   Цитата(romez777 @ Apr 12 2008, 07:11) Здр...   Apr 12 2008, 07:30
||- - romez777   Большое спасибо за подробные разъяснения! Цит...   Apr 14 2008, 07:28
||- - amw   Цитата(romez777 @ Apr 14 2008, 10:28) Бол...   Apr 14 2008, 13:22
||- - romez777   Цитата(amw @ Apr 14 2008, 16:22) Примерно...   Apr 15 2008, 13:31
||- - Сергей Борщ   Цитата(romez777 @ Apr 15 2008, 16:31) Пос...   Apr 15 2008, 13:50
||- - romez777   Здравствуйте. Цитата(Сергей Борщ @ Apr 15 20...   Apr 16 2008, 00:19
||- - romez777   Немного покрутил, но все равно не работает Сейчас...   Apr 17 2008, 07:51
- - amw   Да есть такая проблема. Сделайте так КодТут убрать...   Apr 17 2008, 08:07
- - romez777   Приветствую. Цитата(amw @ Apr 17 2008, 11...   Apr 18 2008, 02:17
- - amw   Цитата(romez777 @ Apr 18 2008, 05:17) При...   Apr 18 2008, 08:28
- - romez777   Приветствую. Спасибо за ваше терпение в ответах н...   Apr 19 2008, 04:02
- - amw   Цитата(romez777 @ Apr 19 2008, 07:02) При...   Apr 19 2008, 10:05
- - romez777   Цитата(amw @ Apr 19 2008, 13:05) Мой тулч...   Apr 21 2008, 02:08
- - amw   Цитата(romez777 @ Apr 21 2008, 05:08) Отл...   Apr 21 2008, 08:07
- - romez777   ЦитатаПотому что команда B использует относительну...   Apr 22 2008, 06:06
- - amw   Цитата(romez777 @ Apr 22 2008, 09:06) Фа...   Apr 22 2008, 08:49
- - romez777   ЦитатаКод/* Copy exception vectors in RAM */ LDR...   Apr 23 2008, 00:27
- - amw   Цитата(romez777 @ Apr 23 2008, 03:27) При...   Apr 23 2008, 08:16
- - romez777   ЦитатаНу Вы хоть исправили значение для конца цикл...   Apr 25 2008, 05:38
|- - amw   Цитата(romez777 @ Apr 25 2008, 08:38) В с...   Apr 25 2008, 10:07
|- - romez777   ЦитатаДа, правильно понимаете. Приложение должно и...   Apr 26 2008, 01:30
|- - amw   Цитата(romez777 @ Apr 26 2008, 04:30) Но ...   Apr 28 2008, 11:33
|- - romez777   Цитата(amw @ Apr 28 2008, 14:33) Лучше вс...   May 6 2008, 14:58
|- - amw   Цитата(romez777 @ May 6 2008, 17:58) Прив...   May 6 2008, 18:01
|- - romez777   Приветствую. Выкладываю полный архив со всеми инк...   May 7 2008, 14:49
|- - amw   Цитата(romez777 @ May 7 2008, 17:49) Прив...   May 7 2008, 15:10
|- - romez777   ЦитатаВ дизассемблере даны КОДЫ КОМАНД. В бинарике...   May 8 2008, 06:10
|- - amw   Цитата(romez777 @ May 8 2008, 09:10) Да, ...   May 8 2008, 09:12
|- - romez777   ЦитатаВсе проверил - видимо, дело в ключах компиля...   May 8 2008, 11:08
|- - amw   Цитата(romez777 @ May 8 2008, 14:08) А во...   May 8 2008, 11:20
|- - romez777   Цитата(amw @ May 8 2008, 14:20) Ну так у ...   May 9 2008, 05:37
|- - amw   Цитата(romez777 @ May 9 2008, 08:37) Я та...   May 11 2008, 10:35
|- - romez777   Цитата(amw @ May 11 2008, 13:35) 1. У Вас...   May 13 2008, 05:28
|- - amw   Цитата(romez777 @ May 13 2008, 08:28) Вот...   May 13 2008, 07:16
|- - aaarrr   Цитата(romez777 @ May 13 2008, 09:28) В с...   May 13 2008, 09:12
- - Сергей Борщ   Цитата(amw @ Apr 23 2008, 11:16) Чтобы от...   Apr 25 2008, 09:28


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

 


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


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