gcc警告传递'alt_16550_fifo_write'的参数2使得整数指针没有强制转换

时间:2015-03-26 09:04:22

标签: c linux pointers int compiler-warnings

我目前正在开发一个涉及Cyclone V ARM Cortex A9处理器和外部设备的项目。我是C编程的新手。我正在使用处理器的UART接口在C的API的帮助下从外部发送和接收数据。当我编译我的代码时,我得到警告,我传递的参数使得指针来自整数而没有在函数中使用强制转换{ {1}}。有人可以帮忙吗?

以下是我的代码

alt_16550_fifo_write()

3 个答案:

答案 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;
}

此处,0x12ergo_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,例如一些字符串。