Например TDA7294

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



Текущее время: Пн июл 22, 2019 12:21:14

Часовой пояс: UTC + 3 часа [ Летнее время ]


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



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

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

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


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

Спасибо.


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

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


Вернуться наверх
 
JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

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

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

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


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

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

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

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

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


Вернуться наверх
 
Плавкие предохранители LittelFuse. Грамотный подбор

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

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


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

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


Вернуться наверх
 
Немногим дороже дискретного решения: новое поколение импульсных стабилизаторов Mornsun

Практически во всех радиоэлектронных устройствах массово применяются линейные понижающие стабилизаторы напряжения типа КРЕН в корпусе TO220 (другое обозначение – 78хх) и им подобные для формирования основного напряжения питания схемы.
Данные стабилизаторы позволяют без особых затрат получить нужное для каскада или узла схемы напряжение, если устройство питается от внешнего источника с более высоким напряжением. Для этого требуются… Подробнее>>
Не в сети
 Заголовок сообщения: Re: Достучаться до регистров FPU в Cortex M4F
СообщениеДобавлено: Ср сен 26, 2012 21:53:29 
Вымогатель припоя

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


Вернуться наверх
 


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

Карма: 7
Рейтинг сообщений: 56
Зарегистрирован: Вт авг 28, 2012 23:21:33
Сообщений: 538
Рейтинг сообщения: 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 08:10:27 
Вымогатель припоя

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

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


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


Вернуться наверх
 
Prist.ru предлагает скидку всем частным лицам при покупке приборов АКИП, GW Instek, APPA (кроме осциллографов АКИП-4115/1А, GDS-71102)!

Интересные новинки уже на складе:

Осциллограф АКИП-4126Е

Многоканальные источники питания серии GPP

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

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

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

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


Вернуться наверх
 
Купить электронные компоненты в LCSC

Отправка со склада через 4 часа после заказа!
900 000 пользователей, 3000+ заказов в день!
Зарегистрируйтесь сегодня и получите скидку 8 долларов на первый заказ!
Не в сети
 Заголовок сообщения: Re: Достучаться до регистров FPU в Cortex M4F
СообщениеДобавлено: Чт сен 27, 2012 09:03:13 
Вымогатель припоя

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


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

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


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

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


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

Часовой пояс: UTC + 3 часа [ Летнее время ]


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

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


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

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


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