Перейти к содержанию
    

Nios + float + IOWR

Задам вопрос в этой ветке, все-таки имеет отношение к ниосу...

 

Есть переменная

float a = 0.017;

Мне необходимо записать ее макросом:

IOWR (FC_TECH_BASE, FCTX_CONTROL_REG, a);

 

Т.е. "а" в двоичном коде выглядит как 0x3c8b4396. Однако передает IOWR похоже все-таки 0, видимо преобразует в int (ведь его аргумент все-таки int)

Как бы мне этого избежать? Запихнуть в переменную типа int значение переменной float?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 torik

вот что есть в хедере "C:\altera\10.0\ip\altera\nios2_ip\altera_nios2\HAL\inc\io.h"

#define IOWR_32DIRECT(BASE, OFFSET, DATA) \
  __builtin_stwio (__IO_CALC_ADDRESS_DYNAMIC ((BASE), (OFFSET)), (DATA))

так что если и есть колдунство - то со стороны компилера.

 

А вы не пробовали посмотреть дизасм в куче с сигналтабом - как это там выглядит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да смотрел я сигналтабом, число float 0.017 (0xbc8b4396) неявно преобразуется в int и получается, само собой 0. А мне надо 0xbc8b4396.

Как быть, может через memcpy.

 

Работает таким образом:

memcpy (&k, &grad, sizeof(k));

Но это изврат какой-то.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

IOWR/IORD работают с целыми. если есть желание, можно покопаться в http://www.altera.com/literature/ug/ug_nio...instruction.pdf и сделать аналогичные макросы для float. а есть "дубовый вариант" - возьмите указатель на плавучку, преобразуйте указатель к целому и содержимое указателя через обычные IOWR/IORD

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но это изврат какой-то.

Угу. http://msdn.microsoft.com/en-us/library/5d...v=vs.80%29.aspx

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

IOWR/IORD работают с целыми. если есть желание, можно покопаться в http://www.altera.com/literature/ug/ug_nio...instruction.pdf и сделать аналогичные макросы для float. а есть "дубовый вариант" - возьмите указатель на плавучку, преобразуйте указатель к целому и содержимое указателя через обычные IOWR/IORD

Ага, чё-то не подумал, что можно флоата также через IOWR/IORD скопировать.

 

Спасибо, попробую, так вроде бы все красиво должно получиться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...