Решено: [Sloeber] Программные сбои

Костбилл
Вторник 8 августа 2017 г. 9:35 вечера
[Обновление администратора]

В этой теме обсуждается проблемы с Slaeber IDE, который не полностью поддерживает STM32.

Проблемы, описанные в этом посте, не возникают, если вы используете Arduino IDE

Смотрите этот пост http: // www.STM32duino.com/viewtopic.PHP ... = 70#P33060








Привет, первый пост здесь.

Я работаю с Slaeber, но я добавляю библиотеки Roger Clark Github.

Я пытаюсь перенести библиотеку KNX из Франка Марини, и до сих пор у меня возникают проблемы с Malloc.

Когда я удаляю вызов Malloc, программа не вылетает, когда я оставляю его туда, она вылетает.

Я думаю, что это связано с конфигурацией Slaeber.
В меню->предпочтения в Arduino:
Частная библиотечная путь: C: \ arduino \ hardware \ arduino_stm32 \ stm32f1 \ библиотеки
Приватный аппаратный путь: C: \ arduino \ hardware \ arduino_stm32 \ stm32f1
Вышеуказанное, как я уже упоминал, от GitHub Роджера Кларка.

Когда я щелкну за правой кнопкой мыши->Перейдите к определению по функции Malloc, выбор, который у меня есть, не по этим путям, вместо этого они из некоторых путей Slaeber.

Вы также думаете, что это может вызвать проблему?
Как я могу это изменить?

Кроме того, тестовый код ILI9341 отлично работает, когда программа не сбой.

Спасибо всем!
Счет.

Стивестронг
Вторник 8 августа 2017 22:05
Замените вызов Malloc на исправления массивов/объектов, тогда он должен работать.
Malloc не рекомендуется для устройств с такими небольшими воспоминаниями.

Костбилл
Вторник 8 августа 2017 г. 22:30
Это то, что я планирую сделать, но я хотел что -то, чтобы убедиться, что библиотека работает.
Это не должно быть так, это должно работать, правильно? Есть ли известная ошибка для Malloc?

Rogerclark
Ср. 09 августа 2017 12:25
Вы не очень хорошо описали свою проблему в названии нашего поста

Я думаю, что вы говорите, что вы пытались использовать конкретную стороннюю библиотеку, которая не сработала.

Библиотека, на которую вы упомянули, кажется,

https: // github.com/franckmarini/knxdevice

Я подозреваю, что ошибка не имеет ничего общего с Malloc, если только ее размер его Mallocing не влияет на собственные типы размера на этом 32 -битном устройстве по сравнению с размером объектов на 8 -битном устройстве AVR E.глин. Вы могли бы в конечном итоге попытаться сделать Malloc в 4 раза больше памяти, чем на AVR

Однако проблема, скорее всего, будет связана с глобальным конструктором, где конструктор пытается использовать аппаратное обеспечение перед частями ядра, были инициализированы

Костбилл
Ср. 09 августа 2017 г., 7:50 утра
Привет,

Да, это библиотека.

Я думаю, что вы правы, проблема вызвана построением объектов KNX.
Поскольку конструктор объектов KNX использует Malloc, я полагаю, что Malloc пытается распределить не существующую память, так как инициатор еще не полностью.

Я не думаю, что когда -нибудь подумаю об этом (ну, с этого момента я надеюсь :) )

Каково ваше предложение о решении этого? Как я могу сказать программному обеспечению построить объекты после полного инициирования ядра?
Есть ли атрибут, который может указать это?
Или это хороший подход к первым указателям KnxObject и ините их в Setup () и никогда не разрушает их?

Спасибо за понимание,
Счет.

Rogerclark
Ср. 09 августа 2017 г., 7:55 утра
Вы уверены, что его Malloc сбой ?

В конструкторе, если вы измените код на возврат непосредственно перед Malloc, я предполагаю, что все в порядке, и если вы вернетесь сразу после Malloc, он никогда не возвращает ?

Вам также необходимо сделать действительно простой пример, который просто имеет глобальный экземпляр этого библиотечного объекта и не пытайтесь использовать объект.

Пса.

Глядя на код, он выглядит как один из вызовов конструкторов

https: // github.com/franckmarini/knxdevi ... КТ.CPP#L39

вызывает длину функции

https: // github.com/franckmarini/knxdevi ... PP#L28-L30

который использует чтения памяти программы для загрузки из этого массива

https: // github.com/franckmarini/knxdevi ... #L109-L171

Я думаю, что гораздо более вероятно, что эти массивы памяти программы не были настроены, когда код пытается их использовать, и поэтому пытается получить огромный объем памяти

По сути, код записан для процессора AVR, который не использует ту же системную архитектуру (Addressing Flat Pemory),
эн.глин. AVR использует архитектуру Гарварда https: // en.Википедия.org/wiki/amtel_avr
где, как arm Devices von Neumann Architecture Использование https: // en.Википедия.org/wiki/von_neumann_architecture

Я бы сначала предложил вам избавиться от Progmem

Костбилл
Ср. 09 августа 2017 г. 8:55 утра
[Rogerclark - Ср. 09 августа 2017 г. 7:55] - Вы уверены, что его Malloc сбой ?

В конструкторе, если вы измените код на возврат непосредственно перед Malloc, я предполагаю, что все в порядке, и если вы вернетесь сразу после Malloc, он никогда не возвращает ?

Вам также необходимо сделать действительно простой пример, который просто имеет глобальный экземпляр этого библиотечного объекта и не пытайтесь использовать объект.
Я сделал это, я прокомментировал только часть Malloc, я построил объекты и не использовал их, и это не сбоя.
Пса.

Глядя на код, он выглядит как один из вызовов конструкторов

https: // github.com/franckmarini/knxdevi ... КТ.CPP#L39

вызывает длину функции

https: // github.com/franckmarini/knxdevi ... PP#L28-L30

который использует чтения памяти программы для загрузки из этого массива

https: // github.com/franckmarini/knxdevi ... #L109-L171

Я думаю, что гораздо более вероятно, что эти массивы памяти программы не были настроены, когда код пытается их использовать, и поэтому пытается получить огромный объем памяти

По сути, код записан для процессора AVR, который не использует ту же системную архитектуру (Addressing Flat Pemory),
эн.глин. AVR использует архитектуру Гарварда https: // en.Википедия.org/wiki/amtel_avr
где, как arm Devices von Neumann Architecture Использование https: // en.Википедия.org/wiki/von_neumann_architecture

Я бы сначала предложил вам избавиться от Progmem
Я читал о Progmem в посте здесь о том, как импортировать библиотеки, и я избавился от слова Progmem на первых этапах компиляции. Я также удалил pgm_read_byte:
pgm_read_byte (&Knxdptidtoformat [dptid]) становится -----> Knxdptidtoformat [dptid]

Тем не менее, это все еще рухнет. Мне очень плохо об этом, я понятия не имею, что делать.

Спасибо,
Счет.

Rogerclark
Ср. 09 августа 2017 10:22
Я уверен, что у кого -то будет время помочь вам отладить это, но для начала я попытался изолировать проблему

шанс код так, чтобы он просто использовал длину 100, и посмотрите, все еще сбой
эн.глин.

_length (100)
#ifdef KNX_COM_OBJ_SUPPORT_ALL_PRIORITIES KnxComObject::KnxComObject(word addr, e_KnxDPT_ID dptId, e_KnxPriority prio, byte indicator ) : _addr(addr), _dptId(dptId), _indicator(indicator), _length(100), _prio(prio) #else KnxComObject::KnxComObject(word addr, e_KnxDPT_ID dptId, byte indicator ) : _addr(addr), _dptId(dptId), _indicator(indicator), _length(100) #endif { if (_length <= 2) _longValue = NULL; // short value case else { // long value case _longValue = (byte *) malloc(_length-1); for (byte i=0; i <_length-1 ; i++) _longValue[i] = 0; } if (_indicator & KNX_COM_OBJ_I_INDICATOR) _validity = false; // case of object with "InitRead" indicator else _validity = true; // case of object without "InitRead" indicator }

Костбилл
Ср. 09 августа 2017 г. 10:29
Спасибо, я попробую еще раз сегодня после работы.

Счет.

Костбилл
Ср. 09 августа 2017 г. 20:14
То, что я вижу сегодня, отличается от того, что я видел вчера.
Возможно, я не заметил вчера.

Когда я добавляю библиотеку в проект (меню Slaeber->Ардуино->Добавить библиотеку в выбранное проект), он сбои (или даже не работает, не может сказать).

Я ничего не делаю, я ничего не звоню или даже не создаю объекты начала файла, даже не включаю файлы из библиотеки. Я просто добавляю библиотеку.

Если я удалю библиотеку, это работает.

Кто -нибудь видел что -то подобное?

Если я добавлю другую библиотеку, например, библиотеку проводов, у нее нет проблем.

Спасибо,
Счет.

Костбилл
Ср 09 августа 2017 г., 8:51 вечера
Последнее обновление:
Я пошел в STM32duino, и я только что включил библиотеку, и она не сбоялась.

Не сбои в другой строке, но, по крайней мере, это кажется вопросом кода.

Итак, сейчас я просто меняю библиотеки в Словере и для последней компиляции, я собираю в STM32Duino и загружаю оттуда.

Спасибо,
Счет.

Rogerclark
Ср. 09 августа 2017 г., 21:24
Использование чего -то другого, кроме IDE, добавляет еще один уровень неизвестных

Попробуйте использовать нормальную Arduino IDE, вместо этого ...

Костбилл
Ср. 09 августа 2017 г., 21:51
Привет!

Он работал в Arduino IDE.

Итак, как я писал, я использую Slaeber для разработки (навигация кода и все вкусности) и просто компилируюсь и загружаю из IDE.

Спасибо!
Счет.

Rogerclark
Ср. 09 августа 2017 22:09
Можете ли вы изменить заголовок вашего поста в этом случае, так как проблема с Slaeber

Ядро написано только для работы с Arduino IDE.

Я не использую другие IDE для разработки Arduino, так как, как правило, есть несколько несовместимости.

Вы должны связаться с командой Sleober по поводу этой проблемы

Пито
Чт 10 августа 2017 г., 7:30 утра
Я работаю с Slaeber, но я добавляю библиотеки Roger Clark Github. Sloeber не имеет «собственных» библиотек или ядер.
Он использует Libmaple, STM32Generic или любое другое ядро, которое вы выберете для компиляции (называемая «платформа» в Sloeber - «платформа, которую вы хотите использовать - селектор платформы»).
У меня 11 ядер (папки платформы) в Словебе, и я могу выбрать и собрать источник в любом из этих ядер.

Вы должны потратить некоторое время, чтобы научиться работать с Slakeber. Иногда (например, когда вы связываетесь с библиотеками вручную или когда вы копируете/вставляете проекты, и вы меняете, включаете в нее после этого), вы должны очистить список в «Включить папки», чтобы избавиться от тех, которые вам не нуждаются - скорее всего, в вашем случае ( Иногда это случается, вы получаете туда два LIB, включающие из разных мест для одной и той же LIB). Есть 3 списка «включать папки», которые вы можете редактировать (все 3 списка должны быть с одним и тем же контентом).

В проекте -> Свойства (пример):
Включите список Sloeber.jpg
Включите список Slakeber.JPG (124.38 киб) просмотрено 396 раз

Костбилл
Чт 10 августа 2017 г. 14:29
Спасибо, Пито, я займусь в это.

Роджер, я изменил первый пост, вам нужно, чтобы я тоже изменил ответы?

Пито
Чт 10 августа 2017 г. 16:58
Ваш "Malloc" def указывает на «stdlib.H "(..\ arm-none-eabi-gcc \ 4.8.3-2014Q1 \..\ include \ stdlib.ч)..
Это наш стандартный компилятор, а не солово..
.
KNX Malloc Vose.jpg
Выпуск KNX Malloc.JPG (79.19 киб) просмотрено 365 раз

Костбилл
Пн, 14 августа 2017 г. 11:14
Итак, я вернулся к этой проблеме.

Пито, предложенное вами исправление - это именно то, что является кодом на первом месте.

Пока я отлаживал, я увидел, что это действительно разбилось, когда он попал в Malloc ().

Я вошел туда с шагом сборки (я действительно не знаю ARM ASM), и я увидел, что он разбился в определенный момент, а затем мой компьютер идет в __stm32reservedException9. Это именно после инструкции: «sub.W R3, R2, R6 ".

Я снимаю здесь в темноте, но я нашел это: http: // Infocenter.рука.com/help/index.младший ... Hbidd.HTML, Есть ли случай, когда процессор запутался в 32 -битном руке и 16 -битном режиме?
Я спрашиваю, потому что я также нашел это: https: // Stackoverflow.COM/Вопросы/265 ... инициатор

Приглашается любая помощь!
Спасибо,
Счет.

Костбилл
Вторник 15 августа 2017 г. 12:07
Копая глубже, я нашел это, когда я отправляю _longvalue на «выражения» отладчика, отладчик сообщает мне следующее: Multiple errors reported. 1) Failed to execute MI command: -var-create - * _longValue Error message from debugger back end: -var-create: unable to create variable object 2) Unable to create variable object 3) Failed to execute MI command: -data-evaluate-expression _longValue Error message from debugger back end: No symbol "_longValue" in current context. 4) Failed to execute MI command: -var-create - * _longValue Error message from debugger back end: -var-create: unable to create variable object

victor_pv
Вторник 15 августа 2017 г. 2:21
Какова ценность этого? (_length-1)

Указатели в AVR находятся 16 бит, а в руке - 32 бит, поэтому Malloc может не распределять достаточное количество мемони.

Пито
Вторник 15 августа 2017 г. 5:49
_Longvalue определяется здесь: https: // github.com/franckmarini/knxdevi ... джак.H#L90 Пытаться union { // field used in case of short value (1 byte max width, i.e. length <= 2) struct{ byte _value; byte _notUSed; byte _notUSed; // added Pito byte _notUSed; // added Pito }; // field used in case of long value (2 bytes width or more, i.e. length > 2) // The data space is allocated dynamically by the constructor byte *_longValue; };

Костбилл
Вторник 15 августа 2017 г. 11:53
Я попробовал это, и это не сработало.

Однако, когда я снял Malloc и поместил статически выделенный буфер, он не потерпел крах в этот момент, но он сделал где -то еще.
Я посмотрю на это позже.
Я собираюсь попробовать простую программу с одним маллоком и посмотреть, сбой ли она.

Пито, вы когда -нибудь использовали Malloc/New в любых ваших проектах Sloeber?

Спасибо,
Счет.

Пито
Вторник 15 августа 2017 12:23
Да, у меня есть, я делаю Malloc даже в своей внешней куче 512 КБ SRAM (распределяя сотни КБ). Работает нормально..
Serial.println("Allocating EXRAM32 memory.."); /* EXRAM32 Initial memory allocation */ uint32_t* EXRAM32 = (uint32_t*) malloc(n * sizeof(uint32_t)); if (NULL == EXRAM32) { Serial.println(" ############### EXRAM32 MALLOC FAILED.."); return -1; } .. /* EXRAM8 Initial memory allocation */ uint8_t* EXRAM8 = (uint8_t*) malloc(n * sizeof(uint8_t)); if (NULL == EXRAM8) { Serial.println(" ############### EXRAM8 MALLOC FAILED.."); return -1; }

Пито
Вторник 15 августа 2017 г. 14:28
Вы можете попробовать эту демонстрацию
http: // www.STM32duino.com/viewtopic.PHP ... 839#P27839
Отрегулируйте размер массива «n». Такой он подходит (через Malloc) в ваш внутренний SRAM (например, n = 1000..4000 -> 4 КБ..16 КБ).

Костбилл
Вторник 15 августа 2017 г. 15:30
Итак, я избавился от KnxDevice и поместил функцию Malloc в настройке.
Это разбилось.

Поэтому мой Slaeber неправильно настроен для обработки Malloc.
Возможно, на некоторую библиотеку ссылается с неверной точки зрения.

Любая идея, как продолжить здесь?

Костбилл
Вторник 15 августа 2017 г. 15:44
[Пито - Вторник 15 августа 2017 г. 14:28] - Вы можете попробовать эту демонстрацию
http: // www.STM32duino.com/viewtopic.PHP ... 839#P27839
Отрегулируйте размер массива «n». Такой он подходит (через Malloc) в ваш внутренний SRAM (например, n = 1000..4000 -> 4 КБ..16 КБ).
Я только что увидел этот пост после того, как опубликовал свой предыдущий ответ.
Я попробовал это, и это разбилось на Маллоке.

Пито
Вторник 15 августа 2017 г. 16:26
Какое ядро ​​вы используете??
Это может произойти.. Malloc и друзья выделяют места в куче..
Я собираюсь попробовать в своем слове с демо -демо -верхом на дублехке..

Костбилл
Вторник 15 августа 2017 г. 16:35
Как проверить, какое ядро ​​я использую?

Это выбор в сборке C/C ++ -> Настройки, где есть выбор процессора?
Или это где -то на пути библиотеки?

Где я определю кучу? Я думал, что об этом позаботятся в некотором уже сделанном файле запуска.

Пито
Вторник 15 августа 2017 г. 16:40
Maple Mini, внутренний SRAM:
Libmaple Roger's Libmaple: Сбои здесь - проблема с кучей !!!
STM32Generic: работает нормально: Allocating EXRAM32 memory.. ******** Generating 4000 32bit uints: Checksum of generated random numbers: 3737197177307 Checksum of unsorted EXRAM32 content: 3737197177307 BubbleSorting 32bit uints: Wait while BubbleSorting.. Loops 0 out of 4000 Wait while BubbleSorting.. Loops 1000 out of 4000 Wait while BubbleSorting.. Loops 2000 out of 4000 Wait while BubbleSorting.. Loops 3000 out of 4000 Elapsed: 2456 msecs Checksum of sorted numbers: 3737197177307 Sorted last 10 in ascending order: 3990 1994165868 3991 1994355317 3992 1994787653 3993 1994815262 3994 1994870290 3995 1996675596 3996 1996946895 3997 1997629299 3998 1998548949 3999 1999650861

Костбилл
Вторник 15 августа 2017 г. 16:57
Ну, у меня не так много вариантов, как.
У меня есть только это:
Selections.png
выборы.PNG (20.81 киб) просмотрено 242 раза

Костбилл
Вторник 15 августа 2017 г., 17:03
Хорошо, я в замешательстве. Таким образом, это означает, что проблема, с которой у меня есть, и у вас есть, связана с последним выпуском?

Пито
Вторник 15 августа 2017 г., 17:03
Хип: определяется в конкретном ядре, скорее всего, в Либмапле есть ошибка (последний) Роджер).

Куча определена в файле LD, расположенном в ..Stm32 \ stm32f1 \ variants \ maple_mini \ ld \ common.внедорожник _lm_heap_start = DEFINED(_lm_heap_start) ? _lm_heap_start : _end; _lm_heap_end = DEFINED(_lm_heap_end) ? _lm_heap_end : __msp_init; } > REGION_RODATA

Костбилл
Вторник 15 августа 2017 г. 20:17
Я пытаюсь скомпилировать с ядром Daniel's STM322ERIER, но он не могу найти твердый, а также файл <Libmaple/DMA.час>.

Я постараюсь вернуться к предыдущему ядру из репозитория Роджера, чтобы увидеть, работает ли оно.

Костбилл
Вторник 15 августа 2017 г. 20:33
К сожалению, в истории GitHub из этих двух файлов, кажется, первые.
Так что я не могу вернуться. Я буду ждать исправления Роджера.

Rogerclark
Вторник 15 августа 2017 г. 22:58
[Костбилл - Вторник 15 августа 2017 г. 20:33] - Так что я не могу вернуться. Я буду ждать исправления Роджера.
Вы, кажется, неправильно понимаете, как работает разработка сообщества / открытого программного обеспечения

Процесс заключается в том, что вы отправляете исправление с помощью пиара в GitHub, а затем рассматривается сообществом через ветку на форуме, и если люди, использующие Arduino Ide основной.

Костбилл
Вторник 15 августа 2017 г. 11:42
[Rogerclark - Вторник 15 августа 2017 г. 22:58] - Вы, кажется, неправильно понимаете, как работает разработка сообщества / открытого программного обеспечения

Процесс заключается в том, что вы отправляете исправление с помощью пиара в GitHub, а затем рассматривается сообществом через ветку на форуме, и если люди, использующие Arduino Ide основной.
Извините за этого Роджера. Конечно, ты прав. Позвольте мне объяснить:
1. Я не имею в виду, что буду ждать, и я хочу завтра. Я имею в виду, что, возможно, это будет исправлено, и, возможно, это не будет.
Я знаю, что это не твое бремя. Я также понимаю, что это очень низкий приоритет, так как не многие люди используют Malloc.

2. У меня нет ни малейшего представления о том, как это исправить. Я имею в виду, если я попытаюсь, мне придется потратить много времени на это, и я думаю, что это контрпродуктивно, особенно если люди с гораздо более превосходными знаниями, чем мои, могут решить это всего за пару часов.


Сказав это, я готов пройти через это, если смогу получить некоторое руководство, я даже не знаю, как начать отлаживать это.
Я не знаю, в чем проблема, за исключением того, что сказал Пито, что это проблема кучи.

Просто ударил меня страницей запуска рук об этом, это спасет меня пару часов.

Спасибо, и я прошу прощения, если я не стал твоими нервами!
Счет.

victor_pv
Ср 16 августа 2017 г. 1:52
Можете ли вы попробовать ядро ​​с 2016 года? это может не иметь проблемы.
В последнее время было много изменений, я думаю, что довольно много больших, связанных с LTO.

Если версия в декабре 2016 года не работает, попробуйте это, этот пиар был до большинства или всех изменений LTO и изменений в вариантах меню:
https: // github.com/rogerclarkmelbourne/ ... Фебд20DC0C

Вы можете скачать этот момент времени с помощью кнопки «клонировать или скачать», а затем скачать Zip.

Пожалуйста, опубликуйте, если это решает проблему с основным наброском только с Malloc, и в этом случае, если она также разрешает ее с помощью вашего эскиза.
Я занят кучей других вещей и могу проверить это самостоятельно.

Костбилл
Ср 16 августа 2017 г., 5:03
Сделает это сегодня после работы и сообщит вам.

Rogerclark
Ср 16 августа 2017 г. 7:17
Я провел тест на Malloc на Maple Mini, используя Libmaple, и, похоже, у него нет проблем

Так что это что -то уникальное для Sleober

Я не говорю, что в Libmaple нет ошибки, но Malloc, кажется, полностью используется.

Re: изменения для LTO

По умолчанию LTO, чтобы быть выключенным.


Однако...

Если я попытаюсь сделать больше памяти больше, чем на куче, как это.
(Он удерживает Malloc'ing 8 байт, распечатывает адрес указателя, а затем снова переходит назад на Malloc еще 8 байт, неоднократно)
void setup() { } void loop() { uint32_t *p = (uint32_t *)malloc(8); Serial.println((int)p); delay(10); }

Костбилл
Ср 16 августа 2017 г. 8:04
Роджер,

Что я вижу в вашем хранилище, так это то, что вы получаете _lm_heap_start и _lm_heap_end из линкера.
Я не нашел твердого кодированного определения, поэтому я предполагаю, что оно встроено в инструмент, в какой -то двоичный файл.
https: // github.com/rogerclarkmelbourne/ ... общий.внедорожник: /* Heap boundaries, for libmaple */ EXTERN(_lm_heap_start); EXTERN(_lm_heap_end);

Rogerclark
Ср 16 августа 2017 г. 9:46
Счет


Я не знаю деталей этого, так как я не писал исходный код. Это было написано мои лифуфальные, но они отказались от этого 3 или 4 года назад.
К сожалению, Leaflabs не отвечают на вопросы e.глин. В качестве вопросов на их github Repo, который до сих пор содержит исходный код Libmaple.
Таким образом, мы можем только спекулировать этими видами дизайнерских решений

Пито
Ср 16 августа 2017 г. 10:40
Вы, кажется, неправильно понимаете, как работает разработка сообщества / открытого программного обеспечения

Процесс заключается в том, что вы отправляете исправление через PR на GitHub, это затем проверяется сообществом через ветку на форуме
Это может работать в сообществе экспертов, которые имеют дело с кодом на почти экспертном уровне.
Сообщество "Arduino" не такое сообщество.

Это не сообщество разработчиков основных программного обеспечения STM32.

Подавляющее большинство людей здесь Пользователи Mapleminis и Bluepills.

Было бы здорово, если бы это было понято и нашими экспертами.

Например:
Когда у пользовательского счета есть некоторые проблемы «вокруг» Malloc (), и еще один пользователь E.глин. Пито постарается помочь (лучше, как он может сделать), например, он попытается провести тест и опубликовать результат, чтобы сравнить т.е. версии, среда. Пито даже попросил третьего лица проверить.

Когда проблема хорошо изучена и воспроизводится пользователями, эксперты могут выпадать и выпустить PR, и эксперты могут обсудить на GitHub, как она должна реализовать в своих ядрах или библиотеках.

Опять же, попробуйте понять это сообщество.

Также вы не можете ожидать, что пользователь немедленно определит проблемы/ошибки в своих эскизах/библиотеках или ядрах.
В 80% случаев название потока не является точным и показывает, что проблема отличается от. Это нормально в этом сообществе. Название потока счета изменилось в 3 раза. И это может быть, это меняется в четвертый раз. Это нормально в этом сообществе.

Pito создал 2 потока: [STM32Generic] - Последние выпуски
[Libmaple] - Последние проблемы
который может работать в качестве агрегатов для проблем, близких к этим двум популярным ядрам, используемым. Таким образом, эксперты могут реагировать быстрее, так как обычно они не слишком много связываются с потоками, которые имена странные.

Также не обратите внимание, что пользователи всегда будут задавать помощь и вопросы, которые дублируют другие темы и посты. Вы не можете избежать этого, если понимаете это сообщество.

Посмотрите на форум Arduino, похожий на это. Есть сотни тысяч дублированных постов с теми же (несколькими) вопросами. И другой пользователь или эксперт отвечает на них снова и снова. Без проблем.

Так обычно работает сообщество пользователей..

victor_pv
Ср 16 августа 2017 г. 13:36
[Костбилл - Ср 16 августа 2017 г. 8:04] - Роджер,

Что я вижу в вашем хранилище, так это то, что вы получаете _lm_heap_start и _lm_heap_end из линкера.
Я не нашел твердого кодированного определения, поэтому я предполагаю, что оно встроено в инструмент, в какой -то двоичный файл.
https: // github.com/rogerclarkmelbourne/ ... общий.внедорожник: /* Heap boundaries, for libmaple */ EXTERN(_lm_heap_start); EXTERN(_lm_heap_end);

victor_pv
Ср 16 августа 2017 г. 13:48
[Пито - Ср 16 августа 2017 г. 10:40] -
Пито, при всем уважении, я думаю, что комментарий Роджера был правильным для этого законопроекта (я подожду, пока Роджер не решит его).
Здесь не работает, нет никакого ожидания, когда кто -то другой решит его, никто здесь не должен думать, что кто -то еще будет что -нибудь урегулировать. Роджер может также взять свой репо в автономном репоне, если он захочет, и перестань работать над этим вообще.

Это сообщество, которое для обсуждения и помощи друг другу, но никаких ожиданий не должно быть, что кто -то собирается что -то сделать. Это все волонтер в свободное время. Когда у меня есть время, я помогаю тому, что могу, когда у меня нет времени, я не помогу что -то в чем -то. Не значит ничего, кроме как у меня есть время, или у меня нет времени, и это то же самое для Роджера.

С размером форума, который Роджер проводит уже довольно много времени, полирующих его и отвечая на вопросы, которые он может. Он также проверяет почти каждый пиар, который представлен в GitHub, который имеет какой -либо смысл (а многие, которые этого не делают), поэтому я думаю, что ему подходит, чтобы люди подали PRS, и он поможет пересмотреть, проверить и одобрить их, с помощь сообщества.

Я считаю, что правильное ожидание состоит в том, что когда люди находят проблемы, они пытаются работать над разрешением, а не ждать, чтобы кто -то другой разрешил, будь то Роджер или кто -либо еще.

Если Билл скорее будет ждать, чем тестировать вещи, как его предложили, тогда он может долго ждать. Возможно, кто -то решает это, но есть шанс, что это не происходит или нет в течение долгого времени, поэтому для каждого, особенно его, лучше приложить некоторые усилия на проверку того, что предлагается, и исследуйте и т. Д.

Я полагаю, что из ответа Билла впоследствии он понимает это, и его комментарий о ожидании решения был принят слишком буквально, и он находится на той же странице, что это совместное усилие без ожиданий того, что кто -то еще сможет сделать.

Костбилл
Ср 16 августа 2017 г., 17:08
Виктор, спасибо за очень полезные комментарии по пониманию сценария линкера.
[victor_pv - Ср 16 августа 2017 г. 13:36] - Этот сценарий не изменился в течение самого долгого времени, и Malloc () работал ранее, поэтому проблема, скорее всего, не связана со значением начала кучи и конца. Но поскольку в каждой папке платы есть копия, я советую вам проверить версию для конкретной платы, которую вы используете, на случай, если произошло непредвзятое изменение в общем.INC / JTAG.Ld / Flash.лд
Я смотрю на эти файлы, но я не знаю, хорошо ли они. Что я ищу?
Если вы не найдете никаких проблем со сценарием линкера сценария ОЗУ/Флэш -Определения, которые изменяются в этих файлах для платы, которую вы используете, тогда я думаю, что, как предложалось ранее, вы должны попробовать версию репо с 1 или 2 месяцев назад по меньшей мере. Я проверил простую программу Malloc: void setup() { uint32_t n = 100, * vec; Serial.begin(9600); vec = (uint32_t*) malloc(n * sizeof(uint32_t)); if (vec == NULL) { Serial.println("Not enough space."); } else { Serial.print("malloc was successful."); } } void loop(){}

Костбилл
Ср 16 августа 2017 г., 17:12
Вот что я нашел от отладчика, я понятия не имею, что это значит, это просто снимок регистров на самом инструкции, который вызывает аварию. Однако, поскольку есть трубопровод, и там нет кода C, я не знаю, какая сборка является проблематичной.

Вот блок кода сборки: 08002b4e: ldr r2, [r3, #0] 08002b50: cmp r1, r2 08002b52: it hi 08002b54: strhi r1, [r3, #0] 08002b56: ldr r3, [pc, #108] ; (0x8002bc4 <_malloc_r+824>) 08002b58: ldr r2, [r3, #0] 08002b5a: cmp r1, r2 08002b5c: ldr r2, [r4, #4] 08002b5e: it hi 08002b60: strhi r1, [r3, #0] 08002b62: bic.w r2, r2, #3 08002b66: cmp r6, r2 08002b68: sub.w r3, r2, r6 08002b6c: bhi.n 0x8002b72 <_malloc_r+742> 08002b6e: cmp r3, #15 08002b70: bgt.n 0x8002b7c <_malloc_r+752> 08002b72: mov r0, r5 08002b74: bl 0x8002ddc <__malloc_unlock>

Пито
Ср 16 августа 2017 г., 17:21
Я запустил тестовый эскиз

http: // www.STM32duino.com/viewtopic.PHP ... 839#P27839

на Blackf407 и Malloc выделяет память «успешно» и возвращает адрес начала массива /* EXRAM32 Initial memory allocation */ uint32_t* EXRAM32 = (uint32_t*) malloc(n * sizeof(uint32_t)); if (NULL == EXRAM32) { Serial.println(" ############### EXRAM32 MALLOC FAILED.."); //return -1; } Serial.println((uint32_t)EXRAM32); // We print here the address of the EXRAM32[0]

victor_pv
Ср 16 августа 2017 г., 17:23
Какая версия ядра самая старая вы пробовали? (как дата или ссылка на GitHub)
И можете ли вы опубликовать самый простой набросок, который вызывает сбой для вас и выбранного вами платы?

О том, что посмотреть на файлы LD, просто проверьте, если на плате вы используете адреса начала Flash и RAM, а затем правильны, а затем проверьте историю для этих файлов для этой платы, чтобы увидеть, когда было последнее изменение И что это было.

Я недавно использовал эту функцию SBRK, чтобы получить верхнюю часть кучи, и мой код не сбой, но компилятор оптимизирует кучу вещей, и я не думаю, что получаю кучу времени выполнения, а скорее значение, рассчитанное во время компиляции.

Пито, вы сказали, что это тоже разбилось за вас в предыдущем посте, было то, что с ядром F1 Libmaple Core?

Пито
Ср 16 августа 2017 г., 17:33
Виктор, выше, с Libmaple F4, Libmaple выделяется по адресу 8 здесь, Даниэль от 0x20000C78.
Libmaple F1 сбои так же, как я не могу распечатать адрес. (В наши дни у меня нет отладочного отладчика).
Попробуйте запустить приведенный выше эскиз на Mmini/Bluepill или любой другой плате (эскиз уже подготовлен для вас, просто составьте и запустите) то, что вы получаете.
ОБНОВЛЯТЬ:
Я скачал 5 минут назад последнюю Roger's Libmaple Repo - результат, как указано выше, адрес 8.

Рик Кимбалл
Ср 16 августа 2017 г., 18:07
Я хочу заблокировать эту ветку, это так вышло из -под контроля.

Я прочитал все посты от Kostbill. Кажется, он использует чертеж. Кажется, он использует Словебер. Кажется, он использует все разные ядра, поэтому попытка ответить на вопрос о том, у кого есть проблемы, является просто тщетным упражнением.

Прежде чем я удалю всю эту ветку. Пожалуйста, ответьте на этот вопрос.

Вы пробовали ядро ​​Роджера (STM32Duino the Libmaple One) с вашей синей таблеткой, работающей в Arduino Ide? Это ядро:
https: // github.com/rogerclarkmelbourne/arduino_stm32

Я только что попробовал последнее ядро ​​с программой тестирования Malloc, и он работает нормально.

@kostbill, пожалуйста, объясните свою текущую настройку, и проблема с ней или этот поток будет удален.

Пито
Ср 16 августа 2017 г., 18:17
Последний репо Роджер, скачанный 10 минут назад, по умолчанию, Sloeber, F1, Maplemini Allocating EXRAM32 memory..

Рик Кимбалл
Ср 16 августа 2017 г., 18:23
Вот код, который я проверил. Результаты визуальны. Я выделил две вещи. Один класс, а другой - буфер. Я использовал отладчик, чтобы посмотреть на возвращенные адреса и значения, которые заполнены в выделенной памяти.
class dumbclass { int foo; int bar; int counter; public: dumbclass(void) : foo(0),bar(0), counter(100) { } int getDelay() { counter = (counter == 100 ) ? 900 : 100; return counter; } }; char *buffer; dumbclass *dumb; void setup() { pinMode(LED_BUILTIN,OUTPUT); buffer = (char *)malloc(1024); buffer[0] = 'a'; buffer[1023] = 'z'; buffer[4] = 100; dumb = new dumbclass; } void loop() { digitalWrite(LED_BUILTIN,LOW); delay(dumb->getDelay()); digitalWrite(LED_BUILTIN,HIGH); delay(900); buffer[1] = (buffer[1] == 10) ? 255 : 10; }

Пито
Ср 16 августа 2017 г., 18:25
Нет, Рик, ты испортишь эту ветку и представляешь хаос :)
Мы спрашиваем наших коллег с тех пор, как когда -либо запустили вышеуказанный тест Malloc под названием Bubblesort.
Просто запустите его и дайте нам свои результаты, пожалуйста.
Мы ценим ваши усилия.

Рик Кимбалл
Ср 16 августа 2017 г., 18:33
Пожалуйста, опубликуйте код, который работает с чертежом

Пито
Ср 16 августа 2017 г., 18:42
Рик, пожалуйста, будь таким добрым и сначала внимательно прочитайте эту ветку, прежде чем вы решите удалить его.
Есть вся информация, требуемая вам необходимо практически помочь счетам с его проблемой.

Рик Кимбалл
Ср 16 августа 2017 г., 18:50
Хорошо, я был сосредоточен на постах Костбилл ... и ответы были по всему карте ...

Я нашел ветку, в которой вы разместили ссылку на демо -пузырь. Я проверил это, и это работает нормально:
Allocating EXRAM32 memory.. 536874888 ******** Generating 4000 32bit uints: Checksum of generated random numbers: 3737197177307 Checksum of unsorted EXRAM32 content: 3737197177307 BubbleSorting 32bit uints: Wait while BubbleSorting.. Loops 0 out of 4000 Wait while BubbleSorting.. Loops 1000 out of 4000 Wait while BubbleSorting.. Loops 2000 out of 4000 Wait while BubbleSorting.. Loops 3000 out of 4000 Elapsed: 2173 msecs Checksum of sorted numbers: 3737197177307 Sorted last 10 in ascending order: 3990 1994165868 3991 1994355317 3992 1994787653 3993 1994815262 3994 1994870290 3995 1996675596 3996 1996946895 3997 1997629299 3998 1998548949 3999 1999650861

Костбилл
Ср 16 августа 2017 г., 18:56
Рик,
Какой репозиторий вы использовали? Роджер или Даниэль?
Кроме того, последние версии?
Кроме того, в каком IDE вы работаете?

Рик Кимбалл
Ср 16 августа 2017 г., 18:57
[Пито - Ср 16 августа 2017 г., 18:25] - Мы спрашиваем наших коллег с тех пор, как когда -либо запустили вышеуказанный тест Malloc под названием Bubblesort.
Кстати: нет ничего особенного в вашем тесте Bubblesort по сравнению с тем, что я проверил. Оба выделяют память и убедитесь, что она распределяется.

Даниэфф
Ср 16 августа 2017 г., 18:59
В затмении Syscalls.C, кажется, не составлен в.
Если я заставляю это: extern "C" void *_sbrk(int incr); void setup() { _sbrk(0); // If I comment this out, no blinking Serial.begin(115200); pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); delay(1000); Serial.println((uint32_t)malloc(1)); }

Рик Кимбалл
Ср 16 августа 2017 г., 19:01
[Костбилл - Ср 16 августа 2017 г., 18:56] - Рик,
Какой репозиторий вы использовали? Роджер или Даниэль?
Кроме того, последние версии?
Кроме того, в каком IDE вы работаете?
Я снова спрашиваю @kostbill:

Вы пробовали ядро ​​Роджера (STM32Duino the Libmaple One) с вашей синей таблеткой, работающей в Arduino Ide? Это ядро:
https: // github.com/rogerclarkmelbourne/arduino_stm32

Я только что попробовал последнее ядро ​​с программой тестирования Malloc, и он работает нормально.

@kostbill, пожалуйста, объясните свою текущую настройку, и проблема с ней или этот поток будет удален.

Кроме того, я только что прошел все сообщения в этой теме и не вижу нигде, когда вы разместили изменения, которые вы внесли в KNX_DEVICE или библиотеки CLI. Пожалуйста, опубликуйте их, если вам нужна помощь.

Костбилл
Ср 16 августа 2017 г., 19:19
[Рик Кимбалл - Ср 16 августа 2017 г., 19:01] -
[Костбилл - Ср 16 августа 2017 г., 18:56] - Рик,
Какой репозиторий вы использовали? Роджер или Даниэль?
Кроме того, последние версии?
Кроме того, в каком IDE вы работаете?
Я снова спрашиваю @kostbill:

Вы пробовали ядро ​​Роджера (STM32Duino the Libmaple One) с вашей синей таблеткой, работающей в Arduino Ide? Это ядро:
https: // github.com/rogerclarkmelbourne/arduino_stm32

Я только что попробовал последнее ядро ​​с программой тестирования Malloc, и он работает нормально.

@kostbill, пожалуйста, объясните свою текущую настройку, и проблема с ней или этот поток будет удален.
Рик, на все ваши вопросы здесь отвечают, но я напишу их снова.

- Я работаю над чертежом.
- Я использую Slaeber, 4.01 и 4.10.
- Маллок не работает. Я работаю с Pito's Bubblesort.
- Когда я использую последнюю. Это не работает на Словере. Он работает на Arduino IDE.
- Когда я использую репозиторий Даниэля, он работает на Slaeber.
- Когда я использую одну из старых репозиториев Роджера, он все еще не работает на Slakeber.
- Во всех случаях, когда это не работает, я программирую с JTAG или серийной загрузкой.
- Кроме того, во всех случаях, когда это не работает, я обычно запускаю программу и отлаживаю ее.

Если я что -то опустил, дайте мне знать, я не думаю, что необходимо удалить этот ветку.
Вы не можете ожидать, что я суммирую все, что я написал на последних 6 страницах в каждом новом посте, который я пишу.

Костбилл
Ср 16 августа 2017 г., 19:21
[victor_pv - Ср 16 августа 2017 г., 17:23] - Какая версия ядра самая старая вы пробовали? (как дата или ссылка на GitHub)
Я не знаю, как найти дату. Как я могу найти самый старый?
И можете ли вы опубликовать самый простой набросок, который вызывает сбой для вас и выбранного вами платы? Любой эскиз, который использует Malloc, подойдет, вы можете использовать Pito's Bubblesort:
http: // www.STM32duino.com/viewtopic.PHP ... 839#P27839
О том, что посмотреть на файлы LD, просто проверьте, если на плате вы используете адреса начала Flash и RAM, а затем правильны, а затем проверьте историю для этих файлов для этой платы, чтобы увидеть, когда было последнее изменение И что это было. Итак, по вашему совету я проверил кое -что, и я что -то нашел, возможно, это что -то полезное:
Bluepill имеет 20 КБ SRAM.
В некоторых из этих сценариев мы обнаруживаем, что Ram (RWX) предоставляет только 17K:
https: // github.com/rogerclarkmelbourne/ ... /ram_c8.лд,
https: // github.com/rogerclarkmelbourne/ ... Эм-Рэм.внедорожник,
https: // github.com/rogerclarkmelbourne/ ... -вспышка.внедорожник MEMORY { ram (rwx) : ORIGIN = 0x20000C00, LENGTH = 17K rom (rx) : ORIGIN = 0x08005000, LENGTH = 0 }

Рик Кимбалл
Ср 16 августа 2017 г., 19:27
[Костбилл - Ср 16 августа 2017 г., 19:19] - - Когда я использую последнюю. Это не работает на Словере. Он работает на Arduino IDE.
Итак, Malloc прекрасно работает с Arduino Ide.

Если вы используете последний репозиторий Роджера и Arduino IDE и составьте пример кода с вашим модифицированным библиотеками KNXDevice и CLI, что работает?

Костбилл
Ср 16 августа 2017 г., 19:28
[Рик Кимбалл - Ср 16 августа 2017 г., 19:01] - Кроме того, я только что прошел все сообщения в этой теме и не вижу нигде, когда вы разместили изменения, которые вы внесли в KNX_DEVICE или библиотеки CLI. Пожалуйста, опубликуйте их, если вам нужна помощь.
Это действительно не имеет значения об изменениях KNX. Проблема заключается в том, что Malloc, который сбои даже без библиотеки KNX, в свежем чистом хранилище, даже не добавляя библиотеку KNX.
Библиотека KNX работает хорошо, когда я компилируюсь с Arduino IDE.

Рик Кимбалл
Ср 16 августа 2017 г., 19:31
Предоставляют ли люди в Sloeber поддержку всех различных ядер Arduino, которые он использует?

Костбилл
Ср 16 августа 2017 г., 19:37
[Рик Кимбалл - Ср 16 августа 2017 г., 19:31] - Предоставляют ли люди в Sloeber поддержку всех различных ядер Arduino, которые он использует?
Я не знаю, я никого не спрашивал, этот форум - первый, который я спрашиваю.

Даниэфф
Ср 16 августа 2017 г., 19:43
[Костбилл - См 16 августа 2017 г., 19:28] - Проблема в том, что Malloc, который вылетает даже без библиотеки KNX, в свежем чистом хранилище, даже если я даже не добавил библиотеку KNX.
Библиотека KNX работает хорошо, когда я компилируюсь с Arduino IDE.
Вы читали мой пост? ViewTopic.PHP?F = 41&t = 2434&начало = 50#p33027

Я думаю, это проблема заказа библиотеки на шаге линкера GCC http: // www.теория сети.сопутствующий.Великобритания/документы/GC ... RO_18.HTML , и _sbrk определяется где -то слабо, что сбои, поэтому нет ошибки компилятора.

Костбилл
Ср 16 августа 2017 г., 19:55
[Даниэфф - Ср 16 августа 2017 г., 19:43] -
[Костбилл - См 16 августа 2017 г., 19:28] - Проблема в том, что Malloc, который вылетает даже без библиотеки KNX, в свежем чистом хранилище, даже если я даже не добавил библиотеку KNX.
Библиотека KNX работает хорошо, когда я компилируюсь с Arduino IDE.
Вы читали мой пост? ViewTopic.PHP?F = 41&t = 2434&начало = 50#p33027

Я думаю, это проблема заказа библиотеки на шаге линкера GCC http: // www.теория сети.сопутствующий.Великобритания/документы/GC ... RO_18.HTML , и _sbrk определяется где -то слабо, что сбои, поэтому нет ошибки компилятора.
Нет, Даниэль, я этого не сделал, правда в том, что я был немного стресс, потому что Рик собирался удалить ветку, а потом я не собирался читать ее, а потом я забыл.

Но теперь, когда я прочитал и проверил, Кажется, работает.
Первая попытка не была успешной, но я очистил проект, и он работает!

Большое спасибо, Даниэль!
Спасибо всем за помощь.
Счет.

Рик Кимбалл
Ср 16 августа 2017 г., 8:01 вечера
Итак, я установил Slaeber v4. Когда я составляю простой тест Malloc ... Похоже, добивается успеха .. Однако, если вы посмотрите на консольные сообщения, это не удается
Стартовый комбинат
"Arm-none-eabi-g ++" -og -wl,-gc-sections -mcpu = cortex-m3 "-t/home/kimballr/arduino/ardware/stm32duino/stm32f1/variants/generic_stm32f103c/ld/jtag.ld "" -wl, -map,/home/kimballr/workspace_neon3/malloc_test/release/malloc_test.Карта "" -l/home/kimballr/arduino/ardware/stm32duino/stm32f1/variants/generic_stm32f103c/ld "-o"/home/kimballr/workspace_neon3/malloc_test/release/malloc_test.elf "" -l/home/kimballr/workspace_neon3/malloc_test/release "-lm -lgcc -mthumb -wl,-cref -wl,-проверка-wl,-gc-section -Symbols = report-all -wl,-warn-common -wl,-warn-section-align -wl,-warn-unresolved-symbols -wl,-начальная группа ./.Ино.CPP.o/home/kimballr/workpace_neon3/malloc_test/release/arduino.ar/home/kimballr/workpace_neon3/malloc_test/release/arduino.ar -wl,-конечная группа
/usr/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libnosys.A (SBRK.o): в функции `_sbrk ':
SBRK.c :(.текст._sbrk+0x18): предупреждение: неопределенная ссылка на «end»
Законное здание: malloc_test.
Однако он просто идет по своему веселому пути, хотя конец используется _sbrk

Если я использовал GDB, чтобы увидеть, что произойдет ...
(gdb) finish Run till exit from #0 0x0800311e in _malloc_r () 0x0800016a in setup () at ../malloc_test.ino:31 31 buffer = (char *)malloc(1024); (gdb) n 33 buffer[0] = 'a'; (gdb) p buffer $1 = 0x20000010 "" (gdb) p &usblib usblib usblib_dev (gdb) p &usblib $2 = (usblib_dev *) 0x2000000c (gdb) p &buffer $3 = (char **) 0x20000c14 (gdb) p *buffer $4 = 0 '\000' (gdb) p buffer $5 = 0x20000010 "" (gdb)

Рик Кимбалл
Ср 16 августа 2017 г., 8:15 вечера
@kostbill, вам нужно изменить общее.INC и добавьте символ «END», чтобы это работало с Slaeber. Sloeber не использует ту же командную строку линкера, что и Arduino IDE. Это создает другой бинарный и ссыльный порядок из версии Arduino IDE, по крайней мере для серии STM32F1. Я понятия не имею о других ядрах или досках.

$ grep 'end ='/home/kimballr/arduino/armware/stm32duino/stm32f1/variants/generic_stm32f103c/ld/common.внедорожник
_end = __bss_end__;
end = _end; <<<<<< Я добавил эту строку

После того, как вы компилируете с этим изменением, линкер должен быть счастлив и не жаловаться на недостающий символ «конец».
Если вы используете команду NM, вы должны найти символ «End» в качестве некоторого адреса в вашем адресе оперативной памяти, который больше, чем самые высокие данные и адрес BSS

$ arm-none-eabi-nm -cs malloc_test.эльф | grep 'b end'
20000F88 B END

Это не проблема с репозиторием Роджера и не является проблемой с Malloc. Эта проблема вызвана тем, как работает Слоэбер. Это также проблема в том, что произошла серьезная ошибка, и Слоббер не сообщает об этом.

Пожалуйста, измените заголовок этого потока, чтобы указать, что это не проблема Libmaple F1 Malloc Malloc.

«Словебер тупы

Rogerclark
Ср 16 августа 2017 г., 20:47
Рик

Вы можете изменить заголовок потока.

Просто отредактируйте начальный пост. Это не меняет названия на ответах, но это меняет то, что видно в списке в разделе контейнера.

Если вы не можете его изменить, дайте мне знать, и я посмотрю, какие разрешения необходимо изменить, чтобы позволить модераторам сделать это.

Рик Кимбалл
Ср 16 августа 2017 г., 8:50 вечера
@kostbill, кажется, позаботился об этом, Роджер.

Спасибо @kostbill

Rogerclark
Ср 16 августа 2017 г., 20:53
Хорошо. Но это может все равно стоить тестирования, если у вас есть разрешение на это,

Мне часто приходится [решить] в названия, так как люди не могут быть обеспокоены этим сами

victor_pv
Ср 16 августа 2017 г., 21:53
[Рик Кимбалл - Ср 16 августа 2017 г., 21:48] - Парни, давайте не будем скрывать ответ на эту проблему ...
Рик, у меня есть вопрос о конечном символе, связанный с этой проблемой.
Из того, что я вижу _sbrk (), объявленного в Syscalls.C не использует «конец», в каком файле функция SBRK, которая использует ее?
Я подозреваю Syscalls.C не может быть включен в сборку, и я не вижу никакой другой объявления SBRK в Libmaple F1, так что она вытаскивает функцию SBRK из стандартной библиотеки?
Из вашего вывода кажется, что он вытаскивает его из Libnosys.
В этом случае при компиляции в Arduino не тянет это и использует Syscalls.C версия?
Меня нет дома и не могу собрать, чтобы подтвердить выше.

Рик Кимбалл
Ср 16 августа 2017 г., 22:37
[victor_pv - Ср 16 августа 2017 г., 21:53] - Я подозреваю Syscalls.C не может быть включен в сборку, и я не вижу никакой другой объявления SBRK в Libmaple F1, так что она вытаскивает функцию SBRK из стандартной библиотеки?
Точно правильно. Как я упоминал выше, Sloeber использует другую командную строку для ссылки, чем то, что производит Arduino IDE. Итак, вы в конечном итоге используете libc _sbrk (). Я бы показал вам командную строку, за исключением того, что я уже удалил Slaeber из моей настройки Eclipse.

Для записи это тот, который произведен Arduino IDE:
"Arm-none-eabi-g ++" -os -wl,-gc-sections -mcpu = cortex-m3 "-t/home/kimballr/arduino/ardware/stm32duino/stm32f1/variants/generic_stm32f103c/ld/jtag_c8.ld "" -wl, -map,/tmp/arduino_build_6110/malloc_test.Ино.Карта "" -l/home/kimballr/arduino/ardware/stm32duino/stm32f1/variants/generic_stm32f103c/ld "-o"/tmp/arduino_build_6110/malloc_test.Ино.elf "" -l/tmp/arduino_build_6110 "-lm -lgcc -mthumb -wl,-cref -wl,-проверка-wl,-gc-sections -wl,-нерешенные символы = отчет-все -Wl,-Warn-Common -Wl,-Warn-section-align -wl,-warn-unresolved-symbols -wl,-стартовая группа "/tmp/arduino_build_6110/sketch/malloc_test.Ино.CPP.o ""/tmp/arduino_build_6110/core/wirish/start.С.o ""/tmp/arduino_build_6110/core/wirish/start_c.в.o ""/tmp/arduino_build_6110/core/wirish/syscalls.в.o ""/tmp/arduino_build_6110/core/poard.CPP.o ""/tmp/arduino_build_6110/core/wirish/poards.CPP.o ""/tmp/arduino_build_6110/core/wirish/boards_setup.CPP.o ""/tmp/arduino_build_6110/../arduino_cache_912348/core/core_stm32duino_stm32f1_genericstm32f103c_device_variant_stm32f103c8, opload_method_stlinkmethod, cpu_speed_speed_72mhz, opt_osstlinkmethod, cpu_speed_speed_72mhz, opt_osstlinkmethod. 83715E70DB.a "-wl,-конечная группа Обратите внимание, что он использует Syscalls.C от варианта/протирка, а не libc.

victor_pv
Чт 17 августа 2017 г. 2:49
Я запустил компиляцию с F4 и F1, а также с Pito, F4 не бросил ошибку.
Я посмотрел на различия и экипирует Syscalls.c Файл, имеющий небольшие различия, в F4 помещается в другую папку, поэтому я переместил его в F1 в одну и ту же папку, но это не изменило ситуации.

Затем я посмотрел на варианты линкера, и F4 все еще использует нашего старого друга "-whole-archive", поэтому я добавил это в рецепт Combiner в F1 и Bam! Теперь это правильно связывает Syscalls.
Интересно, почему проблема ушла в Arduino IDE, но показывает, что это уродливое лицо в Словебере :(

Поэтому я подозреваю, что несколько других функций в Syscalls.C также не может быть включен.
Мне нужно запустить компиляцию в Arduino IDE и посмотреть, если .Размер текста отличается. Я почти уверен, что он намного больше с флагом всего архива, но мне интересно, меньше ли он, когда этот флаг не присутствует и составлен в Словебере, так как он предположительно оставляет вещи.

Рик Кимбалл
Чт 17 августа 2017 г., 3:12
Похоже, Sloeber делает некоторое фиксацию флага Buid в коде Java для Syscalls в зависимости от платформы:
https: // github.com/slaeber/arduino-ecli ... .Java#1650

Не похоже, что они делают что -то особенное для архитектуры STM32, и им все равно: Jantje написал:"Как я уже говорил ранее: не стесняйтесь добавлять базовую поддержку STM32. Другими словами, я не собираюсь этого делать.
Я стремлюсь поддержать вас в этом, но вам придется это сделать."

Рик Кимбалл
Чт 17 августа 2017 г., 3:17
Это действительно трудно поддерживать только существующую версию Arduino Libmaple на 3 разных OSES с огромным количеством досок, которые у нас есть. Добавление проблем другого проекта и циклов выпуска действительно пустая трата нашего времени.

Rogerclark
Чт 17 августа 2017 г. 3:20 утра
Рик

Я думаю, что если кто -то использует IDE, кроме Arduino IDE, то мы должны сказать, что им нужно получить поддержку с форума для рассматриваемого IDE.

В конце концов, линия ремня, которую я имел на форуме, с самого начала «все, что касается использования плат STM32 с Arduino IDE»

Все остальное просто добавляет путаницу и не по теме..

Редактировать. Я собираюсь отредактировать первый пост, чтобы ссылаться на то, что вы нашли в плагине Jantje

victor_pv
Чт 17 августа 2017 г. 5:49 утра
Интересно, что использование одного из вариантов -lto в меню платы, ошибка исчезает.
У грустного Словера есть эта проблема, Eclipse намного лучше, чем Arduino IDE при работе в коде.

victor_pv
Чт 17 августа 2017 г., 13:44
@Roger, Рик, это еще кое -что, с точки зрения Arduino IDE.
Из того, что я вижу, у Arduino Ide была та же проблема, не в том числе Syscalls_sam3.C для ядер SAM, вместо того, чтобы использовать целый архив, как мы делали в течение некоторого времени, они заставляли syscalls_sam3.в.o В параметрах для линкера.
Затем в конечном итоге они нашли другой путь, и это то, что реализовано на их платформе.txt file.
Этот поток показывает, как и почему они сначала делали это (заставляя файл включать линкером)
https: // github.com/arduino/arduino/comm ... E22A101E7E

Это шоу, когда они нашли другой путь, используя новый набор флагов для линкера:
https: // github.com/arduino/arduino/pull/4810

У нас не было этих флагов, но как -то в Arduino Ide нам посчастливилось, что Syscalls связаны, пока для SAM он не связывал.

Я проверил добавление тех же флагов, и это работает. Я получаю эти 2 адреса для буфера и тупых в примере Рика, которые соответствуют тому, где моя куча:
20000c0c
20000c10

Хотим ли мы включить это в основное репо, мне все равно, но я хотел опубликовать здесь для всех, кто использует Sloeber, и в случае каких -либо будущих изменений в Arduino IDE, источник или что -то еще приводят к Syscalls.c тоже не связаны с Ардуино, так что, надеюсь, мы сможем найти этот пост.

Я обновлю первое сообщение с этим дополнительным решением для всех, кто использует Eclipse или другую IDE, столкнувшись с проблемой.

Рик Кимбалл
Чт 17 августа 2017 г., 13:56
[victor_pv - Четверг 17 августа 2017 г. 13:44] - У нас не было этих флагов, но как -то в Arduino Ide нам посчастливилось, что Syscalls связаны, пока для SAM он не связывал.
Он работает в Ардуино для нашего ядра, потому что Syscalls.c находится в подкаталоге с вариантом. Любой .C Файлы в подка каталоге варианта связаны как объекты, а не как библиотека. Эти объекты помещаются в командную строку линкера перед ссылкой на библиотеку. См. {Objects_files} в рецепте комбинации

рецепт.в.комбинировать.pattern = "{компилятор.Путь} {компилятор.в.эльф.cmd} "{компилятор.в.эльф.флаги} -mcpu = {build.mcu} "-t {build.вариант.Путь}/{сборка.ldscript} "" -wl, -map, {build.Путь}/{сборка.Project_name}.карта "{компилятор.в.эльф.extra_flags} -o "{build.Путь}/{сборка.Project_name}.эльф "" -l {сборка.path} "-lm -lgcc -mthumb -wl,-cref -wl,-проверка-wl,-gc-sections -wl,-неразрешенные символы = отчет-all -wl,-предупреждение- Common -wl,-Warn-Section-align -Wl,-Warn-unresolved-Symbols -WL,-Start-Troup {object_files} "{строить.path}/{archive_file} "-wl,-конечная группа

Из -за этого нам не нужно прибегать к трюку -U или любым другим трюкам.
$ find variants/ -iname 'syscalls.c' ... variants/generic_stm32f103c/wirish/syscalls.c ...

victor_pv
Чт 17 августа 2017 г. 14:29
У них есть файл объектов и в их рецепте, но, возможно, у них больше, чем им нужно:

рецепт.в.комбинировать.pattern = "{компилятор.Путь} {компилятор.в.эльф.cmd} "-mcpu = {build.mcu} -mthumb {компилятор.в.эльф.флаги} "-t {build.вариант.Путь}/{сборка.ldscript} "" -wl, -map, {build.Путь}/{сборка.Project_name}.карта "{компилятор.в.эльф.extra_flags} -o "{build.Путь}/{сборка.Project_name}.эльф "" -l {сборка.path} "-wl,-cref -wl,-проверка-сечения -wl,-gc-sections -wl,-intrint = reset_handler -wl,-неразрешенные symbols = отчет-all -wl,- Warn-Common -WL,-Warn-Section-Align -Wl,-Start-Group {CompiLER.комбинировать.флаги} {object_files} "{build.вариант.Путь}/{сборка.variant_system_lib} "" {build.PATH}/{archive_file} "-wl, -конечная группа -lm -gcc

Рик Кимбалл
Чт 17 августа 2017 г. 14:37
Я не смотрел код солоэля подробно, однако я вижу из вашего поста, они добавили это:

... {строить.вариант.Путь}/{сборка.variant_system_lib} ...

Я догадаюсь, что они принимают файлы в подкаталоге варианта и помещают их в библиотеку вместо того, чтобы добавлять каждый .o Файл в переменную object_files.

victor_pv
Чт 17 августа 2017 г., 18:53
Чтобы уточнить, это рецепт для Arduino, на платформе.Файл TXT, а не что -то конкретное для SlaCeber.
Мне придется проверить, что у них есть как библиотека, но я знаю, что есть syscall_sam3.C файл с функциями в одной из папков.
Еще одно отличие с нашим кодом, у них есть Syscalls.H заголовок файл, а мы нет, но даже без этого файла, если я добавлю "-u..."Флаги, SYSCALL включали правильно, а эскиз работал без сбоя.

Пито
Чт 31 августа 2017 г. 9:42 утра
@Виктор: Спасибо!!! :)
С добавлением {компилятора.комбинировать.Флаги} -u Флаги в платформу.txt the malloc () теперь работает с последними Libmaple и F1 (т.е. F103ze) под Slaeber.

luca_stm32
Ср 22 ноября 2017 г. 20:15
Отсюда я использую библиотеку ESP8266: https: // github.com/bportaluri/wifiesp
Я использую Bluepill и Slaeber, но когда я загружаю Scketch на STM32, микрофоры (с Arduino Ide, работа Schetck работает).
Я нашел проблему: функция Ringbuffer Используйте новую функцию: RingBuffer::RingBuffer(unsigned int size) { _size = size; // add one char to terminate the string ringBuf = new char[size+1]; <---- ! ringBufEnd = &ringBuf[size]; init(); }