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

 
 
5 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Как сделать программную задержку на STM32, без использования таймеров
Altemir
сообщение Feb 16 2012, 05:55
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 249
Регистрация: 2-05-06
Из: Россия, Поволжье
Пользователь №: 16 686



Цитата(ReAl @ Feb 15 2012, 21:02) *
Очень жаль, что остальные счётчики все 8-битные.
На оффтопике (LPC17xx) для счётчика циклов достаточно RIT, который остался в наследство от предыдущих LPC...

Вот только в LPC177x его не оказалось sad.gif Хотя в LPC176x есть, для этих целей и пользую.
Прошу прощения тоже за оффтоп.
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Jun 28 2012, 07:42
Сообщение #17


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Счетчик надо проинициализировать (включить): - должен подкорректировать, т.к. признаком уже включенного таймера должен служить бит в SCB_DEMCR, а не в DWT_CONTROL - связано с работой под отладчиком.
Код

    #define    DWT_CYCCNT    *(volatile uint32_t *)0xE0001004
    #define    DWT_CONTROL   *(volatile uint32_t *)0xE0001000
    #define    SCB_DEMCR     *(volatile uint32_t *)0xE000EDFC

    if (!(SCB_DEMCR & 0x01000000))
    {
        SCB_DEMCR  |= 0x01000000;
        DWT_CYCCNT  = 0;
        DWT_CONTROL|= 1; // enable the counter
    }

Go to the top of the page
 
+Quote Post
ukpyr
сообщение Jun 28 2012, 09:01
Сообщение #18


Профессионал
*****

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



не понятно зачем пляски с бубном, выше приводились задержки на инлайн-асме - работают отлично
Go to the top of the page
 
+Quote Post
Влад Р.
сообщение Jun 28 2012, 11:54
Сообщение #19


Частый гость
**

Группа: Свой
Сообщений: 87
Регистрация: 9-12-10
Пользователь №: 61 511



Цитата(ukpyr @ Jun 28 2012, 12:01) *
не понятно зачем пляски с бубном, выше приводились задержки на инлайн-асме - работают отлично


Это прискорбно, но не все знают ASM. Ваши функции "из коробки" у меня не заработали. Возможно их надо подкорректировать самую малость, но как именно я не знаю((( Кроме того не очень приятно использовать функцию, если не понимаешь как она работает. Естественно это не ваша вина, что я не в состоянии переделать их под себя. Но отсюда и пляски с бубном.

Сообщение отредактировал Влад Р. - Jun 28 2012, 11:54
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 28 2012, 17:43
Сообщение #20


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(ukpyr @ Jun 28 2012, 15:01) *
не понятно зачем пляски с бубном, выше приводились задержки на инлайн-асме - работают отлично

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


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Tahoe
сообщение Jan 6 2013, 16:07
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



С виду все красиво, хотел воспользоваться вышеприведенным способом организации задержек через DWT. Но, как я понимаю, возможен конфликт с отладчиком, который использует ресурсы DWT?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jan 6 2013, 16:20
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Tahoe @ Jan 6 2013, 18:07) *
С виду все красиво, хотел воспользоваться вышеприведенным способом организации задержек через DWT. Но, как я понимаю, возможен конфликт с отладчиком, который использует ресурсы DWT?

А отладчик использует? С чего вы взяли?
Go to the top of the page
 
+Quote Post
Tahoe
сообщение Jan 6 2013, 16:53
Сообщение #23


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(_Артём_ @ Jan 6 2013, 20:20) *
А отладчик использует? С чего вы взяли?

Понятия не имею, использует или нет. Логика подсказывает, что вполне может использовать для профилирования чего-либо.

Да и кроме логики, есть основания думать, что использует.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jan 6 2013, 20:26
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Tahoe @ Jan 6 2013, 18:53) *
Логика подсказывает, что вполне может использовать для профилирования чего-либо.

Может для профилирования и используется отладчиком. Тогда конфликт будет.
Но вы используете это самое профилирование? Если нет, то думаю можно использовать DWT в своей программе. Я использовал, конфликтов не заметил. В работающим устройстве тем более откуда конфликтам взяться?

P.S. А что таймеров stm32 вам мало что ли?

Go to the top of the page
 
+Quote Post
Tahoe
сообщение Jan 6 2013, 20:50
Сообщение #25


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(_Артём_ @ Jan 7 2013, 00:26) *
Но вы используете это самое профилирование?

Напрямую - нет. Но не хотелось бы получить граблями по лбу на ровном месте. Когда какой-нить плагин в IAR станет криво работать, уйдет время на то, что бы вспомнить, что сам заложил эту мину.


Цитата(_Артём_ @ Jan 7 2013, 00:26) *
В работающим устройстве тем более откуда конфликтам взяться?

Так в работающем устройстве и отладчик отсутствует. Соотв. и проблемы нет.


Цитата(_Артём_ @ Jan 7 2013, 00:26) *
P.S. А что таймеров stm32 вам мало что ли?

Таймеров хватает, повёлся на это:
Цитата(KnightIgor @ Feb 11 2012, 15:38) *
присутствует во всех Cortex по стандарту ARM
Go to the top of the page
 
+Quote Post
pitt
сообщение Jan 7 2013, 02:02
Сообщение #26


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(Porty @ Feb 10 2012, 08:11) *
используй специально для этого предназначенное ключевое слово "volatile", оно говорит компилятору чтоб не оптимизировал значение и работу с этой переменной или кодом.

Цитата
Wikipedia
In computer programming, particularly in the C, C++, C#, and Java programming languages, a variable or object declared with the volatile keyword usually has special properties related to optimization and/or threading. Generally speaking, the volatile keyword is intended to prevent the compiler from applying any optimizations on the code that assume values of variables cannot change "on their own."

Никакого отношения к оптимизации. Ключевое слово "volatile" запрещает компилятору надеятся, что значение переменной ему известно и требует его обновления при каждом обращении.


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Jan 7 2013, 08:20
Сообщение #27


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(Tahoe @ Jan 6 2013, 21:50) *
Напрямую - нет. Но не хотелось бы получить граблями по лбу на ровном месте. Когда какой-нить плагин в IAR станет криво работать, уйдет время на то, что бы вспомнить, что сам заложил эту мину.

Этот счетчик является лишь частью узла отладки и по сути только для чтения. Он крутится по кругу с частотой ядра. Какие грабли, если его читать?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jan 7 2013, 10:20
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(KnightIgor @ Jan 7 2013, 10:20) *
Этот счетчик является лишь частью узла отладки и по сути только для чтения. Он крутится по кругу с частотой ядра. Какие грабли, если его читать?

Не только для чтения. Писать его тоже можно.
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Jan 7 2013, 10:31
Сообщение #29


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(_Артём_ @ Jan 7 2013, 11:20) *
Не только для чтения. Писать его тоже можно.

Можно. Я написал "по сути для чтения". То есть, программа профилирования может, конечно, каждый раз сбрасывать его перед измерением. Однако кто профилирование пишет, тоже не дурак, чтобы делать это instrusive, то есть с вмешательством в процесс. С большой вероятностью для измерения времен используется разница между считаными значениями свободно бегущего счетчика, то есть, без его пересброса. Во всяком случае в моих программах пока никаких непоняток не было.
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Jan 7 2013, 11:59
Сообщение #30


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(pitt @ Jan 7 2013, 06:02) *
Никакого отношения к оптимизации. Ключевое слово "volatile" запрещает компилятору надеятся, что значение переменной ему известно и требует его обновления при каждом обращении.

Угу... щазз...
А ещё есть code reordering...
Или будете доказывать, что и code reordering "Никакого отношения к оптимизации"???

Цитата(KnightIgor @ Feb 11 2012, 15:38) *
Посмотрите DWT счетчик (DWT_CYCCN, описано тут и здесь): присутствует во всех Cortex по стандарту ARM.

И в Cortex M0 есть???
Go to the top of the page
 
+Quote Post

5 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


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


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