我目前正在开发一个涉及Cyclone V ARM Cortex A9处理器和外部设备的项目。我是C编程的新手。我正在使用处理器的UART接口在C的API的帮助下从外部发送和接收数据。当我编译我的代码时,我得到警告,我传递的参数使得指针来自整数而没有在函数中使用强制转换{ {1}}。有人可以帮忙吗?
以下是我的代码
alt_16550_fifo_write()
答案 0 :(得分:1)
在您的代码中,您的函数原型是
ALT_STATUS_CODE alt_16550_fifo_write
(ALT_16550_HANDLE_t * handle,const char * buffer,size_t count);
第二个参数是const char * buffer
。
在调用此功能时,您正在使用
void ergo_reset(ALT_16550_HANDLE_t * handle,u_int8_t ergo_adr_int)
{
alt_16550_fifo_write(handle,0x12,1);
alt_16550_fifo_write(handle,ergo_adr_int,1);
ergo_break();
return;
}
此处,0x12
和ergo_adr_int
不属于const char *
类型。
0x12
是一个int
eger常量(十六进制常量,确切地说)#。ergo_adr_int
属于u_int8_t
类型。 因此不匹配和警告。
解决
您需要传递一个const char *
变量作为函数的第二个参数。
#::根据C11
标准文档,第6.4.4.1章,整数常量,
十六进制常数:
十六进制前缀十六进制数字
十六进制常量十六进制数
其中
十六进制前缀:
之一0x 0X
和
十六进制数字:
之一0 1 2 3 4 5 6 7 8 9
a b c d e f
A B C D E F
答案 1 :(得分:0)
以下是您alt_16550_fifo_write
功能
ALT_STATUS_CODE alt_16550_fifo_write(ALT_16550_HANDLE_t * handle,const char * buffer,size_t count);
第二个参数是指针类型,但在程序中,您始终传递整数值:
alt_16550_fifo_write(handle,0x12,1);
alt_16550_fifo_write(handle,ergo_adr_int,1);
您需要将指针传递给char
。例如:
alt_16550_fifo_write(handle, &(char) {0x12}, 1);
或
char x = 0x12;
alt_16550_fifo_write(handle, &x, 1);
答案 2 :(得分:0)
alt_16550_fifo_write()
的原型是:
ALT_STATUS_CODE alt_16550_fifo_write(ALT_16550_HANDLE_t * handle,
const char * buffer, size_t count);
您在两个地方使用它:
alt_16550_fifo_write(handle, *ERGO_CMD_GET_ADDRESS,1);
...
alt_16550_fifo_write(handle,0x12,1);
第二个参数错误。它应该是const char * buffer
,例如一些字符串。