17.09.2013, 20:12
|
|
Вид на жительство
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
swat24, Спасибо большое, буду посмотреть
|
|
|
|
17.09.2013, 21:02
|
|
Гражданин KAZUS.RU
Регистрация: 16.02.2012
Сообщений: 441
Сказал спасибо: 89
Сказали Спасибо 735 раз(а) в 149 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
ST наконец разродился чипами в LQFP с поддержкой SDRAM и TFT:
http://www.st.com/web/catalog/mmc/FM...N1806/PF255424
|
|
|
|
19.09.2013, 12:11
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2009
Адрес: Украина, Харьков
Сообщений: 762
Сказал спасибо: 108
Сказали Спасибо 67 раз(а) в 67 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Добрый день.
Я оцифровываю 7 каналов. С помощью DMA они поочередно складываются в массив. После прерывания от DMA о завершении передачи я вызываю усреднение результата и запись результата в массив. После записи результата я разрешаю работу ДМА и все повторяется.
Вопрос, не будет ли проблем при одновременно обращении к одному массиву? Т.е. если подпрограмма усреднения будет обращаться к массиву в тот же момент, когда и главный цикл?
Может сама идея работы с АЦП и не правильная, просто я считаю мне будет удобнее в любой момент времени обратится к переменной, в которой уже будет оцифрованное значение с определенного канала.
|
|
|
|
19.09.2013, 12:32
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,033
Сказал спасибо: 2,559
Сказали Спасибо 11,881 раз(а) в 5,958 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Суть ПДП в аппаратности. "Когда говорят пушки - музы молчат"
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
19.09.2013, 12:39
|
|
Частый гость
Регистрация: 14.06.2006
Сообщений: 40
Сказал спасибо: 20
Сказали Спасибо 10 раз(а) в 5 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от swat24
|
не будет ли проблем при одновременно обращении к одному массиву? Т.е. если подпрограмма усреднения будет обращаться к массиву в тот же момент, когда и главный цикл
|
Для таких вещей нужно либо задействовать методы разделения ресурсов РТОС либо так:
1. Взводим флаг.
2. Считываем значение массива.
3. Смотрим на флаг, и если он сброшен, то идем к п.1
А в прерывании по усреднению всегда сбрасываем флаг.
|
|
|
|
19.09.2013, 12:55
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2009
Адрес: Украина, Харьков
Сообщений: 762
Сказал спасибо: 108
Сказали Спасибо 67 раз(а) в 67 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Первоначально при прерывании ПДП я выставлял флаг и в главном цикле проверяя флаг уже обрабатывал значения (усреднял, выводил...). После чего разрешал прерывание по ПДП и все повторялось заново.
ПДП не имеет доступа к массиву результата. ПДП пишет свои 700 измерений в один массив, после прерывания о завершении передачи. Вызываю подпрограмму усреднения, которая уже пишет результат в отдельный массив, к которому я и хочу обращаться из главного цикла.
Вопрос в том, что будет если при считывании информации в программе из массива результата произойдет прерывание ПДП и будет вызвана подпрограмма усреднения?
И еще вопрос, на одном из сайтов видел, что при обработке результата отключают только прерывание ПДП --›DMA_ITConfig(DMA2_Stream0,DMA_IT_TC,DISABLE);
После обработки включают. Но как я понимаю, это не совсем правильно, т.к. ПДП в этот момент всеравно пишет данные или они стартуют только после прошедшего прерывания о завершении?
Или лучше полностью выключать ПДП на время обработки?
Данные на одном канале перезапишутся, пока я буду читать второй - мне это не критично. Главное что бы программа не вылетела в HardFault...
А какая - нибудь обработка исключений есть в KEIL для STM32? Или только смотреть по прерываниям, куда зашли - такая и ошибка?
Последний раз редактировалось swat24; 19.09.2013 в 13:25.
|
|
|
|
19.09.2013, 16:28
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Организуй двойную буферизацию, тем более что ДМА стм32 поддерживает ее аппаратно. В один буфер пишет ДМА, программа в это время обсчитывает второй буфер
Если программа обратится к той ячейке, в которую сейчас пишет ДМА, будет бус еррор
|
|
|
|
19.09.2013, 16:44
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2009
Адрес: Украина, Харьков
Сообщений: 762
Сказал спасибо: 108
Сказали Спасибо 67 раз(а) в 67 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Добрый день niXto
С двойной буферизацией - отпадает необходимость отключать ДМА при усреднении.
Но я спрашивал немного про другое. К моему массиву с результатом может обращаться только или подпрограмма по просчету средних значений, или из главного цикла (и обращение к определенным элементам массива в разный момент времени). Т.е. не будет ли проблемой при чтении массива в главном цикле вызванное прерывание ПДП с запуском подпрограммы подсчета средних значений?
Как я понимаю при вызове прерывания в стеке будет находится только адрес ячейки массива, к которой было обращение (и не важно изменится ли ее содержимое во время прерывания или нет). Правильно я думаю?
А ПДП пишет в отдельный массив, к которому идет обращение только при выключенном прерывании конца передачи ПДП.
А как правильно выключать ПДП в момент обработки результата? Так как я написал выше? или
DMA_Cmd(DMA2_Stream0, DISABLE); ?
Последний раз редактировалось swat24; 19.09.2013 в 17:12.
|
|
|
|
19.09.2013, 20:15
|
|
Частый гость
Регистрация: 14.06.2006
Сообщений: 40
Сказал спасибо: 20
Сказали Спасибо 10 раз(а) в 5 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от swat24
|
Но я спрашивал немного про другое. К моему массиву с результатом может обращаться только или подпрограмма по просчету средних значений, или из главного цикла (и обращение к определенным элементам массива в разный момент времени). Т.е. не будет ли проблемой при чтении массива в главном цикле вызванное прерывание ПДП с запуском подпрограммы подсчета средних значений?
|
Ну я же написал как. В функции усреднения, которая дергается из прерывания, сбрасывай флаг. А в главном цикле сначала взведи флаг, потом читай массив и потом проверь флаг. Если он сброшен, значит пока читали массив, сработало прерывание и массив возможно считан неправильно. Тогда опять взводи флаг и повторно перечитай массив.
|
|
|
|
19.09.2013, 20:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
То есть ДМА пишет в массив1, прерывание читает массив1 и складывает усредненные результаты в массив2, основной цикл читает массив2? Никаких аппаратных проблем, возможны только программные - если усредненные результаты одного преобразования допустим в районе 40...50, а второго - 70...80, то после случайного прерывания "усредненные" данные резко изменятся с 45 на 75... Поэтому лучше работать по флагам, как рекомендует sslobodyan
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:23.
|
|