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

Vitaliy_ARM

Свой
  • Постов

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

  • Посещение

Сообщения, опубликованные Vitaliy_ARM


  1. Имеется плата на LPC2378 долгое время исправно пользовался встроенным бутом. Без видимых на то причин контроллер перестал шиться. Кроме этого в контроллере осталась программа, которая принимает и выдает данные через те же выводы UART что и производится программирование бутом. Таким образом проблемы в железе исключаю. Шить пытался FlashMagic'ом параллельно смотрел сниффером контроллер получает 0x3F ('?') но в ответ ничего не выдает. Перепробовал скорости от 2400 до 230400, в ответ от контроллера тишина ни одного символа. Так же пытался из терминалки отправлять случайный набор символов контроллер ни разу не ответил. JTAG у меня нет. Без него видимо делать нечего.

     

    Попробуйте P2.10 запаять на землю. Потом включить и попробовать опять прошить

  2. Ну уж не знаю, что там с компоновкой ему не нравится, но если просто прошить - не по JTAG, а через UART - то все работает правильно.

    Аборты возникают в процессе прошивки и отладки. Если без JTAG, то проект работает как надо.

     

    Значит файл корректный. А вы не пробовали просто поотлаживать без предварительной прошивки?

    Я начал пока с этого.

     

    Ааа. Пардон. Не увидел

    Отладка из флеш. Прошиваю процессор отдельно.
    .

    В любом случае у меня такого не возникало.

  3. При запуске высыпает кучу PREFETCH ABORT, а при остановке на точках прерывания высыпает еще и кучу DATA ABORT в придачу.

     

    С чем может быть связано и как это победить?

     

    Скорее всего компановка неправильная, или выравнивания нету или просто черт знает куда линкуется или еще что-нибудь.

  4. Хм. Я тоже, но продвинулся чуть дальше

    Постил я сюда:

    http://electronix.ru/forum/index.php?showt...st&p=538405

    http://electronix.ru/forum/index.php?showt...st&p=538988

    Может вдвоем быстрее найдем правильный путь.

     

    Посмотрел.

    Приведу на всякий случай окно инициализации своего gdb:

    Продолжаем разбираться. :rolleyes:

    post-29246-1233752080_thumb.jpg

  5. ода но все же работает это радует. :)

     

    А я все никак не могу подружить ARM-USB-OCD с OpenOCD и LPC2378.

    Пишет, что не может выполнить Halt reset. Может кто знает в чем дело?

     

    Вот лог:

     

    Open On-Chip Debugger (2008-06-19 19:00) svn: 717
    URL: http://svn.berlios.de/svnroot/repos/openocd/trunk
    Info:	options.c:50 configuration_output_handler(): jtag_speed: 3, 3
    Info:	options.c:50 configuration_output_handler(): Open On-Chip Debugger (2008-06-19 19:00) svn: 717
    Info:	jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x4f1f0f0f (Manufacturer: 0x787, Part: 0xf1f0, Version: 0x4)
    Warning: embeddedice.c:185 embeddedice_build_reg_cache(): EmbeddedICE version 7 detected, EmbeddedICE handling might be broken
    Info:	jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x4f1f0f0f (Manufacturer: 0x787, Part: 0xf1f0, Version: 0x4)
    User:	target.c:436 target_process_reset(): Timed out waiting for halt after reset
    Info:	server.c:78 add_connection(): accepting 'gdb' connection from 0
    Warning: gdb_server.c:416 gdb_get_packet_inner(): acknowledgment received, but no packet pending
    Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted
    Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted
    Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted
    Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted
    Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted
    Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted
    Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted
    Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted
    Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted
    Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted
    Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted
    Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted
    Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted
    Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted
    Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted
    Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted
    Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted
    Info:	server.c:395 server_loop(): dropped 'gdb' connection
    Info:	server.c:78 add_connection(): accepting 'gdb' connection from 0
    Warning: gdb_server.c:416 gdb_get_packet_inner(): acknowledgment received, but no packet pending
    Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted
    Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted
    Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted
    Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted
    Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted

     

    Заработало но появилась другая проблема:

     

    Добавил две строчки в конфигурационный файл OpenOCD, в общем приведу весь, дабы уменьшить проблемы тем, кто будет проходить этот же путь :rolleyes:

    #daemon configuration
    telnet_port 4444
    gdb_port 3333
    
    # tell gdb our flash memory map
    # and enable flash programming
    gdb_memory_map enable
    gdb_flash_program enable
    
    #interface
    interface ft2232
    ft2232_device_desc "Olimex OpenOCD JTAG A"
    ft2232_layout "olimex-jtag"
    ft2232_vid_pid 0x15BA 0x0003
    jtag_speed 3
    jtag_nsrst_delay 200     # <- заработало после добавления вот этого
    jtag_ntrst_delay 200     # <- 
    
    #use combined on interfaces or targets that can't set TRST/SRST separately
    reset_config trst_and_srst srst_pulls_trst
    
    #jtag scan chain
    #format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE)
    jtag_device 4 0x1 0xf 0xe
    
    #target configuration
    daemon_startup reset
    
    #target <type> <startup mode>
    #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
    target arm7tdmi little run_and_halt 0 arm7tdmi-s_r4
    
    run_and_halt_time 0 30
    
    working_area 0 0x40000000 0x4000 nobackup
    
    #flash configuration
    #flash bank lpc2000 <base> <size> 0 0 <target#> <variant>
    flash bank lpc2000 0x0 0x40000 0 0 0 lpc2000_v1 14765 calc_checksum
    
    # For more information about the configuration files, take a look at:
    # http://openfacts.berlios.de/index-en.phtml...n-Chip+Debugger
    
    

     

    В данный момент не работают точки останова на функции main() и любые другие,

    если перезапустить программу. Если уже запущенную программу остановить и поставить точки

    останова, а потом опять запустить - они вновь начинают работать. Как победить? :cranky:

  6. Помогло :)

    хотел попробовать запустить отладчик \arm-elf-gdb.exe , вывалилось куча ошибок,

    делал вроде как написано на yagarto.

     

    Тоже испытываю трудности с отладчиком. Но эту победил. Просто у вас не стартует OpenOCD и все.

    Разберитесь почему.

  7. Задам еще, наверное глупый вопрос.

    Может ли кто-нибудь прокомментировать строки скрипта?

     

    SECTIONS
    {
      /* first section is .text which is used for code */
       .text :
      {
        KEEP(*(.RESET))             /* Startup code from .init-section */ -- что это за статап код, это вектора прерываний? Что означает KEEP()
        *(.text .text.*)           /* remaining code */  -- с этим понятно, память команд, сюда линкуются весь код команд по умолчанию
        *(.gnu.linkonce.t.*)    // не известно!?
        *(.glue_7)                 // не известно! в этом пдф тоже не знают http://www.atmel.com/dyn/resources/prod_documents/atmel_tutorial_source.zip, зачем это надо  
        *(.glue_7t)                // не известно! тоже атмел не знает, зачем нужна эта строчка  
        *(.gcc_except_table)  // тоже не известно
        *(.rodata)                 /* read-only data (constants) */ -- сюда линкуются все флешь константы, строки и т.п.
        *(.rodata*)               // -- сюда линкуются все константные указатели и указатели на строки и т.п.
        *(.gnu.linkonce.r.*)   // не известно!?
        . = ALIGN(4);
      } > ROM
    }

    :1111493779: :smile3046:

  8. Это отрывок скрипта линкера. Он указывает, куда линкер будет ложить отладочную информацию в исполняемый файл.

    Генерируется она компилятором, при использовании ключа -g с опциями. Например (варианты)

    gcc -g main .o main.c
    gcc -g3 main .o main.c
    gcc -ggdb main .o main.c
    gcc -gdwarf-2 main .o main.c

    Линкуется потом обычным способом (линкеру не имеет особых флагов для отладочной информации).

    После этого можно спокойно отлаживать программу с помощью gdb.

     

    Да, уже разобрался. Есть еще некоторые непонятности.

    Как я понимаю OpenOCD уже научился поддерживать J-Link и еще кучу всяких Jtag. Но для этого надо ли его пересобрать? Кто-нибудь пользуется связкой Eclipse+GCC+OpenOCD+J-Link?

  9. Генерирование отладочной информации в коде процессора - подскажите, что это такое и с чем его едят?

    Где можно почитать об этом (строчки в скрипте компоновщика)?

     /* Stabs debugging sections.  */
      .stab          0 : { *(.stab) }
      .stabstr       0 : { *(.stabstr) }
      .stab.excl     0 : { *(.stab.excl) }
      .stab.exclstr  0 : { *(.stab.exclstr) }
      .stab.index    0 : { *(.stab.index) }
      .stab.indexstr 0 : { *(.stab.indexstr) }
      .comment       0 : { *(.comment) }
      /* DWARF debug sections.
         Symbols in the DWARF debugging sections are relative to the beginning
         of the section so we begin them at 0.  */
      /* DWARF 1 */
      .debug           0 : { *(.debug) }
      .line            0 : { *(.line) }
      /* GNU DWARF 1 extensions */
      .debug_srcinfo   0 : { *(.debug_srcinfo) }
      .debug_sfnames   0 : { *(.debug_sfnames) }
      /* DWARF 1.1 and DWARF 2 */
      .debug_aranges   0 : { *(.debug_aranges) }
      .debug_pubnames  0 : { *(.debug_pubnames) }
      /* DWARF 2 */
      .debug_info      0 : { *(.debug_info .gnu.linkonce.wi.*) }
      .debug_abbrev    0 : { *(.debug_abbrev) }
      .debug_line      0 : { *(.debug_line) }
      .debug_frame     0 : { *(.debug_frame) }
      .debug_str       0 : { *(.debug_str) }
      .debug_loc       0 : { *(.debug_loc) }
      .debug_macinfo   0 : { *(.debug_macinfo) }
      /* SGI/MIPS DWARF 2 extensions */
      .debug_weaknames 0 : { *(.debug_weaknames) }
      .debug_funcnames 0 : { *(.debug_funcnames) }
      .debug_typenames 0 : { *(.debug_typenames) }
      .debug_varnames  0 : { *(.debug_varnames) }

  10. C точностью до наоборот, в этом случае расположите указатель в самом начале загружаемого кода.

     

    В моем случае уже не стоит этим заниматься, два огромных проекта написано. Нет смысла их переделывать заново.

    Чревато новыми ошибками.

     

     

    Как-то так. Выделяете регион памяти(CONFIG), потом складываете в него нужные сегменты (*.config)
    /* memory layout */

     

    Вроде бы прояснилось. :)

  11. Примерно в аналогичных случаях в фиксированном месте boot (сразу после векторов) размещаю УКАЗАТЕЛЬ на находящийся в произвольном месте блок общих данных. Boot, естественно, линкуется в конкретное место, но это единственная по любому необходимая привязка к адресам - сущности более не плодятся.

     

    Ага, а как тогда с ай пи адресами и маками? Вместе с загрузчиком зашиваются адреса по умолчанию. Программа должна перешивать и то и другое. А загрузчик должен это использовать, так как абгрейд должен осуществляться по одним и тем же адресам.

  12. Много полезне вместо демонстративного прощания с IAR тихо и навсегда попрощаться с дурной привычкой "размещения констант по указанному адресу во Flash". Ну а инструментарий у V5 IAR суть есть GNU-тый....

     

    В моей задаче это просто не возможно. Бутлодер + Программа имеют две константы - мак адрес и ай пи адрес, строго расположенные в указанных местах. И то и то должно иметь доступ к этим ячейкам. Прощание с "дурной привычкой" не позволить сделать программу и бутлодер независымыми :( .

  13. Все больше прощаюсь с IAR.

     

    Разбираюсь с компановщиком. Документация на него не впечатлила :07: . Есть ли у кого готовый пример скрипта размещения констант по указанному адресу во Flash LPC2xxx или другого арма?

  14. Самый простой путь - заключить "плюсовые" определения или #include этого файла в
    #ifdef __cplusplus
    ....
    #endif

    Но грамотнее, конечно, включать плюсовые заголовки только в плюсовые файлы или перевести Сишные исходники на плюсы. Или попробуйте просто переименовать Rc6.c в Rc6.cpp - может он скомпилится в плюсовом режиме.

     

    В общем поменял расширение Rc6.c на cpp. Помогло. Этот вариант мне подходит. Спасибо!

  15. На прикрепленной вами картинке есть вкладка Console. Откройте ее, там же будут и более подробные сообщения об ошибке.

    Вот консоль.

    Assembling (ARM-only): crt0.S  arm-elf-gcc -c -mcpu=arm7tdmi-s  -I. -x assembler-with-cpp -DRAM_RUN -D__WinARM__ -D__WINARMSUBMDL_LPC2468__ -Wa,-adhlns=crt0.lst,-gdwarf-2 crt0.S -o crt0.o    Compiling C: Rc6\Rc6.c  arm-elf-gcc -c  -mcpu=arm7tdmi-s  -I. -gdwarf-2 -DRAM_RUN -D__WinARM__ -D__WINARMSUBMDL_LPC2468__  -Os -Wall -Wcast-align -Wimplicit  -Wpointer-arith -Wswitch -ffunction-sections -fdata-sections -Wredundant-decls -Wreturn-type -Wshadow -Wunused -Wa,-adhlns=Rc6\Rc6.lst  -ICommon/inc -Wcast-qual -MD -MP -MF .dep/Rc6.o.d -Wnested-externs  -std=gnu99 -Wmissing-prototypes  -Wstrict-prototypes -Wmissing-declarations Rc6\Rc6.c -o Rc6\Rc6.o   In file included from Rc6\/..\includes.h:30,                   from Rc6\Rc6.c:5:  Rc6\/..\/Target\Trg.h:64: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'LPCTARGET'  Rc6\/..\/Target\Trg.h:71: warning: data definition has no type or storage class  Rc6\/..\/Target\Trg.h:71: warning: type defaults to 'int' in declaration of 'TARGET'  Rc6\/..\/Target\Trg.h:71: warning: type defaults to 'int' in declaration of 'pTARGET'  make: *** [Rc6\Rc6.o] Error 1

    Вижу в нем два С-файла:

    SRC = Rc6\Rc6.c

    SRC += Fldr\Fldr.c

    Вы уверены, что Trg.h не включен (возможно косвенно) в один из этих файлов?

     

    Подключены через один глобальный файл! Этого я не знал. Всегда делал так в одном глобальном файле прописывал все инклюды и потом его уже цеплял во всех исходниках. При этом IAR игнорировал слова C++ и выдавал ошибки, если этот класс непосредственно был использован.

    А можно ли сделать и здесь сделать игнорирование?

     

    Еще вижу у вас сообщение, что Эклипса не может найти генератор инфо. Зайдите в Project->Options->C/C++ Build->Discovery options и в поле Compiler invokation command впишите arm-elf-gcc.exe вместо gcc.exe. Увидите много полезного, в частности - в окне Outline

     

    Исправил

     

    P.S.

    Напрасно. Оно совсем с темой топика не коррелирует.

    Может кто-то из модераторов отделит это обсуждение в отдельную ветку?

     

    Согласен, вопрос разросся.

  16. Судя по всему он не понял слова class. Значит, он компилирует в режиме С, а не С++. Какое расширение имеет ваш файл (должен иметь .cpp)? Покажите командную строку компилятора - может там принудительно задан режим С.

     

    Расширение файла правильное - cpp. Где эту строчку можно посмотреть?

    На всякий случай положу майкфайл.

    Makefile.zip

  17. Не хотелось плодить тем, поэтому напишу прямо сюда.

     

    В общем проект создан на C++. Не пойму в чем дело, компилятор не хочет компилировать

    заголовки классов в h-файлах. Яр эту конструкцию кушает нормально. В чем может быть дело?

    post-29246-1228299325_thumb.jpg

  18. Да собственно как-то голяк. Теперь думаю, стоит ли заказывать себе demo kit для анализа работы сенсора или нет.

     

    Подключил плату к блекфину и больше пока не пробовал.

    "Разобрался" с файлом, который выложил _4afc_.

    Собственно те команды, помоему, погоды большой не делают.

    По умолчанию камера выдает что-то - скорее всего это и есть jpeg 320x240, после нового года буду продолжать ковырять. По даташиту можно ориентироваться методом научного тыка :) , так как информации действительно маловато. Если демоплата работает корректно, то скорее всего имеет смысл запарсить I2c и делать точно также. Если не против, можем в дальнейшем обмениваться информацией.

  19. Вот что я писал для SAM7 (увы, до LPC руки пока не дошли)

     

    Ага. Заработало. По вашему коду понял, что мне нехватало Remap.

     

    Вот код инициализации.

     

    monitor reset   
    monitor speed 30   
    monitor speed auto  
    break main  
    load  
    monitor long 0xE01FC040 = 0x00000002    # MEMMAP = 2  
    continue

×
×
  • Создать...