Vector IDE

Илья!
Сообщения: 114
Зарегистрирован: 09 ноя 2018, 16:55

Re: Vector IDE

Сообщение Илья! » 19 ноя 2018, 17:36

нет, TimerPeriod показывает значение,которое присвоено при инициализации
Изображение

Аватара пользователя
Лашкевич Максим
Сообщения: 342
Зарегистрирован: 30 дек 2015, 10:38

Re: Vector IDE

Сообщение Лашкевич Максим » 19 ноя 2018, 17:37

Попробуйте сделать переменные timer и LEDs глобальными и волатайл.
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.

Илья!
Сообщения: 114
Зарегистрирован: 09 ноя 2018, 16:55

Re: Vector IDE

Сообщение Илья! » 19 ноя 2018, 17:43

пошло.
получается, что отслеживать можно только глобальные переменные?

Аватара пользователя
Лашкевич Максим
Сообщения: 342
Зарегистрирован: 30 дек 2015, 10:38

Re: Vector IDE

Сообщение Лашкевич Максим » 19 ноя 2018, 17:48

При включенной оптимизации (проверьте её в Properties -> C/C++ Build -> Setting -> Optimization) компилятор имеет право как угодно распоряжаться локальными переменными, в том числе выкинуть их совсем или поменять ход вычислений так, как это будет быстрее работать. Общая рекомендация - при включенной оптимизации не верить значениям не-volatile переменных.
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.

Илья!
Сообщения: 114
Зарегистрирован: 09 ноя 2018, 16:55

Re: Vector IDE

Сообщение Илья! » 19 ноя 2018, 17:50

и программа почему то стала выполняться гораздо медленнее ))
я сужу по скорости перемигивания светодиодов.
Еще до отключения оптимизации, но сделав переменные глобальными

Илья!
Сообщения: 114
Зарегистрирован: 09 ноя 2018, 16:55

Re: Vector IDE

Сообщение Илья! » 20 ноя 2018, 15:19

Здравствуйте, Максим.
В продолжение вчерашней темы. Проверил, действительно, при объявлении переменных с квалификатором volatile программа выполняется примерно в 10 раз медленнее (сужу по миганию светодиодов). Причем состояние вкл/выкл оптимизации на быстродействие не влияет.
Не подскажете в чем тут дело?

Аватара пользователя
Лашкевич Максим
Сообщения: 342
Зарегистрирован: 30 дек 2015, 10:38

Re: Vector IDE

Сообщение Лашкевич Максим » 20 ноя 2018, 16:03

Видимо, создав переменные volatile, вы обязываете компилятор действительно считывать и записывать значения из оперативной памяти. Без этого, я думаю, компилятор соптимизировал программу так, что держал значение переменной timer регистре процессора, тем самым экономя такты при его инкрементировании в цикле. Откройте окно дизассемблера, окно регистров процессора и попробуйте разобраться сами, как именно работают и чем отличаются оба варианта - это полезно для более глубокого понимания проиходящего.
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.

Илья!
Сообщения: 114
Зарегистрирован: 09 ноя 2018, 16:55

Re: Vector IDE

Сообщение Илья! » 27 ноя 2018, 14:57

Максим, добрый день.
Хотел бы уточнить информацию по прерываниям.
В доступной документации ничего не сказано о группировке прерываний по приоритетам. Сказано только, что их, приоритетов, 16.
Пользовался иностранной документацией на ядро Cortex-M4
В вашем примере с таймером выполняется настройка группировки прерываний, где в область PRIGROUP регистра AIRCR записывается число 4 с предкомментариями, что будет использовано 8 групп и 2 подгруппы. Вроде все так. Но далее я вижу следующее

NVIC_SetPriorityGrouping(4); //В данном процессоре под группы/подгруппы отведено только 3 бита, т.е. будет 8 групп и 0 подгрупп

Это ошибка или я что-то не понял?

Аватара пользователя
Лашкевич Максим
Сообщения: 342
Зарегистрирован: 30 дек 2015, 10:38

Re: Vector IDE

Сообщение Лашкевич Максим » 27 ноя 2018, 14:59

Вот здесь было бурное обсуждение этого вопроса http://forum.niiet.ru/viewtopic.php?f=3 ... 1%8B#p3498
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.

Илья!
Сообщения: 114
Зарегистрирован: 09 ноя 2018, 16:55

Re: Vector IDE

Сообщение Илья! » 05 дек 2018, 00:57

Здравствуйте, Максим.
Вопрос по инициализации 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Мгц.

Благодарю

Ответить