Зашёл в тупик - не могу найти ошибку в программе своей, может быть кто-то сможет помочь? К сожалению частей движущихся слишком много, нужно будет подумать как упростить воспроизведение проблемы
stm32f4 + chibios, пытаюсь программно генерировать несколько ШИМ разной частоты используя один 32-битный таймер 1МГц. шим здесь просто частный случай планирования сигналов, велосипед вообще изобретаю вместо аппаратных таймеров на каждую задачу потому что так таймеров не хватит
Базовые файлы:
1) 32-битный будульник 1МГц, просто планирует вызов через заданное время: http://sourceforge.net/p/rusefi/code/HEAD/tree/trunk/firmware/hw_layer/microsecond_timer.c
2) 64-битные часы поверх счётчика циклов процессора - http://sourceforge.net/p/rusefi/code/HEAD/tree/trunk/firmware/util/efilib2.cpp
3) структура данных очереди событий: https://sourceforge.net/p/rusefi/code/HEAD/tree/trunk/firmware/controllers/algo/event_queue.cpp
каждый генератор ШИМ - высчитывает время следующего переключения пина, ставит будильник на это время, ставит в очередь следующий вызов, и всё по циклу - https://sourceforge.net/p/rusefi/code/HEAD/tree/trunk/firmware/controllers/system/pwm_generator_logic.cpp
Полные исходники: https://sourceforge.net/p/rusefi/code/HEAD/tree/trunk/firmware/
Получается слишком много движущихся частей, которые при этом отдельно как-то даже более-менее протестированы и работают, а вот всё вместе видимо натыкается на какой-то нюанс и ломается, Выглядит это вот так:
а картинке мы видим, что четыре ШИМа какое-то время генерируются - третий самый быстрый, там событий 100 отрабатывает - а потом что-то идёт не так. к сожалению в этом дизайне достаточно одного несработавшего будильника, чтоб вся цепочка сломалась.
Для включения тестовой генерации нужно разкомментировать строчку52 в https://sourceforge.net/p/rusefi/code/HEAD/tree/trunk/firmware/controllers/PwmTester.cpp
будет 4 сигнала:
1Hz on PB9
10Hz on PB8
1000Hz on PE3
33Hz on PE5
может быть, кто-то увидит проблему? Что-то я немного в тупике.
Раздел: STM32
stm32f4 + chibios, пытаюсь программно генерировать несколько ШИМ разной частоты используя один 32-битный таймер 1МГц. шим здесь просто частный случай планирования сигналов, велосипед вообще изобретаю вместо аппаратных таймеров на каждую задачу потому что так таймеров не хватит
Базовые файлы:
1) 32-битный будульник 1МГц, просто планирует вызов через заданное время: http://sourceforge.net/p/rusefi/code/HEAD/tree/trunk/firmware/hw_layer/microsecond_timer.c
2) 64-битные часы поверх счётчика циклов процессора - http://sourceforge.net/p/rusefi/code/HEAD/tree/trunk/firmware/util/efilib2.cpp
3) структура данных очереди событий: https://sourceforge.net/p/rusefi/code/HEAD/tree/trunk/firmware/controllers/algo/event_queue.cpp
каждый генератор ШИМ - высчитывает время следующего переключения пина, ставит будильник на это время, ставит в очередь следующий вызов, и всё по циклу - https://sourceforge.net/p/rusefi/code/HEAD/tree/trunk/firmware/controllers/system/pwm_generator_logic.cpp
Полные исходники: https://sourceforge.net/p/rusefi/code/HEAD/tree/trunk/firmware/
Получается слишком много движущихся частей, которые при этом отдельно как-то даже более-менее протестированы и работают, а вот всё вместе видимо натыкается на какой-то нюанс и ломается, Выглядит это вот так:
а картинке мы видим, что четыре ШИМа какое-то время генерируются - третий самый быстрый, там событий 100 отрабатывает - а потом что-то идёт не так. к сожалению в этом дизайне достаточно одного несработавшего будильника, чтоб вся цепочка сломалась.
Для включения тестовой генерации нужно разкомментировать строчку52 в https://sourceforge.net/p/rusefi/code/HEAD/tree/trunk/firmware/controllers/PwmTester.cpp
будет 4 сигнала:
1Hz on PB9
10Hz on PB8
1000Hz on PE3
33Hz on PE5
может быть, кто-то увидит проблему? Что-то я немного в тупике.
Раздел: STM32