|
Code Red Suit v2.0, Среда разработки на базе эклипса |
|
|
|
Sep 1 2009, 14:11
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Приобрели эту среду, так как очень хотелось иметь среду на базе эклипса с нормальным дебагером. Среда на базе эклипса 3.3 и гнушного компилятора gcc 4.2.0. Этот вариант гораздо бюджетнее IAR. О нем можно почитать здесь: www.code-red-tech.com В кратце о среде: Джитаг собран на FT2232, максимальная скорость - 6МГц. По сравнению с IAR, работает заметно медленнее. Геммора с настройкой проекта практически нет (C-проекта). На мой взгляд, очень удачное решение для тех, кому нравится эклипс. Со средой вместе идут несколько проектов, в частности для LPC17xx и LPC23xx/24xx. и гигобайтная флешка  с фирменным лабелом. Все проекты написаны на C, компилируются и работают сностно. При создании проекта на С, автоматически генерируются 3 файла для компановщика. При создании проекта на C++ так же генерятся три файла скрипта компановщика, в которых отсутствуют секции для конструкторов и прочее. При использовании обычного класса компановщик начинает ругаться непонятными ошибками: Код 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 ( 1.58 килобайт )
Кол-во скачиваний: 28
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 25)
|
Sep 1 2009, 17:54
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(Vitaliy_ARM @ Sep 1 2009, 20:11)  Код 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 ( 1.2 килобайт )
Кол-во скачиваний: 351Это минимальный набор системных вызовов. В каком-нибудь своём .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. Ну а вообще, раз купили, то можно напрячь продавца, наверное
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Sep 2 2009, 08:22
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(AHTOXA @ Sep 1 2009, 21:54)  Ну а вообще, раз купили, то можно напрячь продавца, наверное  Они сильно не напрягаются. В терре сказали что это еще пока группа интузиастов. Пробовал перед покупкой написать им на маил, ответа не было. Потом раза три пытался позвонить. Трубку не брали. Повторно написал на маил, с вопросом как купить? Написали, что покупайте джитаг в терраэлектронике и дали ссылку, а лицензию на программу у нас  . А вообще впечатления от компилера: проект был скомпилирован в IAR, занимал 7кБ, (директива оптимизации - Speed) после перенесения его на язык С и компиляции в этом компиляторе, проект стал занимать 10кБ (директива оптимизации -O3)
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Sep 2 2009, 10:58
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(gotty @ Sep 2 2009, 14:46)  Вы устанавливаете оптимизацию по скорости, меняете проект и сравниваете обьем? Где логика? Просто в этом компиляторе в комбобоксе нету -Os. Прописал в ручную, один фиг, все равно результат тот же.
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Sep 2 2009, 11:30
|

бессмертным стать можно тремя способами
    
Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912

|
за что собсно денги уплачены? за отладчик? причем тут эклипс? за GCC , так он вообще ничего не стоит. за эклипс, а чем он отличается от бесплатного? единственно что могу предположить - библиотеки! больше незачто. но по описанию автра не сложилось за это впечатления.  забавно вопросы. Вы упоминули о комбобоксе в котором нет -Os, видимо авторы продукта всетаки написали свой плагин в эклипс, это так? Скриншот этого можно глянуть. GCC 4.2.0 gcc -v че выдает? чей сборки? что в качестве libc предложено? собственное чтото как у CrossWorks ( в чем сомневаюсь) или newlib, если newlib то какой версии, какой версии GDB?
|
|
|
|
|
Sep 2 2009, 12:05
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(klen @ Sep 2 2009, 15:30)  за что собсно денги уплачены? Мы купили пока джитаг. Среда работает с ограничением 8кБ. Она продается отдельно и стоит порядка 1000$ Деньги берут за плагин эклипса и за то, что у Вас все будет работать сразу Цитата(klen @ Sep 2 2009, 15:30)  за эклипс, а чем он отличается от бесплатного? Эклипс с их плагином полностью настроен на работу с их джитагом. Так же среда позволяет полноценно просмтривать регистры процессоров, внутреннюю память и т.п. в божеских окнах. Цитата(klen @ Sep 2 2009, 15:30)  GCC 4.2.0 gcc -v че выдает? чей сборки? Выложил скриншот консоли gcc.jpeg Цитата(klen @ Sep 2 2009, 15:30)  что в качестве libc предложено? собственное чтото как у CrossWorks ( в чем сомневаюсь) или newlib, если newlib то какой версии, какой версии GDB? Скажите как посмотреть, посмотрю.
Эскизы прикрепленных изображений
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Sep 3 2009, 10:08
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(klen @ Sep 3 2009, 10:30)  ыыы мож попробуем выдрать "ихний плагин", поглядеть ... все остально даром ненадо. Можно попробовать. У меня постоянно был геммор с отладчиком. 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. */
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Sep 3 2009, 12:54
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Понял что вектора прерываний находятся полностью в 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, а непонятно куда. В чем может быть дело, как правильно разнести вектора и основную программу?
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Sep 3 2009, 13:35
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(klen @ Sep 3 2009, 17:29)  у меня отладка работает на ура, даже в инлайн конструкторы заходить.
могу ВСЕ в кучу запаковатьь и выложить. сможете сравнить. Выкладывайте, будет интересно. А джитаг какой вы используете? Кстати вот еще интересная ссылка на исходники для их отладочной платы, много чего интересного: http://support.code-red-tech.com/CodeRedWiki/RDB1768Support
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Oct 1 2009, 11:15
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(Vitaliy_ARM @ Sep 4 2009, 16:06)  Какая-то ерудна с линкером. Вот не прошло и пол года: http://electronix.ru/forum/lofiversion/index.php/t58320.htmlа вектора стали называться по другому  В общем линкер как линкер. Все нормально. Геммор был со средой разработки. Мне на диске прислали версию среды 2.0.10. Я ее проабдейтил через нет до 2.0.16. После почти двухнедельной переписки, когда один и тот же проект у меня не работал, а у службы поддержки работал.  , они мне прислали ссылку на последнюю версию, не требующую абдейтов: ftp://code-red-tech.com/RedSuite2/red_suite_2.exeИтог такой, что среда, видимо, впоймала глюка при абдейте. Скачал и все стало сразу шеколадно на 90%  . Нерабочий проект стал сразу рабочим. если вдруг кому то понадобится ответ на вопрос, как разместить константу во флешь по указанному адресу: В коде так: Код const BYTE OurIpAddr[4] __attribute__ ((section(".ipaddr"))) = {192,168,1,4}; В скрипте линкера так: Код .ipaddr : { . = ALIGN(4); KEEP(*(.ipaddr)) } > IP_MEM Однако, как оказалось, еще рано радоваться. У меня все проекты написаны на C++. Создаю шаблон проекта на C++ (в среде заложена такая возможность). И классы там не компилятся!!! Пишу в службу поддержки, а они и говорят: Код Hi,
You need to link with a different library - use Newlib (nohost)or Newlib (semihost). See: http://support.code-red-tech.com/CodeRedWiki/CLibrary
Also, there is a mistake in the startup code for C++. Please remove the lines: LDR r3, .def__libc_init_array CMP r3, #0 BEQ .setup_main in .cppinit in cr_startup.s Действительно, поменял строчки, где эти библиотеки подключаются на GROUP(libgcc.a libc.a libcr_newlib_nohost.a) , в все сразу стало хорошо. Проект скомпилировался и на C++! Однако компилятор написал, что кода получилось 28кБ вместо примерно 10кБ  (столько занимает аналог проекта на языке C, который был сделан мной для сравнения). Попытался подключить вторую версию либ, код примерно такой же. Вопрос, можно ли где-то прописать, чтобы компилятор вкомпиливал либы, только те, которые используются проектом?
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Oct 2 2009, 15:38
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Итог такой: про C и Cpp Newlib is a complete C/C++ library, including *every* function from the standard. For C applications, we have developed Redlib, which is a smaller library designed for embedded applications, an is significantly smaller than Newlib. Unfortunately, we have developed it for C and not C++ - very, very few customers use C++ in an embedded environment. C++ сразу съедает 20кБ кода, размещая туда свои либы. В общем среда чуть сложнее, чем яр. И гораздо проще, нежели самопальное подключение связки GCC+Eclipse+GDB с джитагами на FTDI2232. Пользоваться можно. Еще удивило отсутствие мейк файлов. Среда сама включает все файлы, которые она видит в дереве проекта при компиляции. Появился жизненно важный вопрос по компилятору GCC. Как задать неинициализируемую переменную (не могу найти подходящего _attribute_)?
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Oct 2 2009, 15:44
|
Профессионал
    
Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886

|
Цитата(Vitaliy_ARM @ Oct 2 2009, 19:38)  Появился жизненно важный вопрос по компилятору GCC. Как задать неинициализируемую переменную (не могу найти подходящего _attribute_)? Код int i; ? Для каких целей? Сами её хотите инициализировать?
|
|
|
|
|
Oct 2 2009, 15:51
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(Petka @ Oct 2 2009, 19:44)  Код int i; ? Для каких целей? Сами её хотите инициализировать? typedef struct Abcd { int a; int b; int c; }XYZ; в коде: XYZ str; <- инициализируется нулями. Цель простая, в батаеечной памяти лежат данные, которые нельзя затрать прошивкой при отладке.
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Oct 2 2009, 15:59
|
Профессионал
    
Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886

|
Цитата(Vitaliy_ARM @ Oct 2 2009, 19:51)  Цель простая, в батаеечной памяти лежат данные, которые нельзя затрать прошивкой при отладке. Понятно. Тогда вам требуется изучить скрипты линкера. Воспользуйтесь поиском по форуму. Неоднократно обсуждалось. P.S.Или можно воспользоваться обращением к структуре по адресу, где адрес вручную указывает на батареечную память. Но этот способ идеологически не совсем правильный. Код XYZ* str_ptr=(XYZ*)0xFEED; // никакой памяти не обнулится.
val_a = str_ptr->a; // обращение по адресу.
|
|
|
|
|
Oct 3 2009, 14:51
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(Vitaliy_ARM @ Oct 2 2009, 19:38)  Появился жизненно важный вопрос по компилятору GCC. Как задать неинициализируемую переменную (не могу найти подходящего _attribute_)? Для avr-gcc так: Код uint8_t foo __attribute__((section(".noinit")));
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Oct 5 2009, 08:32
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(demiurg_spb @ Oct 3 2009, 18:51)  Для avr-gcc так: Код uint8_t foo __attribute__((section(".noinit"))); Ближе, но не то. В общем структура уже сидит в секции батареечной памяти. В другую пихать нельзя. Цитата(Petka @ Oct 2 2009, 19:59)  Понятно. Тогда вам требуется изучить скрипты линкера. Воспользуйтесь поиском по форуму. Неоднократно обсуждалось. Наверное, вопрос нужно задать так, потому что, нужный мне ответ утонул, найти не могу: Как в скрипте линкера указать, что именно эта секция не должна инициализироваться?
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Oct 5 2009, 14:20
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(demiurg_spb @ Oct 3 2009, 18:51)  Для avr-gcc так: Код uint8_t foo __attribute__((section(".noinit"))); Похоже , что эта конструкция в ARM GCC задается так: Код int i __attribute__ ((section("nocommon"))); Так не инициализируются обычные переменные. Но у меня структура уже сидит в своей секции и инициализируется нулями.
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Oct 6 2009, 07:10
|

бессмертным стать можно тремя способами
    
Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912

|
я так понимаю все это области ОЗУ? ход мыслей такой. 1.описать область памяти этой Вашей батарейной области в скрипте (адрес и размер) 2.не использовать эту секцию на запись (не говорить что ее нада ложить в озу или флеш). 3 в С коде просто объявить структуру в этой секции (.data копируются из флеша, .bss - обнуляется, а другие секции вообще по идее не должны трогатся никем, ведь все эти телодвижения в startup code реализуются) для lpc2148 у меня так сделано с кусками RAM - буфера USB модуля которые на тойже шине что и сам модуль. я не проверял но писатся туда ничего не должно при прошивке и отладке. нада проверить...
|
|
|
|
|
Oct 6 2009, 13:27
|

Знающий
   
Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828

|
Цитата(klen @ Oct 6 2009, 10:10)  я так понимаю все это области ОЗУ? ход мыслей такой. 1.описать область памяти этой Вашей батарейной области в скрипте (адрес и размер) 2.не использовать эту секцию на запись (не говорить что ее нада ложить в озу или флеш). 3 в С коде просто объявить структуру в этой секции (.data копируются из флеша, .bss - обнуляется, а другие секции вообще по идее не должны трогатся никем, ведь все эти телодвижения в startup code реализуются) для lpc2148 у меня так сделано с кусками RAM - буфера USB модуля которые на тойже шине что и сам модуль. я не проверял но писатся туда ничего не должно при прошивке и отладке. нада проверить...  Специально залез сюда, чтобы еще раз спросить - Вы можете помочь собрать драйверы под BDM или хотя бы рассказать как это делать, но для этого надо взглянуть в мою тему: Нужно собрать под WIN32 BDM драйверы прошу помощи, For klen
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|