Cześć,
ostatnio napisałem bootloader na STM32F4 pracujący w trybie USB HOST FS. Całość chodzi na Distortosie, używa HAL i bibliotek wygenerowanych przec CubeMX i zmodyfikowanych lekko przeze mnie. Modyfikację polegają głownie na:
-modyfikacji obsługi przerwania:
-właściwy kod obsługi przerwania wykonywany jest w zmodyfikowanym USBH_Process_OS ():
HAL_HCD_IRQHandler nie jest już w kontekście przerwania.
Przy okazji:priorytet wątku hosta musi być wyższy/równy niż wątków które dokonują odczytów/zapisów USB -one używają w pewnych miejscach pollingu i mogą zablokować system, taka uwaga.
-modyfikacja USBH_UserProcess i dodanie API do odczytu stanu hosta:
Aplikacja główna sprawdza czy podłączone urządzenie jest gotowe.
-taka toporna implementacja kolejki zdarzeń, co prawda kod od ST wydaje się nie być zainteresowany tym co się stało i bazuje jedynie na aktualnym stanie:)
Moje prośby i pytania:
1. proszę o krótkie review czy kod który wrzuciłem ma jakieś zasadnicze wady, w szczególności czy obsługa przerwania (w wątku) jest prawidłowa?
2. Jaką przyjąć strategię w kontekście montowania i odmontowania systemu plików? Moja propozycja jest taka: globalna flaga bool is_mounted; (z mutexem pewnie), montowanie gdy (USBH_STATE == USBH_READY&& is_mounted == false), odmontowanie za każdym razem gdy jest jakikolwiek błąd FatFS i is_mounted == true;
3. Czy podwójne odmontowanie jest błędem?
4. Zaintrygowany postem: https://www.elektroda.pl/rtvforum/viewtopic.php?p=18342564#18342564
Czy HAL dla STM32F4 USB Host posiada jakieś znane błędy?
Dziękuję za pomoc i pozdrawiam
ostatnio napisałem bootloader na STM32F4 pracujący w trybie USB HOST FS. Całość chodzi na Distortosie, używa HAL i bibliotek wygenerowanych przec CubeMX i zmodyfikowanych lekko przeze mnie. Modyfikację polegają głownie na:
-modyfikacji obsługi przerwania:
Code: c
-właściwy kod obsługi przerwania wykonywany jest w zmodyfikowanym USBH_Process_OS ():
Code: c
HAL_HCD_IRQHandler nie jest już w kontekście przerwania.
Przy okazji:priorytet wątku hosta musi być wyższy/równy niż wątków które dokonują odczytów/zapisów USB -one używają w pewnych miejscach pollingu i mogą zablokować system, taka uwaga.
-modyfikacja USBH_UserProcess i dodanie API do odczytu stanu hosta:
Code: c
Aplikacja główna sprawdza czy podłączone urządzenie jest gotowe.
-taka toporna implementacja kolejki zdarzeń, co prawda kod od ST wydaje się nie być zainteresowany tym co się stało i bazuje jedynie na aktualnym stanie:)
Code: c
Moje prośby i pytania:
1. proszę o krótkie review czy kod który wrzuciłem ma jakieś zasadnicze wady, w szczególności czy obsługa przerwania (w wątku) jest prawidłowa?
2. Jaką przyjąć strategię w kontekście montowania i odmontowania systemu plików? Moja propozycja jest taka: globalna flaga bool is_mounted; (z mutexem pewnie), montowanie gdy (USBH_STATE == USBH_READY&& is_mounted == false), odmontowanie za każdym razem gdy jest jakikolwiek błąd FatFS i is_mounted == true;
3. Czy podwójne odmontowanie jest błędem?
4. Zaintrygowany postem: https://www.elektroda.pl/rtvforum/viewtopic.php?p=18342564#18342564
Czy HAL dla STM32F4 USB Host posiada jakieś znane błędy?
Dziękuję za pomoc i pozdrawiam