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

FreeRTOS и HAL на stm32 - совместимость

Приветствую,

Подскажите пожалуйста, насколько совместимы сейчас HAL и FreeRTOS в данное время. Существует мнение, что многие функции HAL не подходят для работы во FreeRTOS.

Т.к. неентрабельны, отсутствует блокировка ресурсов итд. Так ли это в современной ситуации?

Стоит ли писать проект на HAL или осваивать LL?
Проект с UART i2c ADC таймерами.
Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почему же не совместимы, если CubeIDE в своей поставке напрямую интегрирует FreeRTOS. 
Блокировка ресурсов достигается ручками программиста, для этого есть возвращаемое значение состояния HAL - HAL_OK, HAL_BUSY, ну и средства FreeRTOS. Вы не ленитесь читать мануалы, на HAL он тоже есть, да и на FreeRTOS тоже.
Отличие LL от HAL - непринципиальное, это разновидность реализации низкоуровневого драйвера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А самое смешное, что задача с УАРТом, И2Ц, АЦП и таймером решается без каких-либо РТОС 🙂 По крайней мере, мы раньше на такие темы даже и не заморачивались. Это вот сейчас стало модно крутить РТОС даже в светомигалку.

Использование ДМА и прерываний, вкупе с системным таймером позволит устаканить указанные четыре вещи без РТОС как за нефик делать. Перечисленные модули все равно же будут работать примерно поочередно, типа пока не будет готов результат АЦП, УАРТ не будет начинать передачу. И наоборот, пока по УАРТу не придет команда запуска АЦП, он не будет запускать процесс измерения. И2С - это наверно какой-нить OLED 128х64. В лучшем случае 🙂  Ну это так, для справки, примерно плюс-минус както так.

Изменено пользователем EdgeAligned

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да. согласен,  делал подобное на последовательности задач, которая крутится в цикле. Такая кооперативная многозадачность. Но после того как попробовал FreeRTOS даже мигание светодиодом буду делать на нем. Настолько все удобно.

А вы уверены, что скажем считывание i2c в поллинг режиме через hal не сбойнет, если у задачи не будет отобран timeslice?

7 hours ago, firstvald said:

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

Долго думал над этой фразой, но не понял, могли бы прояснить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в классическом FREERTOS есть различные функции для работы в основном цикле и в прерывании. куб генерит код в котором штатные функции ос запрятаны в кубовские функции которые анализируют откуда происходит вызов :  из основного цикла или из прерывания. 

/**
* @brief Release a Semaphore token
* @param  semaphore_id  semaphore object referenced with \ref osSemaphore.
* @retval  status code that indicates the execution status of the function.
* @note   MUST REMAIN UNCHANGED: \b osSemaphoreRelease shall be consistent in every CMSIS-RTOS.
*/
osStatus osSemaphoreRelease (osSemaphoreId semaphore_id)
{
  osStatus result = osOK;
  portBASE_TYPE taskWoken = pdFALSE;
  
  
  if (inHandlerMode()) {
    if (xSemaphoreGiveFromISR(semaphore_id, &taskWoken) != pdTRUE) {
      return osErrorOS;
    }
    portEND_SWITCHING_ISR(taskWoken);
  }
  else {
    if (xSemaphoreGive(semaphore_id) != pdTRUE) {
      result = osErrorOS;
    }
  }
  
  return result;
}

кубовская функция освобождения семафора osSemaphoreReease может вызвать xSemaphoreGiveFromISR   в прерывании или xSemaphoreGive в основном цикле (или любой задаче)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, Mty сказал:

А вы уверены, что скажем считывание i2c в поллинг режиме через hal не сбойнет

Ну если вы косячно напишите, то конечно "сбойнет" 🙂 Ну и учитывая, что I2C очень медленный интерфейс, ожидание прихода байта поллингом - очень нерациональное решение. Есть же для этого прерывания, DMA в конце концов. Никаких сложностей, надо просто понимать, как что делать рационально. Конечно, если понимания этого нет, тогда FreeRTOS услужливо подставляет костыль для обхода сей некомпетентности кодописателя.

"Удобно-неудобно"... Неудобно срать спать стоя, остальное фигня, как у нас говорили 🙂 Во многих случаях FreeRTOS - всего лишь маркетинг, предложенный как "удобно". На самом деле, если разобраться, в ней хватает "неудобных" моментов даже более чем.

5 часов назад, firstvald сказал:

куб генерит код в котором штатные функции ос запрятаны в кубовские функции

Ох мать, еще одна надстройка... Дааа, Куб услужливо подставил еще один костыль для не слишком смышлёных тушканчиков 🙂 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...