1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-09 00:00:00 +01:00

clean up debuggin output and fix scanf usage in villasfpga_dma.c

Signed-off-by: Niklas Eiling <niklas.eiling@eonerc.rwth-aachen.de>
This commit is contained in:
Niklas Eiling 2023-03-21 11:51:17 +01:00
parent d273162f71
commit 9d4cd5384d
4 changed files with 27 additions and 9 deletions

View file

@ -10,7 +10,7 @@
"request": "launch",
"program": "${workspaceFolder}/build/src/villas-fpga-ctrl",
"args": [
"-c", "${workspaceFolder}/etc/fpgas.json", "--connect", "\"4<->stdout\""
"-c", "${workspaceFolder}/etc/fpgas.json", "--connect", "\"2<->stdout\""
],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",

View file

@ -24,6 +24,7 @@ void villasfpga_destroy(villasfpga_handle handle);
int villasfpga_alloc(villasfpga_handle handle, villasfpga_memory *mem, size_t size);
int villasfpga_register(villasfpga_handle handle, villasfpga_memory *mem);
int villasfpga_free(villasfpga_memory mem);
void* villasfpga_get_ptr(villasfpga_memory mem);
int villasfpga_read(villasfpga_handle handle, villasfpga_memory mem, size_t size);
int villasfpga_read_complete(villasfpga_handle handle, size_t *size);

View file

@ -158,7 +158,7 @@ int villasfpga_read_complete(villasfpga_handle handle, size_t *size)
{
try {
auto readComp = handle->dma->readComplete();
logger->debug("Wrote {} bytes", readComp.bytes);
logger->debug("Read {} bytes", readComp.bytes);
*size = readComp.bytes;
return 0;
} catch (const RuntimeError &e) {
@ -193,3 +193,9 @@ int villasfpga_write_complete(villasfpga_handle handle, size_t *size)
return -1;
}
}
void* villasfpga_get_ptr(villasfpga_memory mem)
{
return (void*)MemoryManager::get().getTranslationFromProcess(mem->block->getAddrSpaceId()).getLocalAddr(0);
}

View file

@ -9,6 +9,7 @@ int main(int argc, char *argv[])
int ret;
villasfpga_handle vh;
villasfpga_memory mem1, mem2;
void *mem1ptr, *mem2ptr;
char line[1024];
float f;
size_t size;
@ -35,6 +36,20 @@ int main(int argc, char *argv[])
goto out;
}
if ((mem1ptr = villasfpga_get_ptr(mem1)) == NULL) {
fprintf(stderr, "Failed to get pointer to DMA memory 1\n");
ret = 1;
goto out;
}
if ((mem2ptr = villasfpga_get_ptr(mem2)) == NULL) {
fprintf(stderr, "Failed to get pointer to DMA memory 2\n");
ret = 1;
goto out;
}
printf("DMA memory 1: %p, DMA memory 2: %p\n", mem1ptr, mem2ptr);
while (1) {
// Setup read transfer
if ((ret = villasfpga_read(vh, mem1, 0x200 * sizeof(uint32_t))) != 0) {
@ -44,14 +59,12 @@ int main(int argc, char *argv[])
}
printf("Enter a float:\n");
if ((ret = sscanf(line, "%f")) != 1) {
if ((ret = scanf("%f", mem2ptr)) != 1) {
fprintf(stderr, "Failed to parse input: sscanf returned %d\n", ret);
ret = 1;
goto out;
}
((float*)mem2)[0] = atof(line);
printf("Read %f\n", ((float*)mem2)[0]);
printf("sending %f (%zu bytes)\n", ((float*)mem2ptr)[0], sizeof(float));
// Initiate write transfer
if ((ret = villasfpga_write(vh, mem2, sizeof(float))) != 0) {
fprintf(stderr, "Failed to initiate write transfer\n");
@ -64,16 +77,14 @@ int main(int argc, char *argv[])
ret = 1;
goto out;
}
printf("Wrote %zu bytes", size);
if ((ret = villasfpga_read_complete(vh, &size)) != 0) {
fprintf(stderr, "Failed to write complete\n");
ret = 1;
goto out;
}
printf("Read %zu bytes", size);
printf("Read %f\n", ((float*)mem1)[0]);
printf("Read %f (%zu bytes)\n", ((float*)mem1ptr)[0], size);
}
ret = 0;