|
прыгнуть на другой адрес в ROM |
|
|
|
Apr 5 2008, 08:17
|
Местный
  
Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077

|
Приветствую, MCU: at91sam7s256 toolchain: Yagarto (gcc-4.2.1) Есть два простых приложения. Образ первого (размером XXX байт) расположен по адресу 0x100000 (т.е. в самом начале флеша), печатает строку в DBGU и переходит на адрес, по которому расположен другой образ. Второй образ лежит по адресу 0x100000 + XXX . Все что он делает это выводит другую строку в DBGU и на этом успокаивается. Но проблема в том, что переход по этому адресу не происходит! Адреса прописал верно, скрипты линкера подлправил. Не знаю, что я упустил... Прикладываю маленкьй архив с кодом обоих приложений и ld-скриптов. Очень надеюсь, что знающие люди подскажут где я облажался. Спасибо!
|
|
|
|
|
 |
Ответов
|
Apr 7 2008, 11:24
|
Знающий
   
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Apr 9 2008, 09:21
|
Местный
  
Группа: Свой
Сообщений: 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? Есть еще какие-то идеи? Спасибо!
|
|
|
|
|
Apr 9 2008, 10:35
|

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

|
Цитата(romez777 @ Apr 9 2008, 12:21)  Может быть стартап второго приложения нужно переписать (на данный момент он идентичен с первым), ведь первое приложение все уже инициализирует, во втором наверное достаточно только настроить стек и bss? А вот этого делать ни в коем случае не нужно. Мало ли что понанастраивало первое приложение. Второму виднее, что ему нужно и пусть оно настроит все, в чем нуждается. Иначе у вас будет слишком большая зависимость второго приложения от первого. Цитата(romez777 @ Apr 9 2008, 12:21)  Поизучал полученный дамп, но вроде никакого криминала не обнаружилось. Нифига себе - никакого  Код 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.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Apr 12 2008, 01:28
|
Местный
  
Группа: Свой
Сообщений: 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 происходит? Эх... все больше загадок
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|