реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Не могу собрать проект 'Hello Wirld !', под gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) для lpc2478
AHTOXA
сообщение Sep 23 2009, 16:05
Сообщение #16


фанат дивана
******

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



Цитата(Yra @ Sep 23 2009, 21:48) *
странно: этот кусок скрипта остался от freeRTOS- овского. Я его не менял потомучто не понял к чему это...


Так судя по тому, что у вас в проекте не было заглушек, в нём не использовался printf? Вот поэтому и работало наверное.
end - это конец используемой памяти. Начиная с него _sbrk() начинает выдавать свободную память для malloc().

В любом случае - попробуйте, хуже не будетsmile.gif

ЗЫ. . = ALIGN(32 / 8); перед _end = .; не забудьте.


Цитата(Yra @ Sep 23 2009, 21:48) *
нет: как ругался на функцию
Код
int putchar(int ch)

так и продолжает

Так вы ж её переименовали вроде? Давайте решать проблемы по очередиsmile.gif Пусть сейчас будет putChar(), тот вариант, который скомпилировался и выдавал циферки, но где не работал printf.

Цитата
Код
init/serial.c:90: error: expected identifier or '(' before '--' token

Кстати, такие дурацкие ошибки бывают, когда в каком-нибудь инклюде нет точки с запятой. Иногда компилятор от этого клинит. Хотя тогда бы смена имени не помогала...
Цитата
Может наведёте на примерчики простеньких программ (желательно с printf) под gcc. На сайте atmel чтото всё под кеил да под иар.. Может ещё где видели. Чтото не подворачивается ничего. Мало информации..


Да у меня всё больше под stm32. Но попробую поискать.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Yra
сообщение Sep 23 2009, 16:15
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 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


--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 23 2009, 16:31
Сообщение #18


фанат дивана
******

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



Цитата(Yra @ Sep 23 2009, 22:15) *
некашерно. но жить уже можно. Вроде раз sprintf работает, то проблемма не в malloc


Далеко не факт. У него там какая-то своя хитрая логикаsmile.gif

Я тут посмотрел ещё раз, оказывается я перепутал. В _sbrk() используется не _end, а _heap!

Попробуйте добавить в конец скрипта линкерного

Код
PROVIDE( _heap = _end );


Должно задышатьsmile.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Yra
сообщение Sep 23 2009, 16:39
Сообщение #19


Местный
***

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



нет. Всё тоже: 12висим sad.gif


--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 23 2009, 17:46
Сообщение #20


фанат дивана
******

Группа: Свой
Сообщений: 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() тоже. Сразу увидите, что не так. По крайней мере, мне это помоглоsmile.gif

Да, вспомнил ещё один глюк. У меня не инициализировались инициализированные переменные в стартапе, и в результате heap был сразу не ноль, и поэтому _sbrk() не работал.

-----
А! Вспомнил что было smile.gif

Короче, этот arm-none-eabi- c ключом -fdata-sections помещает инициализированные переменные не просто в bss, а в bss.имя_переменной. А в линкерном скрипте указано просто (.bss).
Исправил на
Код
    .bss :
    {
        . = ALIGN(4);
        _sbss = .;
         *(.bss)
         *(.bss.*)
         *(COMMON)
        . = ALIGN(4);
        _ebss = .;
        _end = .;
        __end = .;
    } >RAM


Это не ваш случай, у вас нет ключа -fdata-sections, но это так, на всякий случай.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Flexz
сообщение Sep 24 2009, 11:51
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



А вам действительно newlib нужен? Если просто printf надо, так возмите какую-нибудь минимальную реализацию, которая инты да строки выводить умеет (гугль -> printf embedded).
Go to the top of the page
 
+Quote Post
Yra
сообщение Sep 25 2009, 12:59
Сообщение #22


Местный
***

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



Цитата
А вам действительно newlib нужен? Если просто printf надо, так возмите какую-нибудь минимальную реализацию, которая инты да строки выводить умеет (гугль -> printf embedded).

Не обязательно. printf нужна для вывода значений переменных в процессе отладки. Очень удобно...


--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
Go to the top of the page
 
+Quote Post
alx2
сообщение Sep 26 2009, 21:27
Сообщение #23


Местный
***

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



Если вы действительно используете printf из newlib, то он не имеет никакого отношения к putchar. В newlib printf сделан по-честному - он эквивалентен fprintf(stdout, ...), и бэк-эндом для него является системный вызов write. Соответственно, для использования printf stdout должен содержать открытый для записи поток (newlib-овский stdout допускает прямое присваивание ему значения), а собственно вывод в последовательный порт должен выполняться внутри write.


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 27 2009, 07:54
Сообщение #24


фанат дивана
******

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



Цитата(alx2 @ Sep 27 2009, 03:27) *
Если вы действительно используете printf из newlib, то он не имеет никакого отношения к putchar. В newlib printf сделан по-честному - он эквивалентен fprintf(stdout, ...), и бэк-эндом для него является системный вызов write.


Не сбивайте человекаsmile.gif У него нет системы, потому системный вызов _write() вместе с другими необходимыми системными вызовами пришлось добавлять самому (см. мой аттач к посту №5). И в этом самодельном _write() - таки вызывается putChar().


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
alx2
сообщение Oct 3 2009, 20:36
Сообщение #25


Местный
***

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



Цитата(AHTOXA @ Sep 27 2009, 12:54) *
И в этом самодельном _write() - таки вызывается putChar().
А, прошу прощения. smile.gif Я поначалу не заметил, что это putChar, а не putchar...


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Aug 29 2013, 08:55
Сообщение #26


неотягощённый злом
******

Группа: Свой
Сообщений: 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...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 29 2013, 12:03
Сообщение #27


фанат дивана
******

Группа: Свой
Сообщений: 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-шного стартапа.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Aug 29 2013, 12:19
Сообщение #28


неотягощённый злом
******

Группа: Свой
Сообщений: 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'ом.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 29 2013, 19:09
Сообщение #29


фанат дивана
******

Группа: Свой
Сообщений: 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

Осталось узнать, что мы при этом теряемsm.gif
Цитата(demiurg_spb @ Aug 29 2013, 18:19) *
Проблем с портабельностью пока не встретил.

Ну вот, например, kgp-тулчейн не знает ничего про --specs=nano.specs.
Цитата(demiurg_spb @ Aug 29 2013, 18:19) *
ИМХО стоит привести в соответствие с последним CMSIS'ом.

Зачем? Всё равно CMSIS-овский стартап не подходит, он не вызывает конструкторы. К тому же, потеряется совместимость с имеющимися проектами.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Aug 30 2013, 07:17
Сообщение #30


неотягощённый злом
******

Группа: Свой
Сообщений: 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 работает прекрасно
Осталось узнать, что мы при этом теряемsm.gif
без
Код
    LDFLAGS += -u _printf_float
теряем возможность форматировать float.

Цитата
Ну вот, например, kgp-тулчейн не знает ничего про --specs=nano.specs.
У него видимо newlib не той системы вкряченsm.gif
Это решается его пересборкой.

Цитата
Зачем? Всё равно CMSIS-овский стартап не подходит, он не вызывает конструкторы. К тому же, потеряется совместимость с имеющимися проектами.
Дело хозяйское, но лично я бы всё-равно поменял.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 11th August 2025 - 18:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01492 секунд с 7
ELECTRONIX ©2004-2016