К1921ВК01Т (ARM Cortex-M4F)

32-разрядные микроконтроллеры разработки ОАО "НИИЭТ"

Модераторы: pip, _sva_

bahoo08
Сообщения: 14
Зарегистрирован: 10 сен 2018, 14:15
Предприятие: .

Re: К1921ВК01Т (ARM Cortex-M4F)

Сообщение bahoo08 » 09 ноя 2018, 13:46

Добрый день. Решил поиграться с библиотекой IQMath. Решил сравнить что быстрее. Получил очень сильный разброс по скорости. Не знаю, так и должно быть. Сделал вот такой вот тэстовый код.

Код: Выделить всё

void TIM0_IRQHandler(void){ // частота прерывания таймера 1к√ц
	
		if(check){
		time1 = NT_TIMER0->VALUE;
		for(i = 0; i < 20; i++){
			sinAngle = sin(angle);
		}
		time1 -= NT_TIMER0->VALUE;
		}else{
		time2 = NT_TIMER0->VALUE;
		for(i = 0; i < 20; i++){
			iqSinAngle = _IQsin(iqAngle);
		}
		time2 -= NT_TIMER0->VALUE;
	}
		
	if(check){
		check = 0;
	}else{
		check = 1;
	}

	NT_TIMER0->INTSTATUS_INTCLEAR_bit.INT = 1;
}
Прерывание таймера каждую секунду. Получил длительность первого timer1 = 123155, для второго timer2 = 1107. Это получил при оптимизации 02. Отличия меня очень удивили.

Аватара пользователя
Лашкевич
Сообщения: 130
Зарегистрирован: 13 май 2015, 13:10
Предприятие: ООО "НПФ Вектор"
Откуда: Москва
Contact:

Re: К1921ВК01Т (ARM Cortex-M4F)

Сообщение Лашкевич » 09 ноя 2018, 14:32

Такого не должно быть. Что-то не так. Посмотрите вот эту презентацию и поменяйте код на соответствие её рекомендациям, проверьте дизассемблер, что там происходит.
С уважением,
Лашкевич Максим.
Инженер-программист ООО "НПФ Вектор", Москва.
http://motorcontrol.ru/

Disona
Сообщения: 20
Зарегистрирован: 06 дек 2016, 11:18
Предприятие: НПФ Вектор
Откуда: Москва
Contact:

Re: К1921ВК01Т (ARM Cortex-M4F)

Сообщение Disona » 09 ноя 2018, 14:38

Сделал вот такой вот тэстовый код.
А проект собирается под плавающую точку? Не может быть такого, что проект билдится с установками под фиксированную точку и используется соответствующая библиотека математических функций? Тогда "sin" будет расчитываться инструкциями под фиксированную точку и занимать много времени.
С уважением, Дмитрий Шпак
ООО "НПФ Вектор"

Disona
Сообщения: 20
Зарегистрирован: 06 дек 2016, 11:18
Предприятие: НПФ Вектор
Откуда: Москва
Contact:

Re: К1921ВК01Т (ARM Cortex-M4F)

Сообщение Disona » 09 ноя 2018, 14:45

Или ещё вариант - функция "sin" принимает и возвращает переменные типа "float" или "double"? FPU здесь умеет работать только в single precision переменными, то есть "float". Для работы с "double" опять же вызываются библиотечные функции. Попробуйте вызывать функцию "sinf" вместо "sin".
С уважением, Дмитрий Шпак
ООО "НПФ Вектор"

bahoo08
Сообщения: 14
Зарегистрирован: 10 сен 2018, 14:15
Предприятие: .

Re: К1921ВК01Т (ARM Cortex-M4F)

Сообщение bahoo08 » 11 ноя 2018, 21:20

Disona писал(а):
09 ноя 2018, 14:45
Или ещё вариант - функция "sin" принимает и возвращает переменные типа "float" или "double"? FPU здесь умеет работать только в single precision переменными, то есть "float". Для работы с "double" опять же вызываются библиотечные функции. Попробуйте вызывать функцию "sinf" вместо "sin".
Вы были правы, я отправлял в sin float переменную, хотя sin и должен принимать double. Смена функции sin на sinf дала значительно менее шокирующие цифры) отличие в ~3 раза по скорости получилось. Спасибо.

Ответить

Вернуться в «32-разрядные микроконтроллеры на ядре ARM Cortex»

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

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