Cosworth 0 May 26, 2015 Posted May 26, 2015 (edited) · Report post Доброго времени. А кто-нибудь запускал 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 May 26, 2015 by Cosworth Quote Share this post Link to post Share on other sites More sharing options...
esaulenka 10 May 27, 2015 Posted May 27, 2015 · Report post Получается у HAL свой механизм мьютексов и фриртос на него не кладется? У HAL на текущий момент мьютексов нет совсем, есть обычный флажок "занято/свободно". В многозадачной системе это сломается в самый неподходящий момент. Решения: 1) прикрутить туда стандартные фриртос мьютексы (вроде б несложно, поправить только typedef и эти макросы LOCK() / UNLOCK() ) 2) использовать драйвер ровно из одной задачи 3) ждать, когда родится какая-нибудь CubeOS. 4) (правильный) выкинуть нафиг этот HAL. Quote Share this post Link to post Share on other sites More sharing options...