MCU_UART3_Send_Direct = &R_Config_SCI3_ExcomUart2_Serial_Send;提示A value of type "MD_STATUS (*)(UC *, US)" cannot be assigned to an entity of type "D_CBFunc_DTC_Send"
时间: 2023-10-09 11:13:43 浏览: 120
这个提示意味着你尝试将类型为`MD_STATUS (*)(UC *, US)`的指针赋值给类型为`D_CBFunc_DTC_Send`的指针,但是这两个类型之间存在类型不匹配的问题。
`MD_STATUS (*)(UC *, US)`表示一个函数指针类型,它指向一个以`UC *`和`US`为参数,返回值为`MD_STATUS`的函数。而`D_CBFunc_DTC_Send`是另一个函数指针类型,它指向一个以`char *`和`uint16_t`为参数,返回值为`void`的函数。
因此,你需要将`MCU_UART3_Send_Direct`转换为`D_CBFunc_DTC_Send`类型。你可以使用类型转换来实现,如下所示:
```
MCU_UART3_Send_Direct = (D_CBFunc_DTC_Send)&R_Config_SCI3_ExcomUart2_Serial_Send;
```
这样就可以将`MCU_UART3_Send_Direct`的类型转换为`D_CBFunc_DTC_Send`类型,从而消除类型不匹配的问题。需要注意的是,在进行类型转换时需要确保类型转换的安全性,以避免潜在的风险。
相关问题
void Uart_Send_Msg( char *msg) { UART_Com3_Para.Send_Len = strlen(msg); if(UART_Com3_Para.Send_Len == 0) return; UART_Com3_Para.buff = msg; UART_Com3_Para.Send_Index = 0; UART_Com3_Para.SendStatus = False; USART3->DR =(u16)UART_Com3_Para.buff [0];//开始发送 while(UART_Com3_Para.SendStatus == False); return; }这个是死循环吗
这段代码中并没有明显的死循环。循环语句 `while(UART_Com3_Para.SendStatus == False);` 是在等待发送完成的标志位 `UART_Com3_Para.SendStatus` 变为 `True`,然后才会跳出循环并返回。这段代码的目的是等待数据发送完毕后再返回,而不是一直循环发送数据。
void Uart_Send_Hex(unsigned char *input_byte,unsigned int input_len) { char buff[2]; unsigned int i; UART_Com3_Para.buff = buff; for(i=0;i<input_len;i++) { UART_Com3_Para.buff[0] =(*(input_byte+i) & 0xF0)>>4; if (UART_Com3_Para.buff[0]<0x0A) UART_Com3_Para.buff[0] +=0x30; else UART_Com3_Para.buff[0] +=0x37; UART_Com3_Para.buff[1]=(*(input_byte+i) & 0x0F); if (UART_Com3_Para.buff[1]<0x0A) UART_Com3_Para.buff[1] +=0x30; else UART_Com3_Para.buff[1] +=0x37; UART_Com3_Para.SendStatus = False; UART_Com3_Para.Send_Len = 2; UART_Com3_Para.Send_Index = 0; USART3->DR =(u16)UART_Com3_Para.buff [0];//开始发送 while( UART_Com3_Para.SendStatus==0); } return; } 解释一下这段代码
这段代码是一个函数 `Uart_Send_Hex`,用于将输入的字节数据以十六进制的形式发送到UART串口。
首先,定义了一个字符数组 `buff`,用于存放转换后的十六进制数据。
然后,通过一个循环将每个输入字节进行转换和发送。
在循环内部,首先将当前输入字节的高四位取出并右移四位,然后根据其值判断应该转换成字符 `'0'` 到 `'9'` 或 `'A'` 到 `'F'`,并将结果存入 `buff[0]` 中。
接着,将当前输入字节的低四位取出,同样根据其值进行转换,并将结果存入 `buff[1]` 中。
然后,将发送状态 `UART_Com3_Para.SendStatus` 设置为 `False`,发送长度 `UART_Com3_Para.Send_Len` 设置为 2,发送索引 `UART_Com3_Para.Send_Index` 设置为 0。
最后,通过向 USART3 的数据寄存器 `USART3->DR` 写入 `UART_Com3_Para.buff[0]` 的值来开始发送数据。
在发送数据期间,使用了一个循环来等待发送完成。只有当发送状态 `UART_Com3_Para.SendStatus` 变为非零值时才会跳出循环。
整个过程完成后,函数返回。
阅读全文