|
|
  |
Как сделать программную задержку на STM32, без использования таймеров |
|
|
|
Feb 16 2012, 05:55
|
Местный
  
Группа: Свой
Сообщений: 249
Регистрация: 2-05-06
Из: Россия, Поволжье
Пользователь №: 16 686

|
Цитата(ReAl @ Feb 15 2012, 21:02)  Очень жаль, что остальные счётчики все 8-битные. На оффтопике (LPC17xx) для счётчика циклов достаточно RIT, который остался в наследство от предыдущих LPC... Вот только в LPC177x его не оказалось  Хотя в LPC176x есть, для этих целей и пользую. Прошу прощения тоже за оффтоп.
|
|
|
|
|
Jun 28 2012, 07:42
|
Знающий
   
Группа: Участник
Сообщений: 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 }
|
|
|
|
|
Jun 28 2012, 11:54
|
Частый гость
 
Группа: Свой
Сообщений: 87
Регистрация: 9-12-10
Пользователь №: 61 511

|
Цитата(ukpyr @ Jun 28 2012, 12:01)  не понятно зачем пляски с бубном, выше приводились задержки на инлайн-асме - работают отлично Это прискорбно, но не все знают ASM. Ваши функции "из коробки" у меня не заработали. Возможно их надо подкорректировать самую малость, но как именно я не знаю((( Кроме того не очень приятно использовать функцию, если не понимаешь как она работает. Естественно это не ваша вина, что я не в состоянии переделать их под себя. Но отсюда и пляски с бубном.
Сообщение отредактировал Влад Р. - Jun 28 2012, 11:54
|
|
|
|
|
Jan 6 2013, 16:53
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600

|
Цитата(_Артём_ @ Jan 6 2013, 20:20)  А отладчик использует? С чего вы взяли? Понятия не имею, использует или нет. Логика подсказывает, что вполне может использовать для профилирования чего-либо. Да и кроме логики, есть основания думать, что использует.
|
|
|
|
|
Jan 6 2013, 20:50
|
Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jan 7 2013, 02:02
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672

|
Цитата(Porty @ Feb 10 2012, 08:11)  используй специально для этого предназначенное ключевое слово "volatile", оно говорит компилятору чтоб не оптимизировал значение и работу с этой переменной или кодом. Цитата WikipediaIn 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" запрещает компилятору надеятся, что значение переменной ему известно и требует его обновления при каждом обращении.
--------------------
|
|
|
|
|
Jan 7 2013, 10:31
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(_Артём_ @ Jan 7 2013, 11:20)  Не только для чтения. Писать его тоже можно. Можно. Я написал "по сути для чтения". То есть, программа профилирования может, конечно, каждый раз сбрасывать его перед измерением. Однако кто профилирование пишет, тоже не дурак, чтобы делать это instrusive, то есть с вмешательством в процесс. С большой вероятностью для измерения времен используется разница между считаными значениями свободно бегущего счетчика, то есть, без его пересброса. Во всяком случае в моих программах пока никаких непоняток не было.
|
|
|
|
|
Jan 7 2013, 11:59
|
Местный
  
Группа: Участник
Сообщений: 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 есть???
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|