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

Terminator

Участник
  • Постов

    210
  • Зарегистрирован

  • Посещение

Весь контент Terminator


  1. Что-то пошло не так :) Это без lto /opt/arm-kgp-eabi/bin/arm-kgp-eabi-ld.bfd: /tmp/ccXxvaiY.ltrans0.ltrans.o: in function `log10f': /home/LOCALNET/term/Projects/arm/workspace/0xA00_cpu/build/../../../../../../../../src/newlib/newlib/libm/math/wf_log10.c:67: undefined reference to `nan' collect2: error: ld returned 1 exit status
  2. У меня не работает: build $ /opt/arm-kgp-eabi/bin/arm-kgp-eabi-gcc --version Недопустимая инструкция (стек памяти сброшен на диск) Последняя строчка из dmesg: [175140.290577] traps: arm-kgp-eabi-gc[8187] trap invalid opcode ip:4056ea sp:7ffc4ad6a220 error:0 in arm-kgp-eabi-gcc[403000+63000] Host gentoo phenom II X6 P. S. предыдущая версия работает, но проект собрать не может. На этапе линковки вываливает кучу ошибок: /tmp/cc8PlR0G.s: Assembler messages: /tmp/cc8PlR0G.s:15: Error: selected processor does not support ARM opcodes /tmp/cc8PlR0G.s:22: Error: attempt to use an ARM instruction on a Thumb-only processor -- `cmp r2,#0' ... /tmp/cc8PlR0G.s:1441: Error: attempt to use an ARM instruction on a Thumb-only processor -- `b .L548' lto-wrapper: fatal error: /opt/arm-kgp-eabi/bin/arm-kgp-eabi-g++ returned 1 exit status compilation terminated. /opt/arm-kgp-eabi_20170625/bin/../lib/gcc/arm-kgp-eabi/8.0.0/../../../../arm-kgp-eabi/bin/ld: error: lto-wrapper failed collect2: error: ld returned 1 exit status И причём здесь lto ? Сборка с lto вылетает с "Error: offset out of range". точно так же как писал ранее.
  3. Руками написана конечно же. Задача с конструкторами имеет наивысший приоритет. Если упростить, запуск оси вставлен в стартап перед вызовами конструкторов. Имхо, проблем с библиотеками быть не должно. Хотя опыт использования библиотек у меня никакой.
  4. Вызываются конструкторы куском кода перенесённым из стартапа. Создания объектов избегаю всеми силами. В "богоклассе" вписаны все нужные мне объекты. Конструкторы вызываются в порядке объявления. P. S. в качестве ос использую freertos, до scmrtos руки пока не дошли :(
  5. Я в своих проектах запускаю отдельную задачу которая выполняет все конструкторы. По окончанию задача убивается. Для борьбы с порядком создания, использую god class. Нагородил такое чтобы не париться с вызовами функций ос в конструкторах.
  6. Снова попробовал последний свежак и споткнулся об memset :) size_t init_memory_pool(size_t mem_pool_size, void *mem_pool) { /******************************************************************/ tlsf_t *tlsf; bhdr_t *b, *ib; ... /* Zeroing the memory pool */ memset(mem_pool, 0, sizeof(tlsf_t)); ругань: .../tlsf/tlsf.c:480:5: warning: 'memset' writing 3180 bytes into a region of size 4 overflows the destination [-Wstringop-overflow=] memset((char*)mem_pool, 0, sizeof(tlsf_t)); ^ /tmp/ccutHzBY.s: Assembler messages: /tmp/ccutHzBY.s:3170: Error: offset out of range lto-wrapper: fatal error: /opt/arm-kgp-eabi/bin/arm-kgp-eabi-g++ returned 1 exit status mem_pool "достаётся" здесь: unsigned long* p = &__heap_start__; *p = 0; unsigned long* e = &__heap_end__; unsigned long len = (char*) e - (char*) p; pool = p; init_memory_pool(len, pool); __heap_start__ и __heap_end__ из .ld Без lto собирается, но не влезает. P. S. на такой же memset вставленный перед вызовом init_memory_pool, не ругается.
  7. Попробовал собрать свой загрузчик. Без lto собирает, но не влазит (и результат заметно толще чем от "свежака" 20151209), а с lto не хочет: /tmp/ccnVfbCz.ltrans2.ltrans.o: In function `realloc': <artificial>:(.text+0xcae): undefined reference to `memcpy' /tmp/ccnVfbCz.ltrans2.ltrans.o: In function `prvCopyDataFromQueue.lto_priv.178': <artificial>:(.text+0x548): undefined reference to `memcpy' /tmp/ccnVfbCz.ltrans4.ltrans.o: In function `ResetISR': <artificial>:(.isr_vector.ResetISR+0xea): undefined reference to `memset' /tmp/ccnVfbCz.ltrans3.ltrans.o: In function `prvCopyDataToQueue.constprop.106': <artificial>:(.text+0x88): undefined reference to `memcpy' /tmp/ccnVfbCz.ltrans3.ltrans.o: In function `Lpc1768FlashUpdate::FrmCompare(unsigned int, void*, unsigned int)': <artificial>:(.text+0x1e0): undefined reference to `memcmp' /tmp/ccnVfbCz.ltrans6.ltrans.o: In function `MemoryUpdate::FrmCompare(unsigned int, void*, unsigned int)': <artificial>:(.text+0x164): undefined reference to `memcmp' /opt/arm-kgp-linux-6.3.0/bin/../lib/gcc/arm-kgp-eabi/6.3.0/thumb/cortex-m3/libgcc.a(_aeabi_uldivmod.o): In function `__aeabi_uldivmod': (.text+0x20): undefined reference to `__udivmoddi4' collect2: error: ld returned 1 exit status
  8. Вернулся к относительно старому проекту. "свежаками" не собирается. /tmp/ccby68ut.s: Assembler messages: /tmp/ccby68ut.s:3065: Error: offset out of range lto-wrapper: fatal error: /opt/arm-kgp-eabi/bin/arm-kgp-eabi-g++ returned 1 exit status compilation terminated. /opt/arm-kgp-eabi_20161204/bin/../lib/gcc/arm-kgp-eabi/7.0.0/../../../../arm-kgp-eabi/bin/ld: error: lto-wrapper failed Это загрузчик, без lto не влезал в заданный размер. Раньше собирался каким-то из вариантов bleeding-edge. "Отматывал" скачанные "свежаки", собрался только "<< HYPERICUM >> 6.0.0 20151208".
  9. Согласен, с "проще" я несколько погорячился :) Просто с обычным new(std::nothrow) у меня проект не собирается, зачем-то тащит библиотечную "кучу" и что-то про исключения. Вот мой код. void* __mem = malloc(sizeof(Packet)); if (__mem == nullptr) { ... } else { packet = new(__mem) Packet(...); ... переопределение new void* operator new(size_t size, void* p) { (void) size; return p; }
  10. Такой подход требует реализации собственного, аля, сборщика мусора. Почти так и сделал. С std::nothrow сделать не получилось. Сделал проще, operator new(size_t,void*). Кстати, компилятор никаких проверок не вставляет, конструктор вызывается в любом случае. Вставил проверку перед вызовом new.
  11. ну как бы да, можно жёстко ограничить число выделяемых объектов чтобы память 100% не закончилась. А мне хочется и другой вариант попробовать, складывать команды в очередь пока есть свободная память, а потом, те что не влезают, выкидывать. С обычным new это невозможно.
  12. это всё конечно круто, спасибо за код. Но меня тут начали беспокоить внезапные сомнения в применении переопределённого оператора new без исключений. Судя по asm листингам, сразу после вызова оператора new идёт выполнение конструктора, т.е. всё "весело" грохнется если вдруг new вернёт null ... По теории можно применить placement new, сначала выделить память, проверить что её хватило, а потом уже new на эту память. Остаётся вопрос о возможных последствиях выполнения delete на созданный объект. Вероятно всё сработает как надо, вызовется деструктор, а потом память освободится, но везде в примерах пишут явный вызов деструктора и затем явное освобождение памяти.
  13. Попытался на радостях использовать std::vector ... /opt/arm-kgp-eabi/lib/gcc/arm-kgp-eabi/7.0.0/include/c++/bits/stl_algobase.h: In instantiation of 'void std::fill(_ForwardIterator, _ForwardIterator, const _Tp&) [with _ForwardIterator = long unsigned int*; _Tp = int]': /opt/arm-kgp-eabi/lib/gcc/arm-kgp-eabi/7.0.0/include/c++/bits/stl_bvector.h:402:55: required from here /opt/arm-kgp-eabi/lib/gcc/arm-kgp-eabi/7.0.0/include/c++/bits/stl_algobase.h:729:37: error: '__glibcxx_requires_valid_range' was not declared in this scope __glibcxx_requires_valid_range(__first, __last); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~ compilation terminated due to -Wfatal-errors. Безнадёга
  14. операторы new и delete переопределены? P. S. да, с lto проект не собирается (Error: offset out of range) :) Собирается только маленькая часть, загрузчик (он по сути является сильно урезанной копией основной прошивки).
  15. Что-то я так и не нашёл нормального способа определения этих лишних функций, тянущих всякие _write_sbrk и т.п. :( Затычки вернул. Файлик от AHTOXA нашёл, от моего отличается не сильно, __cxa_begin_cleanup и подобных (из ошибок выше) там нет. Поковыряю исходники gcc ... Печалит, что несмотря на явное указание -fno-exception, всякие unwind-ы всё равно тянутся :( Вернул переопределение операторов new и delete. Простые вещи вроде адекватно работают. Посмотрим что будет дальше ...
  16. Внезапно захотелось использовать больше возможностей предоставляемых C++. Выкинул из проекта старые затычки типа переопределения new delete и т.п.. Качнул последний свежак. Не собирается :( Вывод линкера ../../../../../../src/gcc/libgcc/unwind-arm-common.inc:50:28: warning: type of '__cxa_begin_cleanup' does not match original declaration [-Wlto-type-mismatch] ../../../../../../../src/gcc/libstdc++-v3/libsupc++/eh_arm.cc:97:1: note: return value type mismatch ../../../../../../../src/gcc/libstdc++-v3/libsupc++/eh_arm.cc:97:1: note: type 'bool' should match type 'bool' ../../../../../../src/gcc/libgcc/unwind-arm-common.inc:39:23: note: the incompatible type is defined here ../../../../../../../src/gcc/libstdc++-v3/libsupc++/eh_arm.cc:97:1: note: '__cxa_begin_cleanup' was previously declared here ../../../../../../../src/gcc/libstdc++-v3/libsupc++/eh_arm.cc:97:1: note: code may be misoptimized unless -fno-strict-aliasing is used ../../../../../../src/gcc/libgcc/unwind-arm-common.inc:51:52: warning: type of '__cxa_type_match' does not match original declaration [-Wlto-type-mismatch] ../../../../../../../src/gcc/libstdc++-v3/libsupc++/eh_arm.cc:40:1: note: type mismatch in parameter 3 ../../../../../../../src/gcc/libstdc++-v3/libsupc++/eh_arm.cc:40:1: note: type 'bool' should match type 'bool' ../../../../../../src/gcc/libgcc/unwind-arm-common.inc:39:23: note: the incompatible type is defined here ../../../../../../../src/gcc/libstdc++-v3/libsupc++/eh_arm.cc:40:1: note: '__cxa_type_match' was previously declared here ../../../../../../../src/gcc/libstdc++-v3/libsupc++/eh_arm.cc:40:1: note: code may be misoptimized unless -fno-strict-aliasing is used /tmp/ccDWmOks.ltrans0.ltrans.o: In function `get_eit_entry': <artificial>:(.text+0x298): undefined reference to `__exidx_start' <artificial>:(.text+0x29c): undefined reference to `__exidx_end' /opt/arm-kgp-eabi/lib/gcc/arm-kgp-eabi/7.0.0/../../../../arm-kgp-eabi/lib/thumb/cortex-m3/libc.a(lib_a-writer.o): In function `_write_r': /opt/home/arm-kgp-eabi/newlib/arm-kgp-eabi/thumb/cortex-m3/newlib/libc/reent/../../../../../../../../src/newlib/newlib/libc/reent/writer.c:58: undefined reference to `_write' /opt/arm-kgp-eabi/lib/gcc/arm-kgp-eabi/7.0.0/../../../../arm-kgp-eabi/lib/thumb/cortex-m3/libc.a(lib_a-sbrkr.o): In function `_sbrk_r': /opt/home/arm-kgp-eabi/newlib/arm-kgp-eabi/thumb/cortex-m3/newlib/libc/reent/../../../../../../../../src/newlib/newlib/libc/reent/sbrkr.c:58: undefined reference to `_sbrk' /opt/arm-kgp-eabi/lib/gcc/arm-kgp-eabi/7.0.0/../../../../arm-kgp-eabi/lib/thumb/cortex-m3/libc.a(lib_a-signalr.o): In function `_kill_r': /opt/home/arm-kgp-eabi/newlib/arm-kgp-eabi/thumb/cortex-m3/newlib/libc/reent/../../../../../../../../src/newlib/newlib/libc/reent/signalr.c:61: undefined reference to `_kill' /opt/arm-kgp-eabi/lib/gcc/arm-kgp-eabi/7.0.0/../../../../arm-kgp-eabi/lib/thumb/cortex-m3/libc.a(lib_a-signalr.o): In function `_getpid_r': /opt/home/arm-kgp-eabi/newlib/arm-kgp-eabi/thumb/cortex-m3/newlib/libc/reent/../../../../../../../../src/newlib/newlib/libc/reent/signalr.c:97: undefined reference to `_getpid' /opt/arm-kgp-eabi/lib/gcc/arm-kgp-eabi/7.0.0/../../../../arm-kgp-eabi/lib/thumb/cortex-m3/libc.a(lib_a-closer.o): In function `_close_r': /opt/home/arm-kgp-eabi/newlib/arm-kgp-eabi/thumb/cortex-m3/newlib/libc/reent/../../../../../../../../src/newlib/newlib/libc/reent/closer.c:53: undefined reference to `_close' /opt/arm-kgp-eabi/lib/gcc/arm-kgp-eabi/7.0.0/../../../../arm-kgp-eabi/lib/thumb/cortex-m3/libc.a(lib_a-fstatr.o): In function `_fstat_r': /opt/home/arm-kgp-eabi/newlib/arm-kgp-eabi/thumb/cortex-m3/newlib/libc/reent/../../../../../../../../src/newlib/newlib/libc/reent/fstatr.c:62: undefined reference to `_fstat' /opt/arm-kgp-eabi/lib/gcc/arm-kgp-eabi/7.0.0/../../../../arm-kgp-eabi/lib/thumb/cortex-m3/libc.a(lib_a-isattyr.o): In function `_isatty_r': /opt/home/arm-kgp-eabi/newlib/arm-kgp-eabi/thumb/cortex-m3/newlib/libc/reent/../../../../../../../../src/newlib/newlib/libc/reent/isattyr.c:58: undefined reference to `_isatty' /opt/arm-kgp-eabi/lib/gcc/arm-kgp-eabi/7.0.0/../../../../arm-kgp-eabi/lib/thumb/cortex-m3/libc.a(lib_a-lseekr.o): In function `_lseek_r': /opt/home/arm-kgp-eabi/newlib/arm-kgp-eabi/thumb/cortex-m3/newlib/libc/reent/../../../../../../../../src/newlib/newlib/libc/reent/lseekr.c:58: undefined reference to `_lseek' /opt/arm-kgp-eabi/lib/gcc/arm-kgp-eabi/7.0.0/../../../../arm-kgp-eabi/lib/thumb/cortex-m3/libc.a(lib_a-readr.o): In function `_read_r': /opt/home/arm-kgp-eabi/newlib/arm-kgp-eabi/thumb/cortex-m3/newlib/libc/reent/../../../../../../../../src/newlib/newlib/libc/reent/readr.c:58: undefined reference to `_read' collect2: error: ld returned 1 exit status Что делать? P. S. startup и соответсвенно ld файл, самописные.
  17. Пошарился в исходниках ядра. Насколько смог понять of_get_named_gpio() используемый spi-gpio для создания перечня чипселектов, не может выдать -1, который spi-gpio воспринимает как отсутствие чипселекта. Есть способ создать чисто виртуальный pin чтобы подсунуть его вместо ненужного чипселекта?
  18. Не закрыта :) Неясным остался момент с отключением чипселекта. В коде spi-gpio упоминается, что чипселект может отсутствовать, но как это указать в dts файле, я найти не могу. Судя по другим докам из ядра отсутствующая нога вместо <&pio 10 0> описывается как <0>, но после такой записи модуль spi-gpio падает со страшной руганью. Это же spi-gpio, откуда у него address space ? И про "потомков" подключенных к этому spi тот же вопрос.
  19. Я так делал. В этом случае ругается на ranges; Warning (ranges_format): /spi_test has empty "ranges" property but its #size-cells (0) differs from / (1) Зачем оно там я не знаю. В доке к spi-gpio написано, что должен быть. Но без ranges тоже работает и вроде не ругается.
  20. Почему-то не смог найти готовый модуль умеющий заливать прошивку в fpga, решил написать свой. Почитал про device tree, посмотрел набор готовых модулей. Вроде всё просто должно быть. Споткнулся на spi-gpio :smile3046: Описал всё по докам, написал заготовку модуля с заливкой файла в spi. Вроде работает, ногами правильно машет. Кусок dts-а: ahb { apb { pinctrl@fffff200 { spi_test { pinctrl_spi_test: spi_test-0 { atmel,pins = <AT91_PIOA 17 AT91_PERIPH_GPIO AT91_PINCTRL_NONE AT91_PIOA 19 AT91_PERIPH_GPIO AT91_PINCTRL_NONE AT91_PIOA 21 AT91_PERIPH_GPIO AT91_PINCTRL_NONE AT91_PIOA 23 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>; }; }; }; }; }; spi_test { compatible = "spi-gpio"; #address-cells = <0x1>; ranges; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_spi_test>; gpio-sck = <&pioA 17 0>; gpio-miso = <&pioA 19 0>; gpio-mosi = <&pioA 21 0>; cs-gpios = <&pioA 23 0>; num-chipselects = <1>; fpga_load_test { compatible = "xlnx,fpga_load"; spi-max-frequency = <500000>; reg = <0>; }; }; При компиляции dts-а выдаёт: Warning (reg_format): "reg" property in /spi_test/fpga_load_test has invalid length (4 bytes) (#address-cells == 1, #size-cells == 1) Warning (avoid_default_addr_size): Relying on default #size-cells value for /spi_test/fpga_load_test Что ему не нравится? Что надо сделать чтобы не ругался? Попытался отцепить чип селект, вроде как spi-gpio такое позволяет. Ничего не вышло. Компилится без варнингов, но при загрузке модуля ругается: bus: 'platform': really_probe: probing driver spi_gpio with device spi_test spi_gpio: probe of spi_test rejects match -19 -19 это ENODEV Как быть? P. S. Экспериментирую на борде atmel sama5d3x-ek. Весь софт самособранный при помощи buildroot.
  21. GPIO и DTB

    Тоже искал и ничего не нашёл. Тут описано как посмотреть состояние ноги : http://derekmolloy.ie/gpios-on-the-beagleb...-tree-overlays/ Читать с момента:
  22. Не так давно была у меня мечта, не выделять отдельное место в nand-е под ядро и его резервную копию, сложить всё в один ubifs. Загуглил поддержу ubifs в u-boot (в доке об этом ни слова). И оно сработало, u-boot достал ядро из указаного места, смог его запустить. Но радость была недолгой, когда u-boot достаёт ядро из ubifs он её безнадёжно портит. Поудивлялся немного, вокруг исходников поплясал и удалил u-boot совсем. Может в более новых версиях он починен, но я пока останусь на простом bootstrap загрузчике.
×
×
  • Создать...