реклама на сайте
подробности

 
 
> STM32 + Freertos. Проблемы с DMA
Vladimir Prokofi...
сообщение Feb 29 2012, 08:58
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 9-03-11
Пользователь №: 63 481



Помогите разобраться!

Процессор STM32F215, FreeRtos

В одной из задач используется запись на SD карточку текущих параметров устройства. По сути задача низкоприоритетная.

Есть вторая задача, высоко приоритетная, которая должна по ком-порту выдавать небольшие порции данных во вне.

К сожалению, если запись на карту сделать высоким приоритетом ( или записывать блоки на флешку в критической секции ) То все работает, но важная задача затыкается на видимое время, что неприемлемо.

Если записи сделать малый приоритет, то через n минут работы происходит сбой. Выглядит это так, как будто не может завершиться dma передача:

SD_ReadBlock( Buffer, SectorNumber * BLOCKSIZE, BLOCKSIZE );
Status = SD_WaitReadOperation(); <-- Сидим внутри этой функции, которая проверяет DMA_GetFlagStatus(SD_SDIO_DMA_STREAM, SD_SDIO_DMA_FLAG_TCIF) != RESET
while(SD_GetStatus() != SD_TRANSFER_OK)

Обламывается только чтение с карты. Если этот код помещен в критическую секцию то сбоев не происходит.

Вопросов по этому поводу несколько...

1. Почему оборачивание этого в критическую секцию вызывает реальные задержки выполнения высокоприоритетной задачи( в ней стоит мигание светодиодом, и глазом видно задержку sm.gif
2. Почему уход в этом месте в другую задачу может привести к тому, что DMA не выставляет флаг успешной отправки?

Ну и еще давно хотел узнать но не решался спросить:
Пример, отсылаем что-то в ком-порт в задаче. Чтобы не городить прерывания, пишем так:
while( USART_GetFlagStatus( AP_OUTUART2, USART_FLAG_TC ) == RESET );

USART_SendData( AP_OUTUART2, c );
Очевидно что процессор стоит в цикле и ждет пока байт не ушел. Можно ли отослав байт переключить задачу, или это получается неоправданно?
При скорости, скажем 9600 это занимает около 1/1000 сек. По умолчанию один тик фриртоса этому равен, и при таком тике я не вижу смысла переключать задачу -- дороже выйдет...

Заранее спасибо)

Сообщение отредактировал Vladimir Prokofiev - Feb 29 2012, 09:00
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 08:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.02628 секунд с 7
ELECTRONIX ©2004-2016