Перейти к содержанию
    

RootSDF

Новичок
  • Постов

    4
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Решить проблему получилось добавлением команды "monitor reset" сразу после загрузки образа ПО командой "load". Из того что я наблюдал в логах GDB сервера (J-link) и логах в консоли (Eclipse): 1971 load &"load\n" load ~"Loading section .text, size 0x3b90 lma 0x400000\n" Loading section .text, size 0x3b90 lma 0x400000 1971+download,{section=".text",section-size="15248",total-size="481233"} ~"Loading section .relocate, size 0x38 lma 0x403b90\n" Loading section .relocate, size 0x38 lma 0x403b90 1971+download,{section=".relocate",section-size="56",total-size="481233"} ~"Start address 0x400000, load size 15304\n" Start address 0x400000, load size 15304 ~"Transfer rate: 7472 KB/sec, 7652 bytes/write.\n" Transfer rate: 7472 KB/sec, 7652 bytes/write. 1971^done после загрузки ПО регистр pc автоматически загружается значением 0x400000. Что мне и мешало. Строки ENTRY в скрипте линкера я не нашел.
  2. Посмотрел логи GDB (J-link) сервера: Connected to 127.0.0.1 Reading all registers Read 4 bytes @ address 0x00000000 (Data = 0x2000B1E0) Resetting target Read 4 bytes @ address 0x00000000 (Data = 0x2000B1E0) JTAG speed set to 6000 kHz Target endianess set to "little endian" Select flash device: AT91SAM3S4C Flash breakpoints enabled Downloading 16256 bytes @ address 0x00400000 - Verified OK Downloading 9472 bytes @ address 0x00403F80 - Verified OK Downloading 56 bytes @ address 0x00406480 - Verified OK Writing register (PC = 0x00400000) Read 4 bytes @ address 0x00000000 (Data = 0x2000B1E0) Read 4 bytes @ address 0x00000004 (Data = 0x00400119) Read 4 bytes @ address 0x00000008 (Data = 0x004000CD) Read 4 bytes @ address 0x0000000C (Data = 0x004000D5) Read 4 bytes @ address 0x00000010 (Data = 0x004000DD) Read 4 bytes @ address 0x00000014 (Data = 0x004000E5) Read 4 bytes @ address 0x00000018 (Data = 0x004000ED) Read 4 bytes @ address 0x0000001C (Data = 0x00000000) Read 4 bytes @ address 0x00000020 (Data = 0x00000000) Read 4 bytes @ address 0x00000024 (Data = 0x00000000) Read 4 bytes @ address 0x00000028 (Data = 0x00000000) Read 4 bytes @ address 0x0000002C (Data = 0x004000F5) получается что отладчик сам меняет значение регистра PC на 0x00400000. На каком этапе и кто это может делать? Провел эксперимент: взял старую версию ПО написанную еще на IAR`е. IAR c J-Link работает напрямую, не через GDB сервер. Попытался ее отладить на контроллере. Среда выдает предупреждения что прошивка записалась неправильно. При этом он останавливается по правильному адресу 0x400118. Получается что все таки адрес береться правильно. Почему он в режиме работы через GDB меняется на 0x400000?
  3. В общем, подключаюсь отладчиком к контроллеру и наблюдаю следующую вещь: камень после старта прыгает по адресу 0x40003С попадая в где-то в первую половину таблицы векторов прерывания, затем выполняя ее как код доходит до функций лежащих сразу за таблицей, после чего благополучно падает в прерывание Hard fault. В таблице векторов прерывания, по крайней мере, адрес обработчика Reset Handler стоит верно. Почему контроллер вместо адреса 0x400118 (Reset handler) берет левый адрес? В качестве отладчика J-Link, среда Eclipse IDE for C/C++ Developers Version: Juno Service Release 2 Build id: 20130225-0426, компилятор Yagarto binutils: 2.23.1, gcc: 4.7.2, newlib: 1.20.0, gdb: 7.5.1. Отлаживаю через GDB Hardware Debuging.
  4. Честно говоря я не знаю какой протокол у вас в машине. У меня есть информации только по протоколу J1939. Из стандартных сообщений должно подойти ETC2 (Electronic Transmission Controller 2): 0x18F00503 - Id А из данных это скорее всего параметр 523: Bit Start Position /Bytes: 4 Length: 1 byte SPN Description: Current Gear SPN: 523 Нумерация байтов начинается с 1. Далее выдрано из описания: "The gear currently engaged in the transmission or the last gear engaged while the transmission is in the process of shifting to the new or selected gear. Transitions toward a destination gear will not be indicated. Once the selected gear has been engaged then Current Gear will reflect that gear. Data Length: 1 byte Resolution: 1 gear value/bit , -125 offset Data Range: -125 to 125 Operating Range: -125 to +125, negative values are reverse gears, positive values are forward gears, zero is neutral. 251 (0xFB) is park."
×
×
  • Создать...