Easyelectronics.ru

Электроника для всех
Текущее время: 24 окт 2020, 20:41

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Останавливается SysTick
СообщениеДобавлено: 19 июл 2012, 04:12 
Старожил

Зарегистрирован: 05 фев 2011, 15:20
Сообщения: 284
Откуда: Хабаровск
Не читайте всякую писанину. Все есть в стандартах на язык.

http://www.open-std.org/jtc1/sc22/wg14/ ... /n1124.pdf

Цитата:
6.2.4 Storage durations of objects
1 An object has a storage duration that determines its lifetime. There are three storage
durations: static, automatic, and allocated. Allocated storage is described in 7.20.3.
2 The lifetime of an object is the portion of program execution during which storage is
guaranteed to be reserved for it. An object exists, has a constant address, and retains
its last-stored value throughout its lifetime. If an object is referred to outside of its
lifetime, the behavior is undefined. The value of a pointer becomes indeterminate when
the object it points to reaches the end of its lifetime.
3 An object whose identifier is declared with external or internal linkage, or with the
storage-class specifier static has static storage duration. Its lifetime is the entire
execution of the program and its stored value is initialized only once, prior to program
startup.
4 An object whose identifier is declared with no linkage and without the storage-class
specifier static has automatic storage duration.
5 For such an object that does not have a variable length array type, its lifetime extends
from entry into the block with which it is associated until execution of that block ends in
any way. (Entering an enclosed block or calling a function suspends, but does not end,
execution of the current block.) If the block is entered recursively, a new instance of the
object is created each time. The initial value of the object is indeterminate. If an
initialization is specified for the object, it is performed each time the declaration is
reached in the execution of the block
; otherwise, the value becomes indeterminate each
time the declaration is reached.
6 For such an object that does have a variable length array type, its lifetime extends from
the declaration of the object until execution of the program leaves the scope of the
declaration. If the scope is entered recursively, a new instance of the object is created
each time. The initial value of the object is indeterminate.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Останавливается SysTick
СообщениеДобавлено: 19 июл 2012, 13:38 
Только пришел

Зарегистрирован: 23 апр 2012, 17:19
Сообщения: 27
080007f0 <delay_microseconds>:
80007f0: b580 push {r7, lr}
80007f2: b084 sub sp, #16
80007f4: af00 add r7, sp, #0
80007f6: 4603 mov r3, r0
80007f8: 80fb strh r3, [r7, #6]
80007fa: 4b1a ldr r3, [pc, #104] ; (8000864 <delay_microseconds+0x74>)
80007fc: 4a19 ldr r2, [pc, #100] ; (8000864 <delay_microseconds+0x74>)
80007fe: 6852 ldr r2, [r2, #4]
8000800: 609a str r2, [r3, #8]
8000802: 4b19 ldr r3, [pc, #100] ; (8000868 <delay_microseconds+0x78>)
8000804: 681b ldr r3, [r3, #0]
8000806: 60fb str r3, [r7, #12]
8000808: e000 b.n 800080c <delay_microseconds+0x1c>
800080a: bf00 nop
800080c: 4b16 ldr r3, [pc, #88] ; (8000868 <delay_microseconds+0x78>)
800080e: 681b ldr r3, [r3, #0]
8000810: 4618 mov r0, r3
8000812: 68f9 ldr r1, [r7, #12]
8000814: f7ff ffd4 bl 80007c0 <uint32_time_diff>
8000818: 60b8 str r0, [r7, #8]
800081a: 88fa ldrh r2, [r7, #6]
800081c: 4b13 ldr r3, [pc, #76] ; (800086c <delay_microseconds+0x7c>)
800081e: fba3 0302 umull r0, r3, r3, r2
8000822: ea4f 1393 mov.w r3, r3, lsr #6
8000826: b29b uxth r3, r3
8000828: 461a mov r2, r3
800082a: 88fb ldrh r3, [r7, #6]
800082c: 490f ldr r1, [pc, #60] ; (800086c <delay_microseconds+0x7c>)
800082e: fba1 0103 umull r0, r1, r1, r3
8000832: ea4f 1191 mov.w r1, r1, lsr #6
8000836: f44f 707a mov.w r0, #1000 ; 0x3e8
800083a: fb00 f101 mul.w r1, r0, r1
800083e: 1a5b subs r3, r3, r1
8000840: b29b uxth r3, r3
8000842: 2b00 cmp r3, #0
8000844: d002 beq.n 800084c <delay_microseconds+0x5c>
8000846: f04f 0301 mov.w r3, #1
800084a: e001 b.n 8000850 <delay_microseconds+0x60>
800084c: f04f 0300 mov.w r3, #0
8000850: 18d2 adds r2, r2, r3
8000852: 68bb ldr r3, [r7, #8]
8000854: 429a cmp r2, r3
8000856: d8d8 bhi.n 800080a <delay_microseconds+0x1a>
8000858: bf00 nop
800085a: f107 0710 add.w r7, r7, #16
800085e: 46bd mov sp, r7
8000860: bd80 pop {r7, pc}
8000862: bf00 nop
8000864: e000e010 .word 0xe000e010
8000868: 20000020 .word 0x20000020
800086c: 10624dd3 .word 0x10624dd3


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Останавливается SysTick
СообщениеДобавлено: 19 июл 2012, 19:23 
Только пришел

Зарегистрирован: 23 апр 2012, 17:19
Сообщения: 27
В общем.... когда что-то не выходит - надо отложить в сторонку и вернуться через какое то время))

Код инициализации выглядет вот так:

int main(void)
init_rcc();
SystemCoreClockUpdate();
SysTick_Config(SystemCoreClock / 1000);
enablePeriph();
init_ports();
init_timers();
init_exti();
init_nvic();

Приоритет систику задавался в SysTick_Config() и там же систик запускался. Приоритет в этой ф-ции задается наименьший. Потом я его переоределял
в init_nvic(). Но, видимо, при работающем тймере это уже не катит)) Подрихтовал на предмер приоритета SysTick_Config() - и все поехало))))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Останавливается SysTick
СообщениеДобавлено: 19 июл 2012, 19:58 
Старожил

Зарегистрирован: 13 фев 2011, 01:25
Сообщения: 621
Откуда: Севастополь
Дааааа - телепаты просто отдыхают :) . Куда уж нам догадаться что глюк гдето в процедуре - код которой никто не показывает :) .
Главное что все поехало. Рекомендую для себя завести тетрадь, в которую вот такие приколы документировать. Проверено на себе - очень часто помогают такие подсказочки в будущем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Останавливается SysTick
СообщениеДобавлено: 19 июл 2012, 20:33 
Только пришел

Зарегистрирован: 23 апр 2012, 17:19
Сообщения: 27
дык SysTick_Config() - процедура CMSIS-а вроде... несекретная) а то что я переинициализирую nvic после ее вызова, я сам писал на страницу выше))))

Зациклились чота просто на объявлении этих переменных....

Короче - всем спасибо)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Останавливается SysTick
СообщениеДобавлено: 20 июл 2012, 14:41 
Старожил

Зарегистрирован: 13 фев 2011, 01:25
Сообщения: 621
Откуда: Севастополь
Просто когда видиш полный код, а не кусками процедуры - соображаетсо быстрее. А если видиш обрезки кода - чисто психологически ожидаеш что проблема где-то там, где не видиш код. И глаз не цепляется даже за явные ошибки.

ПыСы А к иниту были вопросы потому как часто сталкивался с чудаковатой оптимизацией ИАРовского компилятора. Пару проектов пришлось вообще отключать оптимизацию кода ибо даже volatile не спасал. Подробностей уже не помню( хотя может просто была глючная версия компилятора - они частенько раньше горы багов правили).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Останавливается SysTick
СообщениеДобавлено: 10 окт 2012, 21:11 
Здравствуйте!

Зарегистрирован: 10 окт 2012, 21:07
Сообщения: 2
Здравствуйте!
Запускал проект с таймером SysTick. Пользуюсь IAR EWARM 6.4, скачал откуда-то…
Создавал свой проект, потом проект «SysTick_Example» из STM32F4xx_DSP_StdPeriph_Lib_V1.0.1,
потом взял проект из статьи (http://chipspace.ru/stm32-systick/).
Всё компилируется.
Отладку запускаю в симуляторе, но прерывание по этому таймеру не происходит.
Конкретно — не меняется значение счётчика CURRENT в SysTick current value register (STK_VAL).
В EWARM значение CURRENT смотрю в регистре NVIC > SYSTICKCVR > CURRENT.
Может прерывание и неприоритетное, но счётчик должен меняться?
Поставил IAR EWARM 6.3 — то же самое… «Простой» таймер однако…

// ------- почитал HELP EWARM
Засада оказывается в симуляторе: см. help тему "Simulating a simple interrupt"...
Чтобы запустить прерывание в симуляторе: выбрать через меню Simulator>Interrupt Setup,
потом добавить и настроить требуемое прерывание.
Значение счётчика CURRENT не меняется по-прежнему (всегда значение 0), но прерывание работает.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу Пред.  1, 2


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB