Vitaliy_ARM 0 1 сентября, 2009 Опубликовано 1 сентября, 2009 · Жалоба Приобрели эту среду, так как очень хотелось иметь среду на базе эклипса с нормальным дебагером. Среда на базе эклипса 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 1 сентября, 2009 Опубликовано 1 сентября, 2009 · Жалоба 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. Ну а вообще, раз купили, то можно напрячь продавца, наверное:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 2 сентября, 2009 Опубликовано 2 сентября, 2009 · Жалоба Ну а вообще, раз купили, то можно напрячь продавца, наверное:) Они сильно не напрягаются. В терре сказали что это еще пока группа интузиастов. Пробовал перед покупкой написать им на маил, ответа не было. Потом раза три пытался позвонить. Трубку не брали. Повторно написал на маил, с вопросом как купить? Написали, что покупайте джитаг в терраэлектронике и дали ссылку, а лицензию на программу у нас :) . А вообще впечатления от компилера: проект был скомпилирован в IAR, занимал 7кБ, (директива оптимизации - Speed) после перенесения его на язык С и компиляции в этом компиляторе, проект стал занимать 10кБ (директива оптимизации -O3) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
msalov 0 2 сентября, 2009 Опубликовано 2 сентября, 2009 · Жалоба А вообще впечатления от компилера: проект был скомпилирован в IAR, занимал 7кБ, (директива оптимизации - Speed) после перенесения его на язык С и компиляции в этом компиляторе, проект стал занимать 10кБ (директива оптимизации -O3) Вы устанавливаете оптимизацию по скорости, меняете проект и сравниваете обьем? Где логика? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 2 сентября, 2009 Опубликовано 2 сентября, 2009 · Жалоба Вы устанавливаете оптимизацию по скорости, меняете проект и сравниваете обьем? Где логика? Просто в этом компиляторе в комбобоксе нету -Os. Прописал в ручную, один фиг, все равно результат тот же. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 2 сентября, 2009 Опубликовано 2 сентября, 2009 · Жалоба за что собсно денги уплачены? за отладчик? причем тут эклипс? за GCC , так он вообще ничего не стоит. за эклипс, а чем он отличается от бесплатного? единственно что могу предположить - библиотеки! больше незачто. но по описанию автра не сложилось за это впечатления. :cranky: забавно вопросы. Вы упоминули о комбобоксе в котором нет -Os, видимо авторы продукта всетаки написали свой плагин в эклипс, это так? Скриншот этого можно глянуть. GCC 4.2.0 gcc -v че выдает? чей сборки? что в качестве libc предложено? собственное чтото как у CrossWorks ( в чем сомневаюсь) или newlib, если newlib то какой версии, какой версии GDB? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 2 сентября, 2009 Опубликовано 2 сентября, 2009 · Жалоба за что собсно денги уплачены? Мы купили пока джитаг. Среда работает с ограничением 8кБ. Она продается отдельно и стоит порядка 1000$ Деньги берут за плагин эклипса и за то, что у Вас все будет работать сразу :) за эклипс, а чем он отличается от бесплатного? Эклипс с их плагином полностью настроен на работу с их джитагом. Так же среда позволяет полноценно просмтривать регистры процессоров, внутреннюю память и т.п. в божеских окнах. GCC 4.2.0 gcc -v че выдает? чей сборки? Выложил скриншот консоли gcc.jpeg что в качестве libc предложено? собственное чтото как у CrossWorks ( в чем сомневаюсь) или newlib, если newlib то какой версии, какой версии GDB? Скажите как посмотреть, посмотрю. :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 2 сентября, 2009 Опубликовано 2 сентября, 2009 · Жалоба вижу плагин, котрый парсит регисты переферии - это гуд но чето 1000$ както дороговато на мой взгляд. используется newlib, судя по компиллеру Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 2 сентября, 2009 Опубликовано 2 сентября, 2009 · Жалоба Вижу плагин, котрый парсит регисты переферии - это гуд но чето 1000$ как-то дороговато на мой взгляд. IAR вообще не реальных денег стоит. Этот еще можно купить :unsure: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 3 сентября, 2009 Опубликовано 3 сентября, 2009 · Жалоба ыыы :laughing: мож попробуем выдрать "ихний плагин", поглядеть ... все остально даром ненадо. вообще я даже разбирался с плагинописательством к эклипсу. хотелось сделать парсинг битов регистров переферии. принципиально все просто - просиш IDE создать окошко в нужной группе, сделать интерфейск к командам GDB, прочитать файл обисания регистров и вывести на окно. Несложно. но как дело дошло писания на яве я както затормозил и бросил. жду пока муза опять появится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 3 сентября, 2009 Опубликовано 3 сентября, 2009 · Жалоба ыыы :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. */ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 3 сентября, 2009 Опубликовано 3 сентября, 2009 · Жалоба Понял что вектора прерываний находятся полностью в 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, а непонятно куда. В чем может быть дело, как правильно разнести вектора и основную программу? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 3 сентября, 2009 Опубликовано 3 сентября, 2009 · Жалоба у меня отладка работает на ура, даже в инлайн конструкторы заходить. могу ВСЕ в кучу запаковатьь и выложить. сможете сравнить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 3 сентября, 2009 Опубликовано 3 сентября, 2009 · Жалоба у меня отладка работает на ура, даже в инлайн конструкторы заходить. могу ВСЕ в кучу запаковатьь и выложить. сможете сравнить. Выкладывайте, будет интересно. А джитаг какой вы используете? Кстати вот еще интересная ссылка на исходники для их отладочной платы, много чего интересного: http://support.code-red-tech.com/CodeRedWiki/RDB1768Support Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 4 сентября, 2009 Опубликовано 4 сентября, 2009 · Жалоба Какая-то ерудна с линкером. Вот не прошло и пол года: http://electronix.ru/forum/lofiversion/index.php/t58320.html а вектора стали называться по другому :07: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться