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

    

Вопросы по Eclipse, CDT, Zylin embedded CDT

Поставил amontec-sdk4arm, нашел демо проект lpc2378_demo1, уровень оптимизации поставил на 0. Компиляция без ошибок. Запустил sdk4arm-insight в режиме симуляции. Симуляция зависла на

124 while ( ((PLLSTAT & (1 << 26)) == 0) ); /* Check lock bit status */

 

Стал смотреть более внимательно и обнаружил непонятное для меня.

Посмотрите, пожалуйста, на строки 0x71e, 0x720, 0x722 - это нормально?

 

    111        PLLCFG = PLL_MValue | (PLL_NValue << 16);
-    0x70a    <ConfigurePLL+66>:        movs    r2, #11
-    0x70c    <ConfigurePLL+68>:        subs    r3, #136
-    0x70e    <ConfigurePLL+70>:        str    r2, [r3, #0]
    112        PLLFEED = 0xaa;
-    0x710    <ConfigurePLL+72>:        ldr    r2, [pc, #92]    (0x770 <ConfigurePLL+168>)
-    0x712    <ConfigurePLL+74>:        movs    r0, #170
-    0x718    <ConfigurePLL+80>:        str    r0, [r2, #0]
    113        PLLFEED = 0x55;
-    0x714    <ConfigurePLL+76>:        movs    r1, #85
-    0x71a    <ConfigurePLL+82>:        str    r1, [r2, #0]
    114          
    115        PLLCON = 1;                /* Enable PLL, disconnected */
-    0x716    <ConfigurePLL+78>:        subs    r3, #4
-    0x71c    <ConfigurePLL+84>:        str    r4, [r3, #0]
    116        PLLFEED = 0xaa;
-    0x71e    <ConfigurePLL+86>:        str    r0, [r2, #0]
    117        PLLFEED = 0x55;
-    0x722    <ConfigurePLL+90>:        str    r1, [r2, #0]
    118    
    119        CCLKCFG = CCLKDivValue;    /* Set clock divider */
-    0x720    <ConfigurePLL+88>:        adds    r3, #132
-    0x724    <ConfigurePLL+92>:        movs    r2, #4
-    0x726    <ConfigurePLL+94>:        str    r2, [r3, #0]
    120    #if USE_USB
    121        USBCLKCFG = USBCLKDivValue;        /* usbclk = 288 MHz/6 = 48 MHz */
-    0x728    <ConfigurePLL+96>:        movs    r2, #5
-    0x72a    <ConfigurePLL+98>:        adds    r3, #4
-    0x72c    <ConfigurePLL+100>:        str    r2, [r3, #0]
    122    #endif
    123    
    124        while ( ((PLLSTAT & (1 << 26)) == 0) );    /* Check lock bit status */
-    0x72e    <ConfigurePLL+102>:        ldr    r2, [pc, #56]    (0x768 <ConfigurePLL+160>)
-    0x730    <ConfigurePLL+104>:        ldr    r3, [r2, #0]
-    0x732    <ConfigurePLL+106>:        lsls    r1, r3, #5
-    0x734    <ConfigurePLL+108>:        bpl.n    0x72e <ConfigurePLL+102>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почитал, решил присоединится в eclipse-водам :)

Возникли вопросы:

1. В проект добавляются файлы только автоматически? То есть все, что в каталоге проекта автоматически становиться его частью? А можно ли сделать так, что автоматом файлы и каталоги не добавлялись, а я добавлял их вручную?

2. Имеются проекты разделенные на каталоги. Например include - только *.h файлы, src - только *.c файлы, linker - только скрипты линкера и т.д. Прикомпиляции eclipse создает подкаталог Debug и компилирует оттуда. Указание ключа (как я раньше делал) -Iinclude приводит к тому, что gcc ищет каталог Debug/include а не include. Пока исправил ключ на -I../include, но это не нормально, по моему. Как объяснить eclipse, чтобы он брал не только src но и другие (выбранные мной) каталоги в Debug?

3. Работаю в Linux и потому *.s и *.S - это разные типы файлов. Нашел окно, где задаются типы файлов, добавил *.S - Assembler source file. Применил, нажал ОК. Открываю снова окно настроек типов файлов - моего определения нет! Куда оно делось и как его сохранить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Симуляция зависла на

124 while ( ((PLLSTAT & (1 << 26)) == 0) ); /* Check lock bit status */

Логично. 26 бит в PLLSTAT выставляется аппаратно, о чем симулятор, скорее всего, не знает. Чтобы проскочить это место нужно либо вручную взвести в окне памяти нужный бит в нужной ячейке, либо временно добавить в предыдущий код строчку, взводящую этот бит.
Стал смотреть более внимательно и обнаружил непонятное для меня.

Посмотрите, пожалуйста, на строки 0x71e, 0x720, 0x722 - это нормально?

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

Отступление: Аналог Девайс вот умудрились в своих ADuC70xx сделать трехбайтовый регистр FEESIGN. Какой командой они планировали в него писать?

 

1. В проект добавляются файлы только автоматически? То есть все, что в каталоге проекта автоматически становиться его частью? А можно ли сделать так, что автоматом файлы и каталоги не добавлялись, а я добавлял их вручную?
Скорее это файлы, которые он показывает в дереве проекта. А что будет компилиться - зависит от makefile. Во всяком случае так происходит, если при создании проекта выбрать makefile project.

При компиляции eclipse создает подкаталог Debug и компилирует оттуда.
У меня он ищет makefile в каталоге проекта, т.е. в том, где лежат .cproject и .project. А уже все подкаталоги создает makefile относительно своего расположения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Скорее это файлы, которые он показывает в дереве проекта. А что будет компилиться - зависит от makefile. Во всяком случае так происходит, если при создании проекта выбрать makefile project.

У меня он ищет makefile в каталоге проекта, т.е. в том, где лежат .cproject и .project. А уже все подкаталоги создает makefile относительно своего расположения.

Ну я для начала выбрал проект "Managed Make C Project", то есть Makefile создается и изменяется автоматически (я правильно понял?). Советуете использовать Standard Make C Project?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Логично. 26 бит в PLLSTAT выставляется аппаратно, о чем симулятор, скорее всего, не знает. Чтобы

Да, но строки

    SCS |= 0x20;            /* Enable main OSC */ 
while( !(SCS & 0x40) );    /* Wait until main OSC is usable */

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

 

И попутно.

Можно в нем как-то смотреть содержание отдельных ячеек памяти? Хочется состояние регистров смотреть.

А в самом коде криминала не видно, кроме записи слова в байтовый PLLFEED.

Именно это и смущает. А если переставить предыдущие команды, то уже совсем не безобидно. Правда, код все же оптимизирован, может в этом дело.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дошел до реальной платы. Пока не приехал MT-Link пытаю wiggler.

Стоит Yagarto (openocd-r520, а не 592). Настроил по примеру две конфигурации openocd для загрузки и отладки из флэш. Запустил оба, затем настроенный embedded debug (native). Процесс замерз на 27% с сообщением

 

launching dos_2368

launching: GDB commands: continue

 

В чем может быть причина? Может wiggler? У меня NSRST на 15 ноге инверсный, а NTRST на 3 ноге нет. В зависшем положении NSRST =1, а на NTRST импульсы.

 

Тесты сообщений выдаваемые при запуске и файлы *.cfg приложил.

Да, в *.cfg из lpc2378_demo1_20070629 от Martin Thomas ошибка в строке

flash bank lpc2000 0x0 0x80000 0 0 lpc2000_v2 0 12000 calc_checksum - должно быть 0x80000 0 0 0 lpc2000_v2.

__________________cfg.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Ну я для начала выбрал проект "Managed Make C Project", то есть Makefile создается и изменяется автоматически (я правильно понял?). Советуете использовать Standard Make C Project?

Для начала в свойствах компилятора нужно указать все папки проекта.

А потом отдельные файлы можно выключить (правая мышь->Exclude from build).

Значки "с" и "h" на отключенных файлах становятся не сплошными, а контурными

Поделиться сообщением


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

А потом отдельные файлы можно выключить (правая мышь->Exclude from build).

Значки "с" и "h" на отключенных файлах становятся не сплошными, а контурными

Хм. Обратная логика :).

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Спасибо.

Да не за что.

Я вот уже склоняюсь к мысле, что надо ручками мэйк писать.

Синтаксис немного необычный (для меня)

ЗАТО:

1. Не надо в начале каждого проекта колупать туеву хучу всяких мелких настроечек (и всё равно что-нето забудешь)

2. Автомэйк не всегда делает так, как хочется, особенно в сложных проектах

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Я вот уже склоняюсь к мысле, что надо ручками мэйк писать.

 

Воистину так:-)

 

Настоящие программеры делают так

 

:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
ЗАТО:

3. Проект легко отделяется от Эклипсы и может существовать отдельно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3. Проект легко отделяется от Эклипсы и может существовать отдельно.

+1

Удобно и независимо от оболочки. Для Winavr только так и использую. Makefile редактирую как мне надо с добавлением необходимого.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

все было шеколадно пока не обновился ....

 

работаю для АRМ

 

после обновления имею

Eclipse 3.3.2 Build id: M20080221-1800

ZylinCDT версии 4.1.16

CDT 4.0.3.200802251018

gdb6.8

 

косяк в том что теперь CDT упорно создает в корне воркспейса папку zylin-cdt-debugging и почему то при отладке ищет именно там собранный бинарник. :07: с какого перепоя????

 

скрипт для осd в части касающейся :

target remote localhost:3333
monitor poll
monitor arm7_9 dcc_downloads enable
monitor flash probe 0
monitor flash erase_sector 0 0 26
monitor flash write_bank 0 out/image.bin 0x0
monitor reset run
monitor soft_reset_halt
monitor arm7_9 force_hw_bkpts enable
symbol-file out/image.elf
thbreak main
continue

 

так вот СDT почемуто ????? выполняет команду скрипта

monitor flash write_bank 0 out/image.bin 0x0 из текущей директории workspase/PROJECT_NAME/out/

а команду

symbol-file out/image.elf из текущей директории workspase/zylin-cdt-debugging/out/image.elf

 

в результате чего OCD чесно заливает бинарник во флешь а GDB чесно пытается найти ELF там где ему сказал CDT(т.е там где его ессесно нет)

 

короче так.. кто еще не налетель на

эту "фичу" не обновляйте ZylinCDT

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Импортировал некоторые лишние файлы в проект.

А как можно убрать файл из Project Explorerа, так чтобы он не удалялся с винта физически?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Импортировал некоторые лишние файлы в проект.

А как можно убрать файл из Project Explorerа, так чтобы он не удалялся с винта физически?

Насколько я понимаю, он показывает содержимое всех вложенных папок проекта. Если вы добавляли файл руками (создав ссылку) - ее можно удалить. Если файл лежит в подпапке проекта - можно только настроить фильтры так, чтобы он не отображался в окне explorer-а.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация