背景:
在项目制作的过程中使用ucos ii的邮箱发送函数发送float时发现
float SMA;
OSMboxPost(msg_sma,(void*)SMA);
报error: #171: invalid type conversion错误
一番查证后发现时C语言浮点类型转换成void 类型的错误
改正方法为OSMboxPost(msg_sma,(void)&SMA);
解释:
在STM32中float类型占用4字节,而STM32中的地址也为4字节,但C语言有一个特性:变量在发生类型转换时会按数据长度增加的方向进行,而float类型在运算时为了保证精度会自动转换为double类型,而这在(void*)(float)中会导致8字节的数据强制转换为4字节的数据会导致部分数据丢失故出现error: #171: invalid type conversion错误。
验证思路:
u64 SMA;
OSMboxPost(msg_sma,(void*)SMA);
同样出现error: #171: invalid type conversion错误,验证成功
STM32 ucos II中无法将float类型变量强制转换为void *类型的解释说明
于 2022-03-13 17:39:30 首次发布