ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
22 июля
553960
VVB (17.10.2014 13:08 - 14:15, просмотров: 438) MBedder
Какой __attribute__ надо указать функции, чтобы она сохраняла используемые регистры VFP и восстанавливала при выходе? Я понимаю, что все float и double передаются в функцию через обычные регистры или стек (как написано в abi), но мне этот атрибут нужен для функции (ничего не принимающей и ничего не возвращающей), вызываемой из IRQ. Если IRQ использует любой регистр VFP, то любые расчёты используя VFP вне прерывания могут быть неправильны (что у меня и произошло). Очевидный путь -- самому написать ассемблерные функции для сохранения состояния VFP до вызова моей функции и восстановления состояния после вызова. Неизящно, придётся все 16 double регистров сохранять плюс статусный регистр, хотя моя функция использует всего 1 регистр. Использую ARM C/C++ compiler Да, кстати, ядро Cortex-R4F, для ядер Cortex-MxF всё проще: процессор сам записывает в стек состояние VFP (но не всё) при возникновении IRQ