К1921ВК01Т (арм Cortex-M4F)

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

Модераторы: ea, dav, bkolbov, Alis, pip, _sva_

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

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение bahoo08 »

Добрый день. Решил поиграться с библиотекой 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. Отличия меня очень удивили.
Аватара пользователя
Лашкевич
Сообщения: 373
Зарегистрирован: 13 май 2015, 13:10
Предприятие: ООО "НПФ Вектор"
Откуда: Москва
Контактная информация:

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение Лашкевич »

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

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение Disona »

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

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение Disona »

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

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение bahoo08 »

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

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение petrovitch »

В документации практически не описан способ настройки каналов А/В модуля ЩИМ на комплементарную работу.
Мёртвое время есть, а комплементарной работы как бы и нет, хотя как-то упоминается.

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

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение Лашкевич »

В документации практически не описан способ настройки каналов А/В модуля ЩИМ на комплементарную работу.
Мёртвое время есть, а комплементарной работы как бы и нет, хотя как-то упоминается.
Посмотрите не рисунок 14.12. Там, на структуре, видно несколько способов, как это можно сконструировать.
Проще всего делать так - настроить в обработчике событий на работу только PWMA, в модуле мертвого времени его выбрать как источник сигнала полем MODE, а дальше включить инверсию в POLSEL у одного из каналов (в зависимости от вашего железа).
С уважением,
Лашкевич Максим.
Инженер-программист ООО "НПФ Вектор", Москва.
http://motorcontrol.ru/
petrovitch
Сообщения: 107
Зарегистрирован: 15 фев 2017, 19:07

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение petrovitch »

Спасибо! Разобрался, когда прочитал код ExamplePWM и документацию.

Ещё интересный момент, касающийся программы ExamplePWM, где копируются функции секции fastcode в ОЗУ.
Не могу понять, как понять какие именно функции попадают в fastcode? Как управлять этим процессом.

Можно ли вообще избежать разбирательств c файлами startup_MCP_gcc.S, ...flash.ld и ссылок на них в своём коде?
Аватара пользователя
Лашкевич
Сообщения: 373
Зарегистрирован: 13 май 2015, 13:10
Предприятие: ООО "НПФ Вектор"
Откуда: Москва
Контактная информация:

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение Лашкевич »

Секция fastcode в ОЗУ это атавизм, когда мы пытались ускорить работу программы переносом кода в оперативку. На данной архитектуре в силу топологии шин данных это менее эффективно, чем выполнять код из флеша. Поэтому лучше просто забить - пользуйтесь готовыми стартам файлами и файлом линковки, в 99% случаев туда лезть не придется.
С уважением,
Лашкевич Максим.
Инженер-программист ООО "НПФ Вектор", Москва.
http://motorcontrol.ru/
petrovitch
Сообщения: 107
Зарегистрирован: 15 фев 2017, 19:07

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение petrovitch »

Снова каким-то невероятным образом слетел openocd Debug в VectorIDE! Переустановка всего пакета с переустановкой драйверов ничего не даёт! Может ли помочь каким-то образом обновление openocd Debug из архива niietcm4-k1921vkx_sdk-c1340efb3ca7 ? Что в таком случае нужно сделать?

Пробовал работать в IAR, но JLink выдаёт такое сообщение:
Вложения
сообщение Jlink.png
сообщение Jlink.png (46.84 КБ) 3131 просмотр
Ответить

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