Например TDA7294

Форум РадиоКот • Просмотр темы - Достучаться до регистров FPU в Cortex M4F
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 18, 2024 12:56:27

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


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Достучаться до регистров FPU в Cortex M4F
СообщениеДобавлено: Вт сен 25, 2012 13:48:09 
Вымогатель припоя

Карма: 4
Рейтинг сообщений: 15
Зарегистрирован: Вт июн 29, 2010 12:31:49
Сообщений: 663
Рейтинг сообщения: 0
В Keil можно вытаскивать и заносить данные в регистры контроллера, предварительно огласив последние:

Код:
register long R0 __asm("r0");
register long R1 __asm("r1");


Однако с FPU-регистрами (S0 и далее) такая тема не прокатывает. Может, кто-нибудь знает, как их правильно огласить?
Или компилятор вообще не знает про них?

Спасибо.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Достучаться до регистров FPU в Cortex M4F
СообщениеДобавлено: Ср сен 26, 2012 17:29:36 
Вымогатель припоя
Аватар пользователя

Карма: 7
Рейтинг сообщений: 56
Зарегистрирован: Вт авг 28, 2012 22:21:33
Сообщений: 535
Рейтинг сообщения: 0
А может тогда уж на ассемблере эту часть кода сделать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Достучаться до регистров FPU в Cortex M4F
СообщениеДобавлено: Ср сен 26, 2012 18:18:11 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 0
А компилятор знает, что ему надо код для Cortex M4F делать? Может компилер отдельно настраивается на Cortex M4, а поддержка FPU включается отдельным крыжиком где-нибудь в настройках.

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Достучаться до регистров FPU в Cortex M4F
СообщениеДобавлено: Ср сен 26, 2012 19:24:43 
Вымогатель припоя

Карма: 4
Рейтинг сообщений: 15
Зарегистрирован: Вт июн 29, 2010 12:31:49
Сообщений: 663
Рейтинг сообщения: 0
Знает. При любых сишных операциях с float в дебагере видно, что задействуются регистры FPU. Ну и в настройках компилера есть галочка "Use FPU".
Заделать на асме пробовал, только компилер ругается на слово return в асм-коде. Асм-вставки внутри сишных функций не поддерживаются, т.к. генерится thumb-код. Иначе говоря, асм-функции могут быть оформлены лишь как самостоятельные. Подсунутая после гуглежа #pragma arm для попытки задействовать вставки компилеру тоже не нравится.
Галочку "generate thumb code" в настройках убирал, результата нет.

P.S. Вылезла такая ошибка, что архитектура не поддерживает arm-инструкции, только thumb.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Достучаться до регистров FPU в Cortex M4F
СообщениеДобавлено: Ср сен 26, 2012 20:19:27 
Вымогатель припоя
Аватар пользователя

Карма: 7
Рейтинг сообщений: 56
Зарегистрирован: Вт авг 28, 2012 22:21:33
Сообщений: 535
Рейтинг сообщения: 0
TripleKill писал(а):
компилер ругается на слово return в асм-коде


Стоп. У тебя не получилось сделать асм-функцию вызываемую из си-кода? Или такое решение тебе в принципе не подходит и тебе нужны всякие инлайн асмы, прагмы и т.п.?

Если первое, то я не так давно делал для Cortex M4 асм-функцию для вызова из си, вычисляющую синус (делал как-раз в Keil). Могу дать исходники.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Достучаться до регистров FPU в Cortex M4F
СообщениеДобавлено: Ср сен 26, 2012 20:53:29 
Вымогатель припоя

Карма: 4
Рейтинг сообщений: 15
Зарегистрирован: Вт июн 29, 2010 12:31:49
Сообщений: 663
Рейтинг сообщения: 0
Сделать вызываемую асм-функцию получилось. Не получилось сделать асм-функцию, возвращающую значение.
Может, она по умолчанию какой-то регистр выплёвывает, если её прописать не void, а, например, int?
Т.е., возвращаясь к теме, как заставить асм-функцию с возвращаемым типом float выплюнуть содержимое S0/S1?
На исходники бы взглянул)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Достучаться до регистров FPU в Cortex M4F
СообщениеДобавлено: Ср сен 26, 2012 21:33:00 
Вымогатель припоя
Аватар пользователя

Карма: 7
Рейтинг сообщений: 56
Зарегистрирован: Вт авг 28, 2012 22:21:33
Сообщений: 535
Рейтинг сообщения: 0
У меня даже Keil'овский проект остался. По идее должен работать. http://ge.tt/9lInvQO/v/0?c

Плюс, можешь почитать брошюрку Procedure Call Standard for the ARM® Architecture. Там подробно описано через какие регистры передаются параметры, через какие возвращаются, какие можно изменять, какие нужно сохранять и т.д. http://infocenter.arm.com/help/topic/co ... _aapcs.pdf

Еще можешь написать какую-нибудь простую функцию на Си, которая, например, получает float, прибавляет единицу, и возвращает float. А потом посмотреть в какой набор команд она скомпилировалась, и от него уже плясать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Достучаться до регистров FPU в Cortex M4F
СообщениеДобавлено: Чт сен 27, 2012 07:10:27 
Вымогатель припоя

Карма: 4
Рейтинг сообщений: 15
Зарегистрирован: Вт июн 29, 2010 12:31:49
Сообщений: 663
Рейтинг сообщения: 0
Спасибо. Кажется, дело сдвинулось с мёртвой точки. Возвращается то, что к концу процедуры находится в R0/S0.
Интересно, а можно ли заставить функцию вернуть множественные значения, передавая ей выходные переменные как параметры?
Например, как-нибудь так:

Код:
MyProc(&In1, &In2, &Out1, &Out2);


In - входные переменные, Out - выходные (инициализированы в главном коде, но модифицируются процедурой).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Достучаться до регистров FPU в Cortex M4F
СообщениеДобавлено: Чт сен 27, 2012 07:43:53 
Вымогатель припоя
Аватар пользователя

Карма: 7
Рейтинг сообщений: 56
Зарегистрирован: Вт авг 28, 2012 22:21:33
Сообщений: 535
Рейтинг сообщения: 0
Да, конечно, можно. Сделай как я говорил - напиши простую Си функцию с требуемым прототипом. Пускай она выполняет какие-нибудь элементарные действия с переданными ей параметрам, например, просто копирует входные в выходные. Скомпилируй и посмотри ассемблер - увидишь, как нужно обращаться с параметрами, передаваемыми по указателю. Сам то я такие ассемблерные функции не использовал, поэтому, как ассемблер работает с адресами, я сказать не могу, нужно смотреть.

После того, как разберешся, можешь поиграться с настройками оптимизации, ибо без оной ассемблер генерирует хоть и понятный, прямолинейный, но не самый оптимальный код.

Если нет необходимости сохранять входные параметры после вызова функции, можно передавать и получать данные через одни и те же переменные. Код ассемблера должен выглядеть проще, все же меньше параметров.
Код:
MyProc(&InOut1, &InOut2);


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Достучаться до регистров FPU в Cortex M4F
СообщениеДобавлено: Чт сен 27, 2012 08:03:13 
Вымогатель припоя

Карма: 4
Рейтинг сообщений: 15
Зарегистрирован: Вт июн 29, 2010 12:31:49
Сообщений: 663
Рейтинг сообщения: 0
Ясно, спасибо, попробую.
Кстати, пока гуглил, наткнулся на неплохой имхо туториал по основам С++: http://www.cplusplus.com/doc/tutorial/
Хоть и на инглише, зато всё подробно, с картинками)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Достучаться до регистров FPU в Cortex M4F
СообщениеДобавлено: Чт сен 27, 2012 08:21:34 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13492
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Так это плюсы, зачем они тут?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Достучаться до регистров FPU в Cortex M4F
СообщениеДобавлено: Чт сен 27, 2012 08:54:07 
Вымогатель припоя

Карма: 4
Рейтинг сообщений: 15
Зарегистрирован: Вт июн 29, 2010 12:31:49
Сообщений: 663
Рейтинг сообщения: 0
Нечто общее между С и С++ всё равно есть)


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

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


Кто сейчас на форуме

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


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

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


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y