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

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

Среда на базе эклипса 3.3 и гнушного компилятора gcc 4.2.0. Этот вариант гораздо бюджетнее IAR.

О нем можно почитать здесь: www.code-red-tech.com

 

В кратце о среде:

Джитаг собран на FT2232, максимальная скорость - 6МГц. По сравнению с IAR,

работает заметно медленнее.

Геммора с настройкой проекта практически нет (C-проекта).

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

 

Со средой вместе идут несколько проектов, в частности для LPC17xx и LPC23xx/24xx. и гигобайтная флешка :rolleyes: с фирменным лабелом.

Все проекты написаны на C, компилируются и работают сностно. При создании

проекта на С, автоматически генерируются 3 файла для компановщика.

 

При создании проекта на C++ так же генерятся три файла скрипта компановщика, в которых отсутствуют секции для конструкторов и прочее. :cranky:

При использовании обычного класса компановщик начинает ругаться непонятными ошибками:

make all 
Building target: BootCR.axf
Invoking: MCU C++ Linker
arm-none-eabi-c++ -nostdlib -Xlinker --gc-sections -Xlinker -Map=BootCR.map -mcpu=arm7tdmi -T BootCR.ld -o"BootCR.axf"  ./src/DoCmd.o ./src/Emac.o ./src/Fldr.o ./src/PortIO.o ./src/Rc6.o ./src/Stip.o ./src/TestPins.o ./src/cr_startup.o ./src/main.o   
c:/code_red/red_suite/tools/bin/../lib/gcc/arm-none-eabi/4.3.2/../../../../arm-none-eabi/lib\libc.a(lib_a-abort.o): In function `abort':
abort.c:(.text+0xc): undefined reference to `_exit'
c:/code_red/red_suite/tools/bin/../lib/gcc/arm-none-eabi/4.3.2/../../../../arm-none-eabi/lib\libc.a(lib_a-signalr.o): In function `_getpid_r':
signalr.c:(.text+0x4): undefined reference to `_getpid'
c:/code_red/red_suite/tools/bin/../lib/gcc/arm-none-eabi/4.3.2/../../../../arm-none-eabi/lib\libc.a(lib_a-signalr.o): In function `_kill_r':
signalr.c:(.text+0x2c): undefined reference to `_kill'
c:/code_red/red_suite/tools/bin/../lib/gcc/arm-none-eabi/4.3.2/../../../../arm-none-eabi/lib\libc.a(lib_a-sbrkr.o): In function `_sbrk_r':
sbrkr.c:(.text+0x18): undefined reference to `_sbrk'
collect2: ld returned 1 exit status
make: *** [BootCR.axf] Error 1

 

Был у меня еще один проект, который собирался в gcc ранней версии (уже не помню в какой). Путем колдовства и добавления секций, таких как .сtors и .dtors результата не принесло,

только ошибки сменились. Потом засунул скрипт от старого проекта линкеру. Написал, что все скомпилилось с размером кода 0.

Вывод пока такой, что ребята не доделали поддержку C++ (генерятся неправильные файлы линковщика). Возможность вставлять свой файл есть.

Приведу изначальный скрипт компановщика.

Может кто знает, чего там не хватает, может кто-то уже использует эту среду с С++?

Debug.zip

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


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

c:/code_red/red_suite/tools/bin/../lib/gcc/arm-none-eabi/4.3.2/../../../../arm-none-eabi/lib\libc.a(lib_a-sbrkr.o): In function `_sbrk_r':
sbrkr.c:(.text+0x18): undefined reference to `_sbrk'

 

Никакой code red не избавит от необходимости изучать кишочки gcc :)

 

Попробуйте добавить в проект вот этот файлик: syscalls.rar

 

Это минимальный набор системных вызовов. В каком-нибудь своём .cpp определите

extern "C" int putChar(int ch);
int putChar(int ch)
{
    uart0.putch(ch);
    return ch;
}

 

Хотя скорее всего всё это уже есть в какой-нибудь их библиотеке, надо просто указать в какой.

 

Приведу изначальный скрипт компановщика.

Может кто знает, чего там не хватает, может кто-то уже использует эту среду с С++?

 

Ну ctors там есть. Возможно там сделано иначе, через .init_array

 

Попробуйте что-то вроде этого:

    .text :
    {
        __ctors_start__ = .;
        *(.init_array)
        __ctors_end__ = .;
        __dtors_start__ = .;
        __dtors_end__ = .;
        KEEP(SORT(*)(.init_array))
        
        . = ALIGN(4);
        *(.text)                   /* remaining code */
        *(.text.*)                   /* remaining code */
        *(.rodata)                 /* read-only data (constants) */
        *(.rodata*)

        *(.eh_frame_hdr)
        *(.eh_frame)
        *(.ARM.extab* .gnu.linkonce.armextab.*)
        *(.gcc_except_table)
        *(.eh_frame_hdr)
        *(.eh_frame)

        *(.glue_7)
        *(.glue_7t)
        . = ALIGN(4);
    } >FLASH

 

секции .ctors и .dtors уберите.

 

Вот тут про .eh_frame.

 

Ну а вообще, раз купили, то можно напрячь продавца, наверное:)

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


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

Ну а вообще, раз купили, то можно напрячь продавца, наверное:)

 

Они сильно не напрягаются. В терре сказали что это еще пока группа интузиастов. Пробовал перед

покупкой написать им на маил, ответа не было. Потом раза три пытался позвонить. Трубку не брали.

Повторно написал на маил, с вопросом как купить? Написали, что покупайте джитаг в терраэлектронике и дали ссылку,

а лицензию на программу у нас :) .

 

А вообще впечатления от компилера: проект был скомпилирован в IAR, занимал 7кБ, (директива оптимизации - Speed)

после перенесения его на язык С и компиляции в этом компиляторе, проект стал занимать 10кБ (директива оптимизации -O3) :wacko:

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


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

 

А вообще впечатления от компилера: проект был скомпилирован в IAR, занимал 7кБ, (директива оптимизации - Speed)

после перенесения его на язык С и компиляции в этом компиляторе, проект стал занимать 10кБ (директива оптимизации -O3) :wacko:

Вы устанавливаете оптимизацию по скорости, меняете проект и сравниваете обьем? Где логика?

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


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

 Вы устанавливаете оптимизацию по скорости, меняете проект и сравниваете обьем? Где логика?

Просто в этом компиляторе в комбобоксе нету -Os. Прописал в ручную, один фиг, все равно результат тот же.

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


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

за что собсно денги уплачены?

за отладчик? причем тут эклипс?

за GCC , так он вообще ничего не стоит.

за эклипс, а чем он отличается от бесплатного?

 

единственно что могу предположить - библиотеки! больше незачто. но по описанию автра не сложилось за это впечатления.

 

:cranky: забавно

 

 

вопросы.

Вы упоминули о комбобоксе в котором нет -Os, видимо авторы продукта всетаки написали свой плагин в эклипс, это так? Скриншот этого можно глянуть.

 

GCC 4.2.0

gcc -v че выдает? чей сборки?

 

что в качестве libc предложено? собственное чтото как у CrossWorks ( в чем сомневаюсь) или newlib, если newlib то какой версии, какой версии GDB?

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


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

за что собсно денги уплачены?

Мы купили пока джитаг. Среда работает с ограничением 8кБ.

Она продается отдельно и стоит порядка 1000$

Деньги берут за плагин эклипса и за то, что у Вас все будет работать сразу :)

 

за эклипс, а чем он отличается от бесплатного?

Эклипс с их плагином полностью настроен на работу с их джитагом. Так же среда

позволяет полноценно просмтривать регистры процессоров, внутреннюю память и т.п.

в божеских окнах.

 

GCC 4.2.0

gcc -v че выдает? чей сборки?

 

Выложил скриншот консоли gcc.jpeg

 

что в качестве libc предложено? собственное чтото как у CrossWorks ( в чем сомневаюсь) или newlib, если newlib то какой версии, какой версии GDB?

Скажите как посмотреть, посмотрю. :rolleyes:

post-29246-1251892827_thumb.jpg

post-29246-1251892916_thumb.jpg

post-29246-1251893010_thumb.jpg

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


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

вижу плагин, котрый парсит регисты переферии - это гуд

 

но чето 1000$ както дороговато на мой взгляд.

 

используется newlib, судя по компиллеру

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


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

Вижу плагин, котрый парсит регисты переферии - это гуд

но чето 1000$ как-то дороговато на мой взгляд.

IAR вообще не реальных денег стоит. Этот еще можно купить :unsure:

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


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

ыыы :laughing:

 

мож попробуем выдрать "ихний плагин", поглядеть ... все остально даром ненадо.

 

вообще я даже разбирался с плагинописательством к эклипсу. хотелось сделать парсинг битов регистров переферии. принципиально все просто - просиш IDE создать окошко в нужной группе, сделать интерфейск к командам GDB, прочитать файл обисания регистров и вывести на окно. Несложно. но как дело дошло писания на яве я както затормозил и бросил. жду пока муза опять появится.

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


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

ыыы :laughing:

мож попробуем выдрать "ихний плагин", поглядеть ... все остально даром ненадо.

 

Можно попробовать. У меня постоянно был геммор с отладчиком. GDB сервер постоянно вылетал, то сбоил, то еще чего нибудь выдавал, например жмешь перепрыгнуть

через функцию, а он туда залетает и потом вешается. Джитаг от Olimex. Сносно работал j-link со своим GDB сервером, но тоже не все было гладко. Короче говоря я надолбался с

бесплатным софтом, но так нормально и не настроил.

Думаю тут надо сначала состыковать это добро между собой, чтобы не глючило. А потом браться за плагин. В коде реде вроде бы свой GDB сервер, с их джитагом вроде работает

более или менее.

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

 

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

Где находятся вектора прерываний в этом коде? (перенос KEEP(*(.isr_vector)) в другую секцию, размещенную по нулевому адресу результата не принесло, может чего упустил?).

 

.text :

{

KEEP(*(.isr_vector))

*(.text*)

*(.rodata*)

KEEP(*(.init));

KEEP(*(.fini));

} > FLASH

Вот еще нашел такой комментарий в скрипте линкера:

/*

Note: (ref: M0000066)

Moving the stack down by 16 is to work around a GDB bug.

This space can be reclaimed for Production Builds.

*/

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


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

Понял что вектора прерываний находятся полностью в KEEP(*(.isr_vector).

 

Однако .text должен находиться в в одной секции и после KEEP(*(.isr_vector).

.boot :
    {
        KEEP(*(.isr_vector));
        *(.text*)
        *(.rodata*)        
        
    } > BOOTMEM

 

Если сделать так:

 

    .boot :
    {
        KEEP(*(.isr_vector));        
        
    } > BOOTMEM

    .text :
    {
        *(.text*)
        *(.rodata*)  
    } > MFlash512

 

То дебагер улетает в undefine handler. Получается что вектор резета указывает не на начало .text, а непонятно куда.

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

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


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

у меня отладка работает на ура, даже в инлайн конструкторы заходить.

 

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

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


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

у меня отладка работает на ура, даже в инлайн конструкторы заходить.

 

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

 

Выкладывайте, будет интересно. А джитаг какой вы используете?

 

Кстати вот еще интересная ссылка на исходники для их отладочной платы, много чего интересного: http://support.code-red-tech.com/CodeRedWiki/RDB1768Support

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


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

Какая-то ерудна с линкером. Вот не прошло и пол года: http://electronix.ru/forum/lofiversion/index.php/t58320.html

а вектора стали называться по другому :07:

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


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

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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