Я пытаюсь инициировать spi-связь между процессором omap и процессором sam4l. Я настроил протокол spi, и omap является ведущим. Теперь я вижу, что тестовые данные, которые я отправляю, правильно достигают sam4l, и я вижу, что isr печатает эти данные. Использование большего количества printf здесь и там в isr приводит к тому, что операция происходит, и происходит соответствующая операция, но если я удаляю все printfs, я не вижу, чтобы какая-либо операция происходила. Что может быть причиной этой аномалии? Это обычный случай неправильной настройки частоты или что-то в этом роде? Если нужен код, я тоже опубликую его, но он большой. Спасибо
Обработчик прерывания Spi работает, когда используется printf()
Ответы (2)
Я думаю, вы пытаетесь напечатать сообщение в драйвере.
При печати сообщения на консоли с замедлением работы вашего драйвера он может работать медленно, и ваш драйвер работает хорошо.
Используйте pr_info() для отладки и изменения настроек, чтобы сообщение не появлялось на консоли, изменив /proc/sys/kernel/printk на 4 4 1 7
-> Он будет хранить отладочное сообщение в буфере.
-> Драйвер не замедляется из-за вывода сообщения на экран.
-> И вы можете увидеть это, введя команду dmesg позже.
Затем найдите оригинальную проблему, которая может вызвать ошибку.
Если подпрограмма работает с printf "здесь и там", а не иначе, почти наверняка проблема в том, что есть проблемы с синхронизацией. В качестве тривиального примера предположим, что вы пишете на флэш-память SPI, а затем проверяете ее содержимое. Запись во флэш-память займет некоторое время, поэтому, если вы проверите сразу, данные будут недействительными, но если вы вставите вызов printf между ними, может потребоваться достаточно времени, чтобы обратное чтение теперь было действительным.
printf
работает медленно - если ваша проблема связана со временем, то, возможно, ваш printf замедляет работу настолько, что ему удается работать. - person Katie   schedule 29.01.2015