Freertos вместе с Arduino

Martinayotte
Вторник 22 сентября 2015 г. 12:48
Я хочу использовать Freertos в новом проекте, но я все еще хочу сохранить среду Arduino.
Другими словами, я хочу сохранить лучшее из обоих миров.

Я нашел Freertos из Билла Греймана, https: // github.com/greiman/freertos-arduino, Но я еще не заставил это работать, хотя я получил это компиляция.
Это замерзает на первом XtaskCreate (). Я не уверен, почему, но я предполагаю, что это каким -то образом возникает проблемы с управлением стеком или чем -то в этом роде.

Чтение до этого некоторые из вас использовали Freertos, вы можете сказать мне, какие ароматы вы использовали ?
Можно ли держать лучшее из обоих миров с этими ароматами ?

Наверное, я перенес свои тесты из моего NetDuino2plus на мой STM32F4Stamp, потому что я могу прикрепить Stlink к первой, не приобретая около 6 контактов Pogo, так что на штампе я, возможно, нашел проблему через отладку ...

Стевех
Вторник 22 сентября 2015 г. 2:33 утра
Существует порт Фреерто для подростковой рука Freescale с библиотеками Arduino. Я запустил это. Перемещение его на улицу не должно быть сложно.
Вы можете начать с скачивания версии Teensy 3 на их форуме.

Как вы, возможно, знаете, библиотеки ST Cubemx и HAL имеют Fatfs и Freertos Port. Они используют библиотеки HAL, которые являются суперсетом библиотек Arduino, за исключением конкретных проектов Arduino, E.глин., серийные светодиодные видеостры.

Martinayotte
Вторник 22 сентября 2015 2:50 утра
Стевех написал:Существует порт Фреерто для подростковой рука Freescale с библиотеками Arduino.

victor_pv
Вторник 22 сентября 2015 г., 3:50
Freertos был перенесен много лет назад для клена.
Несколько месяцев назад я сравнил исходные файлы STM32 с этим портом, а затем применил изменения к последним доступным Freertos, когда я думаю, что это было 8.2.1
Обе версии включены в основную репо STM32Duino, в папке библиотеков.

Я успешно протестировал оба, и Мадиас сейчас делает проект с ним, кажется, хорошо работает.
Если вы пытаетесь использовать Freertos с помощью платы STM32, я рекомендую использовать либо старый, либо новый с остальной частью ядра STM32Duino/Libmaple.

Мадиас
Вторник 22 сентября 2015 г. 7:36 утра
Как сказал Виктор, я работаю с RTO из стандартной библиотеки STM32Duino. Я думаю, что нет причин использовать старую версию, поэтому попробуйте:
Freertos821
первый!
(Может быть, есть еще несколько примеров в библиотеке "Freertos")

Martinayotte
Вторник 22 сентября 2015 12:44
Ой !
Я не знал, что это уже интегрировано как библиотека в стиле Ардуино, как и из Билла Греймана.
Большое спасибо за информацию !
Я попробую, особенно счета, основанный на V8.0.1. Обычно, чем новее, тем лучше.

Martinayotte
Вторник 22 сентября 2015 г. 16:48
Хорошо ! он отлично работает с этой версией. Спасибо всем вам ! :)
Мне все равно пытаться отладить другого, так как он старше.
Но мне пришлось увеличить размер кучи, так как она была установлена ​​всего на 8 тыс., И у STM32F405 много оперативной памяти.
Также мне нужно было добавить такие определения, как confignormal_stack_size, потому что был только один в качестве конфиденциального установки на 120 байтов, что на самом деле слишком мало для задач, используя serialusb или uipethernetet. Я определил confignormal_stack_size в 2048.
Мне также нужно будет проверить сценарии LD, потому что я только что обнаружил, что в рамках STM32F4, даже для старого Discovery_F407, RAM.LD установлен с длиной до 61 тыс., Далеко от того, что чип обеспечивает 192K. Я еще не знаю, действительно ли куча использует это значение.

victor_pv
Ср 23 сентября 2015 г. 1:47
Martinayotte написал:Хорошо ! он отлично работает с этой версией. Спасибо всем вам ! :)
Мне все равно пытаться отладить другого, так как он старше.
Но мне пришлось увеличить размер кучи, так как она была установлена ​​всего на 8 тыс., И у STM32F405 много оперативной памяти.
Также мне нужно было добавить такие определения, как confignormal_stack_size, потому что был только один в качестве конфиденциального установки на 120 байтов, что на самом деле слишком мало для задач, используя serialusb или uipethernetet. Я определил confignormal_stack_size в 2048.
Мне также нужно будет проверить сценарии LD, потому что я только что обнаружил, что в рамках STM32F4, даже для старого Discovery_F407, RAM.LD установлен с длиной до 61 тыс., Далеко от того, что чип обеспечивает 192K. Я еще не знаю, действительно ли куча использует это значение.

Martinayotte
Ср 23 сентября 2015 г., 2:21
Спасибо, Виктор, за подсказки !

Да, я знаю, что у F405 нет линейного 192K, но он сегментирован. Но, по крайней мере, основной блок составляет 112 тыс. С еще 16 тыс. (Я не помню, что) и, наконец, 64K CCM (память с основной соединением).

Но это своего рода облегчение по сравнению с LPC1768 с 64K (32K+16K+16K) ... ;)

Да, я думаю, что мне нужно настроить сценарии LD, сравнивая их с другим компилятором, потому что исходный клен, возможно, далек от оптимизированных, даже комментарии все еще упоминаются F103 из -за копирования/вставки ... :?

Спасибо за ссылки, это будет полезно !

Стевех
Ср 23 сентября 2015 г. 6:31
Остерегайтесь, область памяти CCM не может быть использована для ввода/вывода на основе DMA на основе DMA. Это связано с основным и не адресованным контроллерами DMA.

Избегать этого зависит от программиста, а не компилятора или линкера.

Martinayotte
Ср 23 сентября 2015 г. 14:31
Что будет лучше всего использовать для этого CCM ?
Я видел несколько тем, где люди помещают там стеки Freertos.
Некоторые другие предлагают общие буферы (без DMA), таблицы поиска, даже некоторые коды для быстрой обработки.
Но есть ли другие возможности, не думая дважды, прежде чем использовать там какие -либо вещи ?

Стевех
Ср 23 сентября 2015 г., 19:50
Martinayotte написал:Что будет лучше всего использовать для этого CCM ?
Я видел несколько тем, где люди помещают там стеки Freertos.
Некоторые другие предлагают общие буферы (без DMA), таблицы поиска, даже некоторые коды для быстрой обработки.
Но есть ли другие возможности, не думая дважды, прежде чем использовать там какие -либо вещи ?

Martinayotte
Ср 23 сентября 2015 г., 21:00
@stevech, если у вас есть пользовательские сценарии LD, возможно, это может быть полезно поделиться ими, поскольку, как я описал ранее, те, кто находится под F4, довольно далеко от лучших, они похожи на копии F1, вероятно, немного настроены.
Я бы хотел, чтобы лучшее из F4 было совершено в нашем GitHub.

Стевех
Ср 23 сентября 2015 г., 23:49
Мои сценарии линкера закодированы для IAR, а не GCC. Мне придется учиться на сценариях GCC LD, чтобы перевести.

Martinayotte
Чт 24 сентября 2015 г. 12:33
Затем, если вы работаете с какими -либо досками F4 с SMT32Duino, вы можете обновить сценарии LD напрямую, которые уже присутствуют в GitHub, это будет очень оценено. Если вам нужен тестер QA, я буду там, чтобы помочь ... ;)
Конечно, все те люди, как я, не бегат с ними, нуждаются в том, чтобы быть немного проинформированным о том, какой атрибут использовать, если мы хотим извлечь выгоду из этого.

Стевех
Чт 24 сентября 2015 г. 2:23 утра
(Этот пост шире, чем Freertos, заголовок потока).

Вот сценарий линкера для линкера IAR. Это довольно самодокументирование, и я могу объяснить, если это необходимо.
«Гуру» может установить все это и просто документировать, как его можно использовать ранг и файл.

Somone может адаптировать это для сценария GCC LD.
Это файл линкера STM32F415. Есть названный раздел «CCMRAM» для пространства CCM. Разделы могут использоваться для заставить переменную (ы) идти куда угодно в этом регионе. Такие как большой набор байтов. Или буферы ОЗУ для FATFS - если ваш интерфейс SD -карты (SDIO, SPI) не будет на основе DMA на основе DMA.
GCC будет иметь одинаковую концепцию, другой синтаксис.

Вы можете объявить массив uint8_t в CCRAM. Затем бросите указатель байта на указатели других типов, поэтому упростите общее использование буфера, если вы не создаете конфликт. (Замок с владельцем буфера - это избыточный замок в одной резьбовой среде MCU.)


Пример линкера файла (синтаксис компилятора IAR). Первая часть автоматически сгенерирована IAR IDE. Остальное кодировано. #include #define L PB12 class myMidi : public USBMIDI { void handleNoteOff(unsigned int channel, unsigned int note, unsigned int velocity) { if ((channel - 1) == 1 && note == 1) digitalWrite(L, 0); } void handleNoteOn(unsigned int channel, unsigned int note, unsigned int velocity) { if ((channel - 1) == 1 && note == 1) digitalWrite(L, 1); } }; myMidi midi; void setup() { USBComposite.setProductId(0x0030); pinMode(L, OUTPUT); midi.begin(); delay(1000); } void loop() { midi.poll(); }

Martinayotte
Чт 24 сентября 2015 г., 13:43
Большое спасибо, Stevech !
Я постараюсь адаптировать это к GCC, когда получу шанс.