Jump to content
    

FreeRTOS + STM32 HAL

Доброго времени. А кто-нибудь запускал FreeRTOS с HAL от стм? Бьюсь весь день - какая-то проблема с атомарностью - при запуске АЦП+ДМА до макроса __HAL_LOCK(hdma) адрес коллбэка в ADCHandle->DMA_Handle->XRefHalfCpltCallback правильный, а после выполнения макроса - белиберда. Похоже где-то во время выполнения макроса вылезает менеджер задач и все портит.. почему? Ковыряю - что за макрос такой, а там - еррор:

USE_RTOS should be 0 in the current HAL release

Получается у HAL свой механизм мьютексов и фриртос на него не кладется?

Камень STM32F051R8T6 (на ф0дискавери), если это имеет значение.

UPD

...и так всегда - спросишь о чем-то, а через минуту ответ в голову приходит :krapula: Запускал HAL_ADC_Start_DMA из таска, а стек таску задал короткий, вот и ловил HardFault. Собственно остается вопрос про #erroe в коде HAL? Зачем он там?

Edited by Cosworth

Share this post


Link to post
Share on other sites

Получается у HAL свой механизм мьютексов и фриртос на него не кладется?

 

У HAL на текущий момент мьютексов нет совсем, есть обычный флажок "занято/свободно". В многозадачной системе это сломается в самый неподходящий момент.

Решения:

1) прикрутить туда стандартные фриртос мьютексы (вроде б несложно, поправить только typedef и эти макросы LOCK() / UNLOCK() )

2) использовать драйвер ровно из одной задачи

3) ждать, когда родится какая-нибудь CubeOS.

4) (правильный) выкинуть нафиг этот HAL.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...