Перестановка int на константу в c - PullRequest
0 голосов
/ 14 мая 2019

Я изменяю некоторый код, который был предоставлен мне для обработки передачи данных между FPGA и процессором с использованием DMA.В верхней части страницы есть константа, определенная как #define NUM_WORDS_IN_MEMORY(20), которая представляет количество слов, передаваемых в FPGA.Данные, которые мне нужно передать в FPGA, не всегда приходят в пакетах одинакового размера, поэтому я решил заменить NUM_WORDS_IN_MEMORY переменной.NUM_WORDS_IN_MEMORY используется только в трех местах в одной и той же функции.Первые два предназначены для циклов, которые функционируют, как ожидается, при замене на переменный размер.Окончательное использование записывает длину в регистр длины прямого доступа к памяти.Если я изменю два других использования на size и оставлю это как NUM_WORDS_IN_MEMORY, оно все равно будет работать.Это проблемный фрагмент кода

//This is a definition for writing to DMA
#define alt_write_word(dest, src) (*ALT_CAST(volatile uint32_t *, (dest)) = (src))

...
...

addr = fpga_dma_virt + DMA_LEN_REG_OFST; // Address to write to
data = NUM_WORDS_IN_MEMORY * sizeof(uint32_t);
alt_write_word(addr, data);

Мне кажется, что переключение с NUM_WORDS_IN_MEMORY на размер говорит FPGA о необходимости чтения сверх ожидаемой длины.Есть ли разница между Int и константой, как определено выше?

1 Ответ

1 голос
/ 14 мая 2019

Контроллер DMA использует 16-битный размер передачи. Я предполагал, что, поскольку я умножал размер на sizeof (uint32_t) со значением 4, всегда будет четное число байтов. Если я изменяю с размера = 7 (что у меня было ранее) на размер = 8, все работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...