|
|
  |
Не могу собрать проект 'Hello Wirld !', под gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) для lpc2478 |
|
|
|
Sep 23 2009, 16:05
|

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

|
Цитата(Yra @ Sep 23 2009, 21:48)  странно: этот кусок скрипта остался от freeRTOS- овского. Я его не менял потомучто не понял к чему это... Так судя по тому, что у вас в проекте не было заглушек, в нём не использовался printf? Вот поэтому и работало наверное. end - это конец используемой памяти. Начиная с него _sbrk() начинает выдавать свободную память для malloc(). В любом случае - попробуйте, хуже не будет  ЗЫ. . = ALIGN(32 / 8); перед _end = .; не забудьте. Цитата(Yra @ Sep 23 2009, 21:48)  нет: как ругался на функцию Код int putchar(int ch) так и продолжает Так вы ж её переименовали вроде? Давайте решать проблемы по очереди  Пусть сейчас будет putChar(), тот вариант, который скомпилировался и выдавал циферки, но где не работал printf. Цитата Код init/serial.c:90: error: expected identifier or '(' before '--' token Кстати, такие дурацкие ошибки бывают, когда в каком-нибудь инклюде нет точки с запятой. Иногда компилятор от этого клинит. Хотя тогда бы смена имени не помогала... Цитата Может наведёте на примерчики простеньких программ (желательно с printf) под gcc. На сайте atmel чтото всё под кеил да под иар.. Может ещё где видели. Чтото не подворачивается ничего. Мало информации.. Да у меня всё больше под stm32. Но попробую поискать.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Sep 23 2009, 16:15
|

Местный
  
Группа: Свой
Сообщений: 396
Регистрация: 22-10-04
Из: Воронеж
Пользователь №: 962

|
нет. Всё тоже: 12висим ---- попробовал так: Код int main( void ) { char a[100]; int i = 0;
lowlevel_init(); serial_init();
serial_putc ('1'); putChar('2');
sprintf(a, "Hello World !!");
putChar('3');
while(a[i]) putChar(a[i++]);
putChar('4'); результат: Код ## Starting application at 0xA0000000 ... 123Hello World !!4 некашерно. но жить уже можно. Вроде раз sprintf работает, то проблемма не в malloc
--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
|
|
|
|
|
Sep 23 2009, 16:31
|

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

|
Цитата(Yra @ Sep 23 2009, 22:15)  некашерно. но жить уже можно. Вроде раз sprintf работает, то проблемма не в malloc Далеко не факт. У него там какая-то своя хитрая логика  Я тут посмотрел ещё раз, оказывается я перепутал. В _sbrk() используется не _end, а _heap! Попробуйте добавить в конец скрипта линкерного Код PROVIDE( _heap = _end ); Должно задышать
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Sep 23 2009, 17:46
|

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

|
Да, грустно. У меня закончились предположения. Вот мой рабочий проект под stm32, я как раз разбирался с printf:
printf_test_09_09_23_23_27_53.rar ( 56.73 килобайт )
Кол-во скачиваний: 245Попробуйте сделать такую же отладочную выдачу как в main.c (функция show_linker_vars() ). Ну и в _sbrk() тоже. Сразу увидите, что не так. По крайней мере, мне это помогло  Да, вспомнил ещё один глюк. У меня не инициализировались инициализированные переменные в стартапе, и в результате heap был сразу не ноль, и поэтому _sbrk() не работал. ----- А! Вспомнил что было  Короче, этот arm-none-eabi- c ключом -fdata-sections помещает инициализированные переменные не просто в bss, а в bss.имя_переменной. А в линкерном скрипте указано просто (.bss). Исправил на Код .bss : { . = ALIGN(4); _sbss = .; *(.bss) *(.bss.*) *(COMMON) . = ALIGN(4); _ebss = .; _end = .; __end = .; } >RAM Это не ваш случай, у вас нет ключа -fdata-sections, но это так, на всякий случай.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Sep 25 2009, 12:59
|

Местный
  
Группа: Свой
Сообщений: 396
Регистрация: 22-10-04
Из: Воронеж
Пользователь №: 962

|
Цитата А вам действительно newlib нужен? Если просто printf надо, так возмите какую-нибудь минимальную реализацию, которая инты да строки выводить умеет (гугль -> printf embedded). Не обязательно. printf нужна для вывода значений переменных в процессе отладки. Очень удобно...
--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
|
|
|
|
|
Oct 3 2009, 20:36
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(AHTOXA @ Sep 27 2009, 12:54)  И в этом самодельном _write() - таки вызывается putChar(). А, прошу прощения.  Я поначалу не заметил, что это put Char, а не put char...
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Aug 29 2013, 08:55
|

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

|
Цитата(AHTOXA @ Sep 19 2009, 01:07)  Ну это уже мелочи. Добавьте к проекту вот это: [attachment=36395:stf_sysc..._minimal.rar]
Кстати, это я взял как раз из какого-то примера под FreeRtos... ИМХО, недавно нашёл более прямой способ (при использовании newlib): При линковке добавить -lnosys и в скрипте линкера добавить Цитата PROVIDE ( end = _end ); Тогда не нужно ваш файл цеплять к проекту. Ну и ещё очень полезным оказался ключик: Цитата LDFLAGS += --specs=nano.specs Посмотрел исходники ScmRtos: Чтобы с LTO собиралось стоит поправит стартап файл в части таблицы векторов, добавив used: Цитата __attribute__ ((used, section(".isr_vector"))) Хотел спросить зачем вы переименовали стандартные имена обработчиков векторов и дали им нестандартные имена? Цитата void PendSVC_ISR(void); void SystemTimer_ISR(void); Я потратил массу времени пытаясь понять почему не вызывается SysTick_Handler...
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Aug 29 2013, 12:03
|

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

|
Цитата(demiurg_spb @ Aug 29 2013, 14:55)  ИМХО, недавно нашёл более прямой способ (при использовании newlib): О, появилась реализация заглушек в тулчейне? В каком? Как там должен называться putchar()? Есть ли в _sbrk() проверка на перекрытие кучи и стека? Цитата(demiurg_spb @ Aug 29 2013, 14:55)  Ну и ещё очень полезным оказался ключик: Насколько я понял, это пока не портабельно. А где можно почитать, что это даёт? Цитата(demiurg_spb @ Aug 29 2013, 14:55)  Чтобы с LTO собиралось стоит поправит стартап файл в части таблицы векторов, добавив used: Хотел спросить зачем вы переименовали стандартные имена обработчиков векторов и дали им нестандартные имена? В примерах для F2xx и F4xx это уже есть. ЕМНИМС, имена поменял не я, а ST:) Я взял их из какого-то совсем старого ST-шного стартапа.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 29 2013, 12:19
|

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

|
Цитата(AHTOXA @ Aug 29 2013, 16:03)  О, появилась реализация заглушек в тулчейне? В каком? 4.7.4 с launchpad.net Кстати этот тулчейн заметно быстрее собирает проекты инфа. Цитата Как там должен называться putchar()? Есть ли в _sbrk() проверка на перекрытие кучи и стека? Пока не имею ответов, но судя по форуму на ланчпаде они должны были вставить проверку. Цитата Насколько я понял, это пока не портабельно. А где можно почитать, что это даёт? В доке на newlib. Использует nano реализацию newlib, у меня чуть-ли не минус 15К с проекта ушло. Проблем с портабельностью пока не встретил. Цитата В примерах для F2xx и F4xx это уже есть. ЕМНИМС, имена поменял не я, а ST:) Я взял их из какого-то совсем старого ST-шного стартапа. Понятно. ИМХО стоит привести в соответствие с последним CMSIS'ом.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Aug 29 2013, 19:09
|

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

|
Цитата(demiurg_spb @ Aug 29 2013, 18:19)  4.7.4 с launchpad.net gcc-arm-embedded? Понятно. Что-то у меня не получилось ничего, ругается на отсутствие _sbrk, _write, _close и проч. (Тестовый проект с printf). Версия вроде свежая: Код arm-none-eabi-gcc --version arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 4.7.4 20130613 (release) [ARM/embedded-4_7-branch revision 200083] Copyright (C) 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. --specs=nano.specs работает прекрасно (первая строчка без этого ключа, вторая - с ним): Код text data bss dec hex filename 29692 2244 600 32536 7f18 ./exe/hello-stm32-printf.elf 6720 236 552 7508 1d54 ./exe/hello-stm32-printf.elf Осталось узнать, что мы при этом теряем  Цитата(demiurg_spb @ Aug 29 2013, 18:19)  Проблем с портабельностью пока не встретил. Ну вот, например, kgp-тулчейн не знает ничего про --specs=nano.specs. Цитата(demiurg_spb @ Aug 29 2013, 18:19)  ИМХО стоит привести в соответствие с последним CMSIS'ом. Зачем? Всё равно CMSIS-овский стартап не подходит, он не вызывает конструкторы. К тому же, потеряется совместимость с имеющимися проектами.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 30 2013, 07:17
|

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

|
Цитата(AHTOXA @ Aug 29 2013, 23:09)  gcc-arm-embedded? Понятно. Что-то у меня не получилось ничего, ругается на отсутствие _sbrk, _write, _close и проч. (Тестовый проект с printf). Версия вроде свежая: Странно... У меня не ругается. Да и вы сами можете убедиться что всё это есть в либе libnosys.a. Код LDFLAGS = LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) LDFLAGS += -nostartfiles LDFLAGS += -nodefaultlibs LDFLAGS += --specs=nano.specs LDFLAGS += -Wl,--relax LDFLAGS += -Wl,--gc-section LDFLAGS += -Wl,--static LDFLAGS += -Wl,--start-group LDFLAGS += -lm -lc -lgcc -lnosys LDFLAGS += -Wl,--end-group LDFLAGS += -T$(LINKER_SCRIPT_FILE) LDFLAGS += -Wl,--Map=$(TARGET).map,--cref Цитата --specs=nano.specs работает прекрасно Осталось узнать, что мы при этом теряем  без Код LDFLAGS += -u _printf_float теряем возможность форматировать float. Цитата Ну вот, например, kgp-тулчейн не знает ничего про --specs=nano.specs. У него видимо newlib не той системы вкрячен  Это решается его пересборкой. Цитата Зачем? Всё равно CMSIS-овский стартап не подходит, он не вызывает конструкторы. К тому же, потеряется совместимость с имеющимися проектами. Дело хозяйское, но лично я бы всё-равно поменял.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|