HAL Libraries... Нет C ++ или кучи

Стевех
Сб 14 мая 2016 г. 9:50 вечера
До сих пор я не обнаружил, что C ++ или код, использующий кучу в коде HAL; это все стандартное c.
Это включает следующее
  • Fatfs - адаптация ST CHANFS. Прямой c. Стек используется для временных 512 байтовых буферов (e.глин., DIR и так далее)
    SDIO Driver для карт и FATFS USD
    MCU PLL и настройка поставки (автоматически сгенерировано)
    USARTS - DMA, прерывание, опрос
    SPI, DMA, прерывание, опрос, множественные порты SPI
    Gpio in, out, прерывания изменения края
    Таймеры, включая DMA в высокий скорость пульса
    Сторожевые таймеры (IWD)
    FSMC Intgerface - DMA, опрос
Я не использовал, но читал о других периферийных устройствах (на чипе), и они, кажется, также являются общими c.

Сжимать
Сб 14 мая 2016 г., 22:40
ST примечания о HAL:
Исходный код драйверов разработан в строгих ANSI-C, что делает его независимым от
Инструменты разработки. Он проверяется с помощью инструмента статического анализа кода. Он полностью задокументирован и
MISRA-C 2004 Compliant.
также API -интерфейсы соответствуют RTOS:
- полностью повторные APIS
- Систематическое использование тайм -аутов в режиме опроса.
- Механизм блокировки объекта: безопасное доступ к аппаратному обеспечению, чтобы предотвратить несколько ложных доступа к общим ресурсам.

Rogerclark
Солнце 15 мая 2016 г. 12:07
@stevech

Что относится ваш пост.

Это не кажется вопросом.

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

Стевех
Солнце 15 мая 2016 г., 5:13
Это в разделе форума под названием HAL и Cubemx. Так что это казалось подходящим.
Прошло обсуждение использования C ++ в библиотеках Arduino.

Ключевым моментом является то, что некоторые библиотеки высокого уровня, такие как FATF, из Chan, строго C, тогда как многие библиотеки Arduino используют классы C ++ с конструкторами, которые используют кучу, и другие формы распределения динамической памяти.

Не стесняйтесь, чтобы все это.

Rogerclark
Солнце 15 мая 2016 г. 6:09
Привет @stevech

Это просто казалось, что это пост в качестве заявления, что необычно

Я могу переместить его в одну из других потоков HAL

Стевех
Солнце 15 мая 2016 г., 17:35
Просто попытка использовать заголовок потока, чтобы ответить на довольно часто задаваемой области вопроса

Олли
Солнце 15 мая 2016 г. 18:25
Спасибо, Стив.

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

Sheepdoll
Солнце 15 мая 2016 г., 21:31
Стевех написал:Просто попытка использовать заголовок потока, чтобы ответить на довольно часто задаваемой области вопроса

Сжимать
Солнце 15 мая 2016 г., 22:02
Я думаю, что C ++ без динамического распределения в порядке для критических систем.
Я всегда делаю: a) Установить размер кучи на 0 в сценарии линкера, б) определить пустой, пользовательский новый конструктор c) Нет библиотек STL.
Любой может сказать, что это не C ++, а C с классами, что частично верно.

Стевех
Пн 16 мая 2016 г. 12:11
Сламмер написал:Я думаю, что c++ без Динамическое распределение в порядке для критических систем.
Я всегда делаю: a) Установить размер кучи на 0 в сценарии линкера, б) определить пустой, пользовательский новый конструктор c) Нет библиотек STL.
Любой может сказать, что это не C ++, а C с классами, что частично верно.

Уоллесен
Пн 17 июля 2017 г. 8:55 вечера
Код arduino c ++ использует кучу, afaik.

У Atmega328 есть только 2 тыс. ОЗУ, и нет никакого Malloc (), не говоря уже о новом (). Все оперативные операции не выделяются на именованные VARS, используется для стека.

ATMEGA2560 имеет только 8K, но может использовать до 64K внешней оперативной памяти для данных (Гарвардская арка. означает, что весь код живет во вспышке)

Таким образом, все эти LIBS C ++ написаны с ожиданием, что создания объектов объявляются как статические файлы vars.

Chismicro
Вт 18 июля 2017 г. 7:48 утра
У Atmega328 есть только 2 тыс. ОЗУ, и нет никакого Malloc (), не говоря уже о новом (). Все оперативные операции не выделяются на именованные VARS, используется для стека. Вы можете добавить свой новый и удалить:
#include __extension__ typedef int __guard __attribute__((mode (__DI__))); extern "C" int __cxa_guard_acquire(__guard *); extern "C" void __cxa_guard_release (__guard *); extern "C" void __cxa_guard_abort (__guard *); int __cxa_guard_acquire(__guard *g) {return !*(char *)(g);}; void __cxa_guard_release (__guard *g) {*(char *)g = 1;}; void __cxa_guard_abort (__guard *) {}; void * operator new(size_t size) { return malloc(size); } void operator delete(void * ptr) { free(ptr); }

Сенсортильный