近期看到一个哥们用c++写嵌入式,感觉蛮有趣,如果当初我的程序要是能用类就轻松多了,所以也想尝试一下。虽然不会c++但是还是多少会用简单的class,这个c#上用了不少。我的工程包括usb和 rtos,设置使用cpp编译,c99通过的程序编译错误一大堆,主要在usb和cmsis_os里,这里随便粘贴其中一条错误C:/Users/ME/STM32Cube/Repository/STM32Cube_FW_F1_V1.4.0/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS/cmsis_os.c(791): error: #513: a value of type "void *" cannot be assigned to an entity of type "osPoolId",程序代码如下thePool = pvPortMalloc(sizeof(os_pool_cb_t));由于不懂c++,查阅资料得知c99编译器是允许暗含转换的,但是c++不允许,因此出现错误。我的程序是用cubemx生成的,难道我要在错误的地方全部加上强制转换吗?比如thePool = (osPoolId)pvPortMalloc(sizeof(os_pool_cb_t)),改写之后此条语句cpp编译正确。大家有其他方法吗?我不想动第三方库。谢谢 |
谢谢。关键cmsis_os 是系统自带的,我不想改,有其他办法吗
CMSIS已是兼容c和c++的,你的代码可能ST在移植freertos时不兼容c++所致(这种可能性很小,你需要核实下自己的修改部分)。
既然你用了CMSIS-RTOS那么底层试试rtx也是一样的。
大师,我水平不咋滴,就是爱玩,玩这个直接做板实验的,所以基础知识很差。我的程序是用stm32cubemx直接生成的,使用了RTOS,用c99编译没问题,程序在板子上跑的也正常。但是用cpp编译就出现了问题,其实我什么都没改动。为了测试,我用stm32cubemx生成不同的程序,但是只要程序包含有rtos或者usb(我看是第三方),用c++编译就是出错。我曾经对这几个块设置用c99编译而其他用c++编译,没有错误但是连接是有个函数找不到而出错。我也看了说明,CMSIS-RTOS是兼容c++的。但是那些错误的代码都是没有强制数据类型转换,能在哪里设置让c++忽略这些错误吗?或者有其他办法吗,再次谢谢
可能是pvPortMalloc对C++和C的兼容性做的不好,比如至返回void*类型的,这个只能强制转换下你真实的指针了。