Makefileでwarningが起こる
現在、interface(2019年1月号)を参考にultra96でyolov3の高速化をしています。dma_simple.hとdma_simple.cを含めてmakeを行うとwarningが出ました。
warning
./src/dma_simple.c: In function 'udmabuf_open':
./src/dma_simple.c:18:12: warning: pointer targets in passing argument 1 of 'sscanf' differ in signedness [-Wpointer-sign]
sscanf(attr, "%x", &udmabuf->phys_addr);
^~~~
In file included from /usr/include/features.h:423:0,
from /usr/include/bits/libc-header-start.h:33,
from /usr/include/stdio.h:27,
from ./src/dma_simple.h:1,
from ./src/dma_simple.c:1:
/usr/include/stdio.h:400:12: note: expected 'const char * restrict' but argument is of type 'unsigned char *'
extern int __REDIRECT_NTH (sscanf, (const char *__restrict __s,
^
./src/dma_simple.c:18:20: warning: format '%x' expects argument of type 'unsigned int *', but argument 3 has type 'long unsigned int *' [-Wformat=]
sscanf(attr, "%x", &udmabuf->phys_addr);
~^ ~~~~~~~~~~~~~~~~~~~
%lx
./src/dma_simple.c:27:12: warning: pointer targets in passing argument 1 of 'sscanf' differ in signedness [-Wpointer-sign]
sscanf(attr, "%d", &udmabuf->buf_size);
^~~~
In file included from /usr/include/features.h:423:0,
from /usr/include/bits/libc-header-start.h:33,
from /usr/include/stdio.h:27,
from ./src/dma_simple.h:1,
from ./src/dma_simple.c:1:
/usr/include/stdio.h:400:12: note: expected 'const char * restrict' but argument is of type 'unsigned char *'
extern int __REDIRECT_NTH (sscanf, (const char *__restrict __s,
^
おそらくudmabufの型の形が一致してないことでなっているかと思いますが、どこを修正すべきかわかりません。
dma_simple.h
struct udmabuf {
char name[128];
int file;
unsigned char* buf;
unsigned int buf_size;
unsigned long phys_addr;
unsigned long debug_vma;
unsigned long sync_mode;
};
int udmabuf_open(struct udmabuf* udmabuf, const char* name);
int udmabuf_close(struct udmabuf* udmabuf);
dma_simple.c
#include "dma_simple.h"
int udmabuf_open(struct udmabuf* udmabuf, const char* name)
{
char file_name[1024];
int fd;
unsigned char attr[1024];
strcpy(udmabuf->name, name);
udmabuf->file = -1;
sprintf(file_name, "/sys/class/udmabuf/%s/phys_addr", name);
if ((fd = open(file_name, O_RDONLY)) == -1) {
printf("Can not open %s\n", file_name);
return (-1);
}
read(fd, (void*)attr, 1024);
sscanf(attr, "%x", &udmabuf->phys_addr);
close(fd);
sprintf(file_name, "/sys/class/udmabuf/%s/size", name);
if ((fd = open(file_name, O_RDONLY)) == -1) {
printf("Can not open %s\n", file_name);
return (-1);
}
read(fd, (void*)attr, 1024);
sscanf(attr, "%d", &udmabuf->buf_size);
close(fd);
sprintf(file_name, "/dev/%s", name);
if ((udmabuf->file = open(file_name, O_RDWR | O_SYNC)) == -1) {
printf("Can not open %s\n", file_name);
return (-1);
}
udmabuf->buf = mmap(NULL, udmabuf->buf_size, PROT_READ|PROT_WRITE, MAP_SHARED, udmabuf->file, 0);
udmabuf->debug_vma = 0;
udmabuf->sync_mode = 1;
return 0;
}
int udmabuf_close(struct udmabuf* udmabuf)
{
if (udmabuf->file < 0)
return -1;
close(udmabuf->file);
udmabuf->file = -1;
return 0;
}