Vector IDE
Re: Vector IDE
нет, TimerPeriod показывает значение,которое присвоено при инициализации
- Лашкевич Максим
- Сообщения: 342
- Зарегистрирован: 30 дек 2015, 10:38
Re: Vector IDE
Попробуйте сделать переменные timer и LEDs глобальными и волатайл.
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Re: Vector IDE
пошло.
получается, что отслеживать можно только глобальные переменные?
получается, что отслеживать можно только глобальные переменные?
- Лашкевич Максим
- Сообщения: 342
- Зарегистрирован: 30 дек 2015, 10:38
Re: Vector IDE
При включенной оптимизации (проверьте её в Properties -> C/C++ Build -> Setting -> Optimization) компилятор имеет право как угодно распоряжаться локальными переменными, в том числе выкинуть их совсем или поменять ход вычислений так, как это будет быстрее работать. Общая рекомендация - при включенной оптимизации не верить значениям не-volatile переменных.
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Re: Vector IDE
и программа почему то стала выполняться гораздо медленнее ))
я сужу по скорости перемигивания светодиодов.
Еще до отключения оптимизации, но сделав переменные глобальными
я сужу по скорости перемигивания светодиодов.
Еще до отключения оптимизации, но сделав переменные глобальными
Re: Vector IDE
Здравствуйте, Максим.
В продолжение вчерашней темы. Проверил, действительно, при объявлении переменных с квалификатором volatile программа выполняется примерно в 10 раз медленнее (сужу по миганию светодиодов). Причем состояние вкл/выкл оптимизации на быстродействие не влияет.
Не подскажете в чем тут дело?
В продолжение вчерашней темы. Проверил, действительно, при объявлении переменных с квалификатором volatile программа выполняется примерно в 10 раз медленнее (сужу по миганию светодиодов). Причем состояние вкл/выкл оптимизации на быстродействие не влияет.
Не подскажете в чем тут дело?
- Лашкевич Максим
- Сообщения: 342
- Зарегистрирован: 30 дек 2015, 10:38
Re: Vector IDE
Видимо, создав переменные volatile, вы обязываете компилятор действительно считывать и записывать значения из оперативной памяти. Без этого, я думаю, компилятор соптимизировал программу так, что держал значение переменной timer регистре процессора, тем самым экономя такты при его инкрементировании в цикле. Откройте окно дизассемблера, окно регистров процессора и попробуйте разобраться сами, как именно работают и чем отличаются оба варианта - это полезно для более глубокого понимания проиходящего.
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Re: Vector IDE
Максим, добрый день.
Хотел бы уточнить информацию по прерываниям.
В доступной документации ничего не сказано о группировке прерываний по приоритетам. Сказано только, что их, приоритетов, 16.
Пользовался иностранной документацией на ядро Cortex-M4
В вашем примере с таймером выполняется настройка группировки прерываний, где в область PRIGROUP регистра AIRCR записывается число 4 с предкомментариями, что будет использовано 8 групп и 2 подгруппы. Вроде все так. Но далее я вижу следующее
NVIC_SetPriorityGrouping(4); //В данном процессоре под группы/подгруппы отведено только 3 бита, т.е. будет 8 групп и 0 подгрупп
Это ошибка или я что-то не понял?
Хотел бы уточнить информацию по прерываниям.
В доступной документации ничего не сказано о группировке прерываний по приоритетам. Сказано только, что их, приоритетов, 16.
Пользовался иностранной документацией на ядро Cortex-M4
В вашем примере с таймером выполняется настройка группировки прерываний, где в область PRIGROUP регистра AIRCR записывается число 4 с предкомментариями, что будет использовано 8 групп и 2 подгруппы. Вроде все так. Но далее я вижу следующее
NVIC_SetPriorityGrouping(4); //В данном процессоре под группы/подгруппы отведено только 3 бита, т.е. будет 8 групп и 0 подгрупп
Это ошибка или я что-то не понял?
- Лашкевич Максим
- Сообщения: 342
- Зарегистрирован: 30 дек 2015, 10:38
Re: Vector IDE
Вот здесь было бурное обсуждение этого вопроса http://forum.niiet.ru/viewtopic.php?f=3 ... 1%8B#p3498
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.
Re: Vector IDE
Здравствуйте, Максим.
Вопрос по инициализации PLL. Разбирал ваши примеры.
//Настройка частоты тактирования
//выходная частота равна FOUT = (FIN * NF) / ( NR * NO), где FIN - частота кварца
NT_COMMON_REG->PLL_OD = 2; //Выходной делитель PLL NO=2
NT_COMMON_REG->PLL_NR = 1; //Опорный делитель PLL NR=R_PLL+2=3
#ifdef QUARTZ_10MHZ
NT_COMMON_REG->PLL_NF = 58; //Делитель обратной связи PLL NF=F_PLL+2=60
#endif
#ifdef QUARTZ_12MHZ
NT_COMMON_REG->PLL_NF = 48; //Делитель обратной связи PLL NF=F_PLL+2=50
#endif
//FOUT = 12*50/(3*2) = 100 МГц, вроде сходится
do
скажите, а условие, приведенное в ТО, а именно
- 200 МГц < Fvco < 500 МГц;
необходимо соблюдать?
При ваших коэф. Fvco =200Мгц.
Благодарю
Вопрос по инициализации PLL. Разбирал ваши примеры.
//Настройка частоты тактирования
//выходная частота равна FOUT = (FIN * NF) / ( NR * NO), где FIN - частота кварца
NT_COMMON_REG->PLL_OD = 2; //Выходной делитель PLL NO=2
NT_COMMON_REG->PLL_NR = 1; //Опорный делитель PLL NR=R_PLL+2=3
#ifdef QUARTZ_10MHZ
NT_COMMON_REG->PLL_NF = 58; //Делитель обратной связи PLL NF=F_PLL+2=60
#endif
#ifdef QUARTZ_12MHZ
NT_COMMON_REG->PLL_NF = 48; //Делитель обратной связи PLL NF=F_PLL+2=50
#endif
//FOUT = 12*50/(3*2) = 100 МГц, вроде сходится
do
скажите, а условие, приведенное в ТО, а именно
- 200 МГц < Fvco < 500 МГц;
необходимо соблюдать?
При ваших коэф. Fvco =200Мгц.
Благодарю